系统设计面试题
目录概述
系统设计类题目没有标准答案,考的是你在约束条件下的权衡能力和架构思维。这是 P7 候选人的核心考察区,也是区分"技术执行者"和"架构设计者"的关键。
这个目录帮你建立系统设计的全局视野,理解架构权衡背后的工程代价。
【面试官心理】 我出系统设计题,通常从业务场景开始:"设计一个短链接系统,支持每天 1 亿次生成、10 亿次访问。" 能问清楚需求的占 50%,能给出一个可行方案的占 30%,能权衡多种方案的占 10%,能说清楚容量规划和工程代价的只有 5%。
内容范围
核心主题
高并发系统设计:
- QPS、RT、并发数计算
- 垂直扩展 vs 水平扩展
- 无状态服务设计
- 连接池管理
- 流量控制:限流算法、熔断策略
缓存架构:
- 多级缓存:本地缓存 + 分布式缓存
- 缓存分层:L1/L2/L3 缓存
- 缓存一致性:write-through、write-back、cache-aside
- 缓存预热:启动预热、热点探测
- 缓存淘汰:TTL、容量管理
数据库架构:
- 读写分离:主从延迟、数据一致性
- 分库分表:水平拆分、垂直拆分、分片键选择
- 数据库中间件:ShardingSphere、MyCat
- NoSQL 选型:MongoDB、Cassandra、HBase
- NewSQL:TiDB、CockroachDB
微服务架构:
- 服务拆分:领域驱动、微服务边界
- 服务治理:注册中心、配置中心、熔断降级
- API Gateway:路由、认证、限流
- 服务网格:Istio、Linkerd、Envoy
- 分布式事务:跨服务事务一致性
消息系统:
- 消息队列架构:顺序消息、事务消息
- 异步处理:削峰填谷、解耦
- 事件驱动架构:CQRS、Event Sourcing
- 流处理:Flink、Spark Streaming
可扩展性设计:
- 功能扩展:插件化、策略模式
- 性能扩展:读写分离、分库分表
- 架构扩展:服务化、中台化
- 模块解耦:事件总线、消息队列
高可用设计:
- 多活架构:同城双活、异地多活
- 故障转移:自动切换、人工介入
- 降级策略:非核心功能降级
- 监控告警:Metrics、Logging、Tracing
安全设计:
- 认证授权:OAuth2、JWT、SSO
- 数据安全:加密、脱敏、审计
- 接口防护:防刷、签名验证
- 敏感数据:密码存储、密钥管理
面试题分级
高频必考题 🔴
设计一个短链接系统
面试官问:"设计一个短链接系统,支持每天 1 亿次生成、10 亿次访问。"
这道题能考察:存储选型(Redis + MySQL)、算法设计(hash vs 自增 ID + base62)、缓存设计(热点数据)、高可用(多机房部署)。
【面试官心理】 这道题我能追问出很多细节:全球分布场景下怎么保证就近访问?长链接和短链接的映射关系怎么存?数据库瓶颈怎么破?短链接过期怎么回收?每一个追问都在测试候选人的工程深度。
设计一个秒杀系统
面试官问:"设计一个秒杀系统,库存只有 100 件,预期 QPS 100 万。"
能说出"限流、削峰"的占 70%,能说出"Redis 库存预扣减"的占 50%,能说清楚超卖问题的占 30%,能说清楚整个链路设计的只有 10%。
设计一个分布式 ID 生成器
面试官问:"设计一个分布式 ID 生成器,要求趋势递增、唯一性、有序性。"
能说出"雪花算法 Snowflake"的占 60%,能说清楚雪花算法原理的占 30%,能说清楚时钟回拨问题的只有 10%。
中频常考题 🟡
- 设计一个评论系统
- 设计一个 feed 流系统
- 设计一个搜索建议系统
- 设计一个延迟任务系统
- 设计一个本地缓存框架
低频了解题 🟢
- 分布式文件系统设计
- 视频流系统设计
- 物联网数据采集系统
学习路径指引
P6 候选人(中级社招)
先掌握单一模块的设计能力:缓存设计、数据库设计、接口设计。能给出基本的可行方案,能回答一些常见的系统设计问题。这个阶段重在积累设计模式。
P7 候选人(高级/架构方向)
必须掌握完整系统设计能力。能从业务场景出发,分析容量规划、技术选型、架构权衡。能设计高可用、高性能、可扩展的系统。能评估工程代价和运维成本。
【面试官心理】 P7 候选人做系统设计,我最看重的是"权衡"能力。不是给出一个完美方案,而是能说清楚"我们选了 A 方案但牺牲了 B优点,换来了 C 好处"。这种权衡意识是架构师的核心素质。
工程代价评估
运维成本
分布式系统引入后会大幅增加运维复杂度。需要考虑:监控告警、故障排查、灰度发布、回滚方案、灾备切换。
排障复杂度
分布式环境下,一个请求经过多个服务,问题定位困难。需要完善的链路追踪、日志聚合、监控告警体系。
扩展性
架构设计要考虑未来的扩展性。过度设计会导致复杂度上升,设计不足会导致重构成本高。
避坑指南
过度设计
不要一开始就想设计一个完美的分布式系统。创业公司、业务初期,单体架构可能是更好的选择。架构演进要跟随业务发展。
技术选型跟风
不要因为某个技术火就用它。要根据业务场景、技术团队能力、运维成本来选型。适合的才是最好的。
忽略一致性
分布式环境下,一致性是最大的挑战。不要忽视数据一致性问题,否则会在生产环境付出惨痛代价。