今年早些时候我做了 OpenAI 的 system design 轮,面的是 senior(大概 L5)岗位。面完我就记了笔记,因为知道肯定有人会问。这里写个真实情况。
形式:60 分钟,一个面试官,虚拟白板(看人,有的用 Excalidraw,有的用共享文档)。不会提前给定题目。
我拿到的题:设计一个可实时协作的文档编辑系统,并且要能 scale。类似 Google Docs,但他们希望我深入到 operational transform vs CRDT、冲突解决、以及存储层。这不是那种泛泛的「设计 Twitter」。题目足够具体,浅层答案会很快撑不住。
补充一下背景:我做分布式系统 12 年了,这题依然很烧脑。
他们看起来在乎的点: 把 tradeoff 讲清楚。不只是选一个方案,而是要说「我选这个是因为 X,我接受 Y 的代价」。 容量估算要粗但要快,不要陷在算数学 20 分钟。 故障模式,以及系统怎么优雅降级。 运维侧考虑:监控、发布、下游服务炸了会怎样。
不太在乎的点:每个 AWS 服务名字都对,或者背特定 Kafka partition 数。他们明显更在意思考过程,不在意词汇量。
Level calibration 备注:面试官事后跟我说(给 offer 之后),他们的 rubric 里 L5 和 L4 的差别在于你能不能主动推进设计,还是每一步都需要别人提示。L5 应该在掌舵,不是跟随。
准备上我主要是复习分布式系统基本功,又重读了 Designing Data-Intensive Applications 里复制和一致性相关的章节。对这轮来说,这确实是最有效的准备。
如果你接下来要面 system design,欢迎问更细的。