面试复习计划:第 1 周完全展开版
适用方式:
- 配合主文件《面试复习计划(6周,偏 System Design)》一起用
- 这一份专门负责“第 1 周每天到底怎么学”
- 你每天只要打开这一个文件,按当天清单走即可
第 1 周总目标:
- 重建 system design 面试答题框架
- 把基础件的名字和作用重新连起来
- 能完整讲出 2 道最基础高频题:URL Shortener 和 Rate Limiter
- 开始形成“会讲、会复盘、会补洞”的节奏
本周总原则:
- 不求讲得高级,先求讲得完整
- 不求把所有知识点都啃完,先求每次都能输出
- 每天 30 分钟版本做完就算完成
- 每次结束一定留 2–5 分钟写复盘
第 1 周每天固定动作
每天都尽量做这 4 步:
- 热启动(3–5 分钟)
- 回顾昨天记下的 1–2 个卡点
- 用一句话说出今天最重要的任务
- 主学习(15–35 分钟)
- 看今天指定资料
- 只看和今天任务相关的部分
- 输出(8–15 分钟)
- 口述、手写提纲、简短复盘,至少做一种
- 收尾(2–5 分钟)
- 记录:我今天最卡的点是什么
- 记录:明天开始前我要先回顾什么
你本周会反复用到的速查卡
速查卡 1:System Design 开场骨架
你可以先按这个模板说:
“我先快速确认一下需求和边界,再给一个 high-level design。然后我会展开核心数据模型、主要读写链路,再讨论瓶颈、扩展性、可靠性和 trade-off。如果有时间,我最后补一下监控、容灾和后续演进。”
速查卡 2:本周基础件一句话
- Replication:提升可用性和读扩展,但会带来复制延迟和一致性问题
- Sharding:解决容量和写扩展问题,但会带来热点、迁移和跨分片复杂度
- Cache:降低延迟、扛热点,但难点在一致性和失效保护
- Queue:异步化、解耦、削峰,但会带来幂等、重试、消息重复等问题
- Rate Limiter:保护系统、防滥用、做配额控制
- Load Balancer:让多实例服务可以稳定接流量
- CDN:加速静态资源分发,降低源站压力
速查卡 3:复盘时必问自己
- 我有没有先澄清需求?
- 我有没有先给高层设计?
- 我是不是太早钻进细节?
- 我有没有主动讲瓶颈和扩展?
- 我有没有讲出至少一个 trade-off?
周一:重建 system design 答题框架
今日唯一目标:
- 不看资料,也能说出一套完整的 system design 答题顺序
今天要看的资料:
- 主文件中的:
- System Design 标准答题框架
- 附录 B:面试开场模板
- 附录 B:澄清需求时常问的问题
- 附录 B:常用高层组件及一句话用途
30 分钟版
- 5 分钟:读一遍答题框架
- 10 分钟:自己手写 7 步答题顺序
- 10 分钟:用自己的话解释每一步是在干什么
- 5 分钟:写复盘
45–60 分钟版
- 5 分钟:回顾今天目标
- 15 分钟:读答题框架 + 附录 B
- 15 分钟:写一个你自己的开场白版本
- 10 分钟:假装面试,口述 1 次开场
- 5–10 分钟:记录不顺的地方
今天必须产出的东西
至少产出这两项:
- 你自己的中文开场白版本
- 你自己的 7 步答题框架缩略版
你可以直接照着下面这个模板写:
- 第一步:澄清需求
- 第二步:确认规模和优先级
- 第三步:先给高层设计
- 第四步:展开数据模型和主要链路
- 第五步:找瓶颈和扩展点
- 第六步:讲可靠性和失败场景
- 第七步:讲 trade-off 和演进
今天的复盘问题
- 我最容易忘的是哪一步?
- 我一开口会不会太散?
- 我能不能在 90 秒里把答题结构先立住?
周二:Cache + 一道 LeetCode 保底题
今日唯一目标:
- 能用通俗的话解释 cache 为什么需要、会出什么问题、怎么补救
今天要看的资料:
- 主文件附录 C:Cache
- 主文件附录 E:Array / String、HashMap / Set、Two Pointers、Binary Search(按你选题需要看)
今日 LeetCode 要求
只做 1 题,难度简单或中等即可。 可选方向:
- Array
- HashMap
- Two Pointers
- Binary Search
不要追求多,重点是:
- 做完
- 复盘
- 维持手感
30 分钟版
- 5 分钟:回顾昨天的答题框架
- 10 分钟:看 Cache 速记资料
- 10 分钟:口述“cache 为什么需要,有哪些坑”
- 5 分钟:记录今天的 1 个卡点
如果你今天想把 30 分钟都给 LeetCode,也可以这样分配:
- 15 分钟:LeetCode 1 题
- 10 分钟:Cache 口述
- 5 分钟:复盘
45–60 分钟版
- 10 分钟:读 Cache 资料
- 20–25 分钟:做 1 道 LeetCode
- 10 分钟:口述 cache aside、热点 key、失效一致性
- 5–10 分钟:写简短复盘
今天口述时至少要提到
- cache 的目标:降低延迟、减轻 DB 压力、扛热点
- cache aside 是什么
- cache miss 是什么
- 热点 key 失效会有什么问题
- DB 和 cache 为什么会不一致
- 至少 1 个常见解法:TTL 抖动 / single flight / 布隆过滤器 / 热 key 保护
今天的复盘问题
- 我能不能不用术语也把 cache 讲清楚?
- 我是不是只会说“加 Redis 就好了”?
- 我有没有讲到一致性和热点保护?
周三:完整练 URL Shortener
今日唯一目标:
- 第一次完整讲一遍系统设计题,不追求完美,只追求完整
今天要看的资料:
- 主文件附录 D:URL Shortener
- 主文件附录 B:答题框架
- 主文件附录 C:Cache(如果你昨天讲得不顺)
讲题时建议顺序
- 先澄清:
- 是否支持自定义 alias
- 是否需要过期时间
- 是否需要点击统计
- 规模大概多大
- 再给高层设计:
- 用户请求创建短链接
- 服务生成短码
- 落库
- 用户访问短链时先查 cache,再查 DB,再 redirect
- 再展开关键点:
- short code 如何生成
- 如何避免冲突
- 为什么读路径适合上 cache
- 热点短链怎么处理
- 最后补 trade-off:
- 自增 ID + Base62 vs 随机短码
- 可预测性 vs 实现简单度
30 分钟版
- 5 分钟:看 URL Shortener 最小资料
- 15 分钟:自己完整讲 1 遍
- 5 分钟:对照复盘模板打分
- 5 分钟:写下最卡的 2 个点
45–60 分钟版
- 10 分钟:重读最小资料
- 20 分钟:完整讲 1 遍
- 10 分钟:补充没讲到的点
- 10 分钟:再讲一遍精简版
- 5–10 分钟:写复盘
今天最容易犯的错
- 一上来就钻进 Base62 或 hash 算法细节
- 没先讲读写路径
- 没提 cache
- 没提热点 URL
- 没讲 trade-off
今天复盘时最好写下
- 我开场是否稳
- 我在哪一步开始乱
- 我最不会展开的是:ID 生成 / cache / 扩展 / 统计
周四:Replication vs Sharding + 一道 LeetCode 保底题
今日唯一目标:
- 真正把 replication 和 sharding 区分开
今天要看的资料:
- 主文件附录 C:Replication
- 主文件附录 C:Sharding / Partitioning
- 主文件附录 E:保底题型(按你今天选题)
你今天必须讲清楚的核心区别
Replication:
- 核心是高可用、读扩展
- 不是为了把数据水平拆开
Sharding:
- 核心是容量扩展、写扩展
- 不是为了做主从备份
30 分钟版
- 5 分钟:回顾昨天 URL Shortener 最卡点
- 10 分钟:读 replication / sharding 速记
- 10 分钟:口述两者差别
- 5 分钟:写 3 句话总结
45–60 分钟版
- 10 分钟:读资料
- 20–25 分钟:LeetCode 1 题
- 10 分钟:口述两者区别和典型副作用
- 5–10 分钟:写复盘
你今天至少要说出来的内容
Replication 的代价:
- replica lag
- stale reads
- failover 复杂度
Sharding 的代价:
- 热点分片
- 跨分片查询
- 跨分片事务
- 数据迁移
今天的复盘问题
- 如果面试官问“为什么不直接分库分表”,我会不会答偏?
- 我能不能讲出 replication 和 sharding 解决的是两类不同问题?
- 我有没有把“代价”讲出来?
周五:完整练 Rate Limiter
今日唯一目标:
- 能讲出至少两种限流算法,并说出为什么会选某一种
今天要看的资料:
- 主文件附录 C:Rate Limiter
- 主文件附录 D:Rate Limiter
- 主文件附录 B:答题框架
讲题时建议顺序
- 先澄清:
- 以什么维度限流:IP / user / token / tenant
- 限流粒度:秒 / 分钟 / 天
- 是否需要允许 burst
- 是否是单机还是分布式
- 再给高层设计:
- 在 gateway / middleware 层拦截
- 用 Redis 或本地内存保存计数
- 依据算法判断是否放行
- 再展开算法:
- Fixed Window
- Sliding Window Counter
- Token Bucket
- Leaky Bucket(知道即可)
- 最后讲 trade-off:
- 简单 vs 精确
- 内存成本 vs 算法效果
- 本地状态 vs 分布式共享状态
30 分钟版
- 5 分钟:看最小资料
- 15 分钟:完整讲一遍题
- 5 分钟:补一句“分布式怎么做”
- 5 分钟:写复盘
45–60 分钟版
- 10 分钟:读资料
- 20 分钟:完整讲一遍
- 10 分钟:刻意补算法 trade-off
- 10 分钟:再讲一遍精简版
- 5–10 分钟:写复盘
今天至少要讲到
- 为什么要限流
- 放在哪一层做
- key 维度怎么选
- 分布式状态怎么共享
- 为什么 token bucket 常用
- Redis 可能成为新瓶颈怎么办
今天最容易犯的错
- 只背算法名字,不讲适用场景
- 不讲 burst
- 不讲分布式
- 忘了 key 设计
周六:本周深度复盘 + 重讲一题
今日唯一目标:
- 把“看过了”变成“我真的能讲”
今天要看的资料:
- 本周你自己的所有复盘
- 主文件中的每道题复盘模板
- 主文件附录 B:答题框架
今天推荐做法
先做表格复盘,给自己打分(1–5 分):
- 澄清需求
- 高层设计
- 数据模型/链路
- 瓶颈和扩展
- reliability / failure modes
- trade-off
- 表达清晰度
然后从这两题里选 1 题重讲:
- URL Shortener
- Rate Limiter
30 分钟版
- 10 分钟:回看本周复盘
- 15 分钟:重讲 1 道题
- 5 分钟:写出下周最该补的 2 个点
45–60 分钟版
- 10 分钟:整理本周问题清单
- 20 分钟:重讲 1 道题
- 10 分钟:针对最弱环节再补一句解释
- 10 分钟:写一版“下周提醒自己别再犯的错误”
今天复盘重点
- 我最常漏掉的环节是什么
- 我最容易一紧张就钻进哪里
- 我到底是不会,还是只是讲不顺
周日:轻总结 + 为第 2 周铺路
今日唯一目标:
- 不开新坑,只总结,并让下周开始更轻松
今天要看的资料:
- 本周自己的复盘
- 主文件第 2 周的目标部分
- 主文件附录 C 里的 SQL vs NoSQL、Message Queue、Observability 标题先扫一眼
30 分钟版
- 10 分钟:回顾本周笔记
- 10 分钟:写本周总结
- 10 分钟:把下周最该补的 2–3 个点列出来
45–60 分钟版
- 15 分钟:完整复盘本周
- 15 分钟:预览第 2 周主题
- 10 分钟:写出你真实项目里和 cache / queue / metrics 相关的案例标题
- 5–10 分钟:收尾整理
周日总结建议直接写成这 5 句
- 本周我讲过的题:
- 本周我最卡的基础件:
- 本周我最容易漏掉的步骤:
- 下周我最该补的一个点:
- 下周我最想练的一道题:
第 1 周结束时,你应该达到的状态
最低标准:
- 你能说出 system design 的答题框架
- 你能区分 replication 和 sharding
- 你能解释 cache 的作用和常见问题
- 你能完整讲一遍 URL Shortener
- 你能完整讲一遍 Rate Limiter
理想标准:
- 你讲题时已经不太会乱掉顺序
- 你开始会主动补 trade-off
- 你复盘时能准确识别自己是在“知识不熟”还是“表达不顺”
如果某天完全没状态,就做这个“保命版”
只做 15 分钟也可以:
- 看 3 分钟今天对应资料
- 讲 7 分钟
- 写 5 分钟复盘
只要你没有完全断掉,就还在节奏里。
你可以直接复制使用的每日复盘模板
日期: 今天主题: 我今天完成了什么: 我最卡的点: 我最想下次讲得更好的地方: 明天开始前先回顾什么:
你可以直接复制使用的每周复盘模板
本周我完整讲了哪几道题: 本周我最不熟的基础件: 本周我最容易漏掉的环节: 本周我的表达问题更像是:太散 / 太快 / 太虚 / 太细 下周最该补的一个知识点: 下周最想重讲的一道题: