刚过了 ServiceNow 的 final round,是一个 Senior SWE 岗(他们内部大概按 L5 对标,JD 上叫「Staff Software Engineer」,但薪酬是 senior 区间)。分享一下 system design 轮,因为我 75% 的准备时间都花在这。
我拿到的题目:设计一个通知投递系统,可以向数百万用户在 email、SMS、push、in-app 等渠道做 fan out,并支持可配置的重试逻辑和 SLA 跟踪。很典型的 enterprise workflow 题,适合一家 ITSM 起家的公司。
他们真正关心什么: 可靠性和故障处理高于一切。ServiceNow 做的是企业级 incident workflow。宕机或通知丢失会让客户直接亏钱。我讲到 dead-letter queues 和 idempotency keys 的时候,面试官明显来劲了。 横向扩展。我画了一个消息队列层(Kafka 或 Pulsar,我两个都提了)、分片的 worker pools,以及按渠道做 rate-limiter。他们追问了「what happens when the SMS gateway goes down mid-burst(当 SMS 网关在一波发送过程中突然宕机,会发生什么?)」(如果 SMS 网关在一波发送中间挂了会怎样),这就是他们会在真实生产环境里遇到的场景。 可观测性和运维。他们几乎没提示就问了 metrics、tracing、alerting。我讲了按渠道做 latency histogram、failure rate SLO,以及一个 retry dashboard。效果很好。
看起来不太重要的:前沿的分布式一致性理论、microservices-at-Google-scale 那种讨论。他们是企业 SaaS。稳和可靠比聪明新颖更重要。
时间:45 分钟。我大概用了 8 分钟做高层设计,25 分钟按他们引导深入,10 分钟讲 trade-offs 和收尾。这轮不写代码。
有用的准备:Designing Data-Intensive Applications(队列和持久性部分)。这里一些分布式系统频道的 system design 题。还有补了 ServiceNow 自己的 Now Platform 架构(官方博客),能给回答加点上下文。
想问细节欢迎留言。我的 loop 总共 4 轮:1 coding、1 system design、1 behavioral、1 hiring manager chat。