[java时间管理者]成功收下35k的offer,程序员小伙这样跟阿里面试官解释B+树
前言:
上周我通过阿里一面 , 岗位是客户端开发工程师(是的 , 还是java岗!) 。 面试过程中面试官问了B+树 , 回答时面试官一直点头(应该回答得还不错所以过了) , 今天详细讲一讲B+树 。
平衡二叉树它是一棵空树或它的左右两个子树的高度差的绝对值不超过1 , 并且左右两个子树都是一棵平衡二叉树 。
![[java时间管理者]成功收下35k的offer,程序员小伙这样跟阿里面试官解释B+树](/uploads/allimg/200425/1FQL461-0.jpg)
文章图片
B树(B-树)![[java时间管理者]成功收下35k的offer,程序员小伙这样跟阿里面试官解释B+树](/uploads/allimg/200425/1FQIC6-1.jpg)
文章图片
m阶B树定义m阶B树是一棵平衡的m路搜索树 , 或者是空树 , 或者是满足以下条件:
树中的每个节点最多有m个孩子除了根节点和叶子结点外 , 其他节点最少含有(m+1)/2个孩子ceil(m/2)即是(m+1)/2 , 向上取整
如果根节点不是叶子结点 , 则根节点最少2个孩子所有叶子节点都在同一层 , 并不带任何信息除了叶子结点 , 节点含有关键字属性 , 数目范围是[M/2-1 , M-1] , 即关键字个数=孩子个数-1 。 非叶子结点关键字:K[1],K[2],…,K[M-1] , 且K[i]<K[i+1] , 即关键字是有序的 。 孩子指针:P[1],P[2],…,P[M]P[1]指向关键字小于K[1]的子树 , P[M]指向关键字大于K[M-1]的子树 , 其它P[i]指向关键字属于**(K[i-1],K[i])**的子树 。时间复杂度:O(nlogn) 。
优点【[java时间管理者]成功收下35k的offer,程序员小伙这样跟阿里面试官解释B+树】B树相对于B+树的优点是 , 如果经常访问的数据离根节点很近 , 而B树的非叶子节点存储关键字数据的地址 , 所以这种数据检索的时候会要比B+树快 。
B+树![[java时间管理者]成功收下35k的offer,程序员小伙这样跟阿里面试官解释B+树](/uploads/allimg/200425/1FQL234-2.jpg)
文章图片
m阶B+树定义B+树是B树的一种变形形式 , m阶B+树满足以下条件:
(1)每个结点至多有m个孩子 。
(2)除根节点和叶结点外 , 每个结点至少有(m+1)/2个孩子 。
(3)如果根节点不为空 , 根结点至少有两个孩子 。
(4)所有叶子结点增加一个链指针 , 所有关键字都在叶子结点出现 。
(5)除了叶节点 , 结点的孩子数目等于关键字数目 。 注意 , B+树中非叶子结点存储的不是关键字数据的地址 , 而是指向叶子结点中关键字的索引 。 (所以任何关键字的查找必须走一条从根结点到叶子结点的路)
非叶子结点的子树指针P[i] , 指向关键字值属于[K[i],K[i+1])的子树(B-树是开区间)
优点B+树的层级更少:相较于B树B+每个非叶子节点存储的关键字数更多 , 树的层级更少所以查询数据更快;B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上 , 所以每次查找的次数都相同所以查询速度要比B树更稳定;B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表 , 在查询大小区间的数据时候更方便 , 数据紧密性很高 , 缓存的命中率也会比B树高 。 B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可 , 而不需要像B树一样需要对每一层进行遍历 , 这有利于数据库做全表扫描 。 适应场景:通常用于数据库和操作系统的文件系统中 。
结点的分裂:将已满结点进行分裂 , 将已满节点后M/2节点生成一个新节点 , 将新节点的第一个元素指向父节点 。 父节点出现已满 , 将父节点继续分裂 。 一直分裂 , 如果根节点已满 , 则需要分类根节点 , 此时树的高度增加 。 优点能够保持数据稳定有序 , 其插入与修改拥有较稳定的对数时间复杂度
总结咱们玩归玩 , 闹归闹 , 别拿面试开玩笑 。
B+树在面试中几乎被问烂了 。 除了本文提到的平衡二叉树、B树和B+树外 , B+树的应用场景还有很高的话题性 , 比如MySQL和一些文件系统中使用的是B+树结构 。 本文篇幅有限 , 希望大家面试前要把知识点记全记牢 。
分享本文主要讲解的在面试过程中被问到的B+树问题该如何回答 , 面试过程中会有各种各样的灵魂拷问等着你 , 因此希望大家不要忽视任何一个知识点 , 哪怕是你认为最基础的内容或者你认为很熟悉的内容 , 因为这只是你认为而已 。 希望大家还是能够认真的学习 , 不要停下学习的脚步!
推荐阅读
- 易老冯唐美累计确诊突破121万例,政府到底做错了什么?,短短3个月时间
- 上观新闻一周要上七天课?被热搜后,校方回应不占用学生全部周末时间,返校复学
- 『Java』java数据结构系列——什么是数据结构
- 老林说线下周或有“变数”!,A股:两大时间窗口
- 「时间」为什么深圳人不爱去香港了?
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- iPhone■给自己3分钟时间,学会这4大功能,你会觉得买的iPhone真是赚大了!
- 小谢娱乐哦引来广大网友狂点赞,直呼炸天,程序员用Java实现扫雷小游戏
- 极客宇文氏手机的寿命到底是多久,你多长时间换一次手机?手机本身哪些部位决定了寿命用户使用习惯注定寿命
- 【】英语真题应该留什么时候的用来最后模拟?现在离高考还剩两个月,这个时间就是做英语真题最好的时间!
