← 返回部落格列表 TikTok SDE NG 面試三輪覆盤:純 Coding 連軸 + HM 深挖 + 五道高頻真題
TikTok

TikTok SDE NG 面試三輪覆盤:純 Coding 連軸 + HM 深挖 + 五道高頻真題

2026-06-04

最新 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 真題與陪練

聯絡方式