我在 2026 年 3 月走完了 Notion frontend engineer 的面试 loop,L4 对标。写下来是因为我找到的大多数准备建议都是很泛的 SWE 内容,而前端专向的东西又太少。
Notion 的产品在前端层面出了名地复杂。他们的编辑器是目前最技术密集的 web 软件之一。所以他们确实看重前端深度,不只是你能不能 useState 写个 todo app。
面试轮次:
Phone screen 是标准的 Leetcode medium。完全不偏前端,就是一道算法题。考虑到岗位,有点反高潮。
Virtual onsite 有 4 轮:
前端技术(90 分钟): 这轮才是真正的考点。先从浏览器/DOM 问题开始,然后转到性能。我被要求 debug 一个具体的 re-render 问题(他们给了一个 component tree,里面有真实的 perf 问题),解释 root cause,然后聊 React reconciler 的工作原理。不是 "what is useMemo(useMemo 是什么)" 这种水平。更像是:在这个具体场景里,fiber tree 里发生了什么,你的修复方案是什么。我还被问了 event delegation,以及不借助库的话你会怎么做 drag-and-drop。
系统设计(60 分钟): 让我设计一个协同文本编辑器。对,就是这么 on-brand。我讲了 operational transforms vs CRDTs,为什么 CRDTs 对分布式系统很有吸引力,以及在 client-side 的渲染和光标同步上有哪些取舍。我不是 CRDT 专家,但知道到足够能表达观点会加分。他们不期待你真的做过。
Coding(45 分钟): 更偏算法。我拿到一道 medium 的图题。常规准备都能覆盖。
Behavioral(45 分钟): 标准 STAR 问题。有一个挺有意思:描述一次你因为技术限制而顶回一个产品决策。他们想看你怎么把 tradeoff 讲给非工程同学听。
我会怎么换个方式准备: 多读一些浏览器渲染 pipeline 的东西,不要只盯 React internals。我被问了 layout vs paint vs composite,我答上了,但其实可以更深。另外,真的去用 Notion 的产品,想想边界情况。有些问题感觉就是从团队真实踩过的坑里直接来的。
整体氛围很合作。没有人想把我问倒。但他们确实想要在意浏览器到底怎么工作的 frontend engineer,而不是只会框架层的东西。