去年秋天我面试了 Pfizer 的 Principal SWE 岗位,system design 轮挺出乎我意料。分享一下,因为网上大多数建议太泛了。
背景:我现在是 director,但当时考虑转去 healthcare tech,所以走了这套流程。岗位在他们的 Digital R&D org。
题目 设计一个系统,用来实时追踪来自临床试验站点的不良事件报告,并根据严重程度和地理位置把它们路由给对应的监管审核人员。
不是“design a URL shortener.(设计一个短链接系统。)”。这点一开始就能感受到他们的校准。
他们看什么
面试官(他们 platform team 的一位 staff engineer)并不想听最大吞吐、到处 Kafka 的答案。他一直在追问: 数据完整性保障。 同一份报告被提交两次怎么办?source of truth 是什么?部分失败怎么处理? 审计链路。 受监管系统里每一次状态流转都需要不可篡改地记录。我画了 event-sourcing 模式,他们反应很好。 Human-in-the-loop 工作流。 对高严重级别事件,完全自动路由不可接受。需要升级路径和手动 override 机制。 边界合规。 我提了 GDPR 和 21 CFR Part 11(FDA 电子记录)。这个点很加分。如果你不知道 Part 11 是什么,面试前花 20 分钟了解一下。
他们不太在意什么 消息队列的具体选型(他们用 Azure 且有观点,但不是评分点)。p99 延迟的微优化。auto-scaling 细节。
我给这轮的建议 把每个设计决策都框在一个问题上:“在这里做错的成本是什么?”在 pharma,这个成本可能是对患者的伤害,或 FDA 的警告信。用这个心智模型,你的回答会更贴题。
这轮 75 分钟。前 10 分钟是问题澄清,他们非常看重。别跳过这一步。