面试官:什么是大事务?小林哥:就是 很大...的...事务??

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 面试官:什么是大事务?小林哥:就是 很大...的...事务??

最近疫情期间跳槽不易,在外包公司工作了5年的小林在某直聘软件上边投递了好几家互联网公司的java工程师岗位。在经历了快半年的无人问津之后,终于被一家公司的技术leader叫去了面试。


到了南山科技园的某栋大楼地下,看了下时间,距离面试约定时间还有大概15分钟。小王慢慢悠悠地步入了这栋科技大楼,在前台坐下后,过了不久,面试官便赶来了。


面试官


你好,请自我介绍一下吧。


小林


你好,我是xxxxx


面试官扫了下我的简历,发现了简历上的一点:熟悉mysql数据库。这时候面试官笑了笑,仿佛心里头在盘算着后边该怎么问我这块的知识点,我背地一凉。


面试官


聊聊你之前做的项目吧,看这上边的经历,似乎你写的很多项目都是有用到过mysql数据库啊。


小林


嗯嗯,是的,我之前很多的工作经验都是有用到过mysql数据库。(心里暗想:估计接下来要问数据库的知识点了。)


面试官


那你平时对mysql应该有一定的研究吧,我先简单问你几个问题吧。


小林



嗯嗯,可以的。


面试官


我看你简历上边写了商城的项目,为什么要用mysql数据库来存储数据呢?


小林一开始有点蒙。(怎么会问这么奇葩的问题?商品信息存在mysql不是很正常的操作吗?)


小林


商品信息和订单,用户等数据都有一定的关联性,使用关系型数据库进行数据存储会比较合适。而且公司早起业务发展的时候就是使用了mysql数据库,加上市面上mysql数据库在性能,文档等方面也比较成熟,哦对了,mysql对外还是开源免费的,综合这些因素来分析,我觉得使用mysql数据库是一个比较不错的选择。


面试官


嗯嗯,那你在使用mysql存储数据的时候有遇到过哪些问题呢?


小林


嗯嗯,有的。比如说一些sql查询的时间特别久。在工作中我也有对其做过一些优化,也有了解过索引的相关知识点。


(嘿嘿,准备问索引知识了吧,我这块可是准备了很充足的。)


面试官


嗯嗯,那我相信你应该对索引这块了解比较深入,并且有一定经验了吧。那你能讲下你在使用索引的时候遇到过哪些问题吗?


小林


嗯嗯,我有用到过覆盖索引来做一些sql的优化,包括使用一些最左索引前缀的方式进行优化。


面试官


覆盖索引为何能优化sql查询效率呢?能讲解下吗?


小林


因为当覆盖索引生效的时候能够避免“回表查询”操作,减少了io查询的次数。当使用了覆盖索引当时候,查询当数据在叶子节点便可以读取到需要当数值,不需要继续做“回表查询”了。


面试官


哦,那是不是如果覆盖索引没有生效就一定会触发回表查询操作呢?


小林


额。。。不太清楚 (一下子蒙了)


(后来查询了下资料,回表是因为查询当数据在主键索引里面才有数据。但是如果数据库引擎使用了myisam则不需要回表,直接根据对应的叶子地址去查询数据即可)


面试官


咳咳,没事我们继续。你有了解过索引的重建过程吗?


小林


额。。不太清楚 (渐渐又开始蒙了)


面试官


例如我们在工作中发现某张表的数据量和其存储的实际数据数目不匹配,这种情况通常是因为删除了过多的数据,导致表里面的数据空洞过多占用导致的,一般会通过命令去压缩表的体积进行优化。


ps :面试结束后,小林查询了一些资料,发现有一条sql:alter table t engine=InnoDB 可以用于重建整张表的索引数据,将表里以前的一些索引空洞给一并压缩进行重新整合。

假设一棵b+树(innodb)的起初结构如下图所示:


image.png


当我们delete from table_a where id=400 的时候,其实id为400的那个位置并不会被删除,而是会有个标签记录,当前位置可以复用。也就是说会变成下图这种模式:


image.png


此时400的那个位置会空余出来,但是如果我们新插入的数据,其id并不是400,而是600的时候,就不会复用这个位置了。


image.png


因此有的时候,可能我们表里的数据即使删除了一半,体积也反而没有变化。如果不懂得如何去压缩这颗树的话,可能你的磁盘空间就会约占越大,增加企业在服务器存储方面的开销费用。


当然优化技巧也是有的,可以通过执行 alter table t engine=InnoDB 这样的一条sql来重新构建整棵树从而实现索引的压缩效果。


面试官


好吧,那索引的问题先问这么多。你应该对innodb也比较了解吧。


小林


嗯嗯,是的。(应该要问innodb和myisam的区别了)


面试官


你了解innodb的背后架构吗?能说下它内部的线程包含了哪些吗?


小林



额?(这出门前背过,但是不太记得了)


面试官


(引导一下求职者)


innodb背后的线程分为了好几个类型,不同类型的线程负责相关的职责工作。

小林


我记得有好几个线程,但是他们的名字记不太清楚了。


ps:后来小林翻查了以前自己整理的笔记,回顾了关于innodb的线程知识点。大致整理了一下,如下图:


image.png


面试官


好吧,那你对事务了解吗。能讲下什么是大事务吗?


小林


就是 很大...的...事务??


ps:其实大事务是指运行时间比较长,操作的数据比较多的事务。


这类型的事务容易给数据库带来负担:


锁定了过多的数据,造成不必要的拥塞堵塞。


在事务执行的过程中需要堵塞容易引起主从数据同步不一致的情况发生。


当我们执行事务的操作过大,例如说delete某张表里买呢一亿条数据的时候,如果加入了事务保护,那么假设期间出现了异常,整段事务的回滚将会非常消耗机器的性能和耗时。通常可以让研发将大事务分解为多个小事务进行优化处理。


在mysql的二进制日志里面,当多个会话同时访问server执行事务性sql语句的请求时候,binlog会给每个会话单独开启一个线程进行事务性sql的缓存处理。直至当相应的sql执行完毕之后再写入到binlog日志中。


这样做的好处在于能够将不同的事物进行分隔出来处理。并且保证每个写入binlog的事务sql都是完整且正常执行的一个单位。而且如果事务在执行的过程中发生了回滚的话,可以直接在内存中间数据删除,不需要再在日志里面进行记录删除操作。


面试官


额,好吧。那我们mysql相关的知识点先问到这里吧。你可以回去等通知了。


小林


我还有机会吗?......


小林很清楚,自己在以前的工作中过多是偏于crud写业务方面的内容,对于常用技术的底层原理平时也没有做过多的整理和总结,也难怪这次面试会失败。


滴滴滴.... 突然一个陌生的电话响了起来,小林拿起了电话....下一家当面试要开始准备了。

END


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
缓存 关系型数据库 MySQL
【面试题精讲】MySQL-事务隔离-ACID
【面试题精讲】MySQL-事务隔离-ACID
|
4月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
4月前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
20天前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
Java 程序员 Spring
Spring事务的1道面试题
每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。
Spring事务的1道面试题
|
4月前
|
前端开发 Java 数据库连接
一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)
这篇文章总结了Java面试中的十个问题,包括Spring事务传播机制、Spring事务失效条件、Bean自动装配方式、Spring、Spring MVC和Spring Boot的区别、Spring MVC的工作流程和主要组件、Spring Boot的自动配置原理和Starter概念、嵌入式服务器的使用原因,以及MyBatis的优缺点。
|
4月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
4月前
|
数据库 微服务 中间件
XA事务 面试准备
【8月更文挑战第7天】
59 7
|
4月前
|
算法 Go 数据库
[go 面试] 并发与数据一致性:事务的保障
[go 面试] 并发与数据一致性:事务的保障
下一篇
DataWorks