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 = [] # (count, hashtag)
self.in_heap = set()
self.top_k = top_k
def _hash(self, item, i):
return hash((item, i)) % self.width
def add(self, hashtag):
# update CMS
for i in range(self.depth):
self.cms[i][self._hash(hashtag, i)] += 1
# estimate
est = min(self.cms[i][self._hash(hashtag, i)] for i in range(self.depth))
# update heap
if hashtag in self.in_heap:
# lazy: heap 里的 (count, hashtag) 会过期,靠 query 时清理
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