大厂面试题-b树和b+树的理解

news2024/11/26 7:45:42

为了更清晰的解答这个问题,从三个方面来回答:

        a.了解二叉树、AVL树、B树的概念

        b.B树和B+树的应用场景

1.B树是一种多路平衡查找树,为了更形象的理解,我们来看这张图。

二叉树,每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。

二叉查找树,在二叉树的基础上增加了一个规则,左子树的所有节点的值都小于它的根点,右子树的所有子节点都大于它的根节点。

(如图),二叉查找会出现斜树问题,导致时间复杂度增加,因此又引入了一种平衡二叉树,它具有二叉查找树的所有特点,同时增加了一个规则:”它的左右两个子树的高度差的绝对值不超过1“。平衡二叉树会采用左旋、右旋的方式来实现平衡。

(如图),而B树是一种多路平衡查找树,它满足平衡二叉树的规则,但是它可以有多个子树,子树的量取决于关键字的数量,比如这个图中根节点有两个关键字3和5,那么它能够拥有的子路数量=关键字数+1。

此从这个特征来看,在存储同样数据量的情况下,平衡二叉树的高度要大于B树。

B+树,其实是在B树的基础上做的增强,最大的区别有两个:

a.B树的数据存储在每个节点上,而B+树中的数据是存储在叶子节点,并且通过链表的方式把叶子节点中的数据进行连接。

b.B+树的子路数量等于关键字数

(图所示)这个是B树的存储结构,从B树上可以看到每个节点会存储数据。

(如图所示)这个是B+树,B+树的所有数据是存储在叶子节点,并且叶子节点的数据是用双向链表关联的。

2.B树和B+树,一般都是应用在文件系统和数据库系统中,用来减少磁盘IO带来的性能损耗。

Mysql中的InnoDB为例,当我们通过select语句去查询一条数据时,InnoDB需要从磁盘上去读取数据,这个过程会涉及到磁盘IO以及磁盘的随机IO(如图所示)知道磁盘IO的性能是特别低的,特别是随机磁盘IO。

因为磁盘IO的工作原理是,首先系统会把数据逻辑地址传给磁盘,磁盘控制电路按照寻址逻辑把逻辑地址翻译成物理地址,也就是确定要读取的数据在哪个磁道,哪个扇

为了读取这个扇区的数据,需要把磁头放在这个扇区的上面,为了实现这一个点,磁盘会不断旋转,把目标扇区旋转到磁头下面,使得磁头找到对应的磁道,这里涉及到寻道事件以及旋转时间。

很明显磁盘IO这个过程的性能开销是非常大的,特别是查询的数据量比较多的情况下。

所以在InnoDB中,干脆对存储在磁盘块上的数据建立一个索引,然后把索引数据以及列对应的磁盘地址,以B+树的方式来存储。

如图所示当我们需要查询目标数据的时候,根据索引从B+树中查找目标数据即可,由于B+树分路较多,所以只需要较少次数的磁盘IO就能查找到。

3.为什么用B树或者B+树来做索引结构?原因是AVL树的高度要比B树的高度要高,而高度就意味着磁盘IO的数量。所以为了减少磁盘IO的次数,文件系统或者数据库才会采用B树或者B+树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十五届全国交通运输领域青年学术会议,和鲸 Heywhale 携手龙船科技联合发布科研服务解决方案

2023年10月29日,由中国交通运输协会青年科技工作者工作委员会主办,集美大学承办的“第十五届全国交通运输领域青年学术会议”在一片热烈的氛围中圆满落幕。 本届会议以“低碳•智能•安全•可持续综合交通发展创新”为主题,围绕综合立体交通…

JavaScript_document对象_方法_获取元素

1、document.getElementsByTagName 2、 document.getElementsByClassName() document.getElementsByClassName方法返回一个类似数组的对象(HTMLCollection实例),包括了所有class名字符合指定条件的元素,元素的变化实时反映在返回…

FL Studio21.2中文高级版数字音乐工作站(DAW)

FL Studio是一款功能强大的数字音乐工作站(DAW),软件提供了丰富的功能和工具,使音乐制作变得更加轻松和富有创意性。而在其中,一个关键的功能就是Fruity Wrapper,它在FL Studio中扮演着重要的角色。接下来给…

idea必装插件EditStarters(快速引入依赖)

前言 一般来说我们要向一个 servlet 或者 Spring 项目中引入依赖都需要先到中心仓库找到对应的依赖,选择依赖的版本,把依赖添加到配置文件 pom.xml 中,这其实还是有点麻烦的,而通过 EditStarters 插件我们可以迅速的添加依赖到项目…

计算机网络第4章-IPv6和寻址

IP地址的分配 为了获取一块IP地址用于一个组织的子网内,于是我们向ISP联系,ISP则会从已分给我们的更大 地址块中提供一些地址。 例如,ISP也许已经分配了地址块200.23.16.0/20。 该ISP可以依次将该地址块分成8个长度相等的连续地址块&…

Jakarta-JVM篇

文章目录 一.前言1. 1 JVM-堆常用调参1.2 JVM-方法区常用参数1.3 JVM-codeCache 二.JVM内存结构三. 对象创建四. JVM垃圾回收算法4.1 可达性分析算法4.1.1 对象引用4.1.2 回收方法区. 4.2 分代回收4.3 标记清除4.4 标记复制4.5 标记整理 五.垃圾回收器5.1 根节点枚举5.2 安全点…

2023-11-06今日最大收获:坑爹的 JpaRepository!

1.坑爹的 JpaRepository! org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 2023-11-06 18:38:53.12…

光链路测试6271B光纤温度分布测试仪

6271B 光纤温度分布测试 6271B 光纤温度分布测试仪主要基于光纤拉曼散射效应和光时域反射技术研制,利用温度传感光缆(纤),实现空间温度的在线、实时、连续分布式测试。光纤温度分布测试仪由主机(信号处理单元&#xff…

c++学习之AVL树

目录 一,什么是AVL树 二,AVL树的实现 结构体 insert 左单旋 右单旋 双旋 双旋右边高 双旋左边高 最终实现的插入函数 遍历 判断平衡 一,什么是AVL树 在之前,我们已经了解到了二叉搜索树,提到过它的搜索效率…

【OS】操作系统课程笔记 第六章 并发性——死锁

6.1 死锁的概念 所谓死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。 下面举个例子,进程P1已经占用了资源R1,进程P2已经占用了资源R2,而P1和P2都要同时使用…

全自动批量AI改写文章发布软件【软件脚本+技术教程】

项目原理: 利用AI工具将爆款文章改写发布到平台上流量变现,通过播放量赚取收益 软件功能: 1.可以根据你选的文章领域,识别你在网站上抓取的文章链接进来自动洗稿生成过原创的文章,自动配图 2.同时还可以将管理的账号导入进脚本软…

Java基础(第五期): 一维数组 二维数组 数组 引用数据类型在内存中的存储图解

Java基础专栏 文章目录 一、数组介绍和静态初始化1.1 数组初始化1.2 数组的定义格式1.3 数组的静态初始化格式 二、 数组元素访问三、数组遍历操作四、数组遍历求和等练习2.数组求最大值 五、数组动态初始化六、两种初始化的区别七、数组内存图和方法参数传递八、二维数组静态…

深入详解高性能消息队列中间件 RabbitMQ

目录 1、引言 2、什么是 RabbitMQ ? 3、RabbitMQ 优势 4、RabbitMQ 整体架构剖析 4.1、发送消息流程 4.2、消费消息流程 5、RabbitMQ 应用 5.1、广播 5.2、RPC VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&am…

【工具使用-信号叠加演示】一种演示不同频率信号叠加的工具

一,简介 本文主要介绍一种网页演示不同频率的正弦信号叠加的工具,供参考。 二,说明 网址:https://teropa.info/harmonics-explorer/ 打开后可以设置不同的信号,然后最上面是不同信号的频率叠加之后的效果&#xff…

Blender vs 3ds Max:谁才是3D软件的未来

在不断发展的3D建模和动画领域,两大软件巨头Blender和3ds Max一直在争夺顶级地位。 随着技术的进步和用户需求的演变,一个重要问题逐渐浮出水面:Blender是否最终会取代3ds Max?本文将深入探讨二者各自的优势和劣势、当前状况&…

2024好用免费的mac苹果电脑杀毒软件CleanMyMac

杀毒软件在苹果家族中是一个小众软件,百度搜索苹果电脑杀毒软件,可能各种杀软良莠不齐,因为在这个市场非常小,绝大多数都是冲着“清理”去的,而不是杀毒。最近测试了一款Mac电脑杀毒软件,杀毒效果也是一般般…

WebDAV之π-Disk派盘 + MiXplorer

MiXplorer是一款非常强大实用的手机文档管理器,能给用户提供了一系列的文档处理功能,包括本地文件浏览、文件排序、文件筛选、切换视图、新建文件、添加收藏等等,同时还能将你手机里的所有文件都罗列出来,简洁明了,让用户一眼就能够找到相应的文件并对其进行编辑,或是删除…

YOLOv5:通过真实结果的txt文件与预测结果的txt文件进行结果评估

YOLOv5:通过真实结果的txt文件与预测结果的txt文件进行结果评估 前言前提条件相关介绍项目结构YOLOv5:通过真实结果的txt文件与预测结果的txt文件进行结果评估val_txt.py输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批…

Istio快速入门

Istio快速入门 目录 文章目录 Istio快速入门目录本节实战前言1、安装安装方式1.使用 istioctl install2.使用 istioctl manifest generate 安装3.使用 Helm 安装4.使用 Istio Operator 安装 安装 Istio🚩 实战:istioctl 方式安装istio-2023.11.3(测试成功…

SRC实战 | CORS跨资源共享漏洞

CORS跨资源共享 跨源资源共享 (CORS) 是一种浏览器机制,允许网页使用来自其他页面或域的资产和数据。 大多数站点需要使用资源和图像来运行它们的脚本。这些嵌入式资产存在安全风险,因为这些资产可能包含病毒或允许服务器访问黑客。 CORS响应头 CORS通…