← 返回博客列表 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 = []  # (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)],要求:

  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