今年早些时候远程走完了 Adobe senior/L5 的 loop,分享下我知道的 system design 轮次细节,因为我进去前几乎找不到具体信息。
system design 轮是 60 分钟,一个面试官。我这场是 Document Cloud 方向的 principal engineer。范围挺宽:设计一个协作文档编辑服务,类似 Google Docs 的那种感觉,但别真的说 Google Docs。主要看这些点: 冲突解决 / CRDT vs OT(我选 CRDT,被追问为什么) 怎么处理大文档 vs 小而频繁的编辑 存储:热数据 vs 冷数据,你到底把什么放 blob,什么放结构化 DB 光标和实时在线状态:WebSocket、SSE、轮询的取舍
没人指望你白板画得完美。真正加分的是你能不能自信地把取舍讲清楚。我大概被打断了五次,听到「why not just X(为什么不直接用 X)」。他们想看的是你怎么接住这个问题,而不是你一开始就有完美答案。
difficulty:说实话比 Google/Meta 的 system design 简单,更偏对话式。面试官技术很强但挺合作的,不是那种故意挖坑。
有个让我意外的点:他们花了大概 10 分钟聊 API layer,特别是 REST vs GraphQL,以及你会不会暴露 batch mutation endpoint。我觉得这可能跟 Creative Cloud / Document Cloud 的业务语境有关,其他 org 未必会问。
准备的话:我会猛练分布式实时系统、CDN 设计、事件驱动架构。Grokking System Design 还行,但覆盖不到协同编辑这种 case。可以看看 Designing Data-Intensive Applications 里 CRDTs 那一节。
Adobe 的定级跟 Meta/Google 有点不一样。这里的 L5 大概相当于 senior/IC4,但以我的经验 system design 的 bar 比 Meta E5 低。comp 还可以但不是 top-of-market(我在这个 thread 其他地方发过)。