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

Java实习生------MySQL10道面试题打卡

今日语录:“没有执行力,就没有竞争力 ”🌹

 参考资料:图解MySQL、MySQL面试题

1、事务有哪些特性?

原子性:

  • 一个事务中的所有操作,要么全部完成,要么全部不完成,不会出现某个中间状态。如果在事务执行过程中发生了错误,那么事务就会进行回滚,就好像什么都没有发生过一样。

一致性:

  • 是指事务操作前和事务操作后,数据库中的数据保持一致性的状态。比如事务发生前,A和B的总金额是1200元,那么事务发生后,两者的总金额还是1200元。

隔离性:

  • 数据库允许多个并发事务同时对数据进行修改,隔离性保证了并发事务由于交叉修改数据而导致的数据的不一致问题。

持久性:

  • 事务一旦执行完成,那么对数据库中的数据所做的修改就是永久性的。

持久性是通过redo log来实现的。

原子性是通过undo log来实现的。

隔离性是通过MVCC或者锁机制来实现的。

一致性是通过持久性、原子性以及隔离性来实现的。

2、并行事务会导致什么样的问题?

并行事务会导致脏读、不可重复读以及幻读。

  • 脏读:一个事务读到了另一个未提交事务所修改的数据。
  • 不可重复读:在一个事务内多次读取同一个数据,出现了前后两次读到的数据不一致的情况。
  • 幻读:在一个事务内多次查询符合某个查询条件的 记录数量,出现了前后两次查询到的记录数量不一致的情况。

3、事物的隔离级别有哪些?分别解决了哪些问题?

事务的隔离级别有四个:分别是读未提交、读提交、可重复读以及串行化。

  • 读未提交:一个事务在未提交时所作的变更就能被其他事务所看到(可能发生脏读、不可重复读以及幻读)
  • 读提交:一个事务只有在提交之后,它所作的变更才能被其他事务所看到(可能发生不可重复读以及幻读)
  • 可重复读:一个事务执行过程中所看到的数据,跟这个事务启动时所看到的数据是一致的,是MySQL innoDB默认的隔离级别(可能发生幻读,但是可以在很大程度上避免幻读)
  • 串行化:对记录进行加锁,在多个事务对记录进行读写时,如果发生了冲突,那么后访问的事务必须要等待先访问的事务执行完成 (脏读、不可重复读以及幻读都不会发生)

4、可重复读隔离级别是如何在很大程度上避免幻读的?

可重复读隔离级别分别针对快照读和当前读提出了两种解决方案。

  • 针对快照读(普通的select语句):通过MVCC(多版本并发控制)来解决,当一个事务开始之后,生成一个Read View,然后整个事务运行期间都使用这个Read View。
  • 针对当前读(select ... for update):通过记录锁+间隙锁(next-key lock)来解决,它会对某个范围进行加锁,如果在查询期间,某个事物在已锁定范围内插入数据,那么就会导致插入失败。

5、谈谈你对MVCC的理解?⭐

MVCC是由undo log和Read View共同实现的

undo log记录的是事务更新前的数据:

  • 比如在插入一条数据时,记录这条数据的主键值,回滚时直接根据主键值进行删除;
  • 比如在修改一条数据时,记录原来的数据,回滚时,按照原来的数据进行回滚
  • 每次执行事务时,都会生成一条undo log,undo log通过roll_pointer指针串联起来,这条链表就叫做版本链;

Read View相当于数据快照,它管理了一个事务列表,可以根据记录的trx_id事务id来控制这条记录对当前事务来说是否可见。

6、undo log、redo log以及bin log各自有什么作用?⭐

undo log:

  • 用来撤销回退,undo log记录了更新前的数据,事务执行过程出现问题可以根据历史数据进行回滚;undo log实现了事务的原子性,并和Read View一起实现了MVCC(多版本并发控制)

redo log:

  • redo log是物理日志,主要记录了事务对记录所做的修改;当事务在执行过程中对数据进行修改时,会先修改Buffer pool中的页,并将其设置为脏页,但是这些脏页不会马上被刷新到磁盘,而是由后台线程选择合适的时机进行刷新;Buffer pool是内存中的一块区域,为了避免掉电等故障导致内存中的数据丢失,所以用redo log来记录事务对数据做了什么修改,当事务提交时,只需要将redo log刷新到磁盘就可以了,之后即使掉电,数据库重启之后也可以根据redo log来对数据做还原。(redo log在写入磁盘时是顺序写,而buffer pool中的页写入到磁盘是随机写,顺序写比随机写的效率要高)

bin log:

  • bin log是记录所有表结构变更和表数据修改的日志,主要用于备份恢复和主从复制;如果整个数据库的数据被删除了,只能利用bin log来进行恢复,redo log做不到。因为redo log在写的时候是循环写,边写边擦除;而bin log记录的是全量日志。

7、主从复制是怎么实现的?涉及到哪些线程?⭐

主从复制依赖于bin log实现,且主从复制是一个异步过程,主从复制的目的就是将主服务器的数据发送给从服务器

过程:

  • 主服务器接收来自客户端的请求,将数据的变更操作写入bin log,然后提交事务,提交完成之后返回给客户端一个响应
  • 从服务器创建一个I/O线程,连接主服务器的log dump线程,接收来自主服务器的bin log日志,并将其写入relay log的中继日志中
  • 从服务器创建一个SQL线程,用来读取bin log日志并更新数据,达到主从服务器的数据一致的目的

8、事务有哪些状态?

  • 活跃状态:事务正在执行中
  • 部分提交状态:事务中的最后一条语句被执行完
  • 失败状态:事务不能正常执行
  • 提交状态:部分提交状态之后且数据往磁盘中写入完成
  • 中止状态:事务出现错误回滚到事务开始之前的状态

9、count(*)、count(1)、count(主键字段)、count(字段)有什么区别?⭐

性能:count(*)= count(1)> count(主键字段)>count(字段)

count(主键字段):在只有聚簇索引的情况下,会遍历聚簇索引的B+树,每当读取到一条记录,就检查主键字段是否为null,不为null就将统计到的数量加1(如果有二级索引,优先遍历二级索引的B+树,因为二级索引的B+树相对于聚簇索引的B+树来说结构更简单)

count(1):在只有聚簇索引的情况下,同样遍历聚簇索引的B+树,每当读取到一条记录就将值加1(如果有二级索引,优先遍历二级索引的B+树,因为二级索引的B+树相对于聚簇索引的B+树来说结构更简单)

count(*):与count(1)执行过程基本一样

count(普通字段):进行全表扫描,每当读取到一条记录先检查普通字段是否为null,如果不为null将值加1 

10、Buffer Pool有什么作用?

  • Buffer Pool是一块连续的内存空间,它的作用是缓存数据,用来提高数据的读写性能。
  • 当读取数据时,如果要读取的数据存在于buffer pool中,则直接从中读取,否则再到磁盘中读取。
  • 当修改数据时,先修改buffer pool中的数据,然后将数据所在的页设置为脏页,然后由后台进程选择一个合适的时机将脏页刷新到磁盘中。


 “今天也是元气满满的一天呐!”加油!

整理面经不易,如果对你有帮助的话点个赞吧

相关文章:

Java实习生------MySQL10道面试题打卡

今日语录:“没有执行力,就没有竞争力 ”🌹 参考资料:图解MySQL、MySQL面试题 1、事务有哪些特性? 原子性: 一个事务中的所有操作,要么全部完成,要么全部不完成,不会出现…...

帆软报表设计器 数据集之数据库查询

当点击数据库查询时,调用TableDataTreePane的 public void actionPerformed(ActionEvent var1) {TableDataTreePane.this.dgEdit(this.getTableDataInstance().creatTableDataPane(), TableDataTreePane.this.createDsName(this.getNamePrefix()), false);} 然后调用TableDat…...

CSDN 第三十七期竞赛题解

很少有时间来玩玩题目,上一次因为环境极为嘈杂的原因在时间上没有进入前十,挺遗憾的。 在 CSDN 参加的第一次没出锅的比赛。 大概只有最后一题值得好好讲讲。 T1:幼稚班作业 幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接…...

Vue实战【常用的Vue小魔法】

目录🌟前言🌟能让你首次加载更快的路由懒加载,怎么能忘?🌟你是否还记得有一个叫Object.freeze的方法?🌟异步组件那么强,你是不是没用过?🌟你是不是还在comput…...

用C跑爬虫

爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止。 下面开始逐步分析爬虫的实现。 待下载集合与已下载集合 为了保存需要下载的URL,同时防止重复下载,我们需要分别用了两个集合来存放将要下载的URL和…...

【C语言】你真的了解结构体吗

引言✨我们知道C语言中存在着整形(int、short...),字符型(char),浮点型(float、double)等等内置类型,但是有时候,这些内置类型并不能解决我们的需求,因为我们无法用这些单一的内置类型来描述一些复杂的对象&#xff0c…...

血氧仪是如何得出血氧饱和度值的?

目录 一、血氧饱和度概念 二、血氧饱和度监测意义 三、血氧饱和度的监测方式 四、容积脉搏波计算血氧饱和度原理 五、容积脉搏波波形的测量电路方案 1)光源和光电探测器的集成测量模块:SFH7050—反射式 2)模拟前端 六、市面上血氧仪类型…...

Java全栈知识(3)接口和抽象类

1、抽象类 抽象类就是由abstract修饰的类,其中没有只声明没有实现的方法就是抽象方法,抽象类中可以有0个或者多个抽象方法。 1.1、抽象类的语法 抽象类不能被final修饰 因为抽象类是一种类似于工程中未完成的中间件。需要有子类进行继承完善其功能,所…...

JavaScript == === Object.is()

文章目录JavaScript & & Object.is() 相等运算符 全等运算符Object.is() 值比较JavaScript & & Object.is() 相等运算符 相等运算符,会先进行类型转换,将2个操作数转为相同的类型,再比较2个值。 console.log("10&…...

GPT4论文翻译 by GPT4 and Human

GPT-4技术报告解读 文章目录GPT-4技术报告解读前言:摘要1 引言2 技术报告的范围和局限性3 可预测的扩展性3.1 损失预测3.2 人类评估能力的扩展4 能力评估4.1 视觉输入 !!!5 限制6 风险与缓解:7 结论前言: 这篇报告内容太多了!&am…...

inode和软硬链接

文章目录:一、理解文件系统1.1 什么是inode1.2 磁盘了解1.2.1磁盘的硬件结构1.2.2 磁盘的分区1.2.3 EXT2文件系统二、软硬链接2.1 软链接2.2 硬链接一、理解文件系统 1.1 什么是inode inodes 是文件系统中存储文件元数据的数据结构。每个文件或目录都有一个唯一的 …...

简单分析Linux内核基础篇——initcall

写过Linux驱动的人都知道module_init宏,因为它声明了一个驱动的入口函数。 除了module_init宏,你会发现在Linux内核中有许多的驱动并没有使用module_init宏来声明入口函数,而是看到了许多诸如以下的声明: static int __init qco…...

硬件速攻-AT24CXX存储器

AT24C02是什么? AT24CXX是存储芯片,驱动方式为IIC协议 实物图? 引脚介绍? A0 地址设置角 可连接高电平或低电平 A1 地址设置角 可连接高电平或低电平 A2 地址设置角 可连接高电平或低电平 1010是设备前四位固定地址 &#xf…...

C# tuple元组详解

概念 本质就是个数据结构,它是将多个数据元素分组成一个轻型数据结构。 如何声明元组变量(针对.net framework 4.7 和 .net core 2.0) 不带字段名称元组 ## t1就是个变量 它的类型是元组类型 ## 左侧括号定义的是参数列表 等于号右侧就是个t1赋值 #…...

1、Linux初级——linux命令

下载镜像:http://cn.ubuntu.com/dowload 一、基本命令 1、alias(给命令取别名) 例如:alias clls -la(只是临时的) 2、配置文件$ vim ~/.bashrc $ vim ~/.bashrc // 使用vim打开配置文件 (1)在配置文件…...

ChatGPT助力校招----面试问题分享(四)

1 ChatGPT每日一题:电阻如何选型 问题:电阻如何选型 ChatGPT:电阻的选型通常需要考虑以下几个方面: 额定功率:电阻的额定功率是指电阻能够承受的最大功率。在选型时,需要根据电路中所需要的功率确定所选…...

【设计模式】创建型设计模式

文章目录1. 基础①如何学习设计模式② 类模型③ 类关系2. 设计原则3. 模板方法① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码4. 观察者模式① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码5. 策略模式① 定义②背景③ 要点④ 本质⑤ 结构图⑥ 样例代码1. 基础 ①如何学习…...

Linux 信号(signal):信号的理解

目录一、理解信号1.信号是什么2.信号的种类二、简单理解信号的生命周期一、理解信号 1.信号是什么 Linux中的信号其实和日常生活中的信号还是挺像的,LInux中的信号是一种事件通知机制,通知进程发生了某个事件。进程接收到信号后,就会中断当前…...

Vulnhub项目:Web Machine(N7)

靶机地址:Web Machine(N7)渗透过程:kali ip:192.168.56.104,靶机ip,使用arp-scan进行查看靶机地址:192.168.56.128收集靶机开放端口:nmap -sS -sV -T5 -A 192.168.56.128开放了80端口&#xff0…...

Qt基础之三十三:海量网络数据实时显示

开发中我们可能会遇到接收的网络数据来不及显示的问题。最基础的做法是限制UI中加载的数据行数,这样一来可以防止内存一直涨,二来数据刷新非常快,加载再多也来不及看。此时UI能看到数据当前处理到什么阶段就行,实时性更加重要,要做数据分析的话还得查看日志文件。 这里给出…...

linux console快捷键

Ctrl C:终止当前正在运行的程序。Ctrl D:关闭当前终端会话。Ctrl Z:将当前程序放入后台运行。Ctrl L:清除当前屏幕并重新显示命令提示符。Ctrl R:在历史命令中进行逆向搜索。Ctrl A:将光标移动到行首…...

弗洛伊德龟兔赛跑算法(弗洛伊德判圈算法)

弗洛伊德( 罗伯特・弗洛伊德)判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。昨晚刷到一个视频&…...

nodejs篇 express(1)

文章目录前言express介绍安装RESTful接口规范express的简单使用一个最简单的服务器,仅仅只需要几行代码便可以实现。restful规范的五种接口类型请求信息req的获取响应信息res的设置中间件的使用自定义中间件解决跨域nodejs相关其它内容前言 express作为nodejs必学的…...

Java实习生------Redis常见面试题汇总(AOF持久化、RDB快照、分布式锁、缓存一致性)⭐⭐⭐

“年轻人,就要勇敢追梦”🌹 参考资料:图解redis 目录 谈谈你对AOF持久化的理解? redis的三种写回策略是什么? 谈谈你对AOF重写机制的理解?AOF重写机制的具体过程? 谈谈你对RDB快照的理解&a…...

seata服务搭建

它支持两种存储模式,一个是文件,一个是数据库,下面我们分别介绍一下这两种配置nacos存储配置,注意如果registry.conf中注册和配置使用的是file,就会去读取file.config的配置,如果是nacos则通过nacos动态读取…...

Kafka和RabbitMQ有哪些区别,各自适合什么场景?

目录标题1. 消息的顺序2. 消息的匹配3. 消息的超时4. 消息的保持5. 消息的错误处理6. 消息的吞吐量总结1. 消息的顺序 有这样一个需求:当订单状态变化的时候,把订单状态变化的消息发送给所有关心订单变化的系统。 订单会有创建成功、待付款、已支付、已…...

用Pytorch构建一个喵咪识别模型

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、前言 二、问题阐述及理论流程 2.1问题阐述 2.2猫咪图片识别原理 三、用PyTorch 实现 3.1PyTorch介绍 3.2PyTorch 构建模型的五要素 3.3PyTorch 实现的步骤 3.3.…...

QT搭建MQTT开发环境

QT搭建MQTT开发环境 第一步、明确安装的QT版本 注意: 从QT5.15.0版本开始,官方不再提供离线版安装包,除非你充钱买商业版。 而在这里我使用的QT版本为5.15.2,在线安装了好久才弄好,还是建议使用离线安装的版本 在这里…...

Python3,5行代码,生成自动排序动图,这操作不比Excel香?

5行代码生成自动排序动图1、引言2、代码实战2.1 pynimate介绍2.2 pynimate安装2.3 代码示例3、总结1、引言 小屌丝:鱼哥,听说你的excel段位又提升了? 小鱼:你这是疑问的语气? 小屌丝:没有~ 吧… 小鱼&…...

【Java SE】变量的本质

目录一. 前言二. 变量(variable)2.1 性质2.2 变量类型2.2.1 核心区别2.3 变量的使用三. 总结一. 前言 一天一个Java小知识点,助力小伙伴更好地入门Java,掌握更深层次的语法。 二. 变量(variable) 2.1 性质 变量本质上就是代表一个”可操作的存储空间”…...