系统设计
系统设计面试考的不是背架构图,而是权衡能力:在约束下做取舍。本分类按两条主线组织,覆盖后端面试的高频设计题。
两条主线
性能与可用性, 取舍是设计的核心
- 高性能:单位时间处理更多请求、响应更快。手段:缓存、异步、池化、水平扩展
- 高可用:故障时服务不中断。手段:冗余、限流、熔断、降级、重试、容灾
两者经常冲突:追求极致性能(不设限、不重试)会牺牲可用性;过度防御(处处同步、层层重试)会拖慢性能。面试加分点就是主动说出权衡。
面试方法论
- 澄清需求:QPS 多少、数据量多大、读多还是写多、一致性要求。先问清楚再设计
- 容量估算:从 QPS 和 RT 推导并发数和机器数(见性能指标与压测篇的 Little’s Law)
- 分层设计:接入层(LB/CDN)→ 应用层(无状态、可扩展)→ 数据层(缓存/分库分表)
- 画图说话:请求链路图、数据流图,边画边讲
- 说清取舍:每个方案给代价(一致性 vs 性能、成本 vs 冗余)
高频考点地图
| 考点 | 归属 | 必考指数 |
|---|---|---|
| 缓存设计(分层/更新/穿透击穿雪崩) | 高性能 | 必考 |
| 消息队列选型(Kafka vs RabbitMQ) | 高性能 | 必考 |
| 水平扩展与负载均衡(L4 vs L7) | 高性能 | 必考 |
| 限流(四算法/分布式限流) | 高可用 | 必考 |
| 熔断与降级(三态/兜底) | 高可用 | 必考 |
| 重试与幂等(退避/唯一键) | 高可用 | 必考 |
| 监控三支柱 | 高可用 | 高频 |
面试追问
- 系统设计的核心是什么? 权衡:性能与可用性、一致性与成本。先澄清需求再设计
- 先问什么问题? QPS、数据量、读写比、一致性要求、可用性目标(几个 9)。需求不清的设计都是空中楼阁
- 设计题的通用框架? 需求澄清 → 容量估算 → 分层架构 → 关键路径 → 权衡说明
- 高性能和高可用冲突怎么办? 主动说取舍:如限流牺牲部分吞吐换稳定性,重试增加延迟换可靠性
- 画图重要吗? 重要。请求链路和数据流图能让面试官跟上思路,边画边讲比干说强