Go 面试突击:MySQL、Redis、Kafka 三大中间件 25 题
后端工程师离不开中间件。本文以"答案 + 实战建议"的方式总结 25 道典型题。
一、MySQL
Q1. MySQL 事务隔离级别?
READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE。InnoDB 默认 REPEATABLE READ。
Q2. 什么是 MVCC?
多版本并发控制,存历史快照,REPEATABLE READ 下事务读快照。
Q3. 索引为什么用 B+ 树?
- 高度低 → IO 少
- 范围扫描快 → 叶子节点链表
- 适合磁盘
Q4. 索引覆盖?
查询只需要索引列,索引本身就是数据。
Q5. 慢 SQL 排查流程?
- EXPLAIN 看是否走索引
- Show Profile
- performance_schema
- Slow log
Q6. count(*) 优化?
用缓存计数 / 近似APPROX_COUNT_DISTINCT/ 表自身冗余字段。
Q7. 大表 ALTER?
pt-online-schema-change / gh-ost。
Q8. binlog 三种格式?
STATEMENT、ROW、MIXED。
Q9. ROW vs STATEMENT?
ROW 记录全部变更,分布式友好;STATEMENT 文本,可能不一致。
二、Redis
Q10. Redis 五种数据结构?
string / list / hash / set / zset。
Q11. Redis 是单线程?
IO 单线程;6.0+ 部分命令多线程。
Q12. 内存淘汰策略?
LRU / LFU / All keys / Volatile keys。
Q13. Redis 持久化?
RDB:snapshot;AOF:append only file,秒级恢复。
Q14. Redis Cluster 哈希槽?
16384 slot,每个节点一段。
Q15. Redis 分布式锁 RedLock?
多实例拿锁,超过一半成功视为 OK。
Q16. Cache 雪崩?
大量 key 同时过期,请求打到 DB。策略:过期时间加随机 / 后台刷新 / 多级缓存。
Q17. 缓存穿透 / 击穿?
- 穿透:恶意不存在 key → 布隆过滤器
- 击穿:热点 key 失效 → singleflight
Q18. Pipeline 与 Transaction 区别?
pipeline 批量发送;transaction 是 MULTI/EXEC。
三、Kafka
Q19. Kafka 架构?
- Producer / Consumer
- Broker + Topic + Partition
- Zookeeper / KRaft
Q20. 什么是 ISR?
in-sync replicas,跟 Leader 同步的副本集。
Q21. Kafka 三种投递语义?
at-most-once / at-least-once / exactly-once。
Q22. Kafka 消费位置 Offset 怎么管理?
__consumer_offsetstopic。
Q23. 消息顺序性如何保证?
单 partition 单消费者 + 业务 key hash。
Q24. 重复消费解决方案?
幂等 + 业务 dedup。Kafka 0.11+ 事务消息也能保住 exactly-once。
Q25. 消息堆积?
扩容 partition + 临时降级。
四、踩坑清单
- MySQL:不要 ORDER BY RAND()
- Redis:不要 KEYS *,会卡
- Kafka:消费者处理时间过长导致 rebalance
五、总结
三大中间件覆盖 80% 后端业务。深入原理 + 实战排查能力比记忆重要。
六、参考文献
- MySQL 官方文档
- Redis 官方文档
- Kafka 官方文档