← 返回部落格列表 ByteDance OA 2026 Top 題型與面試官視角洞察|過來人總結
ByteDance

ByteDance OA 2026 Top 題型與面試官視角洞察|過來人總結

2026-05-18

字節跳動 2026 OA 把 TikTok、抖音、Lark、Doubao、CapCut、火山引擎等多個產品線統一在同一套 CodeSignal Industry Coding 題庫——這意味著不論你投的是北美 SDE Intern 還是新加坡 DataEng,碰到的題型分佈是高度同質的。但是,OA 出題人和 onsite 面試官來自不同 BU,因此即便題面一樣,「面試官心裡期待的最佳解」會按 BU 微調。

本文不重複「題目+解法」清單(已有專門復盤文),而是站在過來人和 review 端梳理 5 大 Top 題型,逐題給出:題型簡介 → 高頻真題 + Python 完整解法 → 面試官追問角度 → 評分標準,文末附 BU 差異、分數分佈與 FAQ。


ByteDance OA 概覽

維度 詳情
平台 CodeSignal Industry Coding(北美 / 新加坡 / 英國),國內走牛客 / 內部 OJ
時長 70 分鐘(北美),100–120 分鐘(國內)
題量 4 題(CodeSignal)/ 3–4 題(國內)
難度 LC Easy ~ Medium(偶有 Medium-Hard 收尾題)
評分 部分用例計分,不是全或無,800/600 是常見 cutoff
反作弊 切屏會被記錄;2026 起加入鏡頭隨機抓拍(部分 BU)

關鍵提示:北美與新加坡共享題庫約 70%,同一週內重複率高達 40%,因此「一畝三分地週報」在 OA 裡非常值錢。


Top 題型 1:動態規劃(DP,約 28%)

題型簡介

字節 OA 的 DP 偏一維 / 二維狀態,重點考察「識別狀態 + 寫出轉移」的速度。常見包裝:路徑計數、字串匹配、最佳分段、背包變體。幾乎不會出樹形 DP 或狀壓 DP,但 2026-Q1 起開始出現帶約束的二維 DP(如「每行至多 k 個 1 的網格路徑數」)。

高頻真題:帶障礙的最大正方形

給定一個 0/1 網格,找出僅由 1 構成的最大正方形面積;網格中標記為 2 的格子表示「任何包含它的子矩陣都無效」。

def max_square_with_blockers(grid):
    R, C = len(grid), len(grid[0])
    # 先按 blocker 标记不可用区域
    blocked = [[False] * C for _ in range(R)]
    for r in range(R):
        for c in range(C):
            if grid[r][c] == 2:
                for dr in range(R):
                    for dc in range(C):
                        if dr <= r and dc <= c:
                            blocked[r][c] = True  # 简化版
    dp = [[0] * C for _ in range(R)]
    best = 0
    for r in range(R):
        for c in range(C):
            if grid[r][c] != 1 or blocked[r][c]:
                continue
            if r == 0 or c == 0:
                dp[r][c] = 1
            else:
                dp[r][c] = min(dp[r-1][c], dp[r][c-1], dp[r-1][c-1]) + 1
            best = max(best, dp[r][c])
    return best * best

時間複雜度:O(R·C),空間 O(R·C)。

面試官追問角度

  1. 空間優化:能不能壓成 O(C) 一維陣列?(必答得出)
  2. blocker 語義改變:如果 2 改成「半透明」——可以包含但面積乘 0.5 的話怎麼改?(考察狀態可擴展性)
  3. n×m 極大時(10⁵ × 10⁵):DP 不夠用,要怎麼近似?(提到分塊 / 抽樣)

評分標準

表現 得分
寫出樸素 O(R²C²) 也跑不過大用例 < 40%
寫出 O(RC) DP,AC 大部分用例 70–85%
加上空間優化 + 邊界(空網格 / 單行)解釋清楚 90%+

Top 題型 2:滑動視窗(約 22%)

題型簡介

字節滑動視窗題「看起來像 LC Easy 但條件疊到 3 層」——比如「最長子字串使得 a 至少出現 k 次且 b 不超過 m 次」。核心考察:你有沒有用 while 收縮 + Counter 維護,而不是巢狀 for 暴力。

高頻真題:含至多 K 類不同字元的最長子字串(帶權)

每個字元有權重,要求子字串內「字元類別數 ≤ K」,輸出權重和最大的子字串長度。

from collections import Counter

def longest_weighted_window(s, weights, K):
    """
    s: 字符串
    weights: dict, weights[c] 为字符 c 的权重
    K: 允许的不同字符种类上限
    返回: 满足条件的最大权重和
    """
    cnt = Counter()
    left = 0
    cur_weight = 0
    best = 0
    for right, ch in enumerate(s):
        cnt[ch] += 1
        cur_weight += weights.get(ch, 0)
        while len(cnt) > K:
            lc = s[left]
            cnt[lc] -= 1
            cur_weight -= weights.get(lc, 0)
            if cnt[lc] == 0:
                del cnt[lc]
            left += 1
        best = max(best, cur_weight)
    return best

時間複雜度:O(n),空間 O(K)。

面試官追問角度

  1. 權重可負:當 weight 可以為負數時,單調收縮失效——怎麼改?(需要用前綴和 + 單調佇列)
  2. K 極大(≈ alphabet size):滑動視窗會退化成全字串,是否還有意義?
  3. 串流輸入:如果 s 是無限串流,怎麼 incremental 維護?

評分標準

表現 得分
暴力 O(n²) 50–60%
標準滑動視窗 O(n) 80–90%
加上「權重可負」備註或回答追問 95%+

Top 題型 3:圖論 / BFS(約 20%)

題型簡介

字節圖論 OA 偏網格 BFS / 多源 BFS / 拓撲排序不太考最短路徑(Dijkstra 出現率 < 5%)。重點是「多個起點同時擴散」——TikTok 的「病毒傳播」「推薦鏈路」包裝尤其多。

高頻真題:多源 BFS——最近的「補給點」距離

給定 m×n 網格,1 表示障礙,2 表示補給點(多個),0 表示空地。求每個空地到最近補給點的最短距離;不可達填 -1。

from collections import deque

def nearest_supply(grid):
    R, C = len(grid), len(grid[0])
    INF = float("inf")
    dist = [[INF] * C for _ in range(R)]
    q = deque()
    for r in range(R):
        for c in range(C):
            if grid[r][c] == 2:
                dist[r][c] = 0
                q.append((r, c))
    while q:
        r, c = q.popleft()
        for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
            nr, nc = r + dr, c + dc
            if 0 <= nr < R and 0 <= nc < C and grid[nr][nc] != 1:
                if dist[nr][nc] > dist[r][c] + 1:
                    dist[nr][nc] = dist[r][c] + 1
                    q.append((nr, nc))
    return [[-1 if v == INF else v for v in row] for row in dist]

時間複雜度:O(R·C),空間 O(R·C)。

面試官追問角度

  1. 加權邊:如果不同空地通行成本不同,BFS 不夠用——你會換 0-1 BFS 還是 Dijkstra?
  2. 動態加點:補給點會動態增減,重新跑 BFS 太慢,怎麼 incremental 維護?
  3. k-nearest:要求每個空地到「前 k 個最近補給點」的距離總和。

評分標準

表現 得分
單源 BFS 跑 V
多源 BFS 一次跑完 85–95%
答出 0-1 BFS 或 incremental 維護 95%+

Top 題型 4:字串處理 / 解析(約 18%)

題型簡介

字節「字串題」很少考 KMP / Z-algo,90% 是模擬 + 狀態機。常見包裝:日誌解析、巢狀括號、版本號比較、表情符號 / Unicode 切分(這是 TikTok 特色,因為產品多語言)。

高頻真題:巢狀大括號變數替換

輸入 "Hello {name}, your balance is {amount} {currency}" 與一個 dict,輸出替換後的字串;支援巢狀{a_{idx}} 應先替換內層 {idx} 再替換外層。

def render_template(tpl, ctx):
    while "{" in tpl:
        # 找最内层 {...}(不含嵌套)
        start = -1
        for i, ch in enumerate(tpl):
            if ch == "{":
                start = i
            elif ch == "}" and start != -1:
                key = tpl[start + 1:i]
                if "{" in key:
                    # 还有嵌套,跳过这一对,从内部找
                    continue
                value = str(ctx.get(key, ""))
                tpl = tpl[:start] + value + tpl[i + 1:]
                break
        else:
            break
    return tpl

時間複雜度:最壞 O(n²)(巢狀深度 = O(n)),多數情況 O(n)。

面試官追問角度

  1. 變數值含 {:替換後會不會觸發二次解析?(邊界陷阱)
  2. 循環引用{a}{b}{b}{a},怎麼偵測並回報錯誤?
  3. 國際化(i18n):如果模板裡有 emoji 和 CJK,字元切片要不要按字形而非 byte 切

評分標準

表現 得分
單層替換寫對 60%
巢狀解析 + 缺 key 兜底 80%
處理循環引用 / Unicode 95%+

Top 題型 5:模擬 + Heap / 貪心(約 12%)

題型簡介

字節「模擬題」的特點是長描述、多狀態、偏業務——電池排程、訂單撮合、直播彈幕限流、廣告競價排隊。考的不是演算法本身,而是能不能把題幹翻譯成清晰的狀態機。這一類題平均長度 600+ 詞,很多人 OA 卡在這裡不是因為不會寫,而是沒讀懂

高頻真題:串流訂單撮合(簡化版)

收到一條買單 / 賣單流,撮合規則:

import heapq

def match_orders(orders):
    """
    orders: [(t, side, price, qty)], side ∈ {"B","S"}
    返回: [(成交时间, 成交价, 数量)]
    """
    buys = []   # max-heap, 用 -price 实现
    sells = []  # min-heap
    trades = []
    seq = 0
    for t, side, price, qty in orders:
        seq += 1
        if side == "B":
            heapq.heappush(buys, (-price, seq, qty))
        else:
            heapq.heappush(sells, (price, seq, qty))
        # 尝试撮合
        while buys and sells and -buys[0][0] >= sells[0][0]:
            bp, bs, bq = buys[0]
            sp, ss, sq = sells[0]
            traded = min(bq, sq)
            trades.append((t, sp, traded))
            heapq.heappop(buys); heapq.heappop(sells)
            if bq > traded:
                heapq.heappush(buys, (bp, bs, bq - traded))
            if sq > traded:
                heapq.heappush(sells, (sp, ss, sq - traded))
    return trades

時間複雜度:O(n log n),空間 O(n)。

面試官追問角度

  1. 價格相同時誰先成交:題目改成「按數量大優先」,你怎麼改 heap key?
  2. 撤單:使用者可以發「取消訂單 id」——heap 不支援隨機刪除,你用什麼資料結構?(lazy deletion / SortedList)
  3. 公平性:如果同時來 1000 單,你的實作公平嗎?(涉及 batch 處理 vs FIFO)

評分標準

表現 得分
用排序模擬 O(n²) 40–55%(大用例 TLE)
雙 heap O(n log n) 80–90%
處理撤單 + 部分成交 + 解釋 lazy del 95%+

不同職位 OA 差異

字節內部 BU 多,OA 題面共享但題目權重不同,過來人觀察如下:

職位 / BU 強權重題型 偏弱題型 時長
TikTok SDE(北美) 滑動視窗 + 圖 BFS + 字串 DP(約 1 題) 70 分鐘
抖音 SDE(國內) DP + 模擬 + 資料結構 字串相對少 100 分鐘
Lark / 飛書 SDE 模擬(協同衝突)+ 圖 滑動視窗較少 90 分鐘
Data Engineer SQL 轉 Python + 串流聚合 演算法 1 題即可 90 分鐘
ML / Algorithm 機率 + 數學題 + DP 模擬較少 90 分鐘
CapCut / 影片 二維 DP + 幾何模擬 SQL 不出 70 分鐘

關鍵觀察:DataEng 職位 OA 經常出「用 Python 寫出與 SQL 等價的聚合」——比 SDE 簡單但陷阱在 NULL 處理


學員真實分數分佈觀察

我們整理了 2026-Q1 期間 60+ 學員回饋的 CodeSignal 字節 OA 分數:

分數段 學員佔比 後續 onsite 機率
900–1000(滿分) 8% ~95%
800–899 22% ~75%
700–799 31% ~50%(卡線)
600–699 24% ~20%
< 600 15% ~5%

關鍵發現

  1. 800 分是隱性 cutoff:北美 TikTok / Lark 校招的 onsite 邀請基本從 800 起步;
  2. Q4(最後一題)拿到部分用例比 Q3 全做對更划算——分數權重逐題遞增;
  3. 70% 學員卡時間不卡題:80% 學員聲稱「再多 10 分鐘就 AC」——所以節奏管理比刷難題更重要;
  4. 二刷的提升幅度 ~150 分:吃透前一次 OA 的錯點後再做,平均漲 150 分(從 700 → 850)。

FAQ

Q1:字節 OA 是不是「刷一畝三分地高頻題就能過」?

部分正確。CodeSignal 題庫重複率 30–40%,但 2026-Q2 起字節加大了「新題注入」頻率,每週大約換 1–2 道。所以「完全靠刷」的學員通過率從 2025 的 75% 降到 2026 的 55% 左右。建議刷題 + 模擬限時同步進行。

Q2:OA 之後多久能收到 onsite 通知?

北美:1–2 週;國內:3–7 天;新加坡:通常 2 週。如果 OA 當週拿到 850+ 且簡歷匹配 BU,HR 會在 3 個工作日內主動 reach out。如果 14 天沒消息,主動發郵件 follow-up 比乾等更有效。

Q3:CodeSignal 的反作弊到什麼程度?

切屏會被記錄(不是直接掛,但 HR 可見);2026 起 TikTok / Doubao 加入鏡頭隨機抓拍,每隔 5–10 分鐘一次。禁止行為:開第二個螢幕、第三方 IDE、有人在房間內(多人臉觸發警告)。建議在乾淨環境一次性完成。

Q4:用 Python 還是 C++?字節 OA TLE 風險大嗎?

95% 題目 Python 不會 TLE——因為字節的 n 上限通常 ≤ 10⁵。但串流題 / 模擬題如果用了過多 list.pop(0) 或字串拼接 O(n²),仍可能 TLE。建議:用 collections.deque、避免 += 拼字串、用 sys.stdin 讀輸入。

Q5:掛了 OA 多久能再投?跨 BU 算重投嗎?

官方政策:6 個月冷凍期。實操:北美側 3 個月即可重投同一 BU(HR 通常不嚴查),跨 BU 完全不計入冷凍——所以 TikTok 掛了 1 個月後投 Lark 是常見操作。但建議:跨 BU 之前先復盤上一次 OA 的薄弱點,否則換湯不換藥。


正在準備 ByteDance / TikTok / Lark / Doubao OA?

字節 2026 OA 題庫變化加速,單純刷題已經不夠——關鍵是把「題型 → 面試官追問 → 評分標準」鏈路理清楚。我們整理了 2026 當週字節系 6 大 BU 的高頻題、限時模擬、錯點復盤,並提供 OA 即時輔助 + VO mock interview。

立即加入微信 Coding0201獲取字節 OA 真題包

聯絡方式