今年早些时候我走完了 Cigna senior SWE 的面试流程。把我在 system design 这一轮学到的东西分享出来,因为真正的信号基本都在这里。
先说清楚:Cigna 不会对外公开 FAANG 那种 L1-L7 的定级。内部大概对应到 Associate、Software Engineer、Senior SWE、Principal。其中「senior」的要求在 scope 上大致相当于 Google 的 L5 或 Meta 的 E5,不过总包更低。
system design 这一轮 60 分钟,两位工程师一起面。一位基本不怎么说话,主要记笔记;另一位主导对话。我拿到的题是:
「Design a member-facing API that lets health insurance customers check their claim status, view EOB documents, and submit appeals.(设计一个面向会员的 API,让医保客户可以查询理赔状态、查看 EOB 文档,并提交申诉。)」
非常领域化。这是刻意的:他们想看你能不能自己把医疗数据的约束想清楚(PHI、HIPAA、FHIR standards),而不是等他们把每个点都喂给你。我没有深入讲 FHIR 合规,但我把它当作约束提了一嘴,他们明显很兴奋。
他们重点问的: 先讲 API 设计(REST vs GraphQL,他们会追问) 认证:他们很在意医疗 portal 里 session vs token-based auth 怎么处理。我把 OAuth 2.0 flow 讲了一遍。 数据存储:EOB 文档(PDFs,大 blob)用 document storage,claim 记录用 relational。他们会问 tradeoff。 延迟和吞吐:这是 portal,不是实时系统,不需要所有请求都 sub-100ms。把这点说清楚并据此设计,似乎会加分。 故障模式:claims backend 很慢时怎么办,appeal 提交流程如何优雅降级。
他们没问的: Kafka 或 event streaming(没人提) ML/AI 集成(不同团队) 全球规模或多 region。他们主要是 US-focus,不要按 Netflix 那样去设计。
从 debrief 里得到的定级信号(recruiter 分享了一些反馈):他们看的是 senior 候选人能否主导对话、主动识别约束、并把合理的取舍说清楚。到了 principal 级别,据说会期待你去挑战题目的 framing 本身。
如果你在准备,我建议花时间在:claims processing 基础、API 里的 HIPAA 覆盖面、文档存储模式、以及防御式 API 设计。你不需要成为医疗领域专家,但懂这些词汇会很有帮助。