上个季度我在 Walgreens 走完了 senior SWE 的面试 loop(他们 Chicago 的技术办公室,属于 Walgreens Boots Alliance 的 tech org)。总共三轮,但在 senior 这个级别,system design 明显是拉开差距的关键。
System design 这一轮 60 分钟,面试官来自他们 platform 团队。没有共享文档,就是提前发了一个类似 Lucidchart 的白板链接。
我拿到的题目: 设计一个处方续配提醒系统,覆盖 500 万药房客户,支持 SMS、push、email 渠道,具备送达保障和个性化。
我先做了澄清(送达保障:at-least-once?exactly-once?漏发的 SLA 是什么?)。面试官很投入,也不希望我一上来就画盒子和箭头,这是个好信号。
他们关注的关键点: Queue 架构。我选了 Kafka,并讲了 partition 策略。他们追问 consumer group 落后时会发生什么。 幂等性。处方通知不能发两次(对他们来说这是受监管的场景)。他们会强追我怎么处理重复投递。 可观测性。他们直接问了「how would your on-call team know something is wrong at 2am without paging for false positives.(你的 on-call 团队在凌晨 2 点怎么知道出了问题,同时又不会因为误报而被频繁 paging?)」他们想听的是告警策略,而不只是「我们加 metrics」。 多渠道 fan-out。SMS vs email vs push 是拆成不同服务还是放在一个服务里。我拆开了,他们似乎更偏好这种。
他们没怎么深挖的点:具体数据库选型、缓存层细节。他们更在意正确性和韧性,而不是性能优化。
对 senior(大概相当于别家叫的 L5 或 IC4,取决于你的参考系),bar 大概是:你能主导设计、在被 challenge 时能优雅应对,并且考虑过运维层面的东西,而不只是 happy path。
我拿到了 offer。senior SWE 的 total comp 大概 155-165 all-in(base + 年度 bonus),低于 FAANG,但在这个市场里作为大型零售商的水平算是偏上沿。团队看起来不错。药房平台这边在做很多现代化改造。