几周前刚结束 GitHub senior SWE loop,想趁还新鲜把 system design 部分写下来。先说结论:这是一场真正的技术对话,不是白板羞辱。
这一轮 60 分钟。面试官是 platform team 的一个 staff engineer。前十分钟左右主要是互相介绍,他也讲了下他喜欢怎么跑这场 session。他说得很直白:他更在意我怎么推理 tradeoff,而不是我有没有打中某个清单。
题目是通知投递系统,很符合 GitHub 的气质(watch 订阅、PR 通知、issue mentions 那套)。他们不是丢一句 prompt 就不管了,更像对话。我提一个方案,他加一个约束,我再调整。整体很协作。
聊到的点: 不同订阅模式下,fan-out-on-write vs fan-out-on-read 的区分 怎么处理 bursty load(比如 Linus Torvalds merge 了东西,50k watchers 同时被 ping) 重试的 idempotency、投递层的去重 需要的有序保证不同,Kafka 和更简单队列之间怎么取舍 简单聊了下 outbound email 的 rate-limiting,避免被邮件服务商封
我聊了一点数据库 schema,但他把我拉回到更高层的设计,这个信号挺有用:到这个 level 他们想看的是系统思维,不是列类型。
总共 loop 5 轮,这轮是其中之一。其他轮包括 coding(2 轮)、behavioral、以及一轮 hiring manager conversation。system design 应该是我最强的一轮。
Level 上,这轮目标大概是 senior/IC4 equivalent,不是 staff。我听说 staff 的设计会更广,会加第二个面试官负责部分内容,但我没法确认。
其他轮的问题也欢迎问。