2025年Java面试宝典最新版
网盘地址:点击下载(提取码:9b3g)
MySQL高频面试题解析
为什么MySQL默认使用InnoDB引擎?
这个问题几乎出现在80%的MySQL面试中。InnoDB支持事务、行级锁和崩溃恢复能力,适合高并发场景。相比之下,MyISAM只支持表锁,且不支持事务,因此逐渐被淘汰。如果面试官追问事务隔离级别,可以结合“读未提交”“可重复读”等概念展开,并提到MVCC(多版本并发控制)的实现逻辑。

索引失效的常见场景
这道题考察对索引底层原理的理解。比如:
- 隐式类型转换:字段类型为字符串,但查询条件用数字会导致索引失效。
- LIKE左模糊匹配:
WHERE name LIKE '%张三'无法使用索引。 - 联合索引未遵循最左前缀:建立
(a,b,c)索引时,单独查询b或c不会命中。 - 使用函数或表达式:例如
WHERE YEAR(create_time)=2024会导致全表扫描。
回答时可以补充B+树的结构特点,并强调覆盖索引的优势。
如何优化慢查询?
面试官通常希望听到完整的排查流程:
- 开启慢查询日志:定位具体SQL语句和执行时间。
- 使用EXPLAIN分析:关注
type字段是否为ALL(全表扫描),key是否命中索引。 - 优化数据访问:减少
SELECT *,改用具体字段;分页查询用WHERE id > N代替LIMIT大偏移量。 - 调整索引策略:对高频查询字段建立联合索引,删除冗余索引。
如果遇到“大表如何加索引”的问题,可以提到在线工具pt-online-schema-change,避免锁表影响业务。

MySQL事务与锁机制
事务的ACID特性如何实现?
- 原子性:依赖Undo Log回滚日志,记录事务修改前的数据快照。
- 隔离性:通过锁和MVCC机制实现,不同隔离级别对应不同的锁策略(如可重复读使用Next-Key Lock防止幻读)。
- 持久性:Redo Log保证数据写入磁盘前的持久化。
- 一致性:由业务逻辑和数据库约束共同保障。
如果大家需要购买面试鸭会员,可以通过面试鸭返利网找到我,返利25元,节省会员成本!
死锁的产生与排查
死锁常发生在事务并发更新多行数据时。例如:
- 事务A先更新表1,再更新表2;
- 事务B先更新表2,再更新表1。
排查步骤:
- 查看
SHOW ENGINE INNODB STATUS中的LATEST DETECTED DEADLOCK日志; - 优化事务执行顺序,尽量按相同顺序访问表;
- 设置合理的锁超时时间(
innodb_lock_wait_timeout)。
实战案例:高并发下的库存扣减
这类场景考察对并发控制的综合应用。正确做法是:
- 使用悲观锁:
SELECT ... FOR UPDATE锁定库存记录,防止超卖; - 结合Redis缓存:预扣减库存缓解数据库压力;
- 异步补偿机制:通过消息队列处理最终一致性。

总结与资源推荐
掌握MySQL面试题的核心在于理解底层原理(如索引结构、锁机制)和实际场景的结合。建议多练习真实案例,比如分库分表设计、主从同步延迟解决方案等。
如果需要系统化学习,可以参考开头的2025年Java面试宝典,或者通过面试鸭返利网获取更多技术资料和会员优惠!


