我在 3 月参加了 Salesforce senior SWE(大概相当于 L5)的 system design 面试。写下来是因为现在几乎没有任何关于他们 system design 标准的最新内容。
先说一点:Salesforce 不像 Google 一样把级别叫 L5。他们对 senior SWE 的内部级别在不同 org 里大概是 MTS II(Member of Technical Staff II)左右。如果你要问 recruiter level 对齐,知道这个会有用。
design 这一轮是 60 分钟。我拿到的 prompt 大概是:「Design a notification delivery system that supports email, SMS, and push, and can handle 50 million users.(设计一个支持 email、SMS 和 push 的通知投递系统,并且能支撑 5000 万用户。)」很经典的分布式系统题。
他们在意的点: 先澄清需求再开始设计。我一开始没先 scope 就开始画设计,面试官 push back 很强。他希望我问 SLA、投递保证(at-least-once vs exactly-once)、以及规模。 先高层架构,再逐步下钻。我在共享白板工具上画组件,他一直问「what's the bottleneck here.(这里的瓶颈是什么。)」 Tradeoff。不只是你选什么,还要讲清楚为什么。比如通知投递用 fan-out 还是 pull model,queue 还是直连,等等。 他们特别问了 multi-tenancy。Salesforce 是面向企业客户的 CRM,所以会出现「how do you isolate one customer's data/traffic from another(你怎么把一个客户的数据/流量和另一个客户隔离开)」这种问题。我不觉得每家公司都会问,但这很符合 Salesforce 产品的现实。
他们没有让我在 design 轮写代码。纯白板/架构。
对 level 的期待比「画几个框、起几个服务名」要高。你需要掌控对话,主动覆盖故障模式,并且能在他们不提示的情况下推演规模问题。
总体来说我觉得是个公平的面试,不是那种 gotcha 很多的。如果你做过 system design 准备,你懂套路。只是一定要准备好聊 multi-tenancy 和企业数据隔离。