拿下技术面上传简历

有个排行榜模块:N=10^6 个用户按分数从高到低存在一个容器里,读取非常频繁(每秒约 10^5 次「取第 k 名」和「取某用户的排名」),写入很少(每秒约 10 次插入/删除,插入位置随机分布在容器中部)。同事建议用双向链表,理由是插入删除 O(1);你倾向用哪一种?请从内存布局、常数开销和这两类操作的实际耗时量级给出判断依据。

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

面试官在考什么

判断候选人是否会做「操作频率 × 单次真实代价」的加权估算,而不是只看大 O 就选数据结构。

数组与链表

回答框架 · 前两步

  1. 选数组:读操作占绝对主导(10^5 : 10),随机访问是纯地址计算加一次大概率命中的缓存行;链表取第 k 名必须走 k 步指针,几乎每步都 cache miss。
  2. 链表「插入 O(1)」的前提是已经持有前驱指针;而这里插入位置由排名/分数决定,定位本身就 O(N),链表连 O(1) 都拿不到。

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

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

延伸阅读

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

同一能力域的其他题