上个月刚走完 affirm 的 frontend 全套面试,senior/L5 级别,分享一下,因为真希望我面之前就能看到这种信息。
recruiter screen 挺标准的。她人很好,聊角色的时间比我预期更久。确认了团队、技术栈(react、typescript,还有他们 checkout embed 的一些 proprietary 东西),然后在安排 technical screen 前问了一个比较轻的 behavioral 问题。
technical phone screen: 一轮,面试官是个工程师。共享编辑器里的 coding challenge。我遇到的是一个 DOM 操作题,不算离谱,但他们先要你写干净的 vanilla JS,然后让我重构成带 hooks 的 react。听说 react 这部分卡住了不少候选人(recruiter 提过)。确保你对 useEffect 和 cleanup functions、hooks 里的闭包这些常见坑都很熟。
onsite(远程,4 轮): react 深挖:聊了 component lifecycle、state management 的一些模式,然后让我从零搭一个可配置的小 modal。他们会看你怎么命名、怎么组织 props。没有刁钻题,就是看真实功底。 frontend 的 system design:「design the affirm checkout widget for merchant embeds.(为商家嵌入场景设计 affirm 的 checkout widget。)」这题挺硬。他们很在意 resilience(当 Affirm 的 JS 加载失败会怎样?)、performance budget、还有可访问性。我没把可访问性准备到这个深度,表现就很明显。 coding(中等 LC 风格):数组操作,要求解释 time/space complexity。 behavioral:STAR 格式,大概 4 个问题。团队冲突、一次你对产品决策 push back、以及你怎么负责一个 bug。
他们真正看重的点: 他们一直在绕回「what happens when it breaks.(坏了会发生什么?)」。affirm 的 checkout widget 对商家是 mission-critical,所以 resilience 思维非常重要。能把 progressive enhancement、fallbacks、error boundaries 讲清楚,比刷算法花活更加分。
流程很干净。从 phone screen 到 offer 总共大概 3.5 周。反馈节奏也不错,recruiter 在我没问的情况下更新了两次。