面试官:

你好,不要太紧张,看简历上写着你对MySql比较熟悉,那我们先来聊聊MySql吧。

三毛:

嗯嗯,好的,我们项目中基本都用到了MySql,对这块应该还是比较熟悉的。

面试官:

好,那我们聊一聊MySql的数据库引擎,你知道MySql的数据库存储引擎吗?

三毛:

我了解MySql是有两种数据库引擎,一种是MyISAM,一种是InnerDB,
MyISAM不支持事务,只支持表级锁,对于有事务需求或者是增删改比较频繁的表不适合用这种引擎。
InnerDB增加了redo log日志,支持事务,并且支持行锁,开发中大多数都是用的这种引擎。

面试官:

嗯,好的,还有吗?

三毛:

额,我能想到的基本就是这些。

面试官:

好的,那我再问下,你了解MySql的故障恢复吗?

三毛:

哦,这个我了解,InnerDB是通过binlog和redo log来支持故障恢复的,它就是记录日志的时候,先写redo log,再写binlog,
成功之后再写redo log,标记本次操作成功。对了,MyISAM是不支持故障恢复的,这也是MyISAM和InnerDB的一个区别。

面试官:

好,那你能讲讲MySql的InnerDB存储引擎崩溃恢复具体流程吗?

三毛:

这个,我只知道只要 redo log 和 binlog 保证持久化到磁盘,就能确保 MySQL 异常重启后,数据可以恢复。
具体的流程我不是很了解。

redo log和binlog机制

面试官:

好的,没关系,大体是这样,但是其中还有很多细节,你可以去了解一些,我们接着聊下一个,
看你在日常开发中还做过sql调优这方面的工作,讲一下你的调优方法吧。

三毛:

好的,我们在日常开发中,一般是用的阿里的Druid数据库连接池,它提供了一个sql监控页面,我们可以通过页面去查找一些
慢请求以及一些高频请求,针对慢请求,我们要去分析这个sql的执行计划,是否用到了索引,没走索引需要根据具体的sql分析
是没加索引还是避开了索引,没加索引我们要考虑加上索引,避开了索引我们要想办法优化sql,避免一些常规的不走索引的,
例如:全模糊查询,or查询或者函数操作等等。而针对高频请求,我们会对请求进行分析,确定其是否需要每次都走DB,
有些高频请求可以加上缓存,提高响应效率,减少DB压力。

面试官:

嗯,思路是对的,那我们再来聊一下MySql的索引,你了解MySql的索引数据结构吗?

三毛:

MySql的索引结构有HASH,B+树,我们建索引一般使用的是B+树,因为HASH不支持范围查询以及排序。而B+树因为
它的数据结构特点,可以支持范围查找,排序等。

面试官:

好的,那你能讲讲为什么MySql会选择B+树作为索引结构呢,支持顺序的结构有很多啊,像数组,平衡二叉树等?

三毛:

确实支持顺序的结构有很多,数组它的缺点是插入的效率太低,需要移动元素,若是大表,里面数据量很多,如果你是非自增
主键的话,那将一条记录插入到数组中间某个地方,那这个效率就差了。而二叉树,它然也支持顺序遍历,但是数据量大了,
它的树高就比较大了,100万数据的话大概树高20,要访问20次磁盘,这个效率也是比较低的,而b+树却正好符合MySql的需求。

面试官:

那单是树高的话,还有B树啊,为什么非要选择B+树呢?

三毛:

这个,我就不是很了解了。

面试官:

你可以从它们的数据结构特点去分析一下。

三毛:

B树的话,它的每个子节点都是存储具体的数据的,而B+树它的数据都存储在叶子节点上,叶子节点是一个链表,
当你要查询一个区间的话,查询B+树,有点类似于跳表,可以快速定位到起点,然后从叶子节点往后查,
直到不符合区间范围。相比于查询B树的话,效率应该会低点。

面试官:

面带微笑:不错,大概是这么回事,不过B树的结构你没讲到,是对B树没去了解过吧。

三毛:

尴尬的笑了一下:是没太了解,其实B+树也是之前看MySql索引数据结构的时候,偶尔看到提了一下B+树结构才了解的。

B树和B+树的区别

面试官:

没关系,你可以去了解一下,我们接着聊,说说MySql的覆盖索引,前缀索引,索引下推吧。

三毛:

说到覆盖索引的话,我先说一些MySql的索引类型,有主键索引和非主键索引,主键索引对应的值记录的完整的一条数据记录,
而非主键索引记录的值是主键索引的值,当你根据非主键索引查询的时候,会先查询对应的主键的值,然后到主键索引里去查找
这条记录,这个过程称为回表,但是,当非主键索引中存在你需要查找的值的时候,比如说,你只需要查询一个主键的值,那么
这时候就会直接返回主键的值了,不需要回表,这就是覆盖索引,也就是索引里包含了你要查询的值。
前缀索引的话,B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录。举个例子:假如我们一个表有id,name,age
字段,id是主键索引,name和age是联合索引,现在我们要查询name=‘张三’或者是name like ‘张%’的时候,可以快速定位到
name是张三或者张开头的记录,这就是前缀索引。
索引下推的话,还是上面那个例子,假如我要查找name like ‘张%’,age = 20的人的话,能够快速定位到name为张开头的
记录,MySql5.6以前,定位到name为张开头的记录后,会一个一个的回表去判断age是否符合我们的查询条件,MySql5.6以后,
找到name为张的记录后,如果索引中有查询的字段,MySql会把索引下推到age,判断age是否符合我们的查询条件,索引下推
也是避免了回表。

面试官:

嗯,这块倒是了解的不错,我在问下,你知道MySql的mvcc吗?

三毛:

mvcc就是innerDB引擎的一个支持事务的重要特性,就是多版本并发控制,我大概理解就是在不同的隔离级别下,每一个事务
开始后都会生成一个ReadView,相当于一个快照,各个事务之间修改的数据互不影响,MySql就是通过MCVCC来控制事务之间的
隔离性的。

面试官:

能说的具体点吗?比如说,如何保证事务间的隔离?

三毛:

这个,具体的流程我有点忘记了。

补充MVCC相关知识

面试官:

嗯,好的,你有了解过MySql的主备同步吗?

三毛:

主备同步主要是通过binlog来同步,备库执行了 binlog 就可以跟主库保持一致了.

面试管:

还有吗?

三毛:

我了解的大概就是这样了。

面试管:

嗯,好的,我们今天的面试先聊到这吧,你先回去等通知。

三毛:

。。。

MySql主备补充

三毛面经-MySql面试经历相关推荐

  1. 回顾自己三次失败的面试经历

    前言 时间的齿轮已经来到了2017年的11月份,距离2018年仅仅还剩下不到两个月的时间.站在这个时间点上,我对自己之前三次失败的面试经历做了一次深度回顾. 可能很多小伙伴会问,为什么要去回顾失败的面 ...

  2. 大三程序员实习面试经历(Java)

    暑假该去实习了,网上搜罗了一些前辈们比较有含金量的面试经历,五个部分,纯属混剪: Part1 第一次去了广州黄村创业园,面试了创业公司,环境非常好,但是感觉不靠谱才3个人,一个技术,一个HR和总经理, ...

  3. 三天吃透MySQL面试八股文

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  4. 华为人工智能岗位面试经历分享

    https://blog.csdn.net/csdnsevenn/article/details/81916843 博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP ...

  5. 分享 海康威视,浙江大华,科大讯飞面试经历

    经过一段时间的面试,在和面试官.HR的对话中让自己明白了自己在今后的工作中以及人生规划多注意的问题,甚至自己以前忽略的问题,虽然不是丰富的阅历,也给了自己一次重新认识自己的机会. 把最近面试通过的三个 ...

  6. 百度面试 php后端,2019.7最惨的三次面试经历-----百度PHP实习生面经

    一.百度--文娱架构部一面 半小时 前台小姐姐很漂亮 都是根据简历上写的来问的, 说几个知道的排序算法, 讲讲堆排序,堆是什么结构, 我说堆类似于完全二叉树,讲讲完全二叉树和满二叉树的区别, 手撕快速 ...

  7. 记录一下一个大专学历大三学生出来找u3d实习工作,这几天的面试经历

    记录一下一个大专学历大三学生出来找u3d实习工作,这几天的面试经历 第一家 第二家 第三家 第四家 第五家 目前是大三出来找实习工作的,分享一下自己最近一星期找工作的经历 我是一名专科生,大学学的是软 ...

  8. 美团面试都面不过?我又不是去送外卖的!美团Java面试经历总结【一面、二面、三面】

    美团面试都面不过?我又不是去送外卖的!美团Java面试经历总结[一面.二面.三面]这篇文章主要介绍了美团Java面试经历,总结分析了美团java三轮面试中所遇到的各种问题,对于参与java面试有一定参 ...

  9. 连续三次世界500强面试经历

    一两周,仅有的三次面试!全是世界500强,软件开发及测试实习,都失败了! A公司:xxx  R&D , 软件开发,HR打电话通知面试,了解基本情况,会VB吗?不会,会C/C++.有项目经历,编 ...

最新文章

  1. itext转html为pdf 锚点,ITEXT输出pdf..docx
  2. 调试一个c语言程序要经过,c语言程序调试
  3. 【线上分享】WebRTC传输与服务质量
  4. 感谢有你 WebRTCon 2018优秀出品人、讲师与志愿者
  5. 适合计算机64位的cad,【1人回答】求一个能适用于CAD2008的纬地,我的电脑是Win7 64位的-3D溜溜网...
  6. C和汇编---while反汇编
  7. 那些年,乘风破浪的科学家们
  8. 【数据结构】二叉树的遍历及应用
  9. 华为matebook和linux版本区别,华为MateBook14Linux版本开箱评测 | 从来没有让我们失望!...
  10. jQuery琐碎笔记
  11. php 调试 500,利用WordPress开发者调试模式解决PHP500内部服务器错误 | 骤雨打新荷...
  12. LNMP环境下搭建SVN服务器
  13. 聊聊 print 的前世今生
  14. 上海学计算机编程,上海自学计算机编程入门
  15. html求视频的原尺寸,PR怎样导出原尺寸视频?
  16. oracle11g远程命令执行漏洞,「漏洞通告」WebLogic多个远程代码执行漏洞
  17. 市场模式缭乱,合适的模式脱颖而出?众筹卖货模式在线分享分析
  18. android 电视移动硬盘,智能电视系统可以更换吗?怎么更换呢?
  19. Python|计算圆柱体的表面积
  20. Delphi 位运算符 shl shr or xor and not

热门文章

  1. Django项目实战——8—(判断用户是否登录并返回JSON、Django发送邮件的配置、生成邮箱验证链接、验证邮箱后端逻辑)
  2. # 知识点学习——模拟退火算法
  3. Tiva C(TM4C)的bootloader和启动过程与stm32对比
  4. Nginx高级课程扩容与高效
  5. 长期坐着不动会得什么病?_陕南赤子_新浪博客
  6. System.currentTimeMillis()+time*1000
  7. shell和bash
  8. 52. 常用的数学工具类9-大乐透号码生成器
  9. 【Leetcode】1307. Verbal Arithmetic Puzzle
  10. C51单片机 波特率选择 和 串口的工作方式