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(資訊流去重)
題目描述
設計一個推薦系統的去重模組:
- 給定一個使用者最近 7 天看過的 video_id 集合
seen(量級 ~10K) - 給定一個候選 video_id 流(量級 ~100M)
- 要求過濾掉 seen 中的 ID,回傳前 100 個未看過的
要求支援:1) 高併發查詢(QPS 100K);2) 記憶體可控
解題思路
樸素 set 查找 O(1),但 100M × 10K hash 表佔用約 100MB。字節實際使用 Bloom Filter:
- 假設容忍 1% false positive
- 每個 ID 需要 ~10 bits
- 10K ID 只需要 12.5KB
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。
解題思路
分兩層:
- 流式聚合:Count-Min Sketch(CMS)做 approx count
- 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)],要求:
- 展示前 3 層留言
- 第 4 層之後用 "查看更多" 折疊
- 每層內按 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 節點。要求:
- 全球 50 個 CDN 節點
- QPS 100M
- 每個請求 < 100ms 路由完成
- 節點 health 實時反饋
解題思路
多層架構:
- DNS 層:AnycastDNS + GeoDNS,回傳 K=5 個候選節點
- 客戶端 SDK:拿到 5 個候選後做 RTT probe,選最近的
- 後端協調:每個 CDN 節點上報 health 到 Coordinator,Coordinator 推 weighted-round-robin 表給 DNS
字節 onsite 加分點:
- 主動提「Bandwidth-aware routing」——不光看 latency,還看節點剩餘頻寬
- 提「Cold-start cache warming」——新影片走單點,熱影片用 multi-replica
- 提「Cost optimization」——非高峰時段把流量集中到少數節點降低成本
真題九:System Design — Feed Ranking 實時更新
題目描述
使用者看完一個影片後,怎麼在 100ms 內實時更新他的 Feed 推薦?
關鍵設計
- Online inference:Two-tower model,user tower 實時更新 embedding
- Cache layer:候選影片池 pre-rank,存 Redis
- Streaming:Kafka → Flink → Embedding Service
- Fallback:如果實時 path 超時,fallback 到 batch 推薦
字節 hiring manager 喜歡看的:你能說出「我會先做 offline AB test,看實時更新帶來的 retention 提升能否覆蓋額外的 GPU 成本」。
真題十:BQ — 「你和 cross-team 的衝突」
字節 BQ 頻率最高的問題,有一個固定結構:
- Conflict:跨組目標不一致
- Actions:你做了什麼具體行動(不是「溝通」而是「提交 RFC、約 PM 1:1、給 SVP 寫 doc」)
- Result:可量化(latency -20%、retention +3%)
- 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