跳转至

Data Structures for Systems

是什么 / 解决什么问题

系统工程里的数据结构选择,不只是看 Big-O,还要看内存布局、cache locality、分配行为、并发访问和尾延迟稳定性。

普通算法题更关注:

复杂度是否最优

系统组件更关注:

复杂度是否稳定
内存访问是否连续
是否触发分配
是否容易观测和恢复
是否适合 hot path

选择维度

维度 问题
时间复杂度 平均复杂度和最坏复杂度分别是什么?
内存布局 连续数组还是节点指针?
cache locality 是否会大量 pointer chasing?
分配行为 是否在 hot path new/delete
并发访问 单线程、SPSC、MPSC 还是 MPMC?
稳定性 是否会 rehash、resize、rebalance?
恢复能力 状态是否容易 snapshot / replay?

低延迟系统常见结构

  1. vector / fixed array
  2. ring buffer
  3. object pool
  4. freelist
  5. hash table
  6. heap / priority queue
  7. bitmap
  8. ordered index
  9. intrusive list
  10. state machine table

面试回答方式

不要只说:

我用 unordered_map,因为 O(1)

要能补上:

是否提前 reserve?
hash 分布是否稳定?
是否可能 rehash?
节点分配是否影响 cache?
最坏情况是什么?
是否在 hot path?
如何用 perf/benchmark 验证?

当前边界

本节后续会展开具体数据结构。现在先建立判断框架:系统工程的数据结构选择,必须同时考虑算法复杂度和运行时行为。