拿下技术面上传简历

一个定时任务系统常驻 100 万个待触发任务,按触发时间排序,每秒新增 2000 个、触发 2000 个。业务还要求能按 taskId 取消任务,取消率约 5%,且被取消的任务大多还没到期。你用二叉堆怎么实现?直接遍历堆去找 taskId 的代价是多少?如果不想付这个代价,你会怎么设计?

数据结构与算法线性与树结构3-5 年知识点 1 个

面试官在考什么

考察是否理解堆只能高效拿到极值、不支持按 key 高效定位,以及索引堆/懒删除/时间轮之间的工程取舍。

堆与优先队列

回答框架 · 前两步

  1. 二叉堆取堆顶 O(1),插入/弹出 O(log n),100 万规模的 log2(10^6)≈20 次比较,每秒 4000 次操作绰绰有余,量级完全匹配。
  2. 取消的痛点在'定位'而不是'删除':堆不支持按 taskId 查找,线性扫描是 O(n)=100 万次,5% 取消率下每秒上百次取消意味着上亿次比较,不可行。

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题