我整理了一个算法列表并解释了它们为什么重要。这些算法不仅对面试有用,对任何软件工程师来说理解它们都很有好处。

需要记住的一点是:在系统设计面试中,理解”这些算法如何在现实世界系统中使用”通常比实现细节更重要。
图中的星星是什么意思?
按重要性对算法进行客观排名非常困难。我欢迎建议和调整。
- 五星:非常重要。尽量理解它如何工作以及为什么
- 三星:在某种程度上重要。你可能不需要知道实现细节
- 一星:高级。对高级候选人来说了解很好
在哪里学习更多?
- Geohash:https://www.pubnub.com/learn/glossary/what-is-geohashing/
- Quadtree:https://engblog.yext.com/post/geolocation-caching
- 一致性哈希:https://www.toptal.com/big-data/consistent-hashing
- 漏桶/令牌桶:https://www.quora.com/What-is-the-difference-between-token-bucket-and-leaky-bucket-algorithms
- Trie(字典树):https://en.wikipedia.org/wiki/Trie
- Rsync:https://rsync.samba.org/tech_report/
- Raft:https://raft.github.io/
- Paxos:https://martinfowler.com/articles/patterns-of-distributed-systems/paxos.html
- 布隆过滤器:https://www.linkedin.com/posts/alex-xu-a8131b11_systemdesign-coding-interviewtips-activity-6917494340315463680-O0sG/
- Merkle 树:https://en.wikipedia.org/wiki/Merkle_tree
- HyperLogLog:https://engineering.fb.com/2018/12/13/data-infrastructure/hyperloglog/
- Count-Min Sketch:https://florian.github.io/count-min-sketch/
- 分层时间轮:https://www.cse.wustl.edu/~cdgill/courses/cs6874/TimingWheels.ppt
- 操作转换:https://en.wikipedia.org/wiki/Operational_transformation
本文为学习目的的个人翻译,译文仅供参考。
原文链接:Algorithms you should know before you take system design interviews。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。