我走了 j&j 的 senior swe loop,职位在他们 technology services group(不是 medtech digital,是内部另一个 org)。system design 这轮我准备得最狠,所以我会说得具体一点。
形式:45 分钟,两位面试官,其中一位是 hiring manager。白板风格,但通过 zoom 用共享 doc/miro board 做。他们不在意你用什么工具画,只要表达清楚。
我拿到的题目:设计一个系统,近实时摄取患者设备读数,标记异常,并让临床 dashboard 用户能访问数据。他们给了大致规模:几千台设备,不是几百万。吞吐量不是难点,难点在可靠性和正确性。
这个背景非常关键。j&j 的行业里,丢一条消息或者读到过期数据不只是延迟波动,可能会带来下游影响。所以讨论很自然就到了: exactly-once 投递保证 vs at-least-once,以及你怎么处理重复 audit trail:每次写入和状态变化都得可追溯。我浅聊了 event sourcing,他们接得很积极。 回滚和版本管理。如果一次糟糕的固件更新改变了读数的计算方式,能不能重跑历史数据?这个话题扯了 15 分钟,我觉得聊得挺好。 dashboard 层的 API 设计:他们问了缓存策略,以及如果医生的 dashboard 显示的数据落后 3 分钟会怎样。
他们没有死磕的点:超大规模的分片策略、面向上百万并发用户的缓存层、CDN 相关。这不是消费互联网问题。如果你拿着一个 google 级别架构去做 1 万设备的网络,他们大概会觉得很怪。
我的准备:我更关注分布式系统的可靠性,而不是吞吐。读了 event sourcing 和 CQRS 的模式。《Designing Data-Intensive Applications》(ddia)和他们在意的点挺对得上。
定级:他们说得很明确,这是 senior / 大概 l5-equivalent 的角色。他们期望我不靠提示也能把设计推进下去。我还得对他们一个 hypothetical 说不,并为我的取舍辩护。我觉得这反而加分。
total time 从 system design 到 offer:又过了 3 周。debrief 流程比面试本身还花时间。