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

news/2024/5/4 8:39:47/文章来源:https://blog.csdn.net/qq_54070103/article/details/129636701

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

 参考资料:图解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中的数据,然后将数据所在的页设置为脏页,然后由后台进程选择一个合适的时机将脏页刷新到磁盘中。


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统的安装以及参数配置 -- VMware(虚拟机)安装--ubuntu 20.04--VMware Tools工具安装

Linux系统的安装以及参数配置 PS:本文章为上课后整理笔记,作为以后学习工作的学习使用,也作为一次课程记录 一、Linux系统的安装常用方法 – 3种 1.直接Linux操作替换Windows – 专业Linux开发者 – 接受Linux相关软件的使用 2.安装双系统…

诗佛王维,眼前的苟且和远方的田野?

转自:媲美李白杜甫的诗人,他的人生可以复制_百科TA说 (baidu.com)他受到的羁绊,他做出的选择,提供了一种温润平和的过日子模式。大部分人无法决绝地脱离社会,隐遁起来,也无法在社会中不计底线,混…

JavaScript性能优化小窍门汇总(含实例)

在众多语言中,JavaScript已经占有重要的一席之地,利用JavaScript我们可以做很多事情 , 应用广泛。在web应用项目中,需要大量JavaScript的代码,将来也会越来越多。但是由于JavaScript是一个作为解释执行的语言&#xff…

Vue|样式绑定

class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 文末名片获取源码 精…

根据平均分来划分等级-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第2章-课后作业)

【案例2-1】 根据平均分来划分等级 一、案例描述 考核知识点 switch语句 练习目标 掌握switch语句的使用。 需求分析 switch语句也是多分支语句,针对某个表达式的值做出判断,来决定执行哪一段代码,本案例用于实现根据输入的小明同学的5门课…

百度CTO王海峰:全栈AI技术加持,打造新一代大语言模型文心一言

3月16日,百度在北京总部召开新闻发布会,百度创始人、董事长兼首席执行官李彦宏和百度首席技术官王海峰出席,李彦宏展示了新一代知识增强大语言模型文心一言在文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成五个使用场景中的综合…

【linux】管道pipe(),dup()系统调用

int pipe(int p[2]) 函数作用:生成一个管道,将管道读端的文件标识符存到p[0]中,将管道写端的文件标识符存到p[1]中。返回值:若成功返回0,失败返回-1 管道的理解 如图,当创建完管道以后的父进程fork出两个子…

Python中模块是个啥

昨天有粉丝问我说,啥是模块?经常听别人口中提这个词,但就是不懂。 模块可以认为是一盒主题积木,通过它可以拼出某一主题的东西。这与之前介绍的函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函…

【C++进阶】unordered_set和unordered_map的介绍及使用

文章目录unordered系列容器介绍unordered_setunordered_set的模板参数unordered_set的函数接口介绍unordered_set的重要接口的使用构造函数增删查迭代器的使用unordered_mapunordered_map的模板参数unordered_map的函数接口介绍unordered_map的重要接口的使用增删查改迭代器的使…

EMQ 南洋万邦云边一体化方案:激活数据潜力,打造智慧工业园区

在工业 4.0 的浪潮之中,全球制造业再度振兴和崛起,并经历着前所未有从流程驱动转向数据驱动的变革。 近年来,数智化绿色工厂正在成为制造业竞争力的主要驱动力,依托物联网、工业互联网,人工智能等先进制造技术的深度融合,智能工厂变得更高效、更灵活,拥有更高的交付韧性和成本…

解忧杂货铺(四):Hightec生成HEX方法+小功能开启

目录 1、概述 2、 4.6.6的生成方法 3 、HighTEC4.9.3的生成.hex方法 4、MAP文件生成方法 5、elf生成 6、编译优化 7、输出编译过程中的详细信息 8、快速定位内存 1、概述 本文章纯属整合,大部分属于外链,补充一下,后面是自己记录的了…

由浅入深之字符串的算法题(vs: chatGPT做算法)

背景俗话说,温故而知新。chatGPT效果太惊艳了!简直就是碾压的效果。但是还要有希望,先拾取,再创新。先了解,再超越吧。ps: 再刷最后一遍算法题思路。顺便基于chatGPT3.5感受一下大模型的魔力。字符串基础C/C每个字符串…

编程题]组队竞赛(Java实现)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

十七、队列

文章目录1、基本概念(队列实际上就是一个结构体,可以理解为就是一个数组)2、使用场景:任务间或任务与中断间传递数据3、使用队列的好处(1)休眠唤醒(2)提高CPU利用率4、队列的核心5、…

WebService简单入门

1. JAX-WS发布WebService 创建web工程 创建simple包,和server、client两个子包。正常情况下server和client应该是两个项目,这里我们只是演示效果,所以简化写到一个项目中: 1.1 创建服务类Server package simple.server;import ja…

JavaScript正则表达式知识拓展总结

JavaScript的正则表达式是前端中比较重要的部分,正则表达式主要用于字符串处理,表单验证等场合,实用高效。JavaScript中的正则表达式比起C#中的正则表达式要弱很多,但基本够用了。在js中定义正则表达式很简单,有两种方…

搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」

文章目录1.前言2.本地SFTP服务器搭建2.1.SFTP软件的下载和安装2.2.配置SFTP站点2.3.Cpolar下载和安装3.SFTP服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 现在的网络发达,个人电脑容量快速上升,想要保存的数据资料也越…

DRBG_InstantiateSeeded调试-1

public 参数解析: standardEKPolicy: 837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa(32bytes) rawCmdBuf 命令数据: 800200000063000001314000000100000009400000090000010000000400000000003a0001000b000300720020837197674484b3f81a90cc8d46a5d724fd5…

Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C++)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…

银河麒麟v10系统硬盘挂载并配置yum软件源

一、查看磁盘 近期由于centos系统停止更新用户服务器要更换银河麒麟v10,拿到服务器后使用lsblk -f或fdisk -l命令查看磁盘名称 可以看到sdb200G就是要挂载的硬盘,还没有uuid需要初始化才可以挂载。 二、分区 分区命令: fdisk /dev/【你的…