← 返回部落格列表 Notion SDE 面試流程深度復盤:從 Recruiter 到 Onsite 五輪全拆解
Notion

Notion SDE 面試流程深度復盤:從 Recruiter 到 Onsite 五輪全拆解

2026-06-02

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 更願意深聊產品本身。你必須能回答:

  1. "What's your favorite Notion feature and why?"
  2. "How do you currently use Notion (or similar tools)?"
  3. "What kind of team / product do you want to work on at Notion?"
  4. "Tell me about your most ambitious side project."

回答策略

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):

  1. Quality:用 TypeScript 嚴格型別,至少 80% 測試覆蓋
  2. Scope:MVP 先實作 block 切換 + 文字編輯,drag-and-drop 放最後
  3. Tradeoff:寫一份 README,列出你做了什麼、放棄了什麼、為什麼
  4. 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 的即時協作編輯系統

要求:

回答骨架5 層 + CRDT):

  1. Client:本地 CRDT 副本,使用者操作即時本地套用
  2. Sync Layer:WebSocket 長連線,每個 doc 一個房間
  3. Server:儲存最新 CRDT state,處理 merge 與 broadcast
  4. Storage
    • 當前 state:Postgres / Cassandra
    • 操作日誌:S3 + 時序壓縮
    • 快照:每 1000 ops 一次 snapshot,加速回放
  5. History:CRDT 自帶 causal history,不需要額外 versioning

關鍵 tradeoff

Onsite Round 3:Take-home Walkthrough

你必須準備好回答

  1. "Walk me through your code structure - why this folder layout?"
  2. "What did you choose not to implement, and why?"
  3. "If we 10x'd your code's user base, where would it break first?"
  4. "How would you write tests for the drag-and-drop feature?"
  5. "What would you do differently if you had another 4 hours?"

關鍵心態Notion 在測你的 self-awareness。承認局限比掩蓋局限更得分。

Onsite Round 4:Hiring Manager

必問的 5 個問題

  1. "Why are you leaving your current job?"
  2. "What kind of manager / mentor do you thrive under?"
  3. "Describe a time you owned a project end-to-end."
  4. "How do you handle disagreement with a peer?"
  5. "What's your 5-year career trajectory?"

回答策略:誠實 + 具體。Notion 文化反對「政治化回答」。

Founders Round:Culture Match

Notion 的核心文化

Founders 必問

  1. "What does great craft look like to you?"
  2. "Tell me about a time you said no to a feature request."
  3. "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