Go 面试突击:消息系统设计、限流与一致性理论 20 题
高级后端面试常考分布式系统设计:消息系统、限流、CAP/BASE。一篇帮你汇总 20 题。
一、消息系统设计
Q1. 消息系统的三大需求?
异步、解耦、削峰。
Q2. AT-MOST-ONCE 如何实现?
- fire-and-forget
- 不要重试
- 性能最好,可能丢
Q3. AT-LEAST-ONCE 如何实现?
- 重试机制
- 持久化
- 可能重复
Q4. EXACTLY-ONCE 如何实现?
- 事务
- Idempotency-Key
- 去重
Q5. 如何保证顺序?
- 单 partition
- 单消费者
- 业务 hash 路由
Q6. 消息延迟队列怎么做?
- TTL + DLQ
- Redis ZSet
- 专业 delay-queue 服务
Q7. 事务消息?
RocketMQ / Kafka 都支持两阶段 + 状态机。
Q8. 死信队列使用?
- TTL 失效
- 消息重试失败
- 业务主动丢弃
二、限流
Q9. 四种限流算法?
- 计数器
- 漏桶
- 令牌桶
- 滑动窗口
Q10. 令牌桶和漏桶区别?
- 漏桶强制匀速
- 令牌桶允许突发
Q11. 分布式限流方案?
Redis Lua + atomic;Sentinel。
Q12. 自适应限流?
CPU / latency / error rate 监控,动态调整阈值。
Q13. 局部 vs 全局限流?
- 局部:网关、用户维度
- 全局:跨实例综合阈值
三、CAP / BASE
Q14. CAP 含义?
C 一致性 / A 可用性 / P 分区容错性。
Q15. CP 系统?
ZooKeeper / Etcd:保证一致,停服。
Q16. AP 系统?
Cassandra / Dynamo:可用优先,允许短暂不一致。
Q17. BASE 含义?
BA 基本可用 / S 软状态 / E 最终一致。
Q18. 分布式事务方案?
- 2PC / 3PC
- TCC
- Saga
- Outbox
Q19. Saga 优缺点?
- 异步长事务
- 补偿逻辑复杂
- 数据一致性靠业务
Q20. 幂等性设计要点?
- Idempotency-Key
- DB unique key
- 状态机控制
四、踩坑清单
- 限流不能代替熔断:超时/错误率阈值
- 消息重试不能无限次
- CAP 三选二不严格:实际是 trade-off
五、总结与展望
分布式系统是面试加分项。要通过实际业务讲设计,避免纸上谈兵。
未来:CRDT / EC-Raft 等研究型系统会逐步工程化,进入面试话题。
六、参考文献
- CAP 原文(Brewer)
- Saga 论文
- Redis 官方文档