系统设计

目录概述

系统设计是 P6/P7 面试的战场,也是最能体现工程师"全局视野"的环节。

很多人能写 CRUD,但被问到"如何设计一个秒杀系统"时,要么背了一堆名词不知所云,要么只想到表面。

这一模块教你从需求出发,用正确的思路量化的估算来拆解系统设计问题,让你在面试中展现出真正的架构能力。

内容范围

系统类型典型场景难度
高并发系统秒杀、抢券、抢红包🔴
分布式存储分布式 ID、文件存储、消息队列🔴
数据系统分布式缓存、数据同步、主从复制🟡
查询系统搜索、推荐、广告系统🟡
消息系统即时通讯、推送、事件驱动🟡

学习路径指引

P5 阶段:能做单点设计

理解单一组件的设计思路和常见方案。

核心要求

  • 如何设计一个分布式 ID 生成器?
  • 雪花算法的原理是什么?
  • 如何设计一个延迟消息队列?

P6 阶段:能做全链路设计

理解整个系统的设计链路和关键权衡。

核心要求

  • 秒杀系统的全链路设计
  • 如何做接口限流和熔断?
  • 热点数据怎么识别和处理?

P7 阶段:能做容量规划和演进决策

理解系统的全貌,能做长期技术规划。

核心要求

  • 如何做容量评估?
  • 如何设计一个可伸缩的架构?
  • 系统达到瓶颈时如何演进?

核心能力矩阵

能力项P5P6P7
设计单一组件
量化估算(TPS、QPS)-
识别系统瓶颈-
设计高可用方案-
权衡:一致性 vs 可用性-
制定扩容和演进计划--

面试题分级

🔴 高频必考

秒杀系统

  • 如何防止超卖?
  • 如何做流量削峰?
  • Redis 缓存失效后怎么避免雪崩?
  • 如何识别和应对黄牛?

分布式 ID

  • 雪花算法的原理和优缺点
  • 时钟回拨问题怎么解决?
  • UID Generator 的优化方案

缓存系统

  • Redis 和 Memcached 的区别?
  • 缓存穿透、缓存击穿、缓存雪崩是什么?
  • 如何保证 Redis 与数据库的双写一致性?

🟡 中频常考

消息队列

  • Kafka 如何保证消息顺序?
  • 如何实现延时消息?
  • MQ 消费幂等性怎么保证?

分布式锁

  • Redis 分布式锁的原理和缺陷
  • Redisson 的 watch dog 机制是什么?
  • Zookeeper 分布式锁 vs Redis 分布式锁

数据库优化

  • 分库分表后怎么查?
  • ShardingSphere 的原理?
  • 如何做数据迁移?

🟢 低频了解

  • 搜索引擎设计(ElasticSearch)
  • 推荐系统设计
  • 广告系统设计

系统设计四步法

很多人拿到系统设计题就懵,不知道从哪里下手。这套四步法能帮你理清思路:

第一步:需求澄清

  • 明确功能范围和优先级
  • 问清楚 QPS、数据量、延迟要求
  • 确认是否有特殊限制(如一致性、成本)

第二步:高层设计

  • 画出核心组件和交互关系
  • 估算数据量和流量
  • 确定技术选型方向

第三步:详细设计

  • 核心数据模型设计
  • 关键接口设计
  • 瓶颈识别和解决方案

第四步:权衡与演进

  • 说出方案的优缺点
  • 讨论可能的演进方向
  • 评估运维成本

生产避坑

过度设计的坑

面试中有人设计了一个"能支撑双十一的系统",结果团队只有 3 个人,根本运维不了。

教训:系统设计要量力而行,合适的才是最好的。

只管设计不管落地的坑

设计了一个完美的分布式事务方案,结果业务团队反馈"这个方案太复杂,改一行代码要改三个地方"。

教训:架构要落地,不能只画图。

忽略监控的坑

系统上线了,但没有任何监控和告警。出问题只能靠用户反馈。

教训:可观测性是系统设计的一部分,不是上线后再加的。

工程选型

场景推荐方案注意事项
瞬时高并发令牌桶限流 + 消息队列削峰限流粒度要合理
热点数据多级缓存 + 热点探测缓存失效要平滑
强一致性同步调用 + TCC考虑超时处理
最终一致性异步消息 + 重试做好幂等设计

【架构权衡】 系统设计没有标准答案,但有高下之分。好的设计能在约束条件下找到最优解,顶级设计能预判未来演进方向。面试中比方案更重要的是思路:你是怎么想的?为什么这么权衡?