系统设计
目录概述
系统设计是 P6/P7 面试的战场,也是最能体现工程师"全局视野"的环节。
很多人能写 CRUD,但被问到"如何设计一个秒杀系统"时,要么背了一堆名词不知所云,要么只想到表面。
这一模块教你从需求出发,用正确的思路和量化的估算来拆解系统设计问题,让你在面试中展现出真正的架构能力。
内容范围
学习路径指引
P5 阶段:能做单点设计
理解单一组件的设计思路和常见方案。
核心要求:
- 如何设计一个分布式 ID 生成器?
- 雪花算法的原理是什么?
- 如何设计一个延迟消息队列?
P6 阶段:能做全链路设计
理解整个系统的设计链路和关键权衡。
核心要求:
- 秒杀系统的全链路设计
- 如何做接口限流和熔断?
- 热点数据怎么识别和处理?
P7 阶段:能做容量规划和演进决策
理解系统的全貌,能做长期技术规划。
核心要求:
- 如何做容量评估?
- 如何设计一个可伸缩的架构?
- 系统达到瓶颈时如何演进?
核心能力矩阵
面试题分级
🔴 高频必考
秒杀系统
- 如何防止超卖?
- 如何做流量削峰?
- Redis 缓存失效后怎么避免雪崩?
- 如何识别和应对黄牛?
分布式 ID
- 雪花算法的原理和优缺点
- 时钟回拨问题怎么解决?
- UID Generator 的优化方案
缓存系统
- Redis 和 Memcached 的区别?
- 缓存穿透、缓存击穿、缓存雪崩是什么?
- 如何保证 Redis 与数据库的双写一致性?
🟡 中频常考
消息队列
- Kafka 如何保证消息顺序?
- 如何实现延时消息?
- MQ 消费幂等性怎么保证?
分布式锁
- Redis 分布式锁的原理和缺陷
- Redisson 的 watch dog 机制是什么?
- Zookeeper 分布式锁 vs Redis 分布式锁
数据库优化
- 分库分表后怎么查?
- ShardingSphere 的原理?
- 如何做数据迁移?
🟢 低频了解
- 搜索引擎设计(ElasticSearch)
- 推荐系统设计
- 广告系统设计
系统设计四步法
很多人拿到系统设计题就懵,不知道从哪里下手。这套四步法能帮你理清思路:
第一步:需求澄清
- 明确功能范围和优先级
- 问清楚 QPS、数据量、延迟要求
- 确认是否有特殊限制(如一致性、成本)
第二步:高层设计
- 画出核心组件和交互关系
- 估算数据量和流量
- 确定技术选型方向
第三步:详细设计
- 核心数据模型设计
- 关键接口设计
- 瓶颈识别和解决方案
第四步:权衡与演进
- 说出方案的优缺点
- 讨论可能的演进方向
- 评估运维成本
生产避坑
过度设计的坑
面试中有人设计了一个"能支撑双十一的系统",结果团队只有 3 个人,根本运维不了。
教训:系统设计要量力而行,合适的才是最好的。
只管设计不管落地的坑
设计了一个完美的分布式事务方案,结果业务团队反馈"这个方案太复杂,改一行代码要改三个地方"。
教训:架构要落地,不能只画图。
忽略监控的坑
系统上线了,但没有任何监控和告警。出问题只能靠用户反馈。
教训:可观测性是系统设计的一部分,不是上线后再加的。
工程选型
【架构权衡】 系统设计没有标准答案,但有高下之分。好的设计能在约束条件下找到最优解,顶级设计能预判未来演进方向。面试中比方案更重要的是思路:你是怎么想的?为什么这么权衡?