← 返回部落格列表 TikTok 面試全流程複盤:OA + HR + 電面 + VO + BQ 五輪真題
TikTok

TikTok 面試全流程複盤:OA + HR + 電面 + VO + BQ 五輪真題

2026-06-10

TikTok 作為全球最受歡迎的科技公司之一,面試流程已逐漸向 FAANG 看齊:流程嚴謹、節奏緊湊,技術深度也不容小覷。這篇複盤帶你一步步走完 TikTok 從履歷篩選到 VO 終面的完整鏈路,每一輪給一道代表性真題 + 考察點 + 應答策略,幫你有針對性地準備,少走彎路。

一、整體流程速覽

輪次 形式 核心考點
第一輪 OA 線上評估(CodeSignal / HackerRank) 演算法 + 資料結構,常帶業務場景
第二輪 HR 電話初篩 求職動機 + 字節價值觀匹配
第三輪 電面 視訊 + 共享編輯器 即時資料處理類演算法
第四輪 VO 多輪虛擬 onsite 系統/併發設計 + 編碼
第五輪 BQ 行為面 從 0 到 1 / 協作 / 數據驅動

二、第一輪 OA:影片流即時去重

場景:TikTok 要對使用者上傳的影片流即時去重,避免重複內容推薦。每秒接收 N 個影片指紋(字串),判斷當前影片是否為近 5 分鐘(300 秒)內出現過的重複內容。

考點是滑動視窗 + 雜湊:用一個雜湊表記錄每個指紋最近一次出現的時間戳,再配一個佇列按時間淘汰過期項,保證每次查詢攤還 O(1)。

from collections import deque

class StreamDedup:
    def __init__(self, window=300):
        self.window = window
        self.last_seen = {}        # fingerprint -> timestamp
        self.q = deque()           # (timestamp, fingerprint) 按時間入佇列

    def seen(self, fp: str, ts: int) -> bool:
        # 先淘汰視窗外的舊指紋
        while self.q and self.q[0][0] <= ts - self.window:
            old_ts, old_fp = self.q.popleft()
            if self.last_seen.get(old_fp) == old_ts:
                del self.last_seen[old_fp]
        dup = fp in self.last_seen
        self.last_seen[fp] = ts
        self.q.append((ts, fp))
        return dup

邊界:同一指紋在視窗內多次出現要更新時間戳,淘汰時用 last_seen[old_fp] == old_ts 防止誤刪被刷新的項。

三、第二輪 HR 電話初篩

真題 1:為什麼選 TikTok?對哪類業務/技術方向最感興趣?

考察動機是否與公司戰略契合。應答策略:結合具體業務線(For You 頁推薦、直播即時互動),點出技術挑戰(億級併發、低延遲),再用過往專案證明可遷移技能。

真題 2:分享一個你「務實敢為」的案例。

考察對字節核心價值觀的踐行。用 STAR:資源有限時(2 週上線、後端短缺),你主動補位、設計極簡資料模型優先核心邏輯,結果按時上線 + 留存提升,最後把決策邏輯落回「快速驗證價值 > 追求完美架構」。

四、第三輪 電面:標籤 Top-K 即時統計

場景:影片標籤流持續輸入(每秒數千個),即時返回當前最熱的前 K 個標籤。

考點是計數 + Top-K 維護。標籤數遠大於 K 時,用雜湊計數 + 大小為 K 的最小堆:

import heapq
from collections import Counter

def top_k_tags(stream, k):
    counter = Counter()
    for tag in stream:
        counter[tag] += 1
    # nlargest 內部用最小堆,O(n log k)
    return [t for t, _ in heapq.nlargest(k, counter.items(), key=lambda x: x[1])]

若要嚴格「每來一個標籤就能查 Top-K」,可上「計數 + 桶/雙向鏈結串列(O(1) 更新)」的 All-O-one 結構,面試官常追問這一步的複雜度。

五、第四輪 VO:非同步任務排程器

題目:設計非同步任務排程器,支援註冊任務(可帶延遲 delay)、併發執行(同時最多 N 個)、可擴展取消與優先級。

核心是用號誌控制併發上限,用 asyncio.sleep 實現延遲:

import asyncio

class TaskScheduler:
    def __init__(self, max_concurrent=3):
        self.sem = asyncio.Semaphore(max_concurrent)
        self.tasks = []

    async def _run(self, coro_fn, delay):
        if delay:
            await asyncio.sleep(delay)
        async with self.sem:           # 最多 N 個併發進入臨界區
            return await coro_fn()

    def add_task(self, coro_fn, delay=0):
        self.tasks.append(self._run(coro_fn, delay))

    async def run_all(self):
        return await asyncio.gather(*self.tasks)

Follow-up 常考:如何加優先級(把 gather 換成優先佇列 + worker 池)、如何取消(持有 task 句柄呼叫 cancel())。

六、第五輪 BQ 行為面

三道高頻題,全部用 STAR 框架準備:

  1. 從 0 到 1 的專案——考首創精神與不確定環境下的推進力。
  2. 最複雜的跨團隊協作——考溝通、協同、衝突解決。
  3. 基於數據做的重要決策——對應「Be Data-driven」「Always Day 1」。

BQ 這輪面試官有較大決定權,建議針對前幾輪沒答好的點提前補強。

七、總結

TikTok 五輪各有側重:OA 看演算法 + 業務建模、HR 看動機與價值觀、電面看即時資料處理、VO 看併發/系統設計、BQ 看軟實力。把每輪的代表題型練成肌肉記憶,再針對自己的薄弱輪做專項,是穩過的關鍵。


FAQ

Q1:TikTok 面試一共幾輪?

通常五輪:OA 線上評估 → HR 電話初篩 → 技術電面 → VO(可能多輪)→ BQ 行為面。不同崗位與組別會有增減。

Q2:OA 難度如何?

中高頻演算法為主,常包真實業務場景(影片去重、標籤統計),需要對滑動視窗、雜湊、堆這類資料結構敏感,並注意時間複雜度。

Q3:BQ 用什麼框架答?

STAR(Situation / Task / Action / Result),並把結論落回字節價值觀(務實敢為、Be Data-driven)。提前準備 2–3 個可複用的核心專案故事。

Q4:臨場節奏跟不上怎麼辦?

很多卡點不在「會不會寫」,而在有限時間內把思路講清楚。如需 TikTok 全流程限時陪練,或 VO代面 / VO輔助 的即時對接,可發崗位 JD 先做題型預測再排練習計畫。


正在準備 TikTok 面試?

oavoservice 提供 TikTok 全流程陪練:OA 業務演算法題限時模擬、電面即時資料結構演練、VO 併發/系統設計拆解、BQ STAR 故事打磨,也支援 VO代面 / VO輔助 的即時對接。教練含前大廠資深工程師,熟悉 TikTok「思路清晰 + 程式碼完整 + 有邊界意識」的評分風格。

立即新增微信 Coding0201獲取 TikTok 真題與陪練

聯絡方式