← 返回博客列表 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 真题与陪练

联系方式