大概六周前刚结束 Snap frontend SWE 的 onsite。是中级岗位,在他们某个消费级产品团队(不是 Snapchat core,更像是比较新的业务面)。把我能记得的都写一下。
phone screen:45 分钟 coding。一点都不花里胡哨,vanilla javascript,不用框架。他们让我从零实现 debounce,然后实现一个简单的 event emitter。没有 React,没有 TypeScript,就是纯 JS 基础。这点让我挺意外的。现在很多 frontend 面试都很 React-heavy,但 Snap 想看的是你到底懂不懂语言本身。
onsite 轮次(4 technical + 1 behavioral):
JS/DOM 轮:实现一个简化版 querySelector。基本是写个函数,输入一个 CSS selector 字符串和一个 DOM tree(用 JS object 表示),返回匹配的节点。很难。我只在简单 tag selector 上跑通了,attribute selector 的扩展没做完。
React/performance 轮:他们给了一个很慢的 React 组件,有很多不必要的 re-render,让我定位并修。useMemo、useCallback、React.memo、key 的放置方式。他们也问了长列表的 virtualization。整体感觉更像真实工作里会遇到的问题,我很喜欢。
algorithms 轮:一道 medium(滑动窗口)。更常规,比 DOM 轮轻松,像喘口气。
跨职能 system design:不是典型后端 system design。他们让我设计一个富文本编辑器的架构(像协作笔记 app)。聊到了 operational transform vs CRDT。我能把对话聊下去,但不够深入到「惊艳」。如果你要去面 front-end system design,这块建议学一下。
behavioral:常规。讲一次你从头到尾负责的项目、一次你和 PM 有分歧、你怎么处理 tech debt。
结果:拿了 L4 offer。我的感觉是他们更看重硬基础和性能直觉,而不是框架熟练度。如果你是那种只会 React、好多年没写 vanilla JS 的 dev,建议专门留时间补一下。