面试官:谈谈你对Mysql事务的认识?,java程序员面试笔试宝典第二版

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

6、可重复读是怎么实现的?

再三强调,每个问题都仔细看!都是高频题!切勿遗漏!

正文

1、讲讲为什么用事务?事务的四大特性?事务的隔离级别知道吧,你们生产用哪种?

回答:为什么用事务?

这个问题从事务的四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),这四个角度去答。例如原子性的角度,张三给李四转账,只有当张三账户的钱转走了,并且李四账户的钱收到了之后转账事务才能提交。如果原子性无法保证,就会出现张三的钱转走了,李四却没收到钱的情况!

Come on!这种easy回答,我就不一个个举例了,过!

至于生产用哪种隔离级别?答Read Commited或者Repeatable都行,有道理即可。例如,我用了Read Commited,因为这个隔离级别够用了,用不上间隙锁!详情可以参照《互联网项目中mysql应该选什么事务隔离级别》这篇文章!

另外,额外记住Repeatable是默认的隔离级别即可!至于另外两个隔离级别,Read uncommitted,一个事务能读到另一个事务未提交的数据,隔离性都无法满足,不用这个隔离级别。另外一个隔离级别Seriallzable,在这个隔离级别下,MVCC机制都无法满足,数据库并发性非常差,不用这个隔离级别。

ps:这个问题其实考察的是你对各个隔离级别的理解,所以务必牢记各个隔离级别的区别!

2、Innodb中ACID具体是如何实现的?

回答:老题了,详细版,可以看这篇文章《程序员,知道Mysql中事务ACID的原理吗?》这里给出简单回答,

  • (1)利用undo log保证原子性

  • (2)利用redo log保证持久性

  • (3)利用锁和MVCC机制保证隔离性

  • (4)通过原子性、持久性、隔离性来保证一致性

3、redo log和binlog的一致性如何保证?

回答:此题,先回忆一下redo log和binlog的区别!

redo log 记录的是数据的物理变化,所以叫物理日志,记录的是是物理修改的内容(xxxx页修改了xxx)。当我们修改数据的时候,写完内存了,但数据还没真正写到磁盘的时候。此时我们的数据库挂了,我们可以根据redo log来对数据进行恢复!

binlog 记录的是数据的逻辑变化,所以又叫逻辑日志,statement模式下记载的是update/delete/insert这样的SQL语句,主要用来主从复制和恢复数据用。

这二者功能很像,都是用作”恢复“的!因此这二两个日志必须保证逻辑上一致,否则就会出现数据错乱。例如,我们先写redo log再写binlog。在redo log写完后,宕机了,此时binlog来不及写。那么重启后,数据能够根据redo log进行恢复,但是binlog没记录这个语句。那么,我们在利用这个binlog恢复数据的时候,就会出现丢失数据的情形!

mysql怎么解决的?

这里考察的是mysql的内部XA事务!俗称日志的两阶段提交协议!也就是说,将事务提交分为了两个阶段,prepare阶段和commit阶段!

prepare:写入redo log,并将回滚段置为prepared状态,此时binlog不做操作。

commit:innodb释放锁,释放回滚段,设置提交状态,写入binlog,然后存储引擎层提交。

mysql数据库怎么进行崩溃恢复的?

1> 崩溃恢复时,扫描最后一个Binlog文件,提取其中的xid;

2> InnoDB维持了状态为Prepare的事务链表,将这些事务的xid和binlog中记录的xid做比较,如果在binlog中存在,则提交,否则回滚事务。

最后,这道题蓝绿大厂,开水团,宇宙条都问过!

4、大事务有哪些坏处?生产上遇到过大事务么?你怎么排查和解决的?

回答:大事务,有的文章又称之为长事务,顾名思义,执行时间很长的事务!

至于坏处,例如事务执行时间太长,会造成大量的阻塞和锁超时,容易造成主从延迟.另外,大事务如果执行失败,回滚也会很耗时…(省略一千字)

怎么排查?so easy!监控

information_schema.Innodb_trx表,设置长事务阈值,超过就报警 / 或者 kill;

下面语句是查询持续时间超过60s的事务

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;

一般在生产中,会将监控大事务的语句,配成定时脚本,进行监控。

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
*

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-iIFVZ3Jf-1713561413084)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值