面试数据库八股文十问十答第七期
面试数据库八股文十问十答第七期
作者:程序员小白条,个人博客
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
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)个单元格,各代表一个重要的建筑物。为了保证建筑物的安全,警察署给每个建筑物派了一名警察…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...