← 返回部落格列表 ByteDance VO 2026 高頻題與面試 Insights|10 道 onsite 真題 + 五大評分維度拆解
ByteDance

ByteDance VO 2026 高頻題與面試 Insights|10 道 onsite 真題 + 五大評分維度拆解

2026-05-15

ByteDance(含 TikTok、CapCut、Lark、Doubao 等)2026 海外招聘進入加速期——美國、新加坡、英國三個 hub 同時在招 SDE / Algo / ML / DataInfra。與 2025 相比,2026 字節 VO 的評分維度從 3 個擴展到 5 個:除了演算法和系統設計,新增了**「中英雙語溝通流暢度」「業務理解深度」**。

本文不再重複 OA 部分(已有專文),而是聚焦 onsite 階段——10 道 2026-Q1/Q2 期間反覆出現的高頻題,每道給出 Python/Java 解法 + 字節面試官想看的「加分點」。

ByteDance VO 評分五大維度

維度 權重 評分關鍵字
1. 演算法 / 資料結構 35% 時間複雜度、coding speed、bug-free
2. 系統設計 25% trade-off 表達、橫向擴展、bottleneck 識別
3. 行為面試 (BQ) 15% conflict resolution、ownership
4. 中英雙語溝通 15% 中英無縫切換、術語準確度
5. 業務理解 10% 你能否說出 TikTok / CapCut 的 1-2 個核心產品決策原因

2026 新增第 4、5 項的原因:字節海外團隊中英文環境混合,hiring manager 反饋「純英文 candidate 在跨地區協作時效率 -30%」——所以現在專門加了一項。

真題一:Video Feed Recommendation Dedup(資訊流去重)

題目描述

設計一個推薦系統的去重模組:

要求支援:1) 高併發查詢(QPS 100K);2) 記憶體可控

解題思路

樸素 set 查找 O(1),但 100M × 10K hash 表佔用約 100MB。字節實際使用 Bloom Filter

import hashlib

class BloomFilter:
    def __init__(self, capacity, error_rate=0.01):
        self.size = self._optimal_size(capacity, error_rate)
        self.hash_count = self._optimal_hashes(capacity, self.size)
        self.bits = bytearray(self.size // 8 + 1)

    def _optimal_size(self, n, p):
        import math
        return int(-(n * math.log(p)) / (math.log(2) ** 2))

    def _optimal_hashes(self, n, m):
        import math
        return max(1, int((m / n) * math.log(2)))

    def _positions(self, item):
        h1 = int(hashlib.md5(item.encode()).hexdigest(), 16)
        h2 = int(hashlib.sha1(item.encode()).hexdigest(), 16)
        return [(h1 + i * h2) % self.size for i in range(self.hash_count)]

    def add(self, item):
        for pos in self._positions(item):
            self.bits[pos // 8] |= 1 << (pos % 8)

    def __contains__(self, item):
        return all(
            self.bits[pos // 8] & (1 << (pos % 8))
            for pos in self._positions(item)
        )

def filter_top(candidates, seen_ids, k=100):
    bf = BloomFilter(capacity=len(seen_ids))
    for sid in seen_ids:
        bf.add(sid)
    result = []
    for vid in candidates:
        if vid not in bf:
            result.append(vid)
            if len(result) == k:
                break
    return result

加分項:主動提「1% false positive 的代價是使用者偶爾會看到一次重複——但比 cache miss 讓使用者看不到內容更可接受」。

真題二:實時熱點 Top-K(Hot Hashtag)

題目描述

TikTok 實時統計 24 小時內最熱 100 個 hashtag。事件流速 ~1M event/sec。

解題思路

分兩層

  1. 流式聚合:Count-Min Sketch(CMS)做 approx count
  2. Top-K 維護:Min-Heap(size = 100),每秒一次 batch update
from heapq import heappush, heappop

class HotHashtag:
    def __init__(self, width=10000, depth=5, top_k=100):
        self.width = width
        self.depth = depth
        self.cms = [[0] * width for _ in range(depth)]
        self.heap = []
        self.in_heap = set()
        self.top_k = top_k

    def _hash(self, item, i):
        return hash((item, i)) % self.width

    def add(self, hashtag):
        for i in range(self.depth):
            self.cms[i][self._hash(hashtag, i)] += 1
        est = min(self.cms[i][self._hash(hashtag, i)] for i in range(self.depth))
        if hashtag in self.in_heap:
            pass
        elif len(self.heap) < self.top_k:
            heappush(self.heap, (est, hashtag))
            self.in_heap.add(hashtag)
        elif est > self.heap[0][0]:
            _, old = heappop(self.heap)
            self.in_heap.discard(old)
            heappush(self.heap, (est, hashtag))
            self.in_heap.add(hashtag)

    def top(self):
        return sorted(self.heap, reverse=True)

加分項:明確說「24 小時滑動視窗」會要求 CMS 也跟著衰減——使用 sliding-window CMS 或者每小時 reset 一桶。

真題三:留言樹折疊(Comment Tree Collapse)

題目描述

給定留言的父子關係陣列 [(parent_id, child_id, like_count)],要求:

  1. 展示前 3 層留言
  2. 第 4 層之後用 "查看更多" 折疊
  3. 每層內按 like_count 倒序

解題思路

經典 DFS + level cap。字節 onsite 經常要求「現場擴展」:如果 like_count 相同,按 timestamp 倒序——這考的是「程式碼可擴充性」。

from collections import defaultdict

def build_comment_tree(comments, max_depth=3):
    children = defaultdict(list)
    info = {}
    roots = []
    for parent_id, child_id, likes in comments:
        info[child_id] = {"likes": likes, "id": child_id}
        if parent_id is None:
            roots.append(child_id)
        else:
            children[parent_id].append(child_id)

    def dfs(node_id, depth):
        if depth > max_depth:
            return {"id": node_id, "collapsed": True}
        kids = sorted(children[node_id], key=lambda c: -info[c]["likes"])
        return {
            "id": node_id,
            "likes": info[node_id]["likes"],
            "children": [dfs(c, depth + 1) for c in kids],
        }
    return [dfs(r, 1) for r in sorted(roots, key=lambda c: -info[c]["likes"])]

時間複雜度:O(n log n) 排序 + O(n) DFS

真題四-七:演算法快查表

編號 題目 關鍵演算法
4 影片時長分箱(按粒度聚合) Bucket sort + prefix sum
5 使用者興趣畫像匹配 Jaccard + LSH
6 推送時段優化(按時區) 離線 cron + DAG scheduler
7 直播彈幕去抖動 Sliding window + rate limit

真題八:System Design — 短影音 CDN 節點選擇

題目描述

設計一個 system,讓全球使用者在請求短影音時被路由到最近的 CDN 節點。要求:

解題思路

多層架構

  1. DNS 層:AnycastDNS + GeoDNS,回傳 K=5 個候選節點
  2. 客戶端 SDK:拿到 5 個候選後做 RTT probe,選最近的
  3. 後端協調:每個 CDN 節點上報 health 到 Coordinator,Coordinator 推 weighted-round-robin 表給 DNS

字節 onsite 加分點

真題九:System Design — Feed Ranking 實時更新

題目描述

使用者看完一個影片後,怎麼在 100ms 內實時更新他的 Feed 推薦?

關鍵設計

字節 hiring manager 喜歡看的:你能說出「我會先做 offline AB test,看實時更新帶來的 retention 提升能否覆蓋額外的 GPU 成本」。

真題十:BQ — 「你和 cross-team 的衝突」

字節 BQ 頻率最高的問題,有一個固定結構

  1. Conflict:跨組目標不一致
  2. Actions:你做了什麼具體行動(不是「溝通」而是「提交 RFC、約 PM 1:1、給 SVP 寫 doc」)
  3. Result:可量化(latency -20%、retention +3%)
  4. Learning:下次怎麼避免(這一項 2026 新加,權重 20%)

注意Learning 必須是「可泛化」的——「我下次會更早 sync」是無效答案。「我建立了一個 weekly cross-team standup,規避了 60% 的口頭同步」才是有效答案。


FAQ

Q1:ByteDance 海外和國內字節的面試一樣嗎?

完全不一樣。國內字節走 ATS BOSS 直聘 + 牛客 + 飛書面,海外走 Greenhouse + CoderPad + Zoom。演算法難度國內偏 LC Hard,海外偏 LC Medium-Hard國內有鎖 HC,海外沒有——海外可以 candidate vs candidate 橫向比較。

Q2:TikTok 和字節其他 BU 的面試差異?

BU 演算法側重 設計側重 中文
TikTok 推薦 / 影片 CDN / Feed 不要求
Lark 協同 / IM 多人編輯 / 實時 不要求
CapCut 影片編輯 / FFmpeg C++ 效能 不要求
Doubao LLM / Search Inference 中英

如果你不會中文,Doubao 和部分 TikTok Algorithm 團隊會受影響——他們日常 standup 中文,daily code review 也中文。

Q3:VO 通過到 offer 多久?

平均 5-15 天。字節海外 HC(其實叫 "Hiring Loop Closing")是 weekly review,所以最快 5 天最慢 2-3 週。注意:team match 階段如果你說「想去 Lark 但只 match 到 TikTok」,offer 會 delay 1-2 週。

Q4:字節 2026 薪資規格?

等級 Base (美西) Total Comp
L4 SDE $160-180K $240-280K
L5 SDE $200-230K $330-380K
L6 Senior $240-280K $400-470K
L7 Staff $300-350K $530-650K

注意:字節的 RSU 是「ByteDance pre-IPO restricted shares」,有 secondary market(Forge、EquityZen)但價格波動 ±15%。Base + bonus 現金部分相對穩定。

Q5:onsite 幾輪?

標準 5 輪:3 × coding + 1 × system design + 1 × BQ。Senior+ 多一輪 cross-functional(hiring manager 之外的同級別 staff 加面)。

Q6:字節掛了,多久能 reapply?

6 個月有個 hack:如果你 4 個月時換一個 BU(比如 TikTok onsite 掛 → 投 Lark),cooldown 不計算。前提是新 BU 的 hiring manager 不知道你前一次掛——所以建議 reapply 前主動 disclose,避免 background check 卡住。


正在準備 ByteDance / TikTok / Lark / Doubao 等海外字節系職缺?

字節系海外面試 2026 cycle 把「演算法 + 設計 + 中英溝通 + 業務理解」全部納入評分,純刷題已經不夠。我們整理了字節系 4 大 BU 的2026 onsite 真題 + 系統設計 cheat sheet + BQ 模板,並提供 1v1 雙語 mock interview。

立即加微信 Coding0201取得字節海外面試包

聯絡方式

Email: [email protected] Telegram: @OAVOProxy