MySQL 开发高频面试题精选
梳理开发者的 MySQL 面试知识图谱
门牙没了 · 一线大厂数据架构师

共计25节 · 已更新25节

1048人已订阅

课程亮点

  • 面向开发人员,紧扣程序开发方向
  • 聚焦面试场景,精选高频面试题目
  • 经典深度解答,原理/解决方案兼顾
  • 难点突破:事务和锁/监控指标/存储引擎…

课程简介

这些年,随着IT和互联网产业的逐渐成熟,对于开发者的技术要求越来越高,求职竞争也不断加剧。
当遇到晋升机会或者竞争高级岗位的offer时,如何在众多的竞争者中脱颖而出?深入学习数据库知识是一个非常好的方向。
MySQL作为一个发展完善的数据库系统, 是大多数开发工作中无法绕开的一个关键环节。不过,很多人对MySQL,也仅仅是学了CRUD,并没有深入了解,这可能导致:
①面试被问及高级数据库知识时,磕磕巴巴难以作答;
②日常工作中,遇到数据库层面的状况找不出原因所在。

在这个课程里,我结合自己多年来和程序员打交道的经历,梳理出了 一系列面向开发者的MySQL工作中常见问题和高频面试题目 ,并结合原理与操作层面进行了深度解析。这样,可以帮助你在获得面试技巧的同时,还可以学到实际工作中真正有用的MySQL知识技能,面对开发更游刃有余。
希望本课程能给你带来技巧与技能的双收获,助你斩获心仪offer,赢得高薪工作。

讲师简介

门牙没了,中国科学院大学(原中科院研究生院)硕士研究生,现任新加坡某大型互联网公司DBA资深专家,曾就职于新浪彩票带DBA团队。10年的关系型数据库开发与管理经验,擅长互联网行业MySQL数据库的性能调优与架构设计。曾创业从事MySQL相关技术培训,拥有丰富的讲师经验。目前仍活跃于国内数据库圈子,多次在数据库峰会发表文章及演讲。

专栏模块

本专栏以程序员的实际工作和面试场景作为出发点,重点解读工作和面试中和程序开发相关的MySQL技术:

  1. SQL与索引部分。重点讲解面试与实际开发中面临的一些高频问题,涵盖MySQL中的这些知识模块:数据类型、SQL语法、SQL优化、索引设计等。
  2. 事务和锁部分。本章节由一个转账的场景出发,剖析事务的本质,事务隔离级别的作用,以及InnoDB中的行锁与间隙锁的设计,和与行锁相关的死锁的解决方案。
  3. MySQL进阶部分。深入浅出地讲述程序员在面试与开发中遇到的MySQL核心知识,涵盖MySQL监控指标、MySQL存储引擎、分区表、故障诊断、元数据信息库等技能点。
查看全部
专栏目录
目录
适合人群
  • 一线开发工程师
  • 初级 MySQL DBA
  • 对 MySQL 技术有浓厚兴趣的同学
购买须知
  1. 本专栏为图文形式内容服务,共计 25 小节,上线时间为 2020 年 9 月 22 日,预计 2020 年 11 月 14 日更新完成;
  2. 本专栏更新时间为周二、周四更新 1 篇(法定节假日顺延),形式为图文;
  3. 订阅成功后,用户即可通过慕课网 PC 端、App 端、WAP 端享有永久阅读的权限;
  4. 慕课专栏为虚拟内容服务,订阅成功后概不退款;
  5. 在专栏阅读过程中,如有任何问题,请邮件联系 kf@imooc.com;
  6. 慕课专栏版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任。
0 / 2
登录后可任选 2 个小节免费阅读
海天s

“假如你的业务需要使用完全连续的自增 ID,建议在程序中维护 ID 的分配与自增”,其实这种场景就不算业务和主键id完全无关了。作者见过这种业务场景吗?能举个例子吗?

讲师回复:例如用户ID、订单ID等,是否要求完全连续其实还是看业务。我在金融相关的业务中遇到过类似的要求。
2020-11-21
2
Seed2009

难得的能让人一口气看完的专栏,内容非常干

2021-01-05
1
Seed2009

干货满满,非常有收获,只是限于篇幅,有些只是点到,没有详细解释。

2021-01-04
0
海天s

你的文章写的很用心,有的篇章我重复看了几遍。这一篇也很有收获和共鸣,谢谢。江湖再见,希望你以后继续写一些专栏、博客之类的。你有公众号或者博客吗?

讲师回复:非常感谢你的认可。现在由于比较忙,公众号和博客都不怎么更新了,你也可以私信联系我。
2020-12-28
1
海天s

这个问题很多博客里都有写,但都是复制粘贴的回答,粗糙又千篇一律。感谢作者的细致分析,讲的很清楚。

讲师回复:非常开心这个专栏能帮助到你
2020-11-21
3
慕婉清3447938

讲得非常棒,值得~

讲师回复:非常高兴能帮助到你
2020-11-12
1
慕婉清3447938

谢谢老师,讲得真的好,我受益匪浅

2020-11-08
3
海天s

牛啊,读了好多书。不过这些书都是DBA读的,程序员实在没精力读,可能也没必要吧。

讲师回复:所以才出一个专栏给程序员看哈
2020-11-23
0
Kyrie啊

醍醐灌顶,面试官特别喜欢问int(20)跟bigint的区别,这里总算知道20只是显示宽度了

讲师回复:很高兴能帮助到你。
2020-09-30
3
海天s

“在专栏的拟题阶段删除了和 DBA 相关但是与程序员无关的全部内容,不做无效的学习”很好的一句话,现在大家为了面试,做了多少无效的学习,哎

2020-11-23
7
翻了身的咸鱼

66666

2020-10-13
4
hwl_01

create table varchar_test3(id int auto_increment, col_2 varchar(21842), primary key(id))charset=utf8 engine=innodb; 老师,一行所有的列长度加起来不能超过21844,col_2已经占了21842,也就是说只留下2 * 3 = 6个字节的空间可用了,int占4个字节,还有2个字节?我的理解正确吗,期待解答,谢谢!

讲师回复:抱歉是我记错了,你的理解是正确的。 MySQL中的最大行长度是65535,包含所有类型的列。其中BLOB和TEXT由于会发生行溢出,会占用大概9-12个字节。 这里是官方文档供你参考:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html#row-size-limits
2020-09-22
5
慕慕4044181

请问大佬“如果 GROUP BY 不需要排序,加入 ORDER BY NULL 子句”.这一句是什么原因呢?

讲师回复:在MySQL 8.0版本之前,GROUP BY子句默认会使用隐式排序。显式指定ORDER BY NULL可以让MySQL在执行GROUP BY子句时不再强制排序,可以提升一部分性能。这算是个奇淫巧技,不用也可以。在MySQL 8.0版本之后,官方不再支持GROUP BY隐式排序,因此不再需要使用ORDER BY NULL这个语法。可以参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html;https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/order-by-optimization.html
2020-11-04
3
hwl_01

老师 如果按照上面的理解 那下面的情况 create table varchar_test_v1 ( col_1 varchar(21842), col_2 smallint, col_3 smallint ) charset = utf8 engine = innodb; create table varchar_test_v2 ( id int auto_increment, col_1 varchar(21842), col_2 smallint, primary key (id) ) charset = utf8 engine = innodb; 应该只有v1能创建成功,现实情况是v2也能成功,我就懵逼了。

讲师回复:在一个表中,varchar的长度限制和其他数据类型没有关系,因此你添加整型字段是可以成功的。
2020-09-22
0
hwl_01

哈哈 问题来了,为什么UTF8报最大长度21845却创建不成功,有开销21844可以理解, 而utf8mb4最大长度16383就可以,难道utf8mb4就没有开销了吗? mysql> create table varchar_test_v3(col_1 varchar(65535))charset=UTF8MB4 engine=innodb; ERROR 1074 (42000): Column length too big for column 'col_1' (max = 16383); use BLOB or TEXT instead mysql> create table varchar_test_v3(col_1 varchar(16383))charset=UTF8MB4 engine=innodb; Query OK, 0 rows affected (0.08 sec)

讲师回复:都是有额外开销的。这个建议不要只看官方给的error code,还是要以自己的计算为准:65535-16383*4=3,满足存储需求,所以可以创建成功。
2020-09-22
0
— 造烛求明,读书求理 —
¥48.00
立即购买