系统设计完全指南:从零基础到面试高手
🎯 快速导航
本文定位: 系统设计系列文章总入口 · 面试准备地图 · 核心考点快速索引
阅读建议:
📊 核心中间件文章索引(面试必读)
存储与数据库
01-middleware-mysql.md ⭐⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 60 分钟 |
| 面试频率 | 极高 |
| 核心考点 | MVCC 原理 · Next-Key Lock · B+ 树 vs 红黑树 · 主从复制 · 分库分表 |
| 深度内容 | ✅ MVCC 三大组件(隐藏列/undo log/ReadView) ✅ RC vs RR 的 ReadView 差异 ✅ B+ 树存储容量计算 ✅ 主从延迟解决方案 |
| 面试准备 | 建议掌握 MVCC、锁机制、索引优化 3 大核心 |
缓存系统
02-middleware-redis.md ⭐⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 50 分钟 |
| 面试频率 | 极高 |
| 核心考点 | 数据类型底层实现 · 持久化 · 分布式锁 · 缓存问题(穿透/击穿/雪崩) |
| 面试准备 | 重点:Redis vs Memcached、分布式锁、缓存雪崩 |
消息队列
03-middleware-kafka.md ⭐⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 45 分钟 |
| 面试频率 | 极高 |
| 核心考点 | 零拷贝原理 · 消息不丢配置 · Exactly-once · Rebalance 优化 · 分区策略 |
| 深度内容 | ✅ 零拷贝 vs 传统拷贝 4 次对比 ✅ Exactly-once 实现(幂等+事务) ✅ 生产级 Go 代码示例 ✅ 5 个生产踩坑案例 |
| 面试准备 | 必问:为什么 Kafka 快?如何保证消息不丢?面试 20 题 |
搜索引擎
04-middleware-elasticsearch.md ⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 40 分钟 |
| 面试频率 | 高 |
| 核心考点 | 倒排索引原理 · 深分页问题 · 脑裂与 quorum · 分片与副本 |
| 深度内容 | ✅ 倒排索引结构 + Analyzer 工作流程 ✅ BM25 评分算法 ✅ scroll vs search_after 对比 ✅ 脑裂解决方案 |
| 面试准备 | 高频:倒排索引是什么?深分页如何优化?面试 20 题 |
容器与云原生
05-infrastructure-k8s-docker.md ⭐⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 50 分钟 |
| 面试频率 | 极高 |
| 核心考点 | Docker vs VM · Pod 生命周期 · Service 网络 · 故障排查(OOMKilled/CrashLoopBackOff) |
| 深度内容 | ✅ Docker 镜像分层机制 ✅ namespace/cgroup 原理 ✅ Pod 故障排查 3 大场景 ✅ 6 个实用 YAML 模板 |
| 面试准备 | 必会:Docker vs VM、K8s 核心组件、Pod 故障排查、面试 20 题 |
技术设计方法论
06-tech-design-methodology.md ⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 35 分钟 |
| 面试频率 | 中高 |
| 核心考点 | 技术设计文档写作 · 容量评估 · 架构权衡 · SOLID 原则 |
| 面试准备 | 适用场景:如何写技术设计文档?如何评估系统容量? |
系统可靠性工程
07-system-reliability-engineering.md ⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 45 分钟 |
| 面试频率 | 中高 |
| 核心考点 | SRE 层次结构 · 监控告警 · 高可用架构 · 熔断降级 · SLI/SLO/SLA |
| 面试准备 | 重点:如何保证系统高可用?熔断与降级的区别? |
系统设计面试真题
08-system-design-interview.md ⭐⭐⭐⭐⭐
| 维度 | 内容 |
|---|---|
| 阅读时间 | 90 分钟(分多次阅读) |
| 面试频率 | 极高 |
| 核心考点 | 短链接 · 库存系统 · 秒杀系统 · 实时推荐 · 分布式事务 |
| 面试准备 | 面试前必读! 包含完整设计案例 + 考察点分析 |
🗺️ 学习路线图(3 种时间规划)
方案1:面试冲刺(1-2 周)⚡
目标: 快速掌握高频面试题,通过技术面
Day 1-3: 中间件核心原理(必考)
- ✅ MySQL: MVCC + 索引 + 锁(3 小时)
- ✅ Redis: 数据结构 + 持久化 + 分布式锁(2 小时)
- ✅ Kafka: 为什么快 + 消息不丢(2 小时)
Day 4-5: 容器与云原生(高频)
- ✅ Docker vs VM + K8s 核心组件(3 小时)
- ✅ Pod 故障排查 3 大场景(2 小时)
Day 6-7: 系统设计题目练习
- ✅ 短链接系统(1 小时)
- ✅ 库存系统(1.5 小时)
- ✅ 秒杀系统(1.5 小时)
Day 8-10: 高频 20 题刷题
- ✅ 每天 7 道,3 天刷完 60 道核心题
- ✅ 重点:标准答案 + 追问应对
Day 11-14: 模拟面试 + 复盘
- ✅ 每天 1 道系统设计题,限时 45 分钟
- ✅ 录音/录屏,自我复盘改进
方案2:系统学习(3-4 周)📚
Week 1: 中间件基础
- Day 1-2: MySQL(存储与索引)
- Day 3-4: Redis(缓存与持久化)
- Day 5-6: Kafka(消息队列与流处理)
- Day 7: 复习 + 练习
Week 2: 进阶组件
- Day 1-2: Elasticsearch(搜索引擎)
- Day 3-5: K8s & Docker(容器化)
- Day 6-7: 技术设计方法论
Week 3: 实战案例
- Day 1-3: 电商系统设计(完整案例)
- Day 4-5: 高并发系统设计
- Day 6-7: 可靠性工程
Week 4: 面试准备
- Day 1-3: 刷面试 20 题(每篇文章)
- Day 4-5: 系统设计真题演练
- Day 6-7: 模拟面试 + 复盘
方案3:长期提升(2-3 月)🎓
Month 1: 夯实基础
- 完成所有中间件文章精读
- 每篇文章做笔记 + 总结
- 补充相关技术文档阅读
Month 2: 项目实践
- 选择 2-3 个感兴趣的系统进行设计
- 使用技术设计文档模板记录
- 代码实现核心模块
Month 3: 面试准备
- 系统设计题目全覆盖
- 建立个人设计作品集
- 持续模拟面试
📋 面试高频 20 题(最全汇总)
MySQL(5 题必问)
MVCC 是如何实现的?
- 关键词:隐藏列、undo log、ReadView
- 追问:RC vs RR 的区别?
B+ 树为什么比红黑树适合做索引?
- 关键词:高度低、磁盘 IO 少、范围查询
- 追问:一棵 B+ 树能存多少数据?
Next-Key Lock 是什么?如何避免幻读?
- 关键词:Record Lock + Gap Lock
- 追问:RR 隔离级别下还会幻读吗?
主从复制延迟如何解决?
- 关键词:半同步复制、并行复制、读主库
- 追问:如何监控主从延迟?
分库分表如何设计?
- 关键词:水平分表、垂直分库、分片键选择
- 追问:跨库事务如何处理?
Redis(5 题必问)
Redis 为什么快?
- 关键词:内存操作、单线程、IO 多路复用
- 追问:单线程为什么还能高并发?
Redis 持久化方式有哪些?
- 关键词:RDB、AOF、混合持久化
- 追问:如何选择持久化方案?
缓存雪崩、缓存穿透、缓存击穿如何解决?
- 关键词:过期时间打散、布隆过滤器、互斥锁
- 追问:实际项目中遇到过吗?
Redis 分布式锁如何实现?
- 关键词:SET NX EX、Redlock、可重入
- 追问:主从切换导致锁丢失怎么办?
Redis 集群方案有哪些?
- 关键词:主从复制、Sentinel、Cluster
- 追问:Cluster 如何实现数据分片?
Kafka(5 题必问)
Kafka 为什么这么快?
- 关键词:顺序写、Page Cache、零拷贝
- 追问:零拷贝具体原理?
如何保证消息不丢失?
- 关键词:acks=all、min.insync.replicas、手动提交 offset
- 追问:生产端/Broker/消费端分别如何配置?
Exactly-once 如何实现?
- 关键词:Producer 幂等性、事务、Consumer 幂等
- 追问:Kafka 事务与数据库事务的区别?
Rebalance 是什么?如何优化?
- 关键词:消费者组 Partition 重新分配
- 追问:如何减少 Rebalance 频率?
Kafka 消费者如何实现负载均衡?
- 关键词:Consumer Group、Partition 分配
- 追问:消费者数量超过 Partition 数会怎样?
Elasticsearch(3 题必问)
倒排索引是什么?
- 关键词:关键词 → 文档列表、Analyzer
- 追问:与正排索引的区别?
深分页问题如何解决?
- 关键词:scroll、search_after
- 追问:为什么 from+size 深分页性能差?
脑裂问题如何解决?
- 关键词:quorum 机制、minimum_master_nodes
- 追问:如何设置 minimum_master_nodes?
K8s & Docker(2 题必问)
Docker 和虚拟机有什么区别?
- 关键词:共享内核、namespace、cgroup
- 追问:为什么容器启动快?
Pod 的 OOMKilled 如何排查?
- 关键词:内存超限、resources.limits.memory
- 追问:如何合理设置资源限制?
💡 核心概念速查表
可扩展性策略
| 场景 | 解决方案 | 技术实现 | 相关文章 |
|---|---|---|---|
| 读多写少 | 缓存+读写分离 | Redis + MySQL主从 | 01, 02 |
| 写多读少 | 消息队列异步 | Kafka + 批量写入 | 03 |
| 两者都多 | 分库分表+缓存 | ShardingSphere + Redis集群 | 01 |
| 热点数据 | 多级缓存+CDN | 本地缓存+Redis+CDN | 02 |
可用性保障
| 级别 | 年宕机时间 | 实现方案 | 相关文章 |
|---|---|---|---|
| 99% | 3.65天 | 单机+定期备份 | - |
| 99.9% | 8.76小时 | 主从复制+自动故障转移 | 01 |
| 99.99% | 52分钟 | 多可用区+负载均衡 | 07 |
| 99.999% | 5分钟 | 多地多活+智能路由 | 07 |
数据一致性选择
| 一致性级别 | 适用场景 | 技术实现 | 相关文章 |
|---|---|---|---|
| 强一致性 | 金融交易 | 分布式事务(2PC, TCC) | 08 |
| 最终一致性 | 社交动态 | 消息队列+重试 | 03 |
| 会话一致性 | 用户会话 | 粘性会话+缓存 | 02 |
🎯 面试准备检查清单
基础知识(必须掌握)
- MySQL: MVCC 原理、B+ 树、锁机制
- Redis: 数据结构、持久化、分布式锁
- Kafka: 零拷贝、消息不丢、Rebalance
- Elasticsearch: 倒排索引、深分页
- K8s: Docker vs VM、Pod 故障排查
系统设计题(至少 3 道)
- 短链接系统(入门)
- 库存系统(中级)
- 秒杀系统(高级)
沟通能力(重要)
- 能在 30 秒内说清楚核心原理
- 能画出系统架构图
- 能主动提出权衡方案
实战经验(加分项)
- 有实际项目经验(分库分表、缓存优化、限流降级)
- 遇到过线上问题并解决(OOM、慢查询、消息堆积)
- 参与过技术方案设计
🚀 立即行动指南
如果你是初学者(0 基础)
建议路线: 方案2(系统学习 3-4 周)
如果你有一定基础(1-2 年经验)
建议路线: 方案1(面试冲刺 1-2 周)
- 直接刷 面试高频 20 题
- 查缺补漏:不熟悉的知识点回到对应文章深度阅读
- 每天 1 道系统设计题,限时练习
- 模拟面试 + 复盘改进
如果你准备跳槽(紧急)
建议路线: 快速突击(3-5 天)
- Day 1: MySQL MVCC + Redis 分布式锁(6 小时)
- Day 2: Kafka 消息不丢 + K8s 核心组件(6 小时)
- Day 3: 库存系统 + 秒杀系统(6 小时)
- Day 4-5: 面试 20 题全刷 + 模拟面试(12 小时)
📚 学习资源推荐
绘图工具
- Excalidraw - 手绘风格,面试神器
- Draw.io - 功能全面,免费开源
- Mermaid - 代码生成图表(本文同款)
练习平台
- LeetCode 系统设计 - 免费题库
- system-design-primer - GitHub 190k+ stars
我的文章合集
📝 学习进度追踪模板
复制以下内容到你的笔记中,追踪学习进度:
1 | ## 系统设计学习进度 |
🎓 最后的话
系统设计能力的提升,不是一次飞跃,而是每天进步一点点。
现在,选择你的起点,开始行动吧!
系列导航:
更新计划:
- 每周更新 1-2 篇深度技术文章
- 持续补充面试真题解析
- 欢迎在评论区提问交流!