面试数据库八股文十问十答第七期
面试数据库八股文十问十答第七期
作者:程序员小白条,个人博客
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)索引是越多越好吗?
不是的。虽然索引可以加快数据的检索速度,但是索引也会增加数据库的存储空间和维护成本。过多的索引会增加写操作的开销,因为每次对数据进行修改时都需要更新索引。此外,索引还会增加查询优化器的选择成本,并且在某些情况下,过多的索引可能会导致性能下降,因为查询优化器可能会选择错误的索引。因此,建立索引需要根据实际的查询需求和数据库的特点来进行权衡和选择。
2)你能说说在 B+ 树层面查询数据的全过程吗?越详细越好
B+ 树是一种常用于数据库索引结构的数据结构,其查询数据的全过程可以分为以下几个步骤:
- 根据查询条件在根节点进行查找:从根节点开始,根据查询条件找到对应的索引键或者索引范围。
- 根据索引键或者范围找到对应的叶子节点:在非叶子节点中,根据索引键的值找到对应的子节点,直到达到叶子节点。叶子节点保存了数据行的指针或者数据页的地址。
- 在叶子节点中进行查找:在叶子节点中根据索引键的值找到对应的数据行的指针或者数据页的地址。
- 如果需要,进行回表操作:如果查询的列不在索引中,需要根据数据行的指针或者数据页的地址到数据页中获取数据。
3)为什么要用 B+ 树?
B+ 树作为一种常用的索引结构,在数据库系统中有着广泛的应用,主要有以下几个原因:
- 平衡性:B+ 树是一种平衡树结构,保证了树的高度较低,从而保证了在最坏情况下的查询、插入和删除操作的时间复杂度为 O(logN)。
- 有序性:B+ 树的叶子节点构成了有序的链表,这样可以很方便地进行范围查询和范围扫描。
- 可扩展性:B+ 树支持动态的插入和删除操作,同时保持树的平衡性,使得数据库系统能够动态地适应数据的变化。
- 适应性:B+ 树适用于磁盘存储,可以很好地利用磁盘的预读特性,减少磁盘IO操作,提高查询性能。
- 支持多种操作:B+ 树不仅支持等值查询,还支持范围查询、范围扫描等多种操作,可以满足数据库系统中各种复杂的查询需求。
4)MySQL 是如何实现事务的
MySQL 使用了多种技术来实现事务的支持,其中最重要的是以下两种:
- 事务日志(Redo Log):MySQL 使用事务日志来保证事务的持久性。在事务提交之前,将事务的修改操作记录到事务日志中,然后再将这些修改写入到磁盘上的数据页中。在数据库发生崩溃或者重新启动时,MySQL 可以通过重放事务日志来恢复未完成的事务,保证事务的持久性。
- Undo Log:MySQL 使用 Undo Log 来支持事务的回滚和 MVCC。在事务执行过程中,将事务的修改操作记录到 Undo Log 中,然后再将这些修改写入到磁盘上的数据页中。如果事务需要回滚,可以通过 Undo Log 将数据恢复到事务开始之前的状态。
除了以上两种技术之外,MySQL 还使用了锁机制来保证事务的并发控制。通过对数据行、索引、表等级别的锁来控制并发事务的访问,保证事务的隔离性和一致性。
5)MySQL 长事务会造成什么问题?
长事务可能会导致以下几个问题:
- 锁资源占用:长事务持有的锁资源会长时间占用,导致其他事务无法访问或修改相关数据,从而降低数据库的并发性能。
- 内存占用增加:长事务中的未提交数据需要占用 Undo Log,长时间运行的事务会增加 Undo Log 的使用量,占用大量内存空间,导致内存压力增加。
- 版本链增长:长事务持续修改数据会生成大量的版本链,增加数据库的存储空间和维护成本。
- 数据一致性问题:长事务可能会导致数据库中出现脏数据或者不一致的数据,影响数据库的一致性和可靠性。
因此,为了避免以上问题,应尽量避免设计长时间运行的事务,或者将长事务拆分成多个短事务,减少事务持有锁资源和占用内存空间的时间。
6)什么是 MVCC?
MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于实现数据库的并发控制的技术。在 MVCC 中,每个事务在读取数据时会看到一个固定版本的数据,并且事务之间的修改操作不会互相影响。
MVCC 的主要思想是为每个事务创建一个可见性视图,该视图定义了事务可以看到哪些数据版本。当事务开始时,MVCC 会为该事务创建一个时间戳,并在事务执行过程中使用该时间戳来确定事务可以看到的数据版本。当事务提交或者回滚时,MVCC 会更新事务的时间戳,并清理过期的数据版本。
MVCC 可以提高数据库的并发性能,减少事务之间的互相干扰,同时也能够提高数据库的可靠性和一致性。MySQL 中的 InnoDB 存储引擎就使用了 MVCC 技术来支持事务的并发控制。
7)如果没有 MVCC 怎么办?
如果没有 MVCC,数据库可以使用其他并发控制技术来确保事务的隔离性和一致性,例如使用锁来控制并发访问。在没有 MVCC 的情况下,数据库可能会采用更加保守的锁机制,例如在读取数据时对数据行进行加锁,以防止其他事务对数据进行修改。
8)MySQL 有几种事务隔离级别?
MySQL 支持以下四种事务隔离级别:
- 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据。这是最低级别的隔离级别,可能会导致脏读、不可重复读和幻读的问题。
- 读提交(Read Committed):事务只能读取其他事务已经提交的数据。这是 MySQL 的默认隔离级别。
- 可重复读(Repeatable Read):事务在整个事务期间可以多次读取相同的数据,并且保证这些数据不会发生变化。这可以防止不可重复读问题,但仍然可能发生幻读问题。
- 串行化(Serializable):最高级别的隔离级别,确保事务串行执行,以避免任何并发问题。虽然可以避免脏读、不可重复读和幻读问题,但会降低数据库的并发性能。
9)MySQL 的默认事务隔离级别是什么?为什么?
MySQL 的默认事务隔离级别是 读提交(Read Committed)。这个隔离级别提供了一种良好的平衡,既可以避免脏读问题,又能够在大多数情况下保证较好的并发性能。
10)脏读、不可重复读、幻读分别是什么?
- 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。如果另一个事务回滚,那么读取的数据就是无效的。
- 不可重复读(Non-Repeatable Read):一个事务内多次读取同一数据,但是由于其他事务的修改,每次读取的数据可能都不一样。这种情况下,事务读取的数据是不一致的。
- 幻读(Phantom Read):一个事务在读取某个范围的数据时,另一个事务插入了新的数据行,导致第一个事务再次读取该范围时,发现数据行的数量或者内容发生了变化。这种情况下,事务读取的数据不符合预期,就像出现了幻觉一样。
这些问题在并发环境下可能会出现,而不同的事务隔离级别决定了数据库如何处理这些问题。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 1300+ Star,2W+ 访问!
⭐点赞⭐收藏⭐不迷路!⭐
相关文章:
面试数据库八股文十问十答第七期
面试数据库八股文十问十答第七期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)索引是越多越好吗ÿ…...
【C++题解】1133. 字符串的反码
问题:1133. 字符串的反码 类型:字符串 题目描述: 一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。 如果这是一个小写字符,则它和字符 a 的距离与它的反码和字符 z 的距离…...
【Python编程实战】基于Python语言实现学生信息管理系统
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情
电视猫上面有《庆余年》分集剧情,如何批量爬取下来呢? 先找到每集的链接地址,都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面: <a href"/drama/Yy0wHDA/episode">1</a> 这个…...
md5强弱碰撞
一,类型。 1.弱比较 php中的""和""在进行比较时,数字和字符串比较或者涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。按照此理,我们可以上传md5编码后是0e的字符串,在…...
【Docker故障处理篇】运行容器报错“docker: failed to register layer...file exists.”解决方法
【Docker故障处理篇】运行容器报错“docker: failed to register layer...file exists.” 一、Docker环境介绍2.1 本次环境介绍2.2 本次实践介绍二、故障现象2.1 运行容器消失2.2 重新运行容器报错三、故障分析四、故障处理4.1 停止 Docker 服务:4.2 备份重要数据4.3 清理冲突…...
小红书-社区搜索部 (NLP、CV算法实习生) 一面面经
😄 整个流程按如下问题展开,用时60min左右面试官人挺好,前半部分问问题,后半部分coding一道题。 各位有什么问题可以直接评论区留言,24小时内必回信息,放心~ 文章目录 1、自我介绍2、介绍下项目:微信-多模态小视频分类2.1、看你用了cross-att来融合多模态信息,cross…...
解读makefile中的.PHONY
在 Makefile 中,.PHONY 是一个特殊的目标,用于声明伪目标(phony target)。伪目标是指并不代表实际构建结果的目标,而是用来触发特定动作或命令的标识。通常情况下,.PHONY 会被用来声明一组需要执行的动作&a…...
linux配置防火墙端口
配置防火墙,添加或删除端口,需要有root权限。 防火墙常用命令如下: 1.查看防火墙状态: systemctl status firewalld active(running):开启状态,正在运行中 inactive(dead):关闭状态ÿ…...
sklearn线性回归--岭回归
sklearn线性回归--岭回归 岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束,使系数尽量小…...
三十一、openlayers官网示例Draw Features解析——在地图上自定义绘制点、线、多边形、圆形并获取图形数据
官网demo地址: Draw Features 先初始化地图,准备一个空的矢量图层,用于显示绘制的图形。 initLayers() {const raster new TileLayer({source: new XYZ({url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/…...
医疗科技:UWB模块为智能医疗设备带来的变革
随着医疗科技的不断发展和人们健康意识的提高,智能医疗设备的应用越来越广泛。超宽带(UWB)技术作为一种新兴的定位技术,正在引领着智能医疗设备的变革。UWB模块作为UWB技术的核心组成部分,在智能医疗设备中发挥着越来越…...
Java面试题大全(从基础到框架,中间件,持续更新~~~)
从Java基础到数据库,Spring,MyBatis,消息中间件,微服务解决全部Java面试过程中的问题。(持续更新~~) Java基础 2024最新Java面试题——java基础 MySQL基础 mysql基础知识——适合不太熟悉数据库知识的小…...
零知识证明在隐私保护和身份验证中的应用
PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 隐私保护和身份验证是现代社会中的关键问题,尤其是在数字化时代。零知识证明(Zero-Knowledge Proofs&…...
15.微信小程序之async-validator 基本使用
async-validator是一个基于 JavaScript 的表单验证库,支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element中的表单验证都是基于 async-validator 使用 async-validator 可以方便地构建表单验证逻辑,使得错误提示信息更加友好和…...
元宇宙vr科普馆场景制作引领行业潮流
在这个数字化高速发展的时代,北京3D元宇宙场景在线制作以其独特的优势,成为了行业内的创新引领者。它能够快速完成空间设计,根据您的个性化需求,轻松设置布局、灯光、音效以及互动元素等,为您打造出一个更加真实、丰富…...
kotlin基础之高阶函数
Kotlin中的高阶函数、内联函数以及noinline和crossinline关键字是函数式编程中的重要概念。下面我将逐一解释这些概念的定义、实现原理、使用场景以及noinline和crossinline关键字的具体用法。 高阶函数 定义:高阶函数是接受一个或多个函数作为参数,或…...
【Python音视频技术】用moviepy实现图文成片功能
今天上班的时候看到有人群里问 图文成片怎么实现。 临时给我提供一点写作的灵感,趁着下班写一篇。这里用到 python的moviepy库, 之前文章介绍过。 大体思路:假定有4张图片,每张图片将在视频中展示2秒钟,并且图片会按照…...
【Linux】权限的理解之权限掩码(umask)
目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的,默认的第一位数字是0;后三位数字分别由八进制位数字组成。权限…...
UVa1466/LA4849 String Phone
UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n(n≤3000)个单元格,各代表一个重要的建筑物。为了保证建筑物的安全,警察署给每个建筑物派了一名警察…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
