最新 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