System of record vs derived timeline
Post/Follow 是事实;Feed table 是可重建派生状态。面试要说清 replay、lag、dedupe 和 stale user semantics。
本周只有三条线:FB News Feed 学派生 feed 与 fan-out;FB Live Comments 学 durable log + realtime delivery;Instagram 先盲做再迁移,专门暴露 media path 带来的新瓶颈。
读扩展在 Week 2 已经接受;Week 3 只推进 feed 和 realtime:写入事实、派生状态、投递通道、断点恢复。
Post/Follow 是事实;Feed table 是可重建派生状态。面试要说清 replay、lag、dedupe 和 stale user semantics。
大量 followees 伤 read,大量 followers 伤 write,celebrity 需要 read-time merge;hot post cache 要和 mutable aggregates 分开。
评论事实在 log/store;SSE/WebSocket 只是投递。Last-Event-ID、offset、replay 和 backpressure 定义恢复窗口。
周级目录只放项目首页链接,不放任何小节 fragment;具体 section anchors 在 day 页面和 production record 中核对。
核心项目,完整覆盖 requirements/API/data model/HLD/deep dives/Bad-Good-Great/failure/metrics。
核心项目,完整覆盖 requirements/API/data model/HLD/deep dives/Bad-Good-Great/failure/metrics。
迁移项目,必须先盲做,再用 live heading 校正复用和失效假设。
下面只列问题和 subsection 名称;具体 anchor URL 在 day 页面上打开并由外部 anchor checker 校验。
| 日 | 项目问题 | DDIA subsection | 改变的决定 |
|---|---|---|---|
| Day 1 | News Feed 写入成功后,作者自己刷新 feed 为什么不能丢自己的新帖? | Ch6 · 读己之写 | 作者视角可走 read-your-writes path:新帖由 Post store 确认后直接合并进作者 feed,不能只等异步 fan-out。 |
| Day 1 | 分页时读副本落后会造成什么体验问题? | Ch6 · 单调读 | 同一 feed session 绑定 cursor/version,避免第 2 页看见比第 1 页更旧的世界。 |
| Day 2 | Feed table 是事实还是派生状态? | Ch13 · 维护派生状态 | Post 与 Follow graph 是事实;per-user feed rows 是可重建派生状态,因此要有 lag、replay、repair 指标。 |
| Day 2 | fan-out worker 重试为什么必须幂等? | Ch12 · 幂等性 | feed insert key 使用 (viewerId, postId),重复事件只刷新位置/score,不产生重复 feed item。 |
| Day 2 | 如何看见派生 feed 已经落后? | Ch13 · 观察派生数据状态 | 公开 per-shard fan-out lag、oldest unprocessed event、repair backlog,而不是只看 API p99。 |
| Day 3 | Live Comments 的 comment log 和广播通道是什么关系? | Ch12 · 基于日志的消息代理 | durable comment append 是可回放事实;SSE/WebSocket 是低延迟投递,不承担永久历史。 |
| Day 3 | 客户端 reconnect 时从哪里补漏? | Ch12 · 消费者偏移量 | 客户端保存 lastCommentId/Last-Event-ID,服务端从 durable log/cache 读取 since cursor 后继续直播。 |
| Day 4 | 评论生产速度超过某些消费者时系统应该做什么? | Ch12 · 当消费者跟不上生产者时 | 普通直播允许丢低价值实时动画但不丢可回放 comment log;mega stream 可切采样/CDN snapshot。 |
| Day 4 | 断线后是否能重播旧评论? | Ch12 · 重播旧消息 | reconnect/catch-up 可以重放 since cursor;服务端要控制 retention、limit 与过期后的 snapshot/fallback。 |
| Day 4 | 直播评论如何把状态变化主动推给客户端? | Ch13 · 将状态变更推送给客户端 | SSE 是服务器推送的状态变化流;客户端仍以 cursor/log 作为恢复边界。 |
| Day 5 | Instagram feed 迁移时,media metadata cache 是什么派生视图? | Ch13 · 物化视图和缓存 | feed row 只携带 post/media pointers;thumbnail/transcode/CDN metadata 是派生读模型,必须能从 media pipeline 重建。 |
| Day 7 | 周末验收如何量化复制滞后,而不是口头说 eventual consistency? | Ch6 · 监控陈旧性 | scorecard 必须记录 feed freshness、fan-out lag、comment reconnect gap、derived-view repair backlog。 |
沿用 Week 2 已验收作息:08:30 wake、08:50—10:55 system design、14:30—16:15 三道 Stack、20:30—21:15 口述/mock。
| 时间 | Week 3 不变量 | 验收证据 |
|---|---|---|
| 08:30 | wake,不塞课程。 | 所有 day 页面显式保留。 |
| 08:50—10:55 | 系统设计主块,先闭卷再精读。 | 每天 4 个 bounded segment。 |
| 14:30—16:15 | NeetCode Stack,连续单一 tag,每天 3 题。 | 21 个 data-neetcode-slot。 |
| 20:30—21:15 | recall / Q&A / mock repair。 | scorecard 记录 timestamp。 |
Week 3 到 reviewer gate 为止;不推进 Week 4。
把 feed 讲成“事实状态 + 派生 timeline”的问题,而不是一上来堆 cache、queue、ranking。
进入完整覆盖 News Feed deep dives:大量 followees、大量 followers、热门 post cache;产出可面试的 hybrid fan-out。
进入把 live comments 拆成 durable comment log + realtime delivery;不要把 WebSocket 当作数据库。
进入完整覆盖 Live Comments deep dives:实时广播、百万并发、mega stream、断线补漏和降级。
进入把 Instagram 当迁移题:先独立设计,再读 live 目录,只保留真正迁移成功的机制。
进入两道 CORE 都进入完整面试时间盒;至少一次能在 45 分钟内闭环到 failure/recovery/metrics。
进入只收敛 Week 3:检查 heading disposition、DDIA anchors、mock、scorecard、移动视觉,不预读 Week 4。
进入本周只接受能改变 fan-out、streaming、derived state 或 realtime delivery 工程判断的一手材料。
OpenAI Harness Engineering、Anthropic effective agents/context engineering 属于 agent 工程,不改变本周 hybrid fan-out、SSE/replay、derived feed repair 的核心设计决定;记录为 rejected,不进入日程。
本周证据来自三个 live Hello Interview project inventories 和 DDIA2 的复制滞后、日志消息代理、观察派生状态小节。