后端面试 30 道必背高频题(精简答案版)
MySQL(8 道)
- **索引为什么用 B+树?**
有序、多叉、IO 少、范围查询快。
- **最左前缀原则?**
联合索引从左往右匹配,跳过左边索引失效。
- **事务 ACID?**
原子、一致、隔离、持久。
- **事务隔离级别?**
读未提交、读已提交(RC)、可重复读(RR)、串行化。
- **脏读 / 不可重复读 / 幻读?**
脏读:读到未提交数据
不可重复读:同一事务两次结果不同
幻读:范围查询多出记录
- **InnoDB 锁有哪些?**
行锁、表锁、意向锁、间隙锁。
- **慢查询怎么优化?**
开慢查询日志 → explain 分析 → 建索引 → 拆大 SQL → 拆长事务。
- **大分页 limit 100000,20 怎么优化?**
主键游标分页、延迟关联。
Redis(8 道)
- **Redis 为什么快?**
内存操作、单线程、IO 多路复用。
- **常用数据结构及场景?**
String/Hash/List/Set/ZSet:缓存、对象、队列、去重、排序。
- **缓存雪崩?**
大量 key 同时过期 → DB 压力暴增。
解决:随机过期、集群、缓存预热、降级。
- **缓存击穿?**
热点 key 过期。
解决:分布式锁、热点永不过期。
- **缓存穿透?**
查不存在的数据。
解决:空值缓存、布隆过滤器。
- **Redis 分布式锁怎么实现?**
SET NX EX + Lua 脚本,保证原子性。
- **缓存与数据库一致性?**
先更新数据库,再删除缓存。
- **Redis 持久化 RDB vs AOF?**
RDB:快照,快,可能丢数据
AOF:日志,安全,文件大
高并发 / 分布式(7 道)
- **高并发如何保证系统稳定?**
限流 → 熔断降级 → MQ 削峰 → 缓存 → DB 优化 → 监控扩容。
- **限流算法?**
令牌桶(允许突发)、漏桶(匀速)。
- **熔断和降级?**
熔断:失败率高停止调用
降级:关掉非核心保核心
- **什么是接口幂等?如何实现?**
重复调用结果不变。
唯一ID、去重表、状态机、Redis 防重。
- **分布式 ID 方案?**
雪花算法、号段、UUID。
- **如何防止库存超卖?**
MySQL 行锁、Redis 预扣、分布式锁。
- **线上接口很慢怎么排查?**
日志 → Redis 命中率 → MySQL 慢查询/锁 → MQ 堆积 → 服务器。
MQ(4 道)
- **为什么用 MQ?**
异步、解耦、削峰。
- **消息丢失如何解决?**
生产者确认 + 消息持久化 + 消费者手动 ACK。
- **消息重复消费?**
唯一ID 幂等去重。
- **消息堆积怎么办?**
扩容消费者、优化消费逻辑、死信队列。
计算机基础 & 场景题(3 道)
- **HTTP 和 HTTPS 区别?**
HTTPS 加密、认证、防篡改。
- **GET 和 POST 区别?**
GET 查询、幂等、参数在URL;POST 提交、非幂等、更安全。
- **你项目中最难的问题?**
高并发下**锁等待、接口超时、数据不一致**。
方案:索引优化 + 分布式锁 + MQ + 限流熔断。