最新 TikTok 面经来了,一起看下这波真实流程分享~( tiktok 一亩三分地 同款节奏)。这次 TikTok 面试一共三轮,整体偏硬核。前两轮都是纯 coding 面,每一轮两道算法题,时间卡得比较紧,考察重点在思路清晰度和代码完整性。题型以中高频算法为主,需要对复杂度和边界情况比较敏感。
第三轮是 HM 面,先从简历深挖项目经历,重点问了 infra 相关背景,比如系统设计思路、技术选型以及实际落地情况。Behavior 部分主要围绕一个核心项目展开,follow up 追问项目中遇到的困难以及你是如何解决的。最后的 coding 是一道偏 DP 的题目,整体难度不低,但非常符合 TikTok 的实际用人风格。
Tiktok SDE NG 第一轮
Coding 1: 修改元素判断数组是否有序
在允許最多修改數組的一個元素的條件下,這個數組是否是有序的。
考慮從前往後遍歷數組,將遇到不滿足有序條件的元素nums[i],即nums[i] < nums[i-1],若i為size-1即最後一個元素,或者數組已經全部有序,直接返回true,否則應考慮nums[i+1]的大小:
- 若nums[i+1] >= nums[i-1],如数组0,1,2,【1】,3… 中 3 > 2,此时i+1及之前的元素满足题意条件,若后面是有序的则返回true;
- 否則,如陣列0,1,4,【1】,3…中 3 < 4,則若將nums[i-1]改成nums[i],再從i-2開始遍歷陣列判斷其是否有序的即可。
時間複雜度O(n), 空間複雜度O(1)
思路
- 遍歷陣列,找到第一個違反非遞減順序的位置
i(即nums[i]<nums[i-1])。 - 如果i已經遍歷到陣列的末尾或倒數第二個元素,說明最多隻有一個元素違反順序,可以透過修改這個元素來修復,直接返回
true。 - 檢查是否可以透過修改
nums[i-1]或nums[i]來修復陣列。 - 從位置
i開始,繼續向後遍歷陣列,檢查是否所有元素都滿足非遞減順序。如果發現任何違反順序的元素,則返回false。 - 如果整個陣列都滿足非遞減順序,則返回
true。
Coding 2: 距離最小的節點
找到樹中到其他節點的平均距離最小的節點,一個edge距離算1,要求時間複雜度為O(n)。 參考
思路
- 首先,定義一個標誌變數
visited,用來標記是否已經找到目標節點p,初始值為false。 - 定義一個空棧
stack,用來儲存從根節點到目標節點p的路徑上的節點值。 - 定義一個函式
getDisToPar,接收三個引數:當前節點root、目標節點p和用於儲存路徑的棧stack。 - 在
getDisToPar函式中,首先檢查當前節點是否為空,如果為空,則直接返回。 - 將當前節點的值新增到棧中。
- 如果當前節點就是目標節點p,並且之前沒有訪問過(
visited為false),則將visited標記為true,並返回。 - 如果目標節點p還沒有找到,先遞迴地在左子樹中查詢。
- 如果左子樹中沒有找到,再遞迴地在右子樹中查詢。
- 如果當前節點的左右子樹都沒有找到目標節點p,說明當前節點不在目標節點p的路徑上,將其從棧中彈出。
- 棧中儲存的就是從根節點到目標節點p的路徑上的節點值。
Tiktok SDE NG 第二輪
這輪面試官是西雅圖的白人小姐姐,先2分鐘閒聊,問最近做的專案裡“怎麼最佳化了資料庫查詢效能”,然後直接進Coding。
Coding 1
Q1:給定一個巢狀的整數列表(每個元素是整數或巢狀列表),實現一個迭代器,按順序遍歷所有整數。 (類似LeetCode 341,但要求自己定義資料結構+實現 next() 和 hasNext() )
思路:先clarify了“巢狀列表的輸入格式”(小姐姐說用Python的 List[Union[int, List]] ),用棧逆序壓入初始元素, hasNext() 時迴圈彈出棧頂元素,若為列表則繼續逆序壓入其元素,直到棧頂是整數。邊寫邊覆蓋了“空巢狀列表”“多層巢狀”的用例,小姐姐追問了“時間複雜度為什麼是均攤O(1)”。
class NestedIterator:
def __init__(self, nestedList):
# Initialize by pushing the list onto the stack in reverse order.
# The top of the stack is always the next element to process.
self.stack = nestedList[::-1]
def next(self) -> int:
# hasNext() guarantees the top of the stack is an integer, so we just pop it.
return self.stack.pop()
def hasNext(self) -> bool:
# Loop until the stack top is an integer or the stack is empty
while self.stack:
top = self.stack[-1]
# Case 1: Top is an integer. We found the next element.
if isinstance(top, int):
return True
# Case 2: Top is a list. Pop it and push its contents back in reverse order.
# Example: top = [1, 2] -> Pop it -> Push 2, then 1.
top_list = self.stack.pop()
self.stack.extend(top_list[::-1])
return False
# --- Test Case ---
# Input: [[1,1], 2, [1,1]]
# Expected Output: [1, 1, 2, 1, 1]
nested_list = [[1, 1], 2, [1, 1]]
iterator = NestedIterator(nested_list)
result = []
while iterator.hasNext():
result.append(iterator.next())
print(result) # Output: [1, 1, 2, 1, 1]
Coding 2
Q2:給定一個字串陣列,將字母異位片語合在一起(要求:時間複雜度優於O(nk log k),k是字串最大長度)。
思路:常規解法是排序字串當key,但面試官要求最佳化排序的O(k log k)。用計數陣列轉tuple當key(比如“aab”轉 (2,1,0,…,0) ),這樣每個字串的處理是O(k)。寫的時候小姐姐提示“可以用質數乘積當key嗎?”,後面補充了“質數乘積可能溢位,計數陣列更安全”,最後程式碼過了所有測試用例(包括空字串、單個字元的情況)。 面完小姐姐加了句“你的計數陣列思路比排序更貼合生產場景”
from collections import defaultdict
from typing import List
def groupAnagrams(strs: List[str]) -> List[List[str]]:
# Use defaultdict to handle missing keys automatically
anagram_map = defaultdict(list)
for s in strs:
# Initialize a count array for 26 lowercase letters
# count looks like: [2, 1, 0, ..., 0] for "aab..."
count = [0] * 26
for char in s:
# Map char to index 0-25 using ASCII values
count[ord(char) - ord('a')] += 1
# Convert the list to a tuple to use it as a dictionary key
# Time Complexity: O(K), where K is the length of the string
key = tuple(count)
anagram_map[key].append(s)
return list(anagram_map.values())
# --- Test Case ---
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
print(groupAnagrams(strs))
# Possible Output: [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]
Tiktok SDE NG 第三輪HM
HM面這一輪很重要,面試官有決定權,每個面試官風格也不一樣,經驗來說還是根據前兩輪面的不好的地方來準備。 這次是全程圍繞簡歷展開,感覺面試官更加關注溝通和成長性。
首先先是自我介紹,接著挑了幾個專案提問,也會問在團隊中是否願意主動承擔責任,是否願意快速學習新系統之類的。
重點問了:1、問了最有挑戰性的專案。2、如何與隊友協作。3、遇到突發情況如何處理 就簡單分享一個實習經歷,然後因為什麼導致失敗,最後又怎麼樣解決避免再次出錯,回答的時候要圓的回來,一些技術細節也要了解到位,一般沒啥問題 這次並沒有問coding,算正常聊天那種,從你的回答表現來決定是否合適
聯絡我們|把面試不確定性,變成可控結果
在真實的面試過程中,很多卡點並不在“會不會寫”,而在能不能在有限時間內,把思路講清楚、把關鍵點答到位。透過我們的全流程面試輔助與 OA 支援,學員不僅順利完成了題目,更在溝通中清晰展示了自己的邏輯能力、問題拆解能力和工程思維,讓面試官真正看到“可落地的實力”。
無論是 TikTok 的高強度 coding,還是 follow-up、專案深挖,我們的實時助攻都能在關鍵時刻幫你穩住節奏、補齊要點。這種能力的提升,不只服務於一次面試,也會長期反哺你解決真實工程問題的方式。
如果你也正在準備 TikTok / 大廠 OA 或 VO,希望在關鍵面試中更穩、更有把握,歡迎立即聯絡我們,一起把機會握在自己手裡。