ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一文搞懂JVM架构:什么是微服务扩展性和高可用、可扩展性

2021-07-01 08:52:41  阅读:123  来源: 互联网

标签:可扩展性 s2.51 扩展性 jpg https 搞懂 cto com 节点


## 二、面试题 面:考你几个红黑树的知识点?? 1. 红黑树的数据结构都用在哪些场景,有什么好处? 2. 红黑树的时间复杂度是多少? 3. 红黑树中插入新的节点时怎么保持平衡? 面:2-3树都是不没看,回去等消息吧! ## 三、2-3树与红黑树的等价性 **红黑树规则** ``` 1. 根节点是黑色 2. 节点是红黑或者黑色 3. 所有子叶节点都是黑色(叶子是NIL节点,默认没有画出来) 4. 每个红色节点必须有两个黑色子节点(也同样说明一条链路上不能有链路的红色节点) 5. 黑高,从任一节点到齐每个叶子节点,经过的路径都包含相同数目的黑色节点 ``` 那么,这些规则是怎么总结定义出来的呢?接下里我们一步步分析讲解。 ### 1\. 为什么既有2-3树要有红黑树 首先`2-3树`(*读法:二三树*)就是一个节点有1个或者2个元素,而实际上2-3树转红黑树是由概念模型`2-3-4树`转换而来的。`-4叉`就是一个节点里有3个元素,这在2-3树中会被调整,但是在概念模型中是会被保留的。 虽然`2-3-4树`也是具备`2-3树`同样的平衡树的特性,但是如果直接把这样的模型用代码实现就会很麻烦,且效率不高,这里的复杂点包括; 1. 2-叉、3-叉、4-叉,三种结构的节点类型,互相转换复杂度较高 2. 3-叉、4-叉,节点在数据比较上需要进行多次,不像2-叉节点,直接布尔类型比较即可*非左即右* 3. 代码实现上对每种差异,都需要有额外的代码,规则不够标准化 **所以**,希望找到一种平衡关系,既保持2-3树平衡和O(logn)的特性,又能在代码实现上更加方便,那么就诞生了红黑树。 ### 2\. 简单2-3树转红黑树 `2-3树`转红黑树,也可以说红黑树是`2-3树`和`2-3-4树`的另外一种表现形式,也就是更利于编码实现的形式。 **简单转换示例;** ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099899112275.jpg) 从上图可以看出,2-3-4树与红黑树的转换关系,包括; 1. 2-叉节点,转换比较简单,只是把原有节点转换为黑色节点 2. 3-叉节点,包括了2个元素,先用红色线把两个节点相连,之后拆分出来,最后调整高度*黑色节点在上* 3. 4-叉节点,包括了3个元素,分别用红黑线连接,之后拆分出来拉升高度。*这个拉升过程和2-3树调整一致,只是添加了颜色* **综上**,就是2-3-4树的节点转换,总结出来的规则,如下; 1. 将2-3-4树,用二叉树的形式表示 2. 3-叉、4-叉节点,使用红色、黑色连线进行连接 3. 另外,3-叉节点有两种情况,导致转换成二叉树,就有左倾和右倾 ### 3\. 复杂2-3树转红黑树 在`简单2-3树转换红黑树`的过程中,了解到一个基本的转换规则右旋定义,接下来我们在一个稍微复杂一点的`2-3树`与红黑树的对应关系,如下图; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099899706551.jpg) 上图是一个稍微复杂点的2-3树,转换为红黑树的过程,是不这样一张图让你对红黑树更有感觉了,同时它也满足一下条件; 1. 从任意节点到叶子节点,所经过的黑色节点数目相同 2. 黑色节点保持着整体的平衡性,也就是让整个红黑树接近于O(logn)时间复杂度 3. 其他红黑树的特点也都满足,可以对照红黑树的特性进行比对 ## 四、红黑树 ### 1\. 平衡操作 通过在上一章节2-3树的学习,在插入节点时并不会插到空位置,而是与现有节点融合以及调整,保持整个树的平衡。 而红黑树是2-3-4树的一种概念模型转换而来,在插入节点时通过红色链接相连,也就是插入红色节点。插入完成后进行调整,以保持树接近平衡。 那么,为了让红黑树达到平衡状态,主要包括染色、?左右旋转、这些做法其实都是从2-3树演化过来的。接下来我们就分别讲解几种规则的演化过程,以此更好了解红黑树的平衡操作。 #### 1.1 左旋转 **左旋定义:** 把一个向右倾斜的红节点链接(2-3树,3-叉双元素节点),转化为左链接。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099899476233.jpg) 背景:顺序插入元素,1、2、3,2-3树保持平衡,红黑树暂时处于右倾斜。 接下来我们分别对比两种树结构的平衡操作; 1. 2-3树,所有插入的节点都会保持在一个节点上,之后通过调整节点位置,保持平衡。 2. 红黑树,则需要通过节点的左侧旋转,将元素2拉起来,元素1和元素3,分别成为左右子节点。 *红黑树的左旋,只会处理与之对应的2-3树节点进行操作,不会整体改变。* #### 1.2 右旋转 **右旋定义:** 把一个向左倾斜的红节点连接(2-3树,3-叉双元素节点),转换为右连接。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099900777868.jpg) 背景:顺序插入元素,3、1、1,2-3树保持平衡,红黑树暂时处于左倾斜。 接下来我们分别对比两种树结构的平衡操作; 1. 2-3树,所有插入的节点都会保持在一个节点上,之后通过调整节点位置,保持平衡。 2. 红黑树,则需要通过节点的右侧旋转,将元素2拉起来,元素1和元素3,分别成为左右子节点。 **你会发现,左旋与右旋是相互对应的,但在2-3树中是保持不变的** #### 1.3 左右旋综合运用 左旋、右旋,我们已经有了一个基本的概念,那么接下来我们再看一个可以综合左右旋以及对应2-3树的演化案例,如下; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099900457959.jpg) 以上的例子分别演示了一个元素插入的三种情况,如下; 1. 1、3,插入0,左侧底部插入,与2-3树相比,需要右旋保持平衡 2. 1、3,插入2,中间位置插入,首先进行左旋调整元素位置,之后进行右旋进行树平衡 3. 1、3,插入5,右侧位置插入,此时正好保持树平衡,不需要调整 #### 1.4 染色 在2-3树中,插入一个节点,为了保持树平衡是不插入到空位置上的,当插入节点后元素数量有3个后则需要调整中间元素向上,来保持树平衡。与之对应的红黑树则需要调整颜色,来保证红黑树的平衡规则,具体参考如下; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099900857562.jpg) ### 2\. 旋转+染色运用案例 接下来我们把上面讲解到的`旋转`、`染色`,运用到一个实际案例中,如下图; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099901357806.jpg) * 首先从左侧开始,是一个按照顺序插入生产出来的红黑树,插入顺序;`7、2、8、1、4、3、5` * α,向目前红黑树插入元素6,插入后右下角有三个红色节点;`3、5、6`。 * β,因为右下角满足染色条件,变换后;黑色节点(3、5)、红色节点(4、6)。 * γ,之后看被红色连线链接的节点`7、4、2`,最小节点在中间,左旋平衡树结构。 * δ,左旋完成后,红色链接线的`7、4、2`为做倾顺序节点,因此需要做右旋操作。 * ε,左旋、右旋,调整完成后,又满足了染色操作。到此恢复红黑树平衡。 *注意,所有连接红色节点的,都是是红色线。以此与2-3树做对应。* ### 3\. 删除操作 根据2-3-4树模型的红黑树,在删除的时候基本是按照2-3方式进行删除,只不过在这个过程中需要染色和旋转操作,以保持树平衡。删除过程主要可以分为如图四种情况,如下; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099901579439.jpg) #### 3.1 删除子叶红色节点 红色子叶节点的删除并不会破坏树平衡,也不影响树高,所以直接删除即可,如下; ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099902771884.jpg) #### 3.2 删除左侧节点 ##### 3.2.1 被删节点兄弟为黑色&含右子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099902475827.jpg) ##### 3.2.2 被删节点兄弟为黑色&含左子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099903391836.jpg) ##### 3.2.3 被删节点兄弟为黑色&含双子节点(红) ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099903994386.jpg) ##### 3.2.4 被删节点兄弟为黑色&不含子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099903103001.jpg) ##### 3.2.5 被删节点兄弟为黑色&含双黑节点(黑) ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099904719534.jpg) #### 3.3\. 删除右侧节点 ##### 3.3.1 被删节点兄弟为黑色&含左子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099905246131.jpg) ##### 3.3.2 被删节点兄弟为黑色&含右子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099905717129.jpg) ##### 3.3.3 被删节点兄弟为黑色&含双子节点(红) ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099905977398.jpg) ##### 3.2.4 被删节点兄弟为黑色&不含子节点 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099905177826.jpg) ##### 3.2.5 被删节点兄弟为黑色&含双黑节点(黑) ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099906446890.jpg) ## ## 最后 分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。 #### 面试经验技巧篇 * 经验技巧1 如何巧妙地回答面试官的问题 * 经验技巧2 如何回答技术性的问题 * 经验技巧3 如何回答非技术性问题 * 经验技巧4 如何回答快速估算类问题 * 经验技巧5 如何回答算法设计问题 * 经验技巧6 如何回答系统设计题 * 经验技巧7 如何解决求职中的时间冲突问题 * 经验技巧8 如果面试问题曾经遇见过,是否要告知面试官 * 经验技巧9 在被企业拒绝后是否可以再申请 * 经验技巧10 如何应对自己不会回答的问题 * 经验技巧11 如何应对面试官的“激将法”语言 * 经验技巧12 如何处理与面试官持不同观点这个问题 * 经验技巧13 什么是职场暗语 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099906404114.jpg) #### 面试真题篇 * 真题详解1 某知名互联网下载服务提供商软件工程师笔试题 * 真题详解2 某知名社交平台软件工程师笔试题 * 真题详解3 某知名安全软件服务提供商软件工程师笔试题 * 真题详解4 某知名互联网金融企业软件工程师笔试题 * 真题详解5 某知名搜索引擎提供商软件工程师笔试题 * 真题详解6 某初创公司软件工程师笔试题 * 真题详解7 某知名游戏软件开发公司软件工程师笔试题 * 真题详解8 某知名电子商务公司软件工程师笔试题 * 真题详解9 某顶级生活消费类网站软件工程师笔试题 * 真题详解10 某知名门户网站软件工程师笔试题 * 真题详解11 某知名互联网金融企业软件工程师笔试题 * 真题详解12 国内某知名网络设备提供商软件工程师笔试题 * 真题详解13 国内某顶级手机制造商软件工程师笔试题 * 真题详解14 某顶级大数据综合服务提供商软件工程师笔试题 * 真题详解15 某著名社交类上市公司软件工程师笔试题 * 真题详解16 某知名互联网公司软件工程师笔试题 * 真题详解17 某知名网络安全公司校园招聘技术类笔试题 * 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题 ![](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625099906130458.jpg) > 需要这份文档的朋友可以[点击蓝色传送门](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)即可免费获取! 资料整理不易,点个关注再走吧

标签:可扩展性,s2.51,扩展性,jpg,https,搞懂,cto,com,节点
来源: https://blog.51cto.com/u_15288756/2962054

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有