Files
ldb/doc/interview_questions_aggressive_50.md
2026-03-05 08:45:23 +00:00

77 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# KVStore 激进版本:面试高频追问 50 题(含 Tradeoff 视角)
## 回答建议(统一框架)
- 建议每题按「目标 -> 方案 -> 收益 -> 代价 -> 兜底」回答。
- 收益常见维度:吞吐、时延、稳定性、可维护性、可扩展性。
- 代价常见维度:实现复杂度、内存开销、排障成本、一致性窗口、开发周期。
## 1) 架构与边界1-5
1. 你把系统拆成了哪些层(网络/协议/执行/持久化/复制)?这种分层带来的收益与额外复杂度分别是什么?
2. 为什么默认选择 Reactor 而不是 Proactor/协程网络模型?三者在吞吐、延迟、开发复杂度上的 tradeoff 是什么?
3. Array/RBTree/Hash 三种引擎的选型边界是什么?在不同数据分布下的性能收益与维护成本如何权衡?
4. 你说“主路径轻量化”,具体删掉了哪些主线程工作?对 CPU 利用率与代码复杂度的 tradeoff 是什么?
5. 如果要做多核扩展,你会优先做连接分片还是数据分片?两者在扩展性与一致性上的代价分别是什么?
## 2) 协议与解析6-10
6. RESP 解析如何处理半包/多包/粘包?选择“严格报错”还是“尽量恢复”的 tradeoff 是什么?
7. binary-safe 为什么必须用 sliceptr+len而不是 C 字符串?这对性能和代码可读性有什么影响?
8. 你如何限制恶意请求(超大 bulk、超多参数安全性提升与正常流量误伤之间如何平衡
9. inline 与 multibulk 共存时如何处理优先级?兼容性收益与实现复杂度代价分别是什么?
10. 新增命令时如何保证最小改动?抽象过度与快速迭代之间的 tradeoff 怎么拿捏?
## 3) ChainBuffer 与“零拷贝”追问11-15
11. readv 直写后用户态还会发生哪些拷贝?你如何定义“零拷贝”和“低拷贝”的边界?
12. chain_buffer_linearize 何时触发?减少复杂解析逻辑与引入额外 memcpy 的 tradeoff 是什么?
13. 为什么要做 chunk free_list复用内存带来的性能收益与内存峰值风险如何平衡
14. 大 Key64KB与小 Key 混跑时chunk 策略如何避免碎片化?吞吐和内存效率谁优先?
15. sendmsg 聚合发送遇到部分发送时如何保证一致性?更高吞吐与更复杂状态管理如何权衡?
## 4) 所有权移交与并发安全16-20
16. “执行-落盘共享缓冲片段”如何定义所有权?减少拷贝收益与生命周期复杂度代价怎么评估?
17. detach/release 如何避免 UAF/double free你牺牲了哪些性能换取内存安全
18. 连接提前关闭时已移交数据如何回收?优先保证数据安全还是优先快速释放资源?
19. 为什么采用“谁申请谁释放”?跨线程释放带来的便利与隐患如何取舍?
20. 若做真正 0 拷贝落盘,你会接受哪些新增约束(引用计数/锁/回收时序)?
## 5) io_uring 持久化流水线21-25
21. n*SPSC 相比单队列 MPSC 的收益和代价分别是什么?你为什么在当前阶段选 n*SPSC
22. in-flight 上限为何设为 CQ 的 80%?保守水位与峰值吞吐之间如何权衡?
23. 队列满时背压策略是什么?“保护系统稳定”与“牺牲尾延迟”之间如何取舍?
24. destroy_queue 用批量偷取+集中释放的动机是什么?释放抖动与主循环平滑性如何平衡?
25. shutdown 阶段如何保证无悬挂任务?优雅退出时间与数据完整性哪个优先?
## 6) 快照 + 增量日志一致性26-30
26. SAVE 与 oplog append 并发时一致性窗口怎么定义?强一致与吞吐的 tradeoff 是什么?
27. 为什么恢复顺序是“先快照后 oplog”恢复速度与恢复正确性之间如何权衡
28. oplog 记录命令字节流而不是逻辑变更,优势和成本分别是什么?
29. replay 遇到坏日志时你会“失败退出”还是“跳过继续”?可用性与正确性怎么选?
30. 你如何说明恢复后状态边界?文档化成本与实现灵活性的 tradeoff 是什么?
## 7) 主从同步与状态机31-35
31. 请描述 SSYNC -> Snapshot -> SREADY -> Incremental 状态机,并说明每步的收益与风险。
32. 快照传输期间新写入如何不丢?延迟增大与一致性增强之间怎么平衡?
33. 共享内存 ring wrap marker 方案为什么可行?简单实现与健壮性之间的代价是什么?
34. seq 不连续时你为何选择阻塞/跳过/重建?各策略的可用性与数据风险如何比较?
35. eBPF uprobe 放在控制面而非数据面的考量是什么?观测能力与运行时开销如何权衡?
## 8) 内存分配器与内存池36-40
36. mempool 分级8-512B的依据是什么固定桶命中率与碎片风险如何平衡
37. 大对象回退 malloc 的原因是什么?统一路径与分层路径在复杂度上怎么取舍?
38. mempool 如何处理空闲页回收?低延迟复用与低内存占用的 tradeoff 怎么设定?
39. malloc/jemalloc/mypool 在你的 workload 下差异来自哪里?泛化能力与场景优化如何平衡?
40. 线上内存峰值异常时先看哪些指标?指标全面性与观测成本如何取舍?
## 9) 压测方法学与结果可信度41-45
41. 你如何保证 benchmark 可复现?“实验真实度”与“执行成本”之间怎么平衡?
42. 为什么有些场景用 bench.c有些改用 testcase mode=4语义准确与工具统一如何取舍
43. QPS 统计口径怎么定义?是否包含失败请求?可比性与直观性之间如何平衡?
44. 如何避免预热不足/缓存命中导致虚高?测试严谨性与测试周期如何平衡?
45. 如何解释 round 间波动CV追求峰值还是追求稳定性的 tradeoff 是什么?
## 10) 真实性、边界与演进46-50
46. 简历里“零拷贝”哪些已落地,哪些是低拷贝/预案?为什么这样表述?
47. 简历里“协同状态机”当前实现到哪一步?工程现实与对外表达如何平衡?
48. 若给你 2 周把预案落地,你的里程碑怎么排?短期收益与长期架构如何取舍?
49. 当前最大技术债是什么?为什么没有先修?业务推进与技术治理如何平衡?
50. 若带 3 人继续做,下版目标与验收指标是什么?功能扩展与稳定性建设如何排序?