系统设计面试题

目录概述

系统设计类题目没有标准答案,考的是你在约束条件下的权衡能力和架构思维。这是 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
  • 数据安全:加密、脱敏、审计
  • 接口防护:防刷、签名验证
  • 敏感数据:密码存储、密钥管理

面试题分级

级别考察重点期望回答判分标准
P6基础概念、单一模块设计能给出基本方案入门过关
P7完整系统设计、方案对比能权衡利弊,给出合理方案深度过关
架构大规模系统、容量规划能设计完整方案,评估工程代价经验闭环

高频必考题 🔴

设计一个短链接系统

面试官问:"设计一个短链接系统,支持每天 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 好处"。这种权衡意识是架构师的核心素质。

工程代价评估

运维成本

分布式系统引入后会大幅增加运维复杂度。需要考虑:监控告警、故障排查、灰度发布、回滚方案、灾备切换。

排障复杂度

分布式环境下,一个请求经过多个服务,问题定位困难。需要完善的链路追踪、日志聚合、监控告警体系。

扩展性

架构设计要考虑未来的扩展性。过度设计会导致复杂度上升,设计不足会导致重构成本高。

避坑指南

过度设计

不要一开始就想设计一个完美的分布式系统。创业公司、业务初期,单体架构可能是更好的选择。架构演进要跟随业务发展。

技术选型跟风

不要因为某个技术火就用它。要根据业务场景、技术团队能力、运维成本来选型。适合的才是最好的。

忽略一致性

分布式环境下,一致性是最大的挑战。不要忽视数据一致性问题,否则会在生产环境付出惨痛代价。

导航指引