最新 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,希望在关键面试中更稳、更有把握,欢迎立即联系我们,一起把机会握在自己手里。