最新 TikTok 面經來了,一起看下這波真實流程(tiktok 一畝三分地同款節奏)。這次 TikTok 面試共三輪,整體偏硬核。前兩輪都是純 coding,每輪兩道演算法題,時間卡得比較緊,考察思路清晰度和程式碼完整性。第三輪是 HM 面,先深挖履歷再 coding。
一、TikTok SDE NG 流程概覽
| 輪次 | 形式 | 重點 |
|---|---|---|
| 第一輪 | 純 Coding(2 題) | 中高頻演算法,複雜度 + 邊界敏感 |
| 第二輪 | 純 Coding(2 題) | 資料結構設計 + 優化追問 |
| 第三輪 | HM 面 | 履歷 infra 深挖 + Behavior + DP 收尾 |
題型以中高頻演算法為主,需要對複雜度和邊界情況比較敏感。
二、第一輪 Coding
Coding 1:修改一個元素判斷陣列是否有序
允許最多修改陣列的一個元素,判斷這個陣列能否變成非遞減有序。
def checkPossibility(nums):
modified = False
for i in range(1, len(nums)):
if nums[i] < nums[i - 1]:
if modified:
return False # 已改過一次,再違反就失敗
modified = True
# 優先把 nums[i-1] 壓低;若壓不動(nums[i] < nums[i-2])則抬高 nums[i]
if i < 2 or nums[i] >= nums[i - 2]:
nums[i - 1] = nums[i]
else:
nums[i] = nums[i - 1]
return True
思路:遍歷找第一個違反非遞減的位置,貪心地決定改 nums[i-1] 還是 nums[i]。複雜度:時間 O(n),空間 O(1)。
Coding 2:樹中平均距離最小的節點
找到樹中到其他所有節點平均距離最小的節點(每條邊距離 1),要求 O(n)。
思路:這是「最小高度樹 / 樹的重心」類問題。兩次 DFS——第一次自底向上算子樹大小和到子樹的距離和;第二次自頂向下換根(rerooting),用父節點結果推子節點。換根公式:dist[child] = dist[parent] + (n - 2*size[child])。複雜度:時間 O(n)。
三、第二輪 Coding
面試官先 2 分鐘閒聊問「怎麼優化了資料庫查詢效能」,再進 Coding。
Coding 1:嵌套列表迭代器(LeetCode 341)
給嵌套整數列表,實作迭代器按順序遍歷所有整數,自己實作
next()和hasNext()。
class NestedIterator:
def __init__(self, nestedList):
# 逆序壓堆疊,堆疊頂始終是下一個待處理元素
self.stack = nestedList[::-1]
def next(self):
# hasNext() 保證堆疊頂是整數,直接彈
return self.stack.pop()
def hasNext(self):
while self.stack:
top = self.stack[-1]
if isinstance(top, int):
return True
# 堆疊頂是列表:彈出並逆序壓回其元素
self.stack.extend(self.stack.pop()[::-1])
return False
思路:堆疊逆序壓入,hasNext() 時迴圈展開列表直到堆疊頂是整數。面試官追問「為什麼均攤 O(1)」——每個元素最多入堆疊出堆疊一次。
Coding 2:字母異位詞分組(要求優於 O(nk log k))
給字串陣列,把異位詞分組。要求優於排序的 O(nk log k)。
from collections import defaultdict
def groupAnagrams(strs):
groups = defaultdict(list)
for s in strs:
# 計數陣列當 key(26 字母),單串 O(k),避免排序 O(k log k)
count = [0] * 26
for ch in s:
count[ord(ch) - ord('a')] += 1
groups[tuple(count)].append(s)
return list(groups.values())
思路:用 26 維計數陣列轉 tuple 當 key,每串處理 O(k)。面試官提示「能用質數乘積嗎」——回答質數乘積可能溢位,計數陣列更安全。複雜度:時間 O(nk)。
四、第三輪:HM 面
先從履歷深挖項目,重點問 infra 相關背景:系統設計思路、技術選型、實際落地。Behavior 圍繞一個核心項目展開,follow up 追問遇到的困難和你如何解決。最後 coding 是一道偏 DP 的題,難度不低,但符合 TikTok 實際用人風格。
五、備戰要點
| 維度 | 建議 |
|---|---|
| Coding | 中高頻演算法,邊界 + 複雜度敏感,速度要快 |
| 資料結構設計 | 嵌套迭代器、堆疊類設計練熟,能講均攤分析 |
| 優化追問 | 計數 key vs 排序 key 這類優化要能主動提 |
| HM 輪 | 履歷 infra 部分要能深挖,準備 1-2 個核心項目 |
FAQ
Q1:TikTok NG 幾輪?難度如何?
通常三輪:兩輪純 coding(各 2 題)+ 一輪 HM。整體偏硬核,時間卡得緊。題型中高頻演算法 + 資料結構設計,第三輪還有 DP 收尾。
Q2:異位詞分組為什麼不用排序?
排序 key 是 O(k log k),面試官明確要求優化。用 26 維計數陣列當 key,單串降到 O(k)。質數乘積雖然也行但有溢位風險,計數陣列更穩。
Q3:樹最小平均距離節點怎麼做到 O(n)?
用換根 DP:兩次 DFS,第一次算子樹大小和距離和,第二次自頂向下換根推每個節點的總距離。暴力對每個點 BFS 是 O(n²),會超時。
Q4:HM 輪 infra 深挖怎麼準備?
履歷寫了 infra 就要能講系統設計思路、技術選型理由、落地效果。準備 1-2 個能往下挖三層的核心項目,配合 Behavior 的困難 + 解決故事。
Q5:時間卡得緊,有沒有即時陪練?
有。兩輪純 coding 連軸、每輪限時兩題,節奏極易亂。我們提供 VO 輔助 / VO 代面:高頻題預測 + 限時 mock + 卡殼給方向 + 幫你控節奏,把會的穩穩拿下。
正在準備 TikTok SDE NG?
TikTok NG 偏硬核、節奏快、第三輪 HM 還深挖 infra。如果你想要前兩輪高頻題的限時陪練、嵌套迭代器/異位詞/換根 DP 專項,或需要 VO 輔助 / VO 代面 的即時對接,歡迎聯繫交流,發崗位 JD 先做題型預測,再排練習計劃。
立即新增微信 Coding0201,獲取 TikTok NG 真題與陪練。
聯絡方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy