Notion 是近年最受候選人青睞的中型科技公司之一——產品文化強、工程團隊精簡、面試流程也「很 Notion 風格」:給你一個 take-home 專案,讓你像在工作中一樣寫完整的功能,再加上 onsite 的協作編輯系統設計題,整體下來更像是「試崗」而非「考試」。
但正因為流程獨特,社群裡關於 Notion SDE 面試的描述常常零碎,候選人要麼準備不足、要麼過度準備 LeetCode。這篇文章是站內首篇 Notion 面經長文,把 Recruiter → Take-home → Tech Phone → Onsite 4 輪 + Founders Round 的完整流程逐一拆解,給每一輪的真題與回答骨架。
Notion SDE 招聘流程總覽
| 階段 | 時長 | 平台 | 決策權 |
|---|---|---|---|
| Recruiter Screen | 30 min | Zoom | 入門 |
| Take-home Project | 4-8 hours | GitHub | 關鍵過濾 |
| Tech Phone | 60 min | CoderPad | 關鍵過濾 |
| Onsite Round 1 | 60 min | Coding | 決定 |
| Onsite Round 2 | 60 min | System Design | 決定 |
| Onsite Round 3 | 60 min | Take-home Walkthrough | 決定 |
| Onsite Round 4 | 45 min | Hiring Manager | 決定 |
| Founders Round | 30 min | Behavioral / Culture | 一票否決 |
整體特點:take-home 佔 30% 決策權,這是 Notion 與 FAANG 最大的區別。
Recruiter Screen:Why Notion 與產品深度
Notion 的 recruiter 比 FAANG 更願意深聊產品本身。你必須能回答:
- "What's your favorite Notion feature and why?"
- "How do you currently use Notion (or similar tools)?"
- "What kind of team / product do you want to work on at Notion?"
- "Tell me about your most ambitious side project."
回答策略:
- 至少深用過 Notion 1 個月,能講出具體場景(如用 Notion 管理 OKR / 知識庫 / dev wiki)
- 團隊偏好要具體到 product surface(Editor / Collaboration / API / Mobile)
- Side project 體現工程品味,不要堆 toy projects
Take-home Project:4-8 小時實操
真題:實作一個簡化版 Block Editor
用 React + TypeScript 實作一個支援以下功能的 block editor:
- 多種 block 類型(text / heading / list / quote)
- 透過
/喚起 block 切換選單- 支援 drag-and-drop 排序
- 支援基本快捷鍵(Cmd+B / Cmd+I)
提交:GitHub 倉庫連結 + 部署 demo(Vercel)。
回答策略(Q-S-T-D:Quality / Scope / Tradeoff / Demo):
- Quality:用 TypeScript 嚴格型別,至少 80% 測試覆蓋
- Scope:MVP 先實作 block 切換 + 文字編輯,drag-and-drop 放最後
- Tradeoff:寫一份 README,列出你做了什麼、放棄了什麼、為什麼
- Demo:必須能跑,部署一個 Vercel 連結,面試官會真的去用
關鍵心態:Notion 不期待你完美完成所有功能,期待你做出 production-grade 取捨。
Tech Phone:CoderPad 演算法 + 工程感
真題:實作一個簡化版 OT (Operational Transform)
給兩個使用者在同一段文字上的並發編輯操作 op1 =
{type: "insert", pos: 5, text: "world"}和 op2 ={type: "insert", pos: 3, text: "hello "}。請實作transform(op1, op2)函式,回傳 op1 在 op2 已套用後的等效 op。
def transform(op1, op2):
"""Transform op1 to be applied after op2."""
if op1["type"] == "insert" and op2["type"] == "insert":
if op2["pos"] <= op1["pos"]:
return {**op1, "pos": op1["pos"] + len(op2["text"])}
return op1
if op1["type"] == "insert" and op2["type"] == "delete":
if op2["pos"] < op1["pos"]:
return {**op1, "pos": max(op2["pos"], op1["pos"] - op2["len"])}
return op1
return op1
關鍵考察點:你能否設計 OT 的對稱性(transform(a, b) 與 transform(b, a) 必須滿足收斂性)。
Follow-up:Notion 實際用 CRDT 而非 OT——為什麼?答案:CRDT 更適合 P2P 同步與 offline-first。
Onsite Round 1:Coding(典型題)
真題:Markdown Parser to AST
實作一個 markdown 解析器,把字串轉成 AST。支援:標題(
#-######)、列表(-/1.)、粗體(**x**)、斜體(*x*)。
import re
def parse_markdown(text):
blocks = []
for line in text.split("\n"):
line = line.rstrip()
if not line:
continue
m = re.match(r"^(#{1,6})\s+(.+)$", line)
if m:
blocks.append({"type": "heading", "level": len(m.group(1)), "children": parse_inline(m.group(2))})
continue
m = re.match(r"^-\s+(.+)$", line)
if m:
blocks.append({"type": "bullet", "children": parse_inline(m.group(1))})
continue
blocks.append({"type": "paragraph", "children": parse_inline(line)})
return blocks
def parse_inline(text):
nodes = []
i = 0
while i < len(text):
if text[i:i+2] == "**":
j = text.find("**", i+2)
if j != -1:
nodes.append({"type": "bold", "text": text[i+2:j]})
i = j + 2
continue
if text[i] == "*":
j = text.find("*", i+1)
if j != -1:
nodes.append({"type": "italic", "text": text[i+1:j]})
i = j + 1
continue
nodes.append({"type": "text", "text": text[i]})
i += 1
return nodes
Follow-up:處理巢狀(bold 內有 italic)、跳脫(\* 不算斜體起點)、效能優化(O(N) parser)。
Onsite Round 2:System Design 協作編輯
真題:設計 Notion 的即時協作編輯系統
要求:
- 1000 人在同一文件上協作不卡頓
- 支援 offline 編輯後自動 merge
- 歷史版本可以追溯到任意時刻
回答骨架(5 層 + CRDT):
- Client:本地 CRDT 副本,使用者操作即時本地套用
- Sync Layer:WebSocket 長連線,每個 doc 一個房間
- Server:儲存最新 CRDT state,處理 merge 與 broadcast
- Storage:
- 當前 state:Postgres / Cassandra
- 操作日誌:S3 + 時序壓縮
- 快照:每 1000 ops 一次 snapshot,加速回放
- History:CRDT 自帶 causal history,不需要額外 versioning
關鍵 tradeoff:
- CRDT vs OT:Notion 選 CRDT,因為 offline-first
- Postgres vs Cassandra:寫多讀多場景傾向 Cassandra
- 快照策略:snapshot interval 與回放效能 tradeoff
Onsite Round 3:Take-home Walkthrough
你必須準備好回答
- "Walk me through your code structure - why this folder layout?"
- "What did you choose not to implement, and why?"
- "If we 10x'd your code's user base, where would it break first?"
- "How would you write tests for the drag-and-drop feature?"
- "What would you do differently if you had another 4 hours?"
關鍵心態:Notion 在測你的 self-awareness。承認局限比掩蓋局限更得分。
Onsite Round 4:Hiring Manager
必問的 5 個問題
- "Why are you leaving your current job?"
- "What kind of manager / mentor do you thrive under?"
- "Describe a time you owned a project end-to-end."
- "How do you handle disagreement with a peer?"
- "What's your 5-year career trajectory?"
回答策略:誠實 + 具體。Notion 文化反對「政治化回答」。
Founders Round:Culture Match
Notion 的核心文化
- Craft:把每個產品細節做到極致
- Minimalism:少即是多
- Honesty:直接表達,不繞彎
- Velocity:快速迭代,但不犧牲品質
Founders 必問:
- "What does great craft look like to you?"
- "Tell me about a time you said no to a feature request."
- "If you could only ship one thing in your first quarter, what would it be?"
關鍵:Founders Round 是一票否決的。技術再強,culture mismatch 也會被掛。
FAQ
Q1:Take-home 專案可以用 ChatGPT / Cursor 嗎? Notion 明確允許使用 AI 工具——他們更看你能否做出 production-grade 取捨。但 onsite walkthrough 必須能解釋每一行程式碼。
Q2:演算法題難度和 FAANG 比? 整體偏中等,Hard 題極少。但工程感 佔比比 FAANG 高得多——程式碼是否好讀、是否能擴充。
Q3:System Design 必須用 CRDT 嗎? 不強制,但選 OT 後必須解釋為什麼 OT 也能 work。CRDT 是 Notion 實際用的,分會更穩。
Q4:從面試到 offer 多久? 平均 4-6 週。最快 2 週(HM 急招)、最慢 8 週(Founder schedule 難配)。
Q5:薪資範圍? Notion SDE 總包 280-380k(base 180-220k + equity)。Senior SDE 總包 400-550k。
正在準備 Notion SDE 面試?
如果你想做 take-home 專案程式碼 review、CRDT 系統設計演練,或希望 Onsite 那天有真人 VO代面 / VO輔助 全程陪跑、Founders Round culture 答案打磨,可以聊聊看完整的 OA代面 / VO輔助 / VO代面 方案。
聯絡方式
需要面試真題與客製備戰計畫?立刻聯絡微信 Coding0201,獲取真題。
Email: [email protected] Telegram: @OAVOProxy