先读这个:面试的形式和重点变得很快,这里的内容有时效性;这里只写公开的资源和我自己的理解,不写任何一家公司的面试题或流程。

我也还在补系统设计。这页保留我读过的公开资源和一些思考;想动手练习,可以先去系统设计练习,从信息流、RAG 或带记忆的助手选一个。

没有固定公式

我的体会是,系统设计没有一套背下来就能用的模板。真正被考察的是两件事:你知不知道每个选择的 trade-off,以及你能不能把整个系统串起来。

所以从最基本的出发就行:

  1. 要解决的是什么问题?成功长什么样?
  2. 手里有什么数据?没有什么数据?
  3. 约束是什么——规模、延迟、成本、freshness?
  4. 每一步选这个方案,放弃了什么?

一个例子:推荐系统

比如要做推荐。先看手上有什么:

  • 如果有关注、好友或互动关系,可以先用这些关系找候选(candidate)。图也不只指社交图:PinSage 用的是 Pinterest 的物品与收藏板关系,别把几种不同的数据结构混为一谈。
  • 如果没有关系数据呢? 那就退回到行为本身:item–item 的共现、双塔(dual-encoder)召回、内容特征(标题、类目、多模态 embedding)。冷启动(cold start)阶段,内容特征和热门兜底往往比复杂模型更管用。

再往下每一层都是取舍:召回要多快、排序能用多大的模型、特征要多新鲜、离线指标涨了线上会不会涨、复杂度值不值得维护。把这些说清楚,比背一套架构图有用得多。

公开资源

通用系统设计:

ML / 推荐方向:

站内相关

本页术语 3
候选 candidate
召回阶段捞出来、等待精排挑选的内容
双塔 dual-encoder
用户和内容各一个编码器,映到同一向量空间靠内积召回
冷启动 cold start
用户或内容缺少历史证据,模型只能靠先验