发表于: 2018-04-07 23:36:30
1 663
今天完成的任务
1、二叉树和红黑树
A、二叉树的特征
a、左子树上所有节点的值均小于或等于它的根节点的值
b、右子树上所有节点的值均小于或等于它的根节点的值
c、左、右子树也分别为二叉排序树
d、是基于二分查找法的思想,且最大查找次数等于二叉树的高度
B、二叉树的缺点
多次插入新节点可能会发生节点不平衡,使得二叉树从根到叶子的最长路径可能是最短路径的几倍,导致查找性能大幅下降
C、红黑树的特征
a、所有节点分为红黑两色
b、根节点是黑色的
c、每个叶子节点都是黑色的空节点(NIL节点)
d、每个红色节点的2个子节点是黑色的(每个叶子结点到根的所有路径上不能出现连续的2个红色节点)
e、从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点
以上5条规则保证了红黑树的自平衡,红黑树从根节点到叶子节点的最长路径不会超过最短路径的2倍。
另外还有一条“潜规则”:新插入的节点是红色的(若新插入的节点是黑色的,后续的变化会特别复杂)
D、红黑树的变色和旋转
在插入或删除新的节点的时候,会破坏红黑树的5条规则,这个时候就可以通过变色或者旋转重新符合规则。
a、变色:红色节点变成黑色节点,或者黑色节点变成红色节点
b、旋转:旋转分为左旋转和右旋转。
左旋转就是逆时针旋转红黑树的2个节点,使得父节点被右孩子替代,自己则成为自己的左孩子;
右旋转就是顺时针旋转红黑树的2个节点,使得父节点被左孩子替代,自己则成为自己的右孩子。
c、旋转和变色经常搭配使用
E、红黑树的实际应用
a、JDK的集合类TreeMap和TreeSet底层就是红黑树
b、Java8中,HashMap也用到了红黑树
所以以后扯HashMap的底层实现原理的时候,要讲清楚版本。
2、一致性哈希算法
一致性哈希算法最开始是用来解决分布式缓存问题的,该算法最大的优点就是可以使得缓存节点扩充或减少(宕机)时,数据迁移量最小。
该算法也为其他的问题提供了一种新的解决思路,例如数据库分库分表。
然后一致性哈希算法要注意的地方有:
a、值的划分区域:2的32次方
b、怎么确定key对应的节点(顺时针方向最近的节点)
c、虚拟节点(用来保证key可以分布均匀)
遇到的问题
1、我现在做22期的档案状态及状态变化条件跟PM和古尘师姐的理解有一点不同
2、我看开发机上也有Jenkins,我们有用到这个东西吗?如果有用到这个,那为啥每次我修改代码后都要自己手动部署?
收获
明天的计划
再和PM、古尘师姐沟通一下档案表的状态是怎样触发改变的
评论