今年早些时候我刚结束 xAI 的 frontend loop。写下来分享一下,因为网上几乎没有 frontend 专项信息,大多数都是泛 SWE 内容,跟我经历不太一致。
背景:4 年 frontend,主要 React,少量 Vue。我申请的是他们说的「product engineer」角色,前端占比很高。
recruiter screen:常规。他们强调这个角色会做 Grok 面向的产品 UI,以及研究团队的内部工具,两边都需要。recruiter 说他们很看重能从设计一路做到上线的工程师,中间不需要太多层级接力。
phone screen(60 分钟,1 个面试官) 这轮对 frontend 角色来说挺有意思。半场是 JavaScript 基础深挖,不是框架。核心 JS:闭包、event loop、promise chaining、原型继承到底怎么工作的。我上一次被考 event loop 还是很多年前的第一份工作面试,这次算是被敲醒了。
后半场是一个 UI 实现题。他们给了我一个 figma 链接,让我用原生 JS 或 React 实现一个指定的交互组件,任选。我选了 React。组件是一个带防抖(debouncing)的 typeahead 搜索和自定义下拉。他们全程看你写。重点看我怎么组织 state、怎么处理边界情况(空结果、loading 状态、error 状态),以及我会不会在没人提醒的情况下加上无障碍(accessibility)属性。
onsite(3 轮,没有 DS/algo 轮) react architecture:讨论我会怎么组织一个共享状态很复杂的大功能。聊到了 context vs redux vs zustand。不是坑人的知识问答,更像在聊「你怎么思考」。 performance:他们给了一个渲染很慢的组件,让我定位并修复。会看你怎么用 profiler、怎么用 memoization、长列表怎么做虚拟列表。很真实的调试场景。 system design(偏前端):设计一个实时协作文档编辑器的 client-side 架构。不是后端,只聊前端。状态同步、UI 里的冲突处理、离线支持。这轮最难。
需要知道的点: 他们更看 core JS,不太吃框架魔法。如果你对 react 的理解只停留在框架用法,从来没想过底层发生了什么,去补。 accessibility 反复出现,不是打勾项,而是他们真的在意。 性能工具:要会 chrome devtools profiler、react devtools profiler,也要知道什么会导致没必要的 re-render。
总体是个不错的流程。对一个小公司的 frontend 角色来说,比我预期更严格。