当前位置: 首页 > news >正文

面试数据库八股文十问十答第七期

面试数据库八股文十问十答第七期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)索引是越多越好吗?

不是的。虽然索引可以加快数据的检索速度,但是索引也会增加数据库的存储空间和维护成本。过多的索引会增加写操作的开销,因为每次对数据进行修改时都需要更新索引。此外,索引还会增加查询优化器的选择成本,并且在某些情况下,过多的索引可能会导致性能下降,因为查询优化器可能会选择错误的索引。因此,建立索引需要根据实际的查询需求和数据库的特点来进行权衡和选择。

2)你能说说在 B+ 树层面查询数据的全过程吗?越详细越好

B+ 树是一种常用于数据库索引结构的数据结构,其查询数据的全过程可以分为以下几个步骤:

  1. 根据查询条件在根节点进行查找:从根节点开始,根据查询条件找到对应的索引键或者索引范围。
  2. 根据索引键或者范围找到对应的叶子节点:在非叶子节点中,根据索引键的值找到对应的子节点,直到达到叶子节点。叶子节点保存了数据行的指针或者数据页的地址。
  3. 在叶子节点中进行查找:在叶子节点中根据索引键的值找到对应的数据行的指针或者数据页的地址。
  4. 如果需要,进行回表操作:如果查询的列不在索引中,需要根据数据行的指针或者数据页的地址到数据页中获取数据。

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 支持以下四种事务隔离级别:

  1. 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据。这是最低级别的隔离级别,可能会导致脏读、不可重复读和幻读的问题。
  2. 读提交(Read Committed):事务只能读取其他事务已经提交的数据。这是 MySQL 的默认隔离级别。
  3. 可重复读(Repeatable Read):事务在整个事务期间可以多次读取相同的数据,并且保证这些数据不会发生变化。这可以防止不可重复读问题,但仍然可能发生幻读问题。
  4. 串行化(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)索引是越多越好吗&#xff…...

【C++题解】1133. 字符串的反码

问题:1133. 字符串的反码 类型:字符串 题目描述: 一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。 如果这是一个小写字符,则它和字符 a 的距离与它的反码和字符 z 的距离…...

【Python编程实战】基于Python语言实现学生信息管理系统

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…...

md5强弱碰撞

一&#xff0c;类型。 1.弱比较 php中的""和""在进行比较时&#xff0c;数字和字符串比较或者涉及到数字内容的字符串&#xff0c;则字符串会被转换为数值并且比较按照数值来进行。按照此理&#xff0c;我们可以上传md5编码后是0e的字符串&#xff0c;在…...

【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 中&#xff0c;.PHONY 是一个特殊的目标&#xff0c;用于声明伪目标&#xff08;phony target&#xff09;。伪目标是指并不代表实际构建结果的目标&#xff0c;而是用来触发特定动作或命令的标识。通常情况下&#xff0c;.PHONY 会被用来声明一组需要执行的动作&a…...

linux配置防火墙端口

配置防火墙&#xff0c;添加或删除端口&#xff0c;需要有root权限。 防火墙常用命令如下&#xff1a; 1.查看防火墙状态&#xff1a; systemctl status firewalld active(running)&#xff1a;开启状态&#xff0c;正在运行中 inactive(dead)&#xff1a;关闭状态&#xff…...

sklearn线性回归--岭回归

sklearn线性回归--岭回归 岭回归也是一种用于回归的线性模型&#xff0c;因此它的预测公式与普通最小二乘法相同。但在岭回归中&#xff0c;对系数&#xff08;w&#xff09;的选择不仅要在训练数据上得到好的预测结果&#xff0c;而且还要拟合附加约束&#xff0c;使系数尽量小…...

三十一、openlayers官网示例Draw Features解析——在地图上自定义绘制点、线、多边形、圆形并获取图形数据

官网demo地址&#xff1a; Draw Features 先初始化地图&#xff0c;准备一个空的矢量图层&#xff0c;用于显示绘制的图形。 initLayers() {const raster new TileLayer({source: new XYZ({url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/…...

医疗科技:UWB模块为智能医疗设备带来的变革

随着医疗科技的不断发展和人们健康意识的提高&#xff0c;智能医疗设备的应用越来越广泛。超宽带&#xff08;UWB&#xff09;技术作为一种新兴的定位技术&#xff0c;正在引领着智能医疗设备的变革。UWB模块作为UWB技术的核心组成部分&#xff0c;在智能医疗设备中发挥着越来越…...

Java面试题大全(从基础到框架,中间件,持续更新~~~)

从Java基础到数据库&#xff0c;Spring&#xff0c;MyBatis&#xff0c;消息中间件&#xff0c;微服务解决全部Java面试过程中的问题。&#xff08;持续更新~~&#xff09; Java基础 2024最新Java面试题——java基础 MySQL基础 mysql基础知识——适合不太熟悉数据库知识的小…...

零知识证明在隐私保护和身份验证中的应用

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 隐私保护和身份验证是现代社会中的关键问题&#xff0c;尤其是在数字化时代。零知识证明&#xff08;Zero-Knowledge Proofs&…...

15.微信小程序之async-validator 基本使用

async-validator是一个基于 JavaScript 的表单验证库&#xff0c;支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element中的表单验证都是基于 async-validator 使用 async-validator 可以方便地构建表单验证逻辑&#xff0c;使得错误提示信息更加友好和…...

元宇宙vr科普馆场景制作引领行业潮流

在这个数字化高速发展的时代&#xff0c;北京3D元宇宙场景在线制作以其独特的优势&#xff0c;成为了行业内的创新引领者。它能够快速完成空间设计&#xff0c;根据您的个性化需求&#xff0c;轻松设置布局、灯光、音效以及互动元素等&#xff0c;为您打造出一个更加真实、丰富…...

kotlin基础之高阶函数

Kotlin中的高阶函数、内联函数以及noinline和crossinline关键字是函数式编程中的重要概念。下面我将逐一解释这些概念的定义、实现原理、使用场景以及noinline和crossinline关键字的具体用法。 高阶函数 定义&#xff1a;高阶函数是接受一个或多个函数作为参数&#xff0c;或…...

【Python音视频技术】用moviepy实现图文成片功能

今天上班的时候看到有人群里问 图文成片怎么实现。 临时给我提供一点写作的灵感&#xff0c;趁着下班写一篇。这里用到 python的moviepy库&#xff0c; 之前文章介绍过。 大体思路&#xff1a;假定有4张图片&#xff0c;每张图片将在视频中展示2秒钟&#xff0c;并且图片会按照…...

【Linux】权限的理解之权限掩码(umask)

目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的&#xff0c;默认的第一位数字是0&#xff1b;后三位数字分别由八进制位数字组成。权限…...

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n&#xff08;n≤3000&#xff09;个单元格&#xff0c;各代表一个重要的建筑物。为了保证建筑物的安全&#xff0c;警察署给每个建筑物派了一名警察…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...