这组 TikTok 面试题一共四道,覆盖了模拟、树结构、工程化数据统计和经典动态规划。题目本身不算偏,但很考验候选人能否快速确认边界条件,并选择合适的数据结构。
题目一:Single CPU Scheduler
英文原题:
Given a list of jobs with process_name, submission_time, execution_time, and priority, simulate a single CPU scheduler.
给定一组任务,每个任务包含:
process_namesubmission_timeexecution_timepriority
模拟单核 CPU 的任务调度过程。
思路
这道题首先要向面试官确认调度规则:
- 优先级数字越大还是越小,优先级越高?
- 是否允许抢占?
- 相同优先级如何排序?
- CPU 空闲时是否直接跳到下一个任务的提交时间?
- 输出任务执行顺序,还是每个任务的开始和结束时间?
常见的非抢占式解法是:
- 按
submission_time排序所有任务。 - 使用优先队列保存当前已经提交、但尚未执行的任务。
- CPU 空闲时,将当前时间之前提交的任务加入队列。
- 每次选择优先级最高的任务执行。
- 如果队列为空,直接把时间推进到下一个任务的提交时间。
易错点
不要逐秒模拟,否则任务时间很大时效率会很低。更好的方式是按任务完成时间和下一次提交时间跳跃。
题目二:Referral Forest Ranking
英文原题:
Given referral pairs [referrer, referred] forming a forest, each user earns one point for every direct or indirect referral in their subtree. Return the top 5 users with at least 1 point, sorted by total points descending and then username alphabetically for ties.
给定若干推荐关系 [推荐人, 被推荐人],这些关系构成一片森林。
每个用户的积分等于其所有直接和间接下级用户数量。返回至少拥有一个积分的前五名用户:
- 积分从高到低排序;
- 积分相同时,用户名按字母顺序排序。
示例
A -> B
A -> C
B -> D
B -> E对应积分:
A = 4
B = 2
C = 0
D = 0
E = 0最终只保留积分至少为 1 的用户。
思路
本质上是计算每个节点的子树大小:
用户积分 = 子树节点总数 - 1可以先构建邻接表,再从所有根节点开始进行 DFS。每个节点只访问一次,时间复杂度为 O(n)。
得到积分后,再按照下面的规则排序:
(-points, username)最后取前五名。
易错点
需要识别森林中的所有根节点,而不是默认只有一个根节点。同时最好确认数据是否保证不存在环,以及一个用户是否可能被多个人推荐。
题目三:Largest Object-Storage Directories
英文原题:
Given an object-storage bucket URI, find the 10 directories with the largest total size, where a directory’s size is the sum of all files inside it, including files in nested subdirectories.
给定一个对象存储 Bucket 地址,找出总大小最大的十个目录。
目录大小需要包含:
- 当前目录中的文件;
- 所有嵌套子目录中的文件。
思路
对象存储通常没有真正的目录,所谓目录只是对象 Key 的前缀。
例如:
photos/2025/a.jpg
photos/2025/b.jpg
photos/2026/c.jpg假设 a.jpg 大小为 10,那么它应该同时计入:
photos/
photos/2025/遍历每个对象时,可以拆分它的路径,并将文件大小累加到所有父级目录。
如果对象数量很大,还要考虑:
- Bucket API 分页;
- 流式处理,避免一次性加载全部对象;
- 使用大小为 10 的最小堆维护结果;
- API 请求失败、超时和重试;
- 是否统计 Bucket 根目录。
易错点
不能只统计目录下的直接文件。嵌套目录中的文件必须向所有祖先目录累计。
题目四:Russian Doll Envelopes
英文原题:
Given a list of envelopes [width, height], find the maximum number of envelopes that can be nested inside each other.
An envelope can go inside another only if both its width and height are strictly smaller. Envelopes cannot be rotated.
给定若干信封 [width, height],求最多可以嵌套多少个信封。
要求宽和高都必须严格变大,且信封不能旋转。
思路
这是经典的二维最长递增子序列问题。
先排序:
- 宽度升序;
- 宽度相同时,高度降序。
然后只对高度计算最长严格递增子序列,使用二分查找可以将复杂度优化到:
O(n log n)宽度相同时将高度降序排列,是为了防止相同宽度的信封被错误地计入同一个递增序列。
易错点
直接按照宽度和高度都升序排序会出错。
例如:
[2, 3]
[2, 4]两者宽度相同,不能互相嵌套,但高度序列 3, 4 会被普通 LIS 错误计算为长度 2。
面试关注点
这组题真正考察的不只是能不能写出代码,而是能否快速识别题型:
- CPU 调度:排序、优先队列和事件模拟;
- 推荐森林:DFS 与子树统计;
- 对象存储:路径前缀、聚合和大规模数据处理;
- 信封嵌套:排序技巧与最长递增子序列。
其中第一题和第三题都存在不少未明确的工程细节。面试时主动确认调度规则、对象存储接口和异常处理方式,通常比直接开始写代码更重要。
csoahelp 提供 TikTok、Amazon、Google、Meta 等公司的技术面试辅助,包括实时文本提示和 Mock 面试。面试过程中可以帮助候选人快速梳理题意、确认边界条件,并组织清晰的解题思路。
CSOahelp 提供北美科技公司面试实时文本辅助与 Mock Interview,帮助候选人快速理解需求、组织解题思路并应对后续追问。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

