上个月刚走完 Apple senior 的 SWE loop。分享下 system design 轮次的情况,因为我进去前找不到什么新的靠谱信息。
先说定级:Apple 对外不会公开用 L3-L8 这套 ladder 命名,但内部是有 level 的。如果你面的是「Senior Software Engineer」这种岗位,大概率目标是 ICT4 或 ICT5。大多数情况下 recruiter 不会一开始就告诉你 level 数字,但你可以直接问,通常他们会确认。
system design 轮是 60 分钟,一个面试官。我拿到的题很开放:设计一个在 Apple 规模下的通知投递系统。没什么特别花哨的,但他们想覆盖的广度很真实。
他们看重的点: 需求澄清和范围界定。 他们想看你带节奏,不要等别人喂约束。我前 8 分钟都在问澄清问题,面试官明显很喜欢。 故障模式。 这是 Apple 跟比如 Meta 有点不一样的地方。他们会狠抠什么会坏:fanout 瓶颈、retry storm、consumer 侧的幂等。如果你了解过 APNs 内部原理,会很有帮助。 取舍,而不是单一答案。 我每讲一个选择,他们就问为什么不选另一个。Kafka vs. SQS、设备侧 push vs. pull、通知状态用强一致还是最终一致。
他们没有让我深挖 capacity math,但我准备了粗略估算,也很自然地带进去了。我感觉他们不会因为你没把数字算到极细而扣分。
一个让我意外的点:他们追问了通知内容的隐私考虑。这毕竟是 Apple,他们当然在意。想想端到端加密、哪些数据会离开设备、哪些留在服务端。如果你面的是任何会触达用户数据的岗位,把这层视角提前放进设计里。
整个 loop 5 轮:2 轮 coding、1 轮 system design、1 轮 behavioral、1 轮 hiring-manager call。这篇只写 design 轮。欢迎提问。