刚结束 eBay 的 L5 loop(San Jose,投的是 backend platform team)。想把 system design 这一轮记录下来,因为跟我准备的方向不太一样。
这一轮 60 分钟。给我的 prompt 基本是:设计一个通知服务,在 eBay 这个量级下为买家和卖家处理订单状态更新。很经典,但面试官很快就往深处走。
他们真正想看的点:
先做 scope clarification。 我一开始直接画图,结果又得回头补。他们希望你先问:每秒多少 events?需要什么投递保证?客户端是 push 还是 pull?SMS/email/push 还是三者都要?这里花 5-6 分钟。
Message queue 设计。 他们会强 push Kafka vs. SQS 的取舍。不只是「我用 Kafka」,而是:partition key 策略、at-least-once vs exactly-once 语义、consumer group 的 fan-out 设计。这些要非常熟。
数据库选择。 我用 DynamoDB 存通知状态。面试官让我讲 access patterns,以及要不要 GSI。她也接受 Cassandra,但要理由,不能只报名字。
Failure modes。 通知 worker 发到一半 crash 了怎么办?怎么避免重复通知?光这部分就聊了 15 分钟。
这轮没有并发脑筋急转弯,也没有 LeetCode 式 coding。纯系统。
关于 level 校准:eBay 的 L5 大概等于 senior eng。期望是你主导设计,不等提示,自己把难点 tradeoff 摆出来。如果面试官一直推着你往前走,可能就是 no-hire 信号。
我建议的准备:设计一个 rate limiter,设计一个通知 fanout 系统,consistent hashing 和数据库分片一定要打牢。eBay 的 infra 里 legacy 很多,所以他们会喜欢能理解「为什么要从 monolith 演进」而不是一上来就 greenfield microservice 的候选人。