MySQLMySQL数据库后端开发面试真题

MySQL面试题与八股文汇总:230+ 道索引、事务、MVCC、锁、日志、慢查询高频真题分类整理(2026 面经)

面灵AI整理的 MySQL 八股合集,覆盖存储引擎、B+ 树与索引设计、联合索引与索引失效、事务与隔离级别、MVCC、锁与死锁、日志体系、主从复制、慢查询优化、分库分表与 SQL 手撕题,标注近期实际出题的大厂。

收录题目
231 道
统计周期
截至 2026 年 10 月
近期出题公司字节跳动在招腾讯在招阿里巴巴美团在招百度快手京东在招滴滴在招小米拼多多
面灵AI
24 分钟阅读

MySQL 是后端岗面试里最稳定的一块:不管面的是 Java、Go、Python 还是 C++,只要岗位带"后端"两个字,数据库几乎一定会问。而且问法很固定,从索引的数据结构出发,一路追到 B+ 树为什么矮胖、联合索引怎么走、事务靠什么保证隔离、MVCC 的版本链怎么判断可见性、锁在什么条件下会变成间隙锁。字节、腾讯、美团、百度、快手换了部门,开头的问题几乎没变,变的是追问到第几层。

这份合集从公开面经里把 MySQL 方向反复出现的八股题抽出来重新归类,一共 231 道题,分十一个主题。它只收 MySQL 与通用 SQL 本身,以及和它紧挨着的一致性、分库分表话题;Redis、操作系统、网络这些公共基础不在这里展开,后端岗的完整高频清单可以对照后端开发高频面试题榜单,Python 方向可以看 Python 面试题合集。

怎么用这份题单:

  • 题目后面括号里是近期实际问过这道题的大厂,不代表完整名单,也不代表没标注的公司不问
  • MySQL 八股的追问是一条链:索引 → B+ 树 → 联合索引与最左匹配 → 回表与覆盖索引 → 索引失效。只背其中一个结论,面试官往下追一层就会卡住
  • 索引、事务与隔离级别、MVCC、锁与死锁、慢查询这五块是几乎所有后端岗的公共必考区,时间不够就先把它们吃透

主题导航:数据库基础与存储引擎 · 索引原理与 B+ 树 · 联合索引、覆盖索引与索引失效 · 事务与 ACID · 隔离级别、MVCC 与幻读 · 锁机制与死锁 · 日志体系与崩溃恢复 · 主从复制与高可用 · SQL 执行流程、慢查询与优化 · 分库分表与数据一致性 · SQL 编写与手撕题

数据库基础与存储引擎

  • MySQL 的逻辑架构是怎样的?Server 层和存储引擎层各自负责什么?(字节跳动 / 腾讯 / 小米)
  • MySQL 有哪些常见的存储引擎?(美团 / 腾讯 / 字节跳动)
  • InnoDB 和 MyISAM 有什么区别?(腾讯 / 字节跳动 / 百度)
  • InnoDB 相比 MyISAM 的优势是什么,为什么现在默认用 InnoDB?(美团 / 百度 / 腾讯)
  • InnoDB 引擎有哪些关键特性?(腾讯 / 阿里巴巴 / 滴滴)
  • InnoDB 的内存结构和磁盘结构大致是怎样的?(美团 / 滴滴 / 字节跳动)
  • Buffer Pool 是什么,它是怎么管理数据页的?
  • MySQL 的数据页是什么,一页默认多大?
  • MySQL 的底层存储结构是什么?(腾讯 / 快手 / 字节跳动)
  • MySQL 和 Redis 有什么区别,分别适用于什么场景?(百度 / 腾讯 / 京东)
  • MySQL 有了索引为什么还需要 Redis?(美团 / 字节跳动 / 快手)
  • PostgreSQL 和 MySQL 有哪些区别?(京东 / 腾讯 / 字节跳动)
  • MySQL 常见的数据类型有哪些,int 家族各占几个字节?(华为 / 美团 / 腾讯)
  • varchar 和 char 有什么区别,varchar(100) 和 varchar(255) 有影响吗?
  • datetime 和 timestamp 有什么区别?
  • 金额字段应该用什么类型存,为什么不用 float?
  • MySQL 主键为什么建议自增,用 UUID 当主键有什么问题?(字节跳动 / 小红书 / 腾讯)
  • 数据库的三大范式是什么,实际设计时会不会故意违反?
  • drop、delete、truncate 有什么区别?
  • MySQL 单表最大能存多少数据,一般为什么建议控制在几千万行以内?(美团 / 阿里巴巴 / 百度)
  • MySQL 的字符集 utf8 和 utf8mb4 有什么区别?
  • MySQL 里的 count(*)、count(1)、count(列) 有什么区别,谁更快?
面灵AI 面试助手

面试官问「MySQL 的索引为什么用 B+ 树,而不是 B 树、哈希表或红黑树?」,看浮窗当场给你什么

面试官一开口,浮窗就出要点和能直接念的回答,被追问也接得住。共享屏幕时对面看不见。

腾讯会议文件编辑显示周一 14:32
腾讯会议 · 后端开发工程师 · 技术一面REC 00:10
面
面试官
我
面试官:
聆听中18:05
Ctrl+↑回看
Ctrl+↓看新
拖动分割线看面试官那一侧:共享屏幕、窗口录制、截图里都不会出现答案层
浮窗里这道题的回答

核心要点 磁盘 IO 次数决定查询速度、B+ 树矮胖层数少、非叶子节点只存键所以扇出大、叶子节点链表串联支持范围查询、哈希不支持范围和排序、红黑树层数太高

参考回答 核心是让一次查询尽量少读磁盘页。B+ 树的非叶子节点只存键、不存数据,一个页能放很多指针,所以树又矮又胖,几百万行数据通常三四层就够,查一次只要三四次 IO。所有数据都在叶子节点,且叶子节点之间用链表串起来,范围查询和排序顺着链表走就行。对比起来:B 树每个节点都带数据,扇出小、层数更高,范围扫描还要来回回溯;哈希索引等值查询快,但不支持范围、排序和最左匹配;红黑树是二叉的,同样数据量层数会高很多,磁盘 IO 次数太多。

索引原理与 B+ 树

  • 什么是索引,它解决什么问题?(字节跳动 / 美团)
  • 为什么索引能加快查询速度?(小米 / 快手 / 字节跳动)
  • 索引的优点和缺点分别是什么?(字节跳动 / 美团 / 腾讯)
  • 索引是不是建得越多越好?(百度 / 腾讯 / 滴滴)
  • MySQL 索引用的是什么数据结构?(美团 / 字节跳动 / 快手)
  • MySQL 的索引结构是什么?为什么用 B+ 树而不是 B 树或哈希表?(字节跳动 / 美团 / 京东)
  • B+ 树的结构和特点是什么?(腾讯 / 美团 / 滴滴)
  • 为什么 InnoDB 选择 B+ 树?(美团 / 百度 / 字节跳动)
  • B+ 树和 B 树有什么区别?(字节跳动 / 美团 / 快手)
  • 为什么数据库不用红黑树而用 B+ 树?(美团 / 腾讯 / 字节跳动)
  • 索引换成二叉树行不行?换成 B 树、跳表又会带来什么问题?(字节跳动 / 百度 / 快手)
  • B+ 树索引怎么支持范围查询?(美团 / 腾讯 / 百度)
  • 一棵三层的 B+ 树大概能存多少行数据?
  • 哈希索引和 B+ 树索引有什么区别,各适合什么场景?(字节跳动 / 美团 / 百度)
  • Redis 的 zset 为什么用跳表而不是 B+ 树?(快手 / 字节跳动 / 美团)
  • MySQL 有哪些索引类型?(美团 / 字节跳动 / 腾讯)
  • MySQL 的索引是怎么分类的?(字节跳动 / 美团 / 滴滴)
  • 主键索引和非主键索引有什么区别?(美团 / 腾讯 / 快手)
  • 聚簇索引和非聚簇索引有什么区别?(字节跳动 / 美团 / 腾讯)
  • 什么是聚簇索引,InnoDB 没有主键时怎么办?(字节跳动 / 美团 / 百度)
  • 二级索引(辅助索引)的叶子节点存的是什么?(美团 / 快手 / 滴滴)
  • 什么是回表,怎么减少回表?(百度 / 美团 / 小红书)
  • 主键和唯一索引有什么区别?(字节跳动 / 腾讯 / 美团)
  • 普通索引和唯一索引在查询、更新时的性能差异在哪里?
  • 什么是前缀索引,什么时候用,有什么局限?
  • 全文索引是什么,和 Elasticsearch 的倒排索引有什么区别?(美团 / 字节跳动 / 快手)
  • 为什么搜索场景用 Elasticsearch 而不是 MySQL?(美团 / 腾讯 / 字节跳动)
  • InnoDB 中索引是怎么存放的,一次索引查询要经过哪些步骤?(字节跳动 / 百度 / 美团)
  • 什么是自适应哈希索引?
  • MySQL 怎么选择使用哪个索引?优化器的选择机制是什么?(字节跳动 / 美团 / 小红书)
  • MySQL 索引相关的问题,面试官让自行发挥时该从哪些角度讲?(百度 / 美团 / 快手)

联合索引、覆盖索引与索引失效

  • 什么是联合索引,它在 B+ 树里是怎样的结构?(字节跳动 / 快手 / 腾讯)
  • 什么是最左匹配原则?(美团 / 字节跳动 / 百度)
  • 为什么是最左匹配而不是最右匹配?(百度 / 字节跳动 / 美团)
  • 联合索引 (a, b, c),where b = 1 能不能走索引,where a = 1 呢?(美团 / 腾讯 / 快手)
  • 联合索引 (a, b, c),查询条件只有 a 和 b 能命中吗?(百度 / 字节跳动 / 腾讯)
  • 联合索引 (a, b, c),where c = ? and b = ? and a = ? 条件顺序反过来会用到索引吗?(美团 / 字节跳动 / 百度)
  • 联合索引 (a, b, c),where a = x and c = x 能不能用到,为什么?(字节跳动 / 美团 / 滴滴)
  • 联合索引 (a, b, c),a = x and b > x and c = x 哪几列能用上索引?(美团 / 百度 / 字节跳动)
  • 联合索引 (a, b, c),where a = ? order by c 能走索引吗?(字节跳动 / 小红书 / 快手)
  • 联合索引的字段顺序该怎么设计?(字节跳动 / 美团 / 腾讯)
  • 什么是覆盖索引,为什么它比普通索引更快?(美团 / 腾讯 / 拼多多)
  • 覆盖索引、聚簇索引和非聚簇索引有什么区别?(美团 / 字节跳动 / 小米)
  • 什么是索引下推(ICP),它省了什么?(美团 / 快手 / 腾讯)
  • 索引在什么情况下会失效?(美团 / 字节跳动 / 腾讯)
  • 索引失效的原因和不适合用索引的场景有哪些?(美团 / 腾讯 / 百度)
  • 为什么对索引列做函数运算、隐式类型转换会让索引失效?(字节跳动 / 京东 / 美团)
  • like '%abc' 和 like 'abc%' 都能走索引吗?
  • or、not in、!= 条件会不会让索引失效?
  • 字符串列用数字去比较为什么会索引失效?
  • 建了索引但查询用不上,除了失效还可能是什么原因?(百度 / 腾讯 / 快手)
  • 怎么看一条 SQL 有没有用到索引?(美团 / 腾讯 / 百度)
  • 哪些字段适合建立索引,哪些不适合?(美团 / 快手 / 字节跳动)
  • 设计索引有哪些原则?(美团 / 哔哩哔哩 / 字节跳动)
  • 添加索引的时候有什么需要注意的?(美团 / 字节跳动 / 腾讯)
  • 线上给大表加索引会不会锁表,怎么做更安全?
  • 怎么优化已有的索引?(美团 / 腾讯 / 字节跳动)
  • 索引区分度(选择性)是什么,对建索引有什么影响?
  • 大量重复值的列(比如性别)适合建索引吗?

事务与 ACID

  • 什么是数据库事务?(字节跳动 / 百度 / 美团)
  • 事务的四大特性 ACID 分别是什么意思?(美团 / 百度 / 字节跳动)
  • MySQL 事务的 ACID 分别由什么机制保证?(小米 / 美团 / 小红书)
  • 原子性是怎么实现的?(undo log 回滚)(美团 / 腾讯 / 字节跳动)
  • 持久性是怎么保证的?(内存 + redo log)(字节跳动 / 小红书 / 快手)
  • 隔离性是怎么实现的?(美团 / 字节跳动 / 百度)
  • 一致性到底是由谁保证的,它和另外三个特性是什么关系?(字节跳动 / 京东 / 阿里巴巴)
  • MySQL 事务是怎么实现的?(百度 / 腾讯 / 小米)
  • MySQL 中的事务在实战里怎么用,有哪些使用场景?(美团 / 京东 / 阿里巴巴)
  • 什么是隐式事务,autocommit 是什么?
  • 长事务有什么危害,怎么排查和避免?
  • Spring 的事务传播机制有哪些?(美团 / 腾讯 / 阿里巴巴)
  • Spring 声明式事务在哪些情况下会失效?(京东 / 华为)
  • Redis 事务和数据库事务有什么区别?(腾讯 / 京东 / 拼多多)
  • 什么是分布式事务,有哪些实现方式?(阿里巴巴 / 字节跳动 / 美团)
  • 消息队列的事务消息是怎么实现的?(网易 / 滴滴 / 哔哩哔哩)

隔离级别、MVCC 与幻读

  • MySQL 的事务隔离级别有哪些,分别会出现什么问题?(美团 / 字节跳动 / 腾讯)
  • 事务隔离级别以及对应解决的问题是什么?(美团 / 字节跳动 / 快手)
  • 脏读、不可重复读和幻读分别是什么?(字节跳动 / 腾讯 / 滴滴)
  • MySQL 默认的事务隔离级别是哪个,为什么选它?(美团 / 字节跳动 / 百度)
  • 常见数据库的默认隔离级别分别是什么,为什么要选这个?(腾讯 / 快手 / 字节跳动)
  • RR 和 RC 有什么区别,各适合什么场景?(字节跳动 / 美团 / 蚂蚁集团)
  • 可重复读隔离级别下会出现幻读吗?(快手 / 美团 / 拼多多)
  • MySQL 怎么解决幻读的?(美团 / 字节跳动 / 快手)
  • InnoDB 在哪个隔离级别解决了幻读,是完全解决吗?(滴滴 / 快手 / 百度)
  • 当前读和快照读有什么区别?
  • MVCC 是什么?(美团 / 腾讯 / 字节跳动)
  • 讲一下 MVCC 的底层实现。(美团 / 字节跳动 / 快手)
  • MVCC 里的 ReadView 是什么,由哪些字段组成?(美团 / 字节跳动 / 快手)
  • MVCC 是怎么判断一行数据对当前事务可见的?(字节跳动 / 腾讯 / 滴滴)
  • MVCC 是如何解决脏读和不可重复读的?(美团 / 快手 / 字节跳动)
  • MVCC 是为了解决幻读吗?(美团 / 字节跳动 / 快手)
  • MVCC 有哪些优点和缺点?(字节跳动 / 快手 / 滴滴)
  • 版本链是怎么形成的,隐藏列 trx_id 和 roll_pointer 是什么?
  • RC 和 RR 生成 ReadView 的时机有什么不同?
  • MySQL 可重复读是如何实现的?(美团 / 字节跳动 / 快手)
  • 串行化隔离级别是怎么实现的,为什么很少用?
  • Next-Key Lock 是怎么在 RR 下防止幻读的?(美团 / 阿里巴巴 / 拼多多)
  • MySQL 事务隔离级别应用层面该怎么选,RC 和 RR 取舍是什么?(小米 / 字节跳动 / 腾讯)
  • 不同隔离级别下读写会不会互相阻塞?

锁机制与死锁

  • MySQL 有哪些锁,各自的作用是什么?(美团 / 腾讯 / 字节跳动)
  • InnoDB 的行锁和表锁有什么区别?(京东 / 腾讯 / 滴滴)
  • 共享锁和排他锁是什么?(美团 / 阿里巴巴 / 腾讯)
  • 意向锁是什么,为什么需要它?
  • 记录锁、间隙锁、临键锁分别是什么?(美团 / 字节跳动 / 快手)
  • MySQL 加锁的底层原理是什么?(字节跳动 / 滴滴 / 快手)
  • insert 语句会加哪些锁?(京东 / 百度 / 字节跳动)
  • select ... for update 是表锁还是行锁?(美团 / 字节跳动 / 快手)
  • update 没走索引时会锁表吗?
  • 乐观锁和悲观锁是什么,怎么选业务场景?(美团 / 腾讯 / 阿里巴巴)
  • 怎么用 MySQL 实现乐观锁?(字节跳动 / 滴滴 / 美团)
  • 乐观锁怎么防止超卖?(快手 / 小米 / 百度)
  • MySQL 怎么实现一个分布式锁?(美团 / 滴滴 / 快手)
  • 什么是死锁,死锁成立需要哪些条件?(美团 / 腾讯 / 字节跳动)
  • 数据库死锁是怎么产生的?(美团 / 阿里巴巴 / 字节跳动)
  • MySQL 死锁常见的场景有哪些?(美团 / 腾讯 / 滴滴)
  • 死锁怎么排查?(show engine innodb status)(百度 / 美团 / 拼多多)
  • 死锁发生后怎么解决?(字节跳动 / 腾讯 / 快手)
  • 怎么避免和预防死锁?(美团 / 字节跳动 / 阿里巴巴)
  • MySQL 怎么检测死锁,InnoDB 发现死锁后怎么处理?(腾讯 / 美团 / 拼多多)
  • 遇到过线上死锁吗,是怎么处理的?(百度 / 美团 / 阿里巴巴)
  • 能手写一个死锁的例子吗?(美团 / 百度 / 阿里巴巴)
  • MySQL 加锁时的 lock_wait_timeout 是什么?

日志体系与崩溃恢复

  • MySQL 有哪几种日志,分别有什么用?(滴滴 / 腾讯 / 美团)
  • undo log、redo log、binlog 分别用来做什么?(腾讯 / 字节跳动 / 美团)
  • redo log 的作用是什么?(字节跳动 / 腾讯 / 美团)
  • redo log 和 binlog 有什么区别?(字节跳动 / 美团 / 腾讯)
  • undo log 和 redo log 有什么区别和联系?(腾讯 / 滴滴 / 阿里巴巴)
  • binlog 的作用是什么,有哪几种格式?(百度 / 字节跳动 / 美团)
  • redo log 和 binlog 的两阶段提交是怎么保证一致性的?(字节跳动 / 美团 / 快手)
  • redo log 是怎么刷盘的,innodb_flush_log_at_trx_commit 取不同值有什么区别?
  • 什么是 WAL(先写日志再写磁盘),为什么这样更快?
  • MySQL 宕机后是怎么恢复的?
  • undo log 在事务回滚中起什么作用?(美团 / 腾讯 / 字节跳动)
  • 什么是 doublewrite buffer,它解决什么问题?
  • 慢查询日志怎么开启,参数怎么配?
  • binlog 在数据恢复、主从复制中分别扮演什么角色?(快手 / 小红书 / 字节跳动)

主从复制与高可用

  • MySQL 主从复制的原理是什么?(美团 / 腾讯 / 百度)
  • 主从同步的流程里,binlog、relay log、I/O 线程和 SQL 线程分别做什么?(美团 / 腾讯 / 阿里巴巴)
  • 主从复制有哪几种模式,异步、半同步、全同步有什么区别?
  • 主从延迟是怎么产生的,怎么解决?
  • 主从一致性是怎么保证的?(腾讯 / 小米 / 滴滴)
  • 读写分离怎么做,读到旧数据怎么办?
  • 主库宕机后怎么做故障切换?
  • MySQL 怎么做数据备份,全量备份和增量备份有什么区别?
  • Redis 的主从复制和 MySQL 有什么不同?(百度 / 腾讯 / 美团)
  • 如果要支撑更高并发,MySQL 有哪些扩展手段?

SQL 执行流程、慢查询与优化

  • 一条 SQL 语句从发出到返回结果经历了哪些步骤?(美团 / 字节跳动 / 腾讯)
  • MySQL 执行一条查询的流程是什么?(字节跳动 / 美团 / 腾讯)
  • 一条 select 语句的执行流程里,优化器做了什么?(美团 / 字节跳动 / 小米)
  • SQL 语句的逻辑执行顺序是什么?(华为 / 字节跳动)
  • where、group by、having、order by、limit 的执行顺序是怎样的?(美团 / 快手 / 携程)
  • 什么是慢查询,怎么定位慢查询?(腾讯 / 美团)
  • 慢 SQL 怎么排查和优化?(腾讯 / 字节跳动 / 美团)
  • MySQL 查询变慢的常见原因有哪些?(腾讯 / 字节跳动 / 美团)
  • 线上遇到慢 SQL 报警,你的处理思路是什么?(滴滴 / 百度 / 美团)
  • 慢 SQL 治理有哪些经验?(快手 / 京东 / 百度)
  • EXPLAIN 有哪些字段,分别什么含义?(字节跳动 / 美团 / 网易)
  • 使用 EXPLAIN 分析 SQL 时应该重点关注哪些字段?(百度 / 滴滴 / 字节跳动)
  • type 字段里的 ALL、index、range、ref、const 差别是什么?
  • Extra 里的 Using filesort、Using temporary、Using index 分别说明什么?
  • SQL 优化有哪些手段?(美团 / 华为 / 腾讯)
  • MySQL 优化具体应该怎么做,从哪几个层面入手?(腾讯 / 美团 / 京东)
  • 你在项目里优化过 SQL 吗,怎么做的?(腾讯 / 字节跳动 / 快手)
  • MySQL 查询语句怎么优化?(字节跳动 / 美团 / 京东)
  • order by 是怎么执行的,什么情况下会 filesort?
  • group by 怎么优化?
  • 什么是深分页,limit 1000000, 10 为什么慢,怎么优化?(美团 / 滴滴 / 网易)
  • join 是怎么执行的,小表驱动大表是什么意思?
  • in 和 exists 的区别,什么时候用哪个?
  • select * 为什么不推荐?
  • 大表怎么在线加字段、改表结构?
  • 批量插入大量数据怎么提高效率?
  • MySQL 的性能调优包括哪些方面?(美团 / 拼多多 / 百度)
  • Buffer Pool 命中率低怎么排查?

分库分表与数据一致性

  • 什么是分库分表,为什么要用?(字节跳动 / 携程 / 阿里巴巴)
  • 什么时候需要分库分表,常见分库分表策略有哪些?(美团 / 小米 / 快手)
  • 分库分表应该怎么设计?(美团 / 腾讯 / 百度)
  • 垂直拆分和水平拆分有什么区别?
  • 分库分表之后,主键 ID 怎么生成?
  • 分库分表之后,跨库 join、分页和排序怎么处理?
  • 分库分表后怎么平滑扩容,数据怎么迁移?
  • 你们项目里的分库分表是怎么做的?(字节跳动 / 阿里巴巴 / 京东)
  • MySQL 和 Redis 怎么保证数据一致性?(美团 / 腾讯 / 字节跳动)
  • Redis 和 MySQL 怎么同步更新?(腾讯 / 字节跳动 / 小米)
  • 先更新数据库还是先删除缓存,为什么?
  • Redis 扣减库存成功但 MySQL 更新失败,怎么保证一致性?(字节跳动 / 腾讯 / 美团)
  • MySQL 的数据一致性是怎么保证的?(美团 / 阿里巴巴 / 京东)
  • 数据库的分布式事务有哪些方案?(快手 / 百度 / 腾讯)
  • 两阶段提交、TCC 和 Saga 有什么区别?
  • MySQL 和 Elasticsearch 之间的数据怎么同步?

SQL 编写与手撕题

  • 你的 SQL 能力怎么样,常用的增删改查写一下。(美团 / 百度 / 小红书)
  • inner join、left join、right join、full join 有什么区别?
  • union 和 union all 有什么区别?
  • where 和 having 有什么区别?
  • in、exists、not in 遇到 NULL 时分别会怎样?
  • group by 后怎么取每组的前 N 条?
  • 窗口函数 row_number、rank、dense_rank 有什么区别?
  • 如何用 SQL 求连续登录三天的用户?(字节跳动 / 腾讯 / 小红书)
  • 一道 SQL 题:怎么求用户连续登录的最大天数?(美团 / 拼多多 / 阿里巴巴)
  • 怎么查询每个部门薪资最高的员工?
  • 怎么查出第二高的薪水?
  • 怎么删除表里重复的数据,只保留一条?
  • 怎么查找表中重复的记录?
  • 行转列、列转行怎么写?
  • 怎么统计每天的新增用户和次日留存?
  • 两张表联合查询,怎么写才高效?
  • 怎么用一条 SQL 实现 upsert(存在则更新,不存在则插入)?
  • SQL 注入的原理是什么,怎么防御?(腾讯 / 美团 / 快手)
  • MyBatis 如何防止 SQL 注入?#{} 和 ${} 有什么区别?(腾讯 / 华为 / 字节跳动)
面灵AI 笔试助手

笔试机考碰上这类手撕代码题

不用切屏:鼠标在「解题」按钮上停 1.2 秒,AI 读完题,把思路、复杂度和代码直接贴在考试页上方。

2026 届秋招 · 后端开发工程师笔试nowcoder.com/exam剩余 42:10交卷
已进入全屏防作弊模式,切屏 / 退出全屏将被记录
Online Assessment
算法编程题 · 3 / 12

表 login(user_id, login_date) 记录用户每天的登录日期(同一天可能多条)。请用一条 SQL 找出连续登录至少 3 天的用户。
示例:用户 1 登录了 10-01、10-02、10-03,用户 2 登录了 10-01、10-03、10-04,结果只有用户 1

solution.sql
SELECT DISTINCT user_id
FROM login
-- TODO
面灵AI
已连接编程余 27min
悬停回看
把鼠标悬停到下方「解题」按钮 1.2 秒
AI 会自动截屏并解答
也可以直接按 Ctrl+Enter,手不用离开键盘
悬停看新
编程
5min/题
解题
^⏎
加页
^H
重置
悬停 0.8s
退出
悬停 2.5s
悬停 1.2 秒触发,焦点不离开考试页——不切屏、不切窗口;浮窗可调到近乎透明,第二机位拍到的几乎只剩考试页本身

备考重点

MySQL 八股的特点是概念少、关联紧、追问深。几乎所有问题都能挂到同一条主线上:数据存在 B+ 树的页里,读写要经过 Buffer Pool,改动先记 redo log 再落盘,回滚靠 undo log,并发读写靠 MVCC 和锁。把这条主线讲通,隔离级别、幻读、两阶段提交这些看似零散的题就会自己串起来。

建议按这个顺序准备:先把"一条 SQL 从发出到返回"走一遍(连接器、解析、优化器、执行器、存储引擎),再单独吃透索引(B+ 树结构、聚簇与二级索引、回表、联合索引、覆盖索引、索引失效),然后是事务(ACID 各由什么机制保证、四个隔离级别、MVCC 的 ReadView、RR 下怎么处理幻读),最后补锁与日志。 面试里最容易丢分的不是不会,而是把"快照读靠 MVCC、当前读靠 Next-Key Lock"这类边界说混。

慢查询优化和 SQL 手撕是拉开差距的两块。优化题别只背"加索引",要能讲出完整思路:先用慢查询日志定位,再用 EXPLAIN 看 type、key、rows、Extra,然后判断是索引缺失、索引失效、回表太多还是深分页,最后给出对应改法。手撕题以窗口函数、分组取前 N、连续登录、去重为主,现场能写出可运行的 SQL 比口述思路更加分。

常见问题

这份题单是怎么整理出来的?

来源是公开面经与题库沉淀,把 MySQL 方向反复出现的八股题抽出来重新归类,不包含面灵用户的面试内容。括号里标注的是近期实际问过这道题的大厂,只作参考,不代表完整名单。

MySQL 面试八股应该先准备哪些部分?

优先顺序建议是:索引(B+ 树、联合索引、回表、索引失效)→ 事务与隔离级别 → MVCC → 锁与死锁 → 慢查询与 EXPLAIN → 日志与主从复制 → 分库分表。前五块是各大厂后端岗的公共必考区,后面几块再按目标岗位和简历上写的项目补。

面试官问索引,一般会追问到什么程度?

通常是四层:先问索引是什么、底层用什么数据结构,再追问为什么是 B+ 树而不是 B 树、哈希或红黑树,接着落到联合索引、最左匹配、覆盖索引和回表,最后给一条具体 SQL 让你判断会不会走索引、为什么失效。能结合 EXPLAIN 的输出讲清楚判断依据,比背结论更容易拿分。

可重复读到底有没有彻底解决幻读?

要分读法来看。普通的快照读靠 MVCC,事务内用同一个 ReadView,读不到别的事务后来提交的新行,所以看不到幻读;当前读(select ... for update、update 等)靠 Next-Key Lock 锁住间隙,阻止别的事务插入。但如果在同一个事务里先快照读、再当前读,仍可能看到新插入的行,所以更准确的说法是"大部分场景下解决了,边界场景仍要注意"。

想要一份属于你的题库?

按你的目标公司和岗位,定制专属高频题

这份合集是官方按岗位整理的通用版。告诉面灵AI 你要面的公司和岗位,结合你的简历,生成一份只属于你的近期高频题和参考回答。

面试实时辅助

下载面灵AI桌面客户端,面试 / 笔试时 AI 实时听题辅助作答。