Apple 面试真题:用户事件去重与统计– 面试真题 – 面试辅助 – 一亩三分地 – 代面试 – VO辅助

最近碰到一道 Apple 的面试题,题目是:

Write a function that removes duplicate user events occurring within a given time window for the same user and event type, then returns per-user counts, sorted unique event types, and first/last valid event timestamps.

题目不难,但有一个地方很容易理解错。

每条 event 里有 user_id、event_type 和 timestamp。对于同一个用户、同一种 event,如果短时间内重复出现,就需要做去重。

比如窗口是 60 秒,同一种 event 出现在:

10s
50s
80s

10s 是第一条有效数据。

50s 距离 10s 只有 40 秒,所以去掉。

到 80s 的时候,这里应该和 10s 比,而不是和 50s 比。因为 50s 已经被判定成重复 event 了,不应该成为下一次判断的基准。

所以:

80 - 10 = 70

80s 需要保留。

这题比较自然的写法就是先按照 timestamp 排序,然后用一个 map 记录每个 (user_id, event_type) 最近一次有效 event 的时间。

后面的统计就比较直接了,把每个用户的有效 event 数量、出现过的 event type,以及第一条和最后一条有效时间记下来即可。

整体复杂度主要在排序,所以是 O(n log n)。

这道题实际面试里比较值得注意的反而是后续追问。比如 interviewer 可能会问:如果输入本身已经按时间排好怎么办?如果 event 是实时进来的怎么办?如果数据乱序怎么办?边界刚好等于 60 秒算不算重复?

我们做实时面试辅助时,这类题通常不会只盯着代码本身。更重要的是先帮客户把题意里的坑找出来,再把思路组织成几句话,让他能先和面试官讲清楚,然后再开始写。

尤其像这种题,代码往往不长,真正容易丢分的是一开始把“previous event”和“previous valid event”理解错了,后面代码写得再快也要返工。

csoahelp 目前主要做北美技术面试实时文本辅助和 Mock Interview。遇到这种偏数据处理、工程逻辑的题,我们会结合面试官的追问实时调整思路,而不是只给一个固定答案。

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

Leave a Reply

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