后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

模拟面试|数据库面试思路一图懂

查询缓存的使用和优缺点
主从复制和主节点宕机的处理
调整数据库参数和优化 buffer pool
数据库和 InnoDB 引擎的优化
扩容和缩容的步骤和方法
容量的选择和 2 的幂的优势
数据增长的预测和流量录制和重放的验证
容量的估计和考虑因素
广播的缺点和使用中间件解决的方法
分库分表键的选择和容量的优化
利用中间表支持无分库分表键查询的设计
分库分表的选择和无分库分表键查询的问题
跨库事务的使用场景和限制
AT 事务和延迟事务
XA 事务和 TCC
两阶段提交协议和三阶段提交协议
分库分表后的事务处理
其他中间件解决分页查询的选择
中间表的设计和数据一致性的保证
代理形态的中间件和中间表的优缺点
二次查询的优缺点
二次查询和计算全局偏移量
提高分页查询速度的方法
全局查询的优缺点和命中多张表的数据量
分页查询的解决方案和性能问题
为什么一般使用自增主键
主键生成性能的优化和递增 ID 的问题
解决雪花算法序列号耗尽和数据堆积问题
雪花算法的实现和全局唯一性
UUID/数据库自增/雪花算法的优缺点
分库分表的主键生成方式
mysqldump/XtraBackup 的使用和缺点
数据迁移的绝对正确性和修复方法
数据校验和增量数据校验
双写阶段以目标表为准的原因
使用本地事务和分布式事务保证双写的一致性
双写和双写失败的处理
单库拆分和大表结构修改的数据迁移
分布式环境下的数据写入安全性
page cache 和写入磁盘的方式
事务提交后数据的安全性
redo log 和 binlog 的刷盘时机
ACID 和隔离性的关系
事务的执行过程
undo log 和 redo log 的作用
分布式环境下的数据写入安全性
page cache 和写入磁盘的方式
事务提交后数据的安全性
redo log 和 binlog 的刷盘时机
ACID 和隔离性的关系
binlog 的模式和用途
undo log 和 redo log
隔离级别的选择和更改
隔离级别和脏读、不可重复读、幻读的关系
MVCC 的定义和需要
锁的优化
死锁问题的排查和解决
唯一索引和普通索引对锁的影响
加临键锁、加间隙锁和加记录锁的情况
MySQL 在 RR 级别下解决幻读
RC 级别下的间隙锁和临键锁
记录锁、间隙锁和临键锁
两阶段加锁
意向锁和共享锁/排它锁
乐观锁和在 MySQL 中实现乐观锁
行锁、表锁和避免表锁
USE INDEX/FORCE INDEX/IGNORE INDEX 的效果
添加新的索引/修改表结构
WHERE 和 HAVING 的区别
优化 LIMIT OFFSET 查询
优化 ORDER BY
优化 COUNT 查询
SQL 优化和索引优化
EXPLAIN 命令
唯一索引是否允许多个 NULL 值
NULL 对索引的影响
MySQL 使用 B+ 树作为索引的数据结构的原因
选择合适的索引列和确定列的顺序
索引的数量和代价
范围查询、Like 查询对索引的影响
索引最左匹配原则
树的高度和查询性能
回表
哈希索引
聚簇索引/非聚簇索引
覆盖索引
数据库综合应用
分库分表容量预估
分库分表无分库分表键查询
分库分表事务
分库分表分页查询
分库分表主键生成
数据迁移
数据库事务
MVCC 协议
数据库锁
SQL 优化
数据库索引
数据库面试思路一图懂

该思维导图由 AI 生成,仅供参考

你好,我是大明,恭喜你学完第二章的内容,又到了要验收成果的时刻了。数据库这一章的内容很多,而且知识点都很重要,所以为了帮助你更好地掌握这部分内容,我们在这里设置了面试题。
你在回答的时候,最好是能够写成一个个文档,至少也要口头上说一遍。千万不要仅仅在脑海里面回忆一遍。因为在真正面试的时候,脑海中的记忆到嘴里说出的话,还需要一个转换。

10|数据库索引:为什么 MySQL 用 B+ 树而不用 B 树?

什么是覆盖索引?
什么是聚簇索引 / 非聚簇索引?
什么是哈希索引?MySQL InnoDB 引擎怎么创建一个哈希索引?
什么回表?如何避免回表?
树的高度和查询性能是什么关系?
什么是索引最左匹配原则?
范围查询、Like 之类的查询怎么影响数据库使用索引?
索引是不是越多越好?
使用索引有什么代价?
如何选择合适的索引列?组合索引里面怎么确定列的顺序?状态类的列是否适合作为索引的列?
为什么 MySQL 使用 B+ 树作为索引的数据结构?为什么不用 B 树?为什么不用红黑树?为什么不用二叉平衡树?为什么不用跳表?
NULL 对索引有什么影响?
唯一索引是否允许多个 NULL 值?

11|SQL 优化:如何发现 SQL 中的问题?

请你解释一下 EXPALIN 命令。
你有优化过 SQL 吗?具体是怎么优化的?
你有没有优化过索引?怎么优化的?
怎么优化 COUNT 查询?
怎么优化 ORDER BY?
怎么优化 LIMIT OFFSET 查询?
为什么要尽量把条件写到 WHERE 而不是写到 HAVING 里面?
怎么给一张表添加新的索引 / 修改表结构?如果我的数据量很大呢?
USE INDEX/FORCE INDEX/IGNORE INDEX 有什么效果?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇文章涵盖了数据库面试中常见的问题和解决方案,以及相关技术知识点。内容包括数据库索引、SQL优化、锁、隔离级别、事务执行、数据迁移、主键生成、分页查询、分库分表、事务问题等多个方面。读者可以通过本文了解到数据库面试的思路和技术要点。文章内容详实丰富,适合数据库从业者和准备面试的人士阅读,能够帮助他们更好地准备面试和加深对数据库知识的理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • peter
    请教老师两个问题: Q1:实际案例:误删生产数据,怎么回复? 我加了一个群, 群里一个人周五(8月4号)说:一个用户的28条数据都让我改了,mysql事务已经提交的数据怎么能把找个事务对数据的修改恢复到没提交之前的? Q2:阿里这种级别的公司,其入口是怎么做的? 用户访问一个网站,肯定是先到这个网站的一个入口,再由此入口转发给后端的服务器。网站最外面的入口,是怎么实现的?现有的外部网关,比如F5、Nginx、LVS等,处理速度都是有限的,对于阿里这种规模的公司,假如只有一个入口,肯定是处理不过来的。那怎么解决这个问题?

    作者回复: Q1:找不回来了,你只能说找到历史的备份数据来恢复。 Q2:这种是通过边缘节点接入的,已经超过我们这个专栏的范畴了,我对此研究不多,因为没做过相关的事情。

    2023-08-04归属地:北京
    1
  • 学无涯
    接上面同学的问题,有几个点想要请教老师: 1. 误操作数据后,可能一段时间后才发觉,这时可能有大量binlog,如何快速找到自己误操作的那几条binlog,只能手动一条条binlog的找吗? 2. 找到binlog时,可能已经有新的操作修改了这条数据,这种情况下该怎么办? 3. 老师能否出一节关于误删数据如何补救的标准流程操作

    作者回复: 坦白说,我没遇过这种误删除,然后要借助历史 binlog 来恢复的场景。一方面来说,之前待的公司都是软删除,并没有实际的硬删除。 不过之前遇到过误更新的问题,但是当时我们是通过别的业务数据来推断出来正确的值,修复了数据。你也可以考虑借助类似的手段。 2 这种情况,要是更新的操作已经把数据更新对了,就不用管了。

    2023-08-06归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部