TikTok 面试真题复盘:N 个有序 Linked List 里,怎么找 Top N 最大值(顺带聊广告推荐多阶段 Rank)

面试开始

候选人在面试开始前先确认连线情况:

keyi看到 可以听到
好我没事了 你随时进
八股麻烦帮一帮
可能是中文面试

面试官进入会议后先让候选人简单聊一下推荐系统背景。候选人先从常见方法讲起:

最基础的是 content-based recommendation。现在很多公司会使用 embedding 表示用户和内容,例如通过 BERT 或双塔模型生成向量,然后使用 cosine similarity 计算相似度进行召回。

随后候选人补充了视频广告推荐系统常见的多阶段结构:

广告池

Recall

Pre-Rank

Rank

Re-Rank

广告展示

在排序阶段通常会预测 CTR 和 CVR,然后结合广告出价计算收益,例如:

eCPM = bid × pCTR × pCVR

最后在 Re-Rank 阶段进行频次控制、去重以及预算分配。

面试官听完之后点了点头,然后切换到了算法题。


算法题

面试官给出的题目是:

有 N 个有序的 linked list,写一个函数,从所有链表中找出 Top N 个最大的元素。

候选人没有立刻写代码,而是先确认题目细节:

  • 每个链表是升序还是降序
  • Top N 是否允许重复
  • 如果所有链表元素总数小于 N 应该如何处理

确认链表是 升序之后,候选人开始解释思路。


解题思路

因为每个链表本身已经排好序,所以最大的元素一定在链表尾部。候选人提出维护每个链表的“当前最大候选”,然后用 max-heap(优先队列) 来管理这些候选值。

步骤大致如下:

  1. 从每个链表取出当前最大节点,加入 max-heap
  2. 每次从 heap 中取出最大值加入结果集合
  3. 将该节点所在链表的下一个候选节点加入 heap
  4. 重复直到得到 N 个结果

由于 heap 的大小最多是链表数量 K,所以每次操作复杂度是 log K

整体复杂度为:

Time Complexity

O(N log K)

Space Complexity

O(K)

面试官随后追问:如果是 单链表,如何从尾部往前遍历。

候选人的回答是可以先遍历一次链表,将节点存入数组或栈中形成可逆访问结构,然后再按同样的 heap 方法寻找 Top N。

面试官确认复杂度后结束了算法部分。

csoahelp 面试辅助服务会在候选人面试过程中实时协助:

  • 提醒关键思路
  • 辅助算法推导
  • 提供系统设计八股要点
  • 帮助候选人保持面试节奏

已经有大量 TikTok、Amazon、Google、Stripe 等公司的候选人通过我们的辅助顺利完成面试。

如果你正在准备海外大厂技术面试,可以通过 csoahelp 获得实时面试辅助支持。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *