| How to structure a system design interview |
chapter-03-framework-for-system-design-interviews.md |
4-step framework, time allocation, dos/don'ts, interviewer signals |
| How to scale from single server to millions of users |
chapter-01-scale-from-zero-to-millions.md |
Progressive scaling: LB, replication, cache, CDN, stateless tier, sharding, multi-DC |
| How to estimate QPS, storage, bandwidth, server count |
chapter-02-back-of-envelope-estimation.md |
DAU-to-QPS formula, latency numbers, availability nines, estimation template |
| Design a rate limiter / API throttling |
chapter-04-design-rate-limiter.md |
Token bucket, leaking bucket, sliding window; Redis counters; race conditions |
| How to distribute data across servers evenly |
chapter-05-design-consistent-hashing.md |
Hash ring, virtual nodes, affected-key redistribution, rehashing problem |
| Design a distributed key-value store |
chapter-06-design-key-value-store.md |
CAP theorem, quorum (N/W/R), vector clocks, gossip, Merkle trees, write/read path |
| Generate unique IDs in distributed systems |
chapter-07-design-unique-id-generator.md |
Snowflake (64-bit), UUID, ticket server, multi-master; bit layout tuning |
| Design a URL shortener |
chapter-08-design-url-shortener.md |
Base 62 vs hash+collision; 301/302 redirect; bloom filter; read-heavy caching |
| Design a web crawler |
chapter-09-design-web-crawler.md |
BFS traversal, URL frontier, politeness, robots.txt, dedup, content fingerprinting |
| Design a notification system |
chapter-10-design-notification-system.md |
Multi-channel (push/SMS/email), message queues, retry, dedup, templates, analytics |
| Design a news feed system |
chapter-11-design-news-feed-system.md |
Fan-out on write vs read, celebrity problem, feed publishing vs retrieval, graph DB |
| Design a chat system |
chapter-12-design-chat-system.md |
WebSocket, presence, service discovery, message sync, KV store for history |
| Design search autocomplete / typeahead |
chapter-13-design-search-autocomplete.md |
Trie data structure, top-k, data gathering vs serving, caching at browser/CDN |
| Design YouTube / video streaming |
chapter-14-design-youtube.md |
Video transcoding DAG, CDN delivery, blob storage, pre-signed URLs, streaming protocols |
| Design Google Drive / cloud file storage |
chapter-15-design-google-drive.md |
Block-level splitting, delta sync, dedup, notification service, conflict resolution, versioning |
| Which database: SQL vs NoSQL |
chapter-01-scale-from-zero-to-millions.md |
Decision criteria, tradeoff table |
| What is the CAP theorem |
chapter-06-design-key-value-store.md |
CP vs AP analysis, practical implications |
| How to handle server failures |
chapter-01-scale-from-zero-to-millions.md + chapter-06-design-key-value-store.md |
Failover at every tier (Ch1); gossip, hinted handoff, Merkle trees (Ch6) |
| How to choose a sharding key |
chapter-01-scale-from-zero-to-millions.md + chapter-05-design-consistent-hashing.md |
Celebrity/hotspot problem, resharding, virtual nodes |
| When to add a cache layer |
chapter-01-scale-from-zero-to-millions.md |
Read-through cache, expiration policy, cache SPOF, thundering herd |
| When to add a message queue |
chapter-01-scale-from-zero-to-millions.md |
Decoupling, async processing, independent scaling |
| How to handle rate-limiting race conditions |
chapter-04-design-rate-limiter.md |
Lua scripts, Redis sorted sets, centralized store vs sticky sessions |