Algorithms you should know before you take system design interview
I put together a list and explained why they are important. Those algorithms are not only useful for interviews but good to understand for any software engineer.
One thing to keep in mind is that understanding “how those algorithms are used in real-world systems” is generally more important than the implementation details in a system design interview.
What do the stars mean in the diagram?
It’s very difficult to rank algorithms by importance objectively. I’m open to suggestions and making adjustments.
Five-star: Very important. Try to understand how it works and why.
Three-star: Important to some extent. You may not need to know the implementation details.
One-star: Advanced. Good to know for senior candidates.
Where to learn more?
Geohash: https://www.pubnub.com/learn/glossary/what-is-geohashing/
Quadtree: https://engblog.yext.com/post/geolocation-caching
Consistent hashing: https://www.toptal.com/big-data/consistent-hashing
Leaky bucket /token bucket: 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
Bloom filter: https://www.linkedin.com/posts/alex-xu-a8131b11_systemdesign-coding-interviewtips-activity-6917494340315463680-O0sG/
Merkle tree: 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/
Hierarchical timing wheels: https://www.cse.wustl.edu/~cdgill/courses/cs6874/TimingWheels.ppt
Operational transformation: https://en.wikipedia.org/wiki/Operational_transformation
Other things made by us:
System Design YouTube channel: https://www.youtube.com/channel/UCZgt6AzoyjslHTC9dz0UoTw
Twitter: https://bit.ly/3HqEz5G
LinkedIn: https://bit.ly/39h22JK