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 框架準備:
- 從 0 到 1 的專案——考首創精神與不確定環境下的推進力。
- 最複雜的跨團隊協作——考溝通、協同、衝突解決。
- 基於數據做的重要決策——對應「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 真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy