node

从2-3-4树模型到红黑树实现

只谈情不闲聊 提交于 2019-12-06 06:26:32
目录 从2-3-4树模型到红黑树实现 前言 2-3-4树 查找 插入 树的生长 删除 左倾红黑树 查找 插入 删除 总结 参考文献 从2-3-4树模型到红黑树实现 前言 红黑树,是一个高效的二叉查找树。其定义特性保证了树的路径长度在黑色节点上完美平衡,使得其查找效率接近于完美平衡的二叉树。 但是红黑树的实现逻辑很复杂,各种旋转,颜色变化,直接针对其分析,大多数都是死记硬背各种例子,不太容易有个直观的理解。实际上,红黑树是实现手段,是其他概念模型为了方便在二叉树上实现进而定义的节点颜色这个信息。如果从概念模型入手,再一一对应,就容易理解的多了。而红黑树能够对应的模型有2-3树,2-3-4树等,下面我们会以2-3-4树作为概念模型,对红黑树进行分析。 2-3-4树 2-3-4树是对完美平衡二叉树的扩展,其定义为: 在一个节点中,可以存在1-3个 key 。 2-节点,拥有1个 key 和2个子节点。 3-节点,拥有2个 key 和3个子节点。 4-节点,拥有3个 key 和4个子节点。 子节点为空的节点称为叶子节点。 任意从根节点到叶子节点的路径拥有相同的长度,即路径上的链接数相同。 下图就是一个2-3-4树: 查找 2-3-4树的查找很简单,类似于二叉树,步骤如下: 将查找 key 和节点内的 key 逐一对比。 如果命中,则返回节点内 key 的对应值。 如果节点内的 key

Linux 下安装Node 安装Mongodb

只谈情不闲聊 提交于 2019-12-06 05:43:24
MongoDB 安装: cd / #进入根目录 cd etc/yum.repos.d vim mongodb-org-4.2.repo #创建文件 [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc sudo yum install -y mongodb-org # 等待安装完成 安装 NodeJS wget https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz #下载包 tar xf node-v12.13.1-linux-x64.tar.xz #解压 mv node-v12.13.1-linux-x64 nodejs #修改目录名称方便操作 可以省略 vim /etc/profile # 文件中添加 为了防止修改出现问题 建议备份一下 export PATH=$PATH:/root/nodejs/bin source /etc/profile #刷新 来源:

Populating Next Right Pointers in Each Node

女生的网名这么多〃 提交于 2019-12-06 05:38:20
描述:   填充每一个节点的下一个右侧指针,给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:   struct Node {   int val;   Node *left;   Node *right;   Node *next;   }   填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。   初始状态下,所有 next 指针都被设置为 NULL。 解答:   看到该问题的描述,从图形上直观的来看,本题和二叉树的层次遍历是相关的。因为填充右侧节点的操作总是在统一层上进 行的。而二叉树的遍历总是分为递归和迭代算法两种,我们也尝试使用两种算法来解决问题。   首先使用递归的算法,递归算法的核心是找出所有操作的自相似性,因此我们观察对于每个节点的操作。如果当前的节点为空 则不进行任何操作。若当前的节点不为空,若其左子树存在的话,则右子树也是必然存在的,且其next指向其右子树。右子树的next 取值则取决于当前节点的next,若当前节点的next存在,则右子树的next为root->next->left。则按照此分析写出来的递归代码如下: class Solution { public: //首先为递归的写法,该道题为二叉树的层次遍历的应用 Node* connect

零基础学习前端1-1配置node及npm环境变量

≯℡__Kan透↙ 提交于 2019-12-06 05:37:32
零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ 我这里下载的是windows的 可以进去选择版本 下载后的安装包 2.下一步直接安装,可以选择对应的目录,建议不要选择默认的path 我这里的安装目录:E:\webyikeshuo\node 3.接下来去配置path,“我的电脑”-右键-“属性”-“高级系统设置”-“高级”-“环境变量” 4.这里去验证 win+R 打开cmd 5.配置package的环境变量,如果不配置全局安装包路径的话默认在 'C:\Users<用户>\AppData\Roaming\npm',也可以不配置。这里配置改变一下 *说明:这里的环境配置主要配置的是npm安装的全局模块所在的路径,以及缓存cache的路径,之所以要配置,是因为以后在执行类似:npm install express [-g] (后面的可选参数-g,g代表global全局安装的意思)的安装语句时,会将安装的模块安装到【C:\Users\用户名\AppData\Roaming\npm】路径中,占C盘空间。 例如:我希望将全模块所在路径和缓存路径放在我node.js安装的文件夹中,则在我安装的文件夹【E:\webyikeshuo

NPM配置

送分小仙女□ 提交于 2019-12-06 05:32:52
修改镜像 打开C:\Users{username}.npmrc(对所有用户生效,否则编辑安装路径下的npmrc) 添加:registry= https://registry.npm.taobao.org 修改Global Modules安装位置 新建两个文件夹用于存放Global Moudels和cache,例如E:\node_modules\node_cache和E:\node_modules\node_global 打开C:\Users{user name}.npmrc,并添加如下两行 prefix=E:\node_modules\node_global cache=E:\node_modules\node_cache win+r调出运行并执行sysdm.cpl,点击高级选项卡的环境变量 在用户变量(或系统变量,取决于是否希望对所有用户生效)PATH中新增E:\node_modules\node_global 来源: https://www.cnblogs.com/shenyuelan/p/11964106.html

并发容器之ConcurrentHashMap(JDK 1.8版本)

本秂侑毒 提交于 2019-12-06 05:27:57
1.ConcurrentHashmap简介 在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发的情况下,每次只有一个线程能够获取对象监视器锁,这样的并发性能的确不令人满意。另外一种方式通过Collections的 Map<K,V> synchronizedMap(Map<K,V> m) 将hashmap包装成一个线程安全的map。比如SynchronzedMap的put方法源码为: public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);} } 实际上SynchronizedMap实现依然是采用synchronized独占式锁进行线程安全的并发控制的。同样,这种方案的性能也是令人不太满意的。针对这种境况,Doug Lea大师不遗余力的为我们创造了一些线程安全的并发容器,让每一个java开发人员倍感幸福。相对于hashmap来说,ConcurrentHashMap就是线程安全的map,其中利用了锁分段的思想提高了并发度。 ConcurrentHashMap在JDK1

使用node打造自己的命令行

六月ゝ 毕业季﹏ 提交于 2019-12-06 05:08:24
一、实现一个简单的功能 二、环境 1.系统: window 10 2.编辑器: vscode 3.node版本: 8.7.0 三、开始玩 1.打开命令行,新建一个pa'ckage.json npm init 这时看到一个新的package.json生成了,使用编辑器打开 2.修改package.json,新增一个bin属性 { "name": "my-cli", "version": "1.0.0", "description": "", "main": "index.js", "bin": { // 增加bin属性 "auto": "./bin/cli.js" // 左边的crp是定义的命令行的名字,可以自己随便取, 右边是命令行输入 crp 时会执行的文件(一定要在bin文件夹下) }, "scripts": { }, "keywords": [], "author": "", "license": "ISC" } 3.新建一个cli.js在当前的目录下, 简单修改 console.log('hello world') 4.然后转到命令行, 输入 npm link 5 查看一下效果 正确打印出hello world就是成功了 6.实现预览的效果 原理就是执行cli.js的时候,会读取自己设定好的模板,然后在当前的目录下生成一个文件, 写入模板的内容,简单的代码如下 #!

mac下载wepy报错解决方案

天大地大妈咪最大 提交于 2019-12-06 04:37:09
今天下载wepy-cli的时候报错了 sudo npm i wepy-cli -g gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/wepy-cli/node_modules/fsevents/.node-gyp' gyp ERR! System Darwin 19.2.0 gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/usr/local/lib/node_modules/wepy-cli/node_modules/fsevents/lib/binding/Release/node-v72-darwin-x64/fse.node" "--module_name=fse" "--module_path=/usr/local/lib/node_modules/wepy-cli/node_modules/fsevents/lib/binding/Release

单链表及其基本操作

Deadly 提交于 2019-12-06 03:51:38
1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 实际中链表的结构非常多样,以下情况组合起来就有8种链表结构: 1. 单向、双向 2. 带头、不带头 3. 循环、非循环。 常用的有无头单向非循环链表、带头双向循环链表。 1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结 构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。 2. 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向 循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而 简单了,后面我们代码实现了就知道了。 下面是无头单向非循环链表的一些基本操作代码: //NodeList.c #include"NodeList2.h" //遍历 void print(Node* head) { Node* cur = head; //声明一个新指针用来进行遍历 while (cur) { //cur为NULL时链表遍历完 printf("%d-->", cur->val); cur = cur->next; } printf("\n"); } //销毁链表 Node* NodeListDestory(Node* head

Redis Cluster

陌路散爱 提交于 2019-12-06 03:45:06
Redis Cluster 呼唤集群 数据分布 搭建集群 集群伸缩 客户端路由 集群原理 故障转移 开发运维常见问题 呼唤集群 1. 并发量 2. 数据量 3. 网络流量 解决办法 分布式:简单的认为加机器 集群:规模化需求 并发量:OPS 数据量:”大数据” 数据分布 分布式数据库-数据分区 顺序分区和哈希分区 顺序分布 哈希分布(例如节点取模) 数据分布对比 分布方式 特点 典型产品 哈希分布 数据分散度高、键值分布业务无关、无法顺序访问、支持批量操作 一致性哈希Memcache、Redis Cluster、其他缓存产品 顺序分布 数据分散度易倾斜、键值业务相关、可顺序访问、支持批量操作 Big Table、HBase 哈希分布 节点取余分区 一致性哈希分区 虚拟槽分区 多倍扩容 客户端分片:哈希+取余 节点伸缩:数据节点关系变化,导致数据迁移 迁移数量和添加节点数量有关:建议翻倍扩容 一致性哈希 扩容 客户端分片:哈希+顺时针(优化取余) 节点伸缩:只影响邻近节点,但是还是有数据迁移 翻倍伸缩:保证最小迁移数据和负载均衡 虚拟槽分区 预设虚拟槽:每个槽映射一个数据子集,一般比节点数大 良好的哈希函数:例如CRC16 服务端管理节点、槽、数据:例如Redis Cluster 搭建集群-基本架构 单机架构 分布式架构 Redis Cluster架构 节点 meet 指派槽 复制