今年 2 月我走了 Twitter(X)senior 的 SWE 流程,定级 L5。我想分享 system design 那一轮实际发生了什么,因为老帖全是收购前的,很多东西已经变了。
这一轮 60 分钟,只有一个面试官。不是 panel,就一个人。先给了个热身题确认我真的会画框和箭头,然后直接切到正题:设计 Twitter timeline。对,就是 Twitter timeline 本身。在 Twitter 面 Twitter timeline,还挺诗意的。
他们真正看重的点: fan-out on write vs. fan-out on read 是他们想看我如何取舍的核心矛盾。如果你进去前不知道这是什么意思,会很难。他们想听我怎么推理这种 trade-off,比如 celebrity account(粉丝特别多,不可能每条 tweet 都 fan-out 5000 万次写入)和普通用户之间的差异。
我可能光这一个 trade-off 就花了 15 分钟,在白板上推了一个混合方案。面试官反驳了两次,我觉得这就是目的。他们不是在找标准答案,而是看我会不会被怼两下就垮,还是能站住并把逻辑讲清楚。
他们想要的深度: 大规模 cache invalidation(具体提到了 Redis) 你会怎么处理实时事件的 firehose 粗略 QPS 估算。要有具体数字,不要只说「流量很大」 系统压力上来时最先坏的是哪里
不太重要的: 具体技术选型大多无所谓,只要你能自圆其说。Kafka 还是某种消息队列变体,都不重要。重要的是推理过程。
整个流程 5 轮:2 轮 coding,1 轮 system design,1 轮 behavioral,1 轮 hiring manager chat。coding 是 leetcode medium,其中一题是图。system design 才是真正能把人拉开差距的一轮。
一个让我意外的点:没有 LLD(low level design)轮。就是纯分布式系统设计。所以如果你在准备,要更偏向可扩展性问题,不是类图。
SF L5 最后的 offer comp 大概是 $380K total(base + 目标 RSU),跟我听到的收购后 band 差不多。他们确实把 RSU vesting 比老包稍微压缩了一点。