系统设计面试指南 2026:高频题、架构模板、评分标准与准备路线
系统设计面试完整指南:覆盖 system design interview 评分标准、5 步回答框架、高频系统设计面试题、架构模板、容量估算、分布式系统 trade-off 和准备路线。
快速答案:系统设计面试怎么准备
系统设计面试的核心不是背架构图,而是在 45-60 分钟里稳定展示 5 个信号:需求澄清、API 和数据模型、关键路径设计、扩展性与故障处理、trade-off 总结。对 L4/L5 候选人,面试官主要看你能不能把常见系统设计面试题讲完整;对 Senior / Staff 候选人,面试官会继续追问一致性、容量估算、热点、降级、可观测性和长期演进。
如果你正在准备 system design interview,最有效的路线是先掌握通用框架,再用高频题反复训练:
| 高频系统设计面试题 | 主要考点 | 详细解析 |
|---|---|---|
| URL 短链系统 | API、ID 生成、缓存、重定向、热点 | 设计 URL Shortener |
| Rate Limiter | token bucket、分布式限流、Redis、精度权衡 | 设计 Rate Limiter |
| Chat System | WebSocket、消息存储、在线状态、推送 | 设计聊天系统 |
| Twitter / Feed | fanout、timeline cache、名人用户、排序 | 设计信息流 |
| Search Engine | index、crawler、ranking、倒排索引 | 设计搜索系统 |
| Recommendation System | 召回、排序、特征、A/B testing | 推荐系统架构面试题 |
| Distributed File System | HDFS/GFS、NameNode、block、副本、容错 | Hadoop 分布式文件系统面试题 |
如果你需要真实面试节奏的反馈,可以看 System Design Mock Interview。这页更适合作为系统设计知识地图,mock 更适合定位表达和 trade-off 短板。
系统设计面试是技术面试中最能体现工程成熟度的环节。与编码面试不同,它没有标准答案——面试官考察的是你的思维过程、权衡取舍和沟通能力。
无论你是准备中级(L4/L5)还是高级(L6+)岗位,这篇指南将帮你建立系统化的回答框架。
什么是系统设计面试?
系统设计面试要求你设计一个可扩展、高可用的分布式系统。常见的题目包括:
- 设计 URL 短链服务(TinyURL)
- 设计 Twitter/微博信息流
- 设计分布式文件系统
- 设计实时聊天系统
- 设计速率限制器(Rate Limiter)
不同级别的要求差异
初级工程师(L3/L4):
- 重点:API 设计、数据模型、基础架构
- 不要求深入的扩展性分析
- 能识别基本的设计模式即可
中级工程师(L4/L5):
- 重点:扩展性、容错性、trade-offs
- 需要讨论数据库分片、缓存策略、负载均衡
- 能解释为什么选择某个方案而非另一个
高级工程师(L6+):
- 重点:系统边界、跨团队协作、长期演进
- 需要讨论一致性模型、分布式事务、多活架构
- 能识别潜在的单体故障点并提出解决方案
提示: 面试级别由 Hiring Manager 决定。如果你不确定,可以在面试开始时问:“您希望我以初级、中级还是高级的视角来设计这个系统?“
面试官在评估什么?
系统设计面试不是看你是否给出了”正确答案”,而是看你的思考过程。面试官通常从以下维度评分:
1. 需求澄清与范围定义(20%)
优秀的候选人:
- 主动提问明确需求(用户规模、QPS、数据量、功能优先级)
- 区分 Must-have 和 Nice-to-have 功能
- 定义明确的系统边界
需要改进的候选人:
- 直接开始画图,不确认需求
- 试图一次性实现所有功能
- 忽略非功能性需求(可用性、延迟、一致性)
2. 高层设计与 API 设计(20%)
优秀的候选人:
- 先画高层架构图(客户端、负载均衡、服务层、数据层)
- 定义清晰的 API 接口(RESTful 或 RPC)
- 组件职责分明,符合单一职责原则
需要改进的候选人:
- 跳过高层设计,直接陷入细节
- API 设计过于复杂或过于简单
- 组件之间耦合度过高
3. 核心组件设计(25%)
优秀的候选人:
- 详细设计关键路径(如写请求如何从客户端到存储)
- 选择合适的数据结构(关系型 vs 非关系型数据库)
- 考虑数据一致性、缓存策略、消息队列
需要改进的候选人:
- 只设计读路径,忽略写路径
- 数据库选择不当(如用 SQL 存储时序数据)
- 没有处理并发和冲突
4. 扩展性与容错(20%)
优秀的候选人:
- 识别瓶颈并提出解决方案(分片、复制、缓存)
- 讨论故障转移、负载均衡、熔断机制
- 能进行容量规划(服务器数量、存储需求)
需要改进的候选人:
- 假设系统永远不崩溃
- 没有考虑单点故障
- 无法估算系统规模
5. 权衡取舍与总结(15%)
优秀的候选人:
- 主动讨论 trade-offs(如一致性 vs 可用性)
- 提出替代方案并解释为什么选择当前方案
- 总结设计并识别可能的改进方向
需要改进的候选人:
- 认为自己的设计是完美的
- 无法解释为什么不用其他方案
- 忽略安全、监控、可观测性
万能回答框架:5 步法
这套框架适用于任何系统设计题目。按照这个流程走,即使你对某个领域不熟悉,也能展现出结构化的思维。
第 1 步:澄清需求(5-7 分钟)
必须问的问题:
功能需求:
- “这个系统的核心功能是什么?”
- “用户需要读多还是写多?”
- “需要支持实时性吗?”
- “有什么特殊的业务规则?”
规模估算:
- “预期有多少 DAU/MAU?”
- “QPS 大概是多少?”
- “数据量有多大?(每天新增多少)”
- “存储需求是多少?”
非功能需求:
- “可用性要求是多少?(99%、99.9%、99.99%)”
- “延迟要求是多少?”
- “数据一致性要求是什么?”
示例对话:
面试官: 请设计 Twitter 信息流。
你: 好的,我先澄清一下需求:
- 是设计”发布推文”还是”拉取信息流”,还是两者都要?
- 信息流是按时间顺序还是按算法推荐?
- 需要支持媒体内容(图片、视频)吗?
- 预期的用户规模和 QPS 是多少?
面试官: 先聚焦”拉取信息流”,时间顺序,纯文本,1 亿 DAU,读多写少。
你: 好的,所以我需要设计一个高并发的读系统,支持按时间顺序获取关注用户的推文。
第 2 步:高层设计(5-7 分钟)
画出系统的核心组件:
客户端 → 负载均衡器 → API 网关 → 服务层 → 数据存储
↓
缓存层
↓
消息队列
关键决策:
- 客户端类型:Web、iOS、Android?
- 网络协议:HTTP/HTTPS、WebSocket、gRPC?
- 架构风格:微服务 vs 单体?REST vs GraphQL?
- 数据流向:请求如何从入口到存储再返回?
第 3 步:核心组件详细设计(15-20 分钟)
选择 1-2 个核心组件深入设计:
数据模型:
-- 用户表
Users(user_id, username, email, created_at)
-- 推文表
Tweets(tweet_id, user_id, content, created_at)
-- 关注关系
Follows(follower_id, followee_id, created_at)
API 设计:
GET /api/v1/feed?user_id=123&since_id=456&limit=20
POST /api/v1/tweets
GET /api/v1/users/123/tweets
关键路径分析:
- 用户请求信息流 → 负载均衡 → Feed Service → 缓存/数据库 → 返回
- 用户发布推文 → 负载均衡 → Tweet Service → 数据库 → 消息队列 → 更新粉丝信息流
第 4 步:扩展性与优化(10 分钟)
识别瓶颈并提出解决方案:
瓶颈 1:数据库读写压力
- 方案:读写分离、缓存热点数据、数据库分片
瓶颈 2:单点故障
- 方案:多副本、负载均衡、健康检查
瓶颈 3:数据一致性
- 方案:最终一致性、版本号、冲突解决策略
容量估算:
- 假设每条约 140 字节,1 亿用户每天发 5 条 → 每天 5 亿条约 70GB
- 假设信息流平均 20 条,每次请求 2.8KB,每秒 10 万 QPS → 280MB/s 带宽
第 5 步:总结与权衡(3-5 分钟)
总结你的设计: “我设计了一个包含 API 网关、Feed Service、缓存层和数据库的信息流系统。读请求优先查缓存,写请求通过消息队列异步更新粉丝信息流。”
讨论 trade-offs:
- “我选择了推模型(写时更新粉丝信息流),优点是读延迟低,缺点是写放大。如果用户粉丝数极多(如名人),可以改用拉模型或混合模型。”
- “缓存策略选择了 TTL + LRU,但没有处理缓存穿透/雪崩问题,可以加布隆过滤器和随机过期时间。”
提出改进方向:
- “可以加入 CDN 加速静态资源”
- “可以加入监控和告警系统”
- “可以考虑多地域部署以降低延迟”
核心知识点速查
系统设计面试涉及的知识面很广。以下是必须掌握的核心概念:
网络与协议
- HTTP/HTTPS:请求/响应模型、状态码、头信息
- TCP vs UDP:可靠性、延迟、适用场景
- DNS:域名解析过程、CDN 与 DNS 的关系
- WebSocket:双向通信、实时应用
- gRPC:高性能 RPC、Protobuf 序列化
数据库
关系型数据库(SQL):
- MySQL、PostgreSQL
- ACID 事务、索引、查询优化
- 适用场景:强一致性、复杂查询、事务处理
非关系型数据库(NoSQL):
- Key-Value:Redis、Memcached(缓存、会话)
- Document:MongoDB、Cassandra(灵活 schema、高写吞吐)
- Column-Family:Cassandra、HBase(时序数据、大数据)
- Graph:Neo4j(社交网络、推荐系统)
数据库扩展策略:
- 读写分离:主库写,从库读
- 分片(Sharding):按用户 ID、时间、地理位置分片
- 复制(Replication):主从复制、多主复制
- 分区(Partitioning):范围分区、哈希分区
缓存
缓存策略:
- Cache-Aside:应用负责读写缓存(最常用)
- Write-Through:写缓存同时写数据库
- Write-Behind:先写缓存,异步写数据库
- Read-Through:缓存负责从数据库加载数据
缓存问题与解决方案:
- 缓存穿透:布隆过滤器、缓存空值
- 缓存击穿:互斥锁、逻辑过期
- 缓存雪崩:随机 TTL、多级缓存
缓存层级:
- L1:客户端缓存(浏览器、App)
- L2:CDN 缓存(静态资源)
- L3:分布式缓存(Redis Cluster)
- L4:数据库查询缓存
负载均衡
算法:
- 轮询(Round Robin)
- 加权轮询(Weighted Round Robin)
- 最少连接(Least Connections)
- IP 哈希(IP Hash)
类型:
- L4 负载均衡:传输层(TCP/UDP),Nginx、HAProxy
- L7 负载均衡:应用层(HTTP),支持路由、重写、限流
消息队列
适用场景:
- 异步处理(发邮件、发短信)
- 解耦服务(生产者不依赖消费者)
- 流量削峰(秒杀、促销活动)
- 事件驱动架构
常见系统:
- Kafka:高吞吐、持久化、分区复制
- RabbitMQ:灵活路由、ACK 机制
- Redis Streams:轻量级、多消费者组
微服务架构
服务拆分原则:
- 按业务领域拆分(DDD)
- 单一职责
- 独立部署、独立数据库
服务通信:
- 同步:REST、gRPC
- 异步:消息队列、事件总线
服务治理:
- 服务注册与发现(Consul、Eureka)
- 熔断器(Hystrix、Resilience4j)
- 链路追踪(Jaeger、Zipkin)
- API 网关(Kong、Apigee)
分布式系统
CAP 定理:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition tolerance)
- 只能选两个
一致性模型:
- 强一致性:读最新写(如银行转账)
- 最终一致性: eventually consistent(如社交网络)
- 会话一致性:同一会话内一致
分布式共识:
- Paxos、Raft(分布式领导选举)
- 分布式锁(Redis Redlock、ZooKeeper)
分布式事务:
- 2PC(两阶段提交)
- Saga 模式
- TCC(Try-Confirm-Cancel)
安全与可观测性
安全:
- HTTPS/TLS 加密
- 身份认证(OAuth 2.0、JWT)
- 授权(RBAC、ABAC)
- 输入验证、SQL 注入防护
- DDoS 防护、速率限制
可观测性:
- 日志:ELK Stack(Elasticsearch、Logstash、Kibana)
- 指标:Prometheus + Grafana
- 链路追踪:Jaeger、Zipkin
- 告警:PagerDuty、Opsgenie
高频题目索引
这一节是本站系统设计内容的导航入口:每道题有独立的深度解析,公司面经、Senior 专项和数据方向的系统设计也都从这里进入。
入门级
进阶级
-
设计 Twitter/微博信息流 — 深度解析
- 考点:推拉模型、缓存策略、写放大
- 难度:★★★
-
设计实时聊天系统 — 深度解析
- 考点:WebSocket、消息持久化、离线消息
- 难度:★★★
-
设计分布式文件系统 — 深度解析
- 考点:分块存储、元数据管理、一致性
- 难度:★★★★
高级
真实面试经验(系统设计轮怎么发生)
- Google 系统设计面试真实经历 — 完整面经:L5 候选人视角的 Google SD 轮,追问节奏和评分逻辑
- Senior / Staff 系统设计怎么考 — L5/L6 分级解析:同一道题在 L4/L5/L6 的追问深度差异
数据方向系统设计
Data Engineer / 数据平台岗的系统设计不是 URL shortener,而是实时管道、数据质量、回填、湖仓建模。题型分类和 10 篇深度案例见 Data Engineer 面试题的 DE System Design 题型地图。
提示: 不要试图记住所有题目的答案。掌握核心设计模式和权衡取舍,你就能应对任何题目。
各公司系统设计面试特点
不同公司的系统设计面试侧重点不同。了解这些差异能让你更精准地准备。
Meta(Facebook)
特点:
- 注重规模估算和trade-offs
- 喜欢问开放性问题,没有标准答案
- 强调”为什么”而不是”是什么”
常见题目:
- 设计 Facebook News Feed
- 设计 Messenger
- 设计 Instagram Stories
准备策略:
- 重点练习容量估算(QPS、存储、带宽)
- 准备讨论一致性 vs 可用性的 trade-off
- 关注 Meta 的技术博客(engineering.fb.com)
特点:
- 注重API 设计和数据模型
- 喜欢深入细节(如”如果数据库宕机怎么办?”)
- 强调可扩展性和容错
常见题目:
- 设计 Google Drive
- 设计 Google Maps
- 设计分布式键值存储
准备策略:
- 练习清晰定义 API 接口
- 准备讨论分布式一致性协议
- 阅读 Google 的学术论文(Bigtable、Spanner、MapReduce)
Amazon
特点:
- 结合Leadership Principles评估
- 注重客户至上和简约
- 喜欢问”如果资源有限,你先实现什么?”
常见题目:
- 设计 Amazon 购物车
- 设计 AWS S3
- 设计订单处理系统
准备策略:
- 用 STAR 方法解释设计决策
- 强调客户体验和业务价值
- 准备讨论 MVP(最小可行产品)策略
Netflix
特点:
- 注重混沌工程和故障注入
- 喜欢问”如果某个组件失败,系统如何降级?”
- 强调自动化和弹性
常见题目:
- 设计视频流媒体服务
- 设计推荐引擎
- 设计 Chaos Monkey
准备策略:
- 重点练习故障场景分析
- 准备讨论熔断、降级、限流策略
- 关注 Netflix 技术博客(Netflix Tech Blog)
准备策略
第一阶段:学习基础知识(2-3 周)
必读资源:
- 《Designing Data-Intensive Applications》(DDIA)— 系统设计圣经
- 《System Design Interview》by Alex Xu — 面试实战指南
- Grokking the System Design Interview — 在线课程
学习路径:
- 先理解核心概念(数据库、缓存、负载均衡)
- 学习经典系统设计模式(CDN、微服务、事件驱动)
- 练习 3-5 道经典题目
第二阶段:实战练习(3-4 周)
练习方法:
- 纸上画图:不要直接在电脑上写代码,用纸笔画架构图
- 计时练习:每道题 45 分钟,模拟考试环境
- 录音回放:录下自己的回答,检查是否清晰、有逻辑
练习频率:
- 每周 2-3 道题目
- 每道题至少练习 2 遍(第一次学习,第二次模拟面试)
推荐练习题目:
- URL 短链服务
- Rate Limiter
- Twitter 信息流
- 聊天系统
- 分布式文件系统
第三阶段:模拟面试(2-3 周)
模拟面试平台:
- interviewing.io — 免费模拟面试
- Pramp — Peer-to-peer 练习
- Gainlo — 真实面经和大佬模拟
模拟面试要点:
- 找有系统设计面试经验的人
- 模拟真实环境(计时、白板/共享文档)
- 请求具体反馈(“我哪里讲得不够清晰?“)
第四阶段:查漏补缺(1-2 周)
复习清单:
- 核心知识点(数据库、缓存、负载均衡、消息队列)
- 5 步回答框架
- 容量估算公式
- 常见 trade-offs
- 目标公司的面试特点
最后准备:
- 复习自己做过的题目
- 准备 2-3 个”杀手级”设计(能深入讨论的细节)
- 调整心态,系统设计面试是展示你工程思维的
💡 需要面试辅导?
如果你对准备技术面试感到迷茫,或者想要个性化的面试指导和简历优化,欢迎联系 Interview Coach Pro 获取一对一辅导服务。
👉 系统设计 Mock 面试服务 预约针对性系统设计训练,或 联系我们 获取专属面试准备方案
FAQ
系统设计面试最常见的评分标准是什么?
常见评分维度包括需求澄清、API 设计、数据模型、核心组件、扩展性、容错、容量估算、trade-off 和沟通结构。不同公司权重不同,但面试官基本都会看你能不能把设计从模糊题面推进到可落地架构。
System design interview 需要背多少题?
不建议只背题。更有效的是掌握 6-8 类系统:feed、chat、search、storage、rate limiter、recommendation、payment/job scheduler 和 analytics pipeline。每类准备一套高质量答案,再练 follow-up。
L4/L5 和 Senior 系统设计有什么区别?
L4/L5 更看重完整性和基础 trade-off,Senior 更看重边界判断、故障模式、组织复杂度和长期演进。Senior 候选人不能只说“加缓存、加 MQ、分库分表”,还要说明为什么、什么时候不该这样做,以及如何验证系统表现。
System Design 该自学还是上 1对1 mock?
框架和常见系统(feed、chat、search 等 6-8 类)可以先自学搭建;但 follow-up 深挖和表达结构必须靠真人 mock 练。这篇路线对比里按剩余时间和瓶颈给了具体建议,Senior 岗位因为追问更深,真人反馈的性价比最高。
系统设计面试每天需要学多久?
6 周、每天 3-5 小时够用:第 1-2 周打基础(容量估算、负载均衡、缓存、数据库分片),第 3-4 周过 6-8 个核心系统,第 5-6 周限时 mock + follow-up 深挖。关键是每天练习”把设计大声讲出来”,系统设计是口头表达题,不是默写题。
系统设计和分布式系统课程/认证有什么区别?
分布式系统课程偏协议正确性(Raft、2PC、CAP 证明),面试偏工程 trade-off 和沟通结构。面试不需要证明 CAP 定理,但要能清楚说出”这个场景我为什么选 AP 不选 CP,代价是什么,怎么验证”。把课程知识翻译成面试语言是准备的核心动作。
应届生面试需要系统设计吗?
大多数大厂(Google、Meta、Amazon 等)应届生轮次包含系统设计,但深度明显低于社招:重点在需求澄清、基础架构和找出瓶颈,不要求多 region 部署、复杂故障恢复和成本优化。把 6-8 个核心系统的”基础版”讲清楚,再加容量估算,应届生就够用了。
相关面试辅导
如果你正在准备类似面试,可以直接从下面的专项辅导开始。