拿下技术面上传简历

内存里要维护 50 万条按时间排序的订单快照,需要支持三种操作:① 按下标随机读取(约 5000 QPS,要拿到第 k 早的订单);② 在任意位置插入新订单(约 200 次/秒,插入位置在 [0, 50万] 上近似均匀分布);③ 按订单号删除(约 200 次/秒,位置同样近似均匀分布)。你会选动态数组还是双向链表?请给出量化判断依据:涉及哪些开销、量级差多少。如果业务要求三种操作都不能慢,你会怎么改造这个结构?

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

面试官在考什么

判断候选人能否用内存布局、缓存局部性和常数因子做定量权衡,而不是背 O(1)/O(n) 的结论来选型。

数组与链表

回答框架 · 前两步

  1. 读取这一项直接让链表出局:5000 QPS 下链表每次要指针追逐平均约 25 万步,量级是每秒十亿级的内存访问,且几乎每次都 cache miss;数组是 O(1) 且顺序内存,代价可忽略。
  2. 插入/删除 200 QPS 的数组代价是 memmove:50 万个指针约 4MB 的连续搬移,200 次/秒在内存带宽上是百 MB/s 量级,现代机器可承受,远没有直觉上那么贵。

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

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

延伸阅读

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

同一能力域的其他题