拿下技术面上传简历

某服务在内存里维护一份“最近 N 条记录”的有序表(N=100 万,单条记录 64B),线上埋点统计的操作占比是:尾部追加 90%,按序号随机读取 9%,在中间指定位置插入或删除 1%。现有实现是动态数组,中间插入需要 memmove 平均约 50 万条记录(约 32MB)。有同学提议整体换成双向链表,理由是“链表插入删除是 O(1)”。作为技术负责人,你怎么做这个决策?请给出你的判断依据、你要补测的数据,以及最终方案。

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

面试官在考什么

判断候选人能否用量化的收益与成本替代“复杂度直觉”做结构选型,并识别全量重构的迁移与内存风险。

数组与链表

回答框架 · 前两步

  1. 决策依据应该是加权后的主路径成本,而不是单点复杂度:90% 的尾部追加在数组上是均摊 O(1)(预留容量后几乎不拷贝),换成链表后每次追加都要分配节点,主路径反而变慢;只有 1% 的中间插入暴露数组劣势,收益面很小。
  2. 要算内存与缓存账:记录从 64B 变成 64B 加两个指针再加分配器头部和对齐,100 万条会多出几十 MB;节点分散导致遍历和随机读的缓存命中率下降,9% 的随机读会明显变慢。

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

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

延伸阅读

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

同一能力域的其他题