你要在一个监控系统里对两条时间线 A、B 做『按时间戳精确对齐求差』:只有时间戳完全相等的点才产生一个差值点,输出按时间递增。A、B 各约 10 亿个采样点,都已按时间戳递增地落在磁盘文件里,单机执行,内存上限 2GB。请给出实现方案和关键取舍。
面试官在考什么
考察候选人能否把有序性当成工程资源(单遍归并、常数内存),而不是条件反射地开哈希表。
回答框架 · 前两步
- 利用两边都有序做归并式单遍扫描,复杂度 O(n+m)、内存常数,避免给 10 亿点建哈希表。
- 比较规则要先统一:时间戳单位、时区、时钟源必须对齐,否则『相等』本身不可判定。
还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「数据结构与算法」方向页
同一能力域的其他题
- 一个 N×N 的 0/1 网格,N=2000(共 400 万格),0 表示可通行,1 表示障碍,允许上下左右四方向移动,每走一格算 1 步。要求从 (0,0) 走到 (N-1,N-1),给出最短步数,不可达返回 -1。内存上限 256MB。请说明你选 BFS 还是 DFS、队列和 visited 怎么设计、以及 visited 具体在什么时刻打标记。
- 社交关系图共 10^9 个用户,平均出度 200,边存放在分布式 KV 上(一次邻居查询约 5ms),单机可用内存 64GB。现在要找出指定用户 A 的 3 度以内(含 3 度)的全部用户 ID。你选 BFS 还是 DFS?写出你的遍历控制逻辑,估算 frontier(当前层待扩展集合)的最大规模,并说明用什么结构做去重。
- 你接手一个权限可达性服务:授权图约 500 万节点、2000 万条有向边(用户→角色→权限组→资源),业务上允许成环。线上要回答『用户 u 能否到达资源 r』,峰值 10 万 QPS、P99 要求 20ms。上一版实现是每次请求从 u 出发做一次 DFS,线上大面积超时并偶发栈溢出。请给出你的方案、演进路径和取舍。
- 给你一个 1000×1000 的 0/1 网格(1 是陆地,0 是水),上下左右相邻的陆地属于同一个岛,要求返回岛屿数量。A 同学用递归 DFS 做 flood fill,样例全过,但把规模放大到接近满屏陆地时程序崩溃。请说明崩溃的原因,写出你会怎么改;并说明同一份数据用 BFS 写时,队列规模的最坏情况是什么量级。
- 有向图有 4 个节点 s、a、b、t,边和权值是:s→a = 1,s→b = 2,b→a = -2,a→t = 3,b→t = 10。用朴素 Dijkstra(每次从未确定的节点里取 dist 最小的那个标记为已确定,之后不再更新它的 dist)从 s 求到 t 的最短路。请说出它算出的 dist[t] 是多少、正确答案是多少、差在哪一步上,然后说明什么样的图 Dijkstra 才是安全的。
- 一个城市路网约 10^8 个节点、2.5×10^8 条边,边权是通行时间(非负,但按早晚高峰每 5 分钟整体更新一次)。要支持单点到单点最短路查询、峰值 10^4 QPS、P99 延迟 < 50ms。朴素 Dijkstra 单次查询要扫描大量节点。你怎么选算法与架构?说清预处理成本、查询延迟、以及权重频繁变化带来的矛盾怎么权衡。