System design
- Message queues and event streamsKeep services from depending on each other, and handle traffic spikes.
- Stream processing and windowingCount things in data that never stops coming in.
- Geospatial indexingFind what's nearby with map grids like geohashes and H3.
- Caching strategiesMake reads faster, and figure out what to do when data changes.
- Relational vs non-relational databasesPick a database based on how you'll actually use it.
- Sharding and consistent hashingSplit data across machines and keep it balanced.
- Consistency and the CAP theoremWhat happens when copies of your data can't agree.
- Rate limitingStop too much traffic with token buckets and sliding windows.
- WebhooksHow one system tells another that something happened.
- Idempotency and retriesMake sure a retried request doesn't happen twice.
- Authentication and access controlWork out who someone is and what they're allowed to do.
- Real-time deliveryPush updates to users the moment they happen, with WebSockets and friends.
- Search and inverted indexesFind text fast, rank what comes back, and keep the index fresh.
- Blob storage and CDNsStore big files cheaply and serve them from close to your users.
- Load balancing and replicationSpread traffic across servers and keep copies so one failure isn't an outage.
Coding
- Trees and recursionSolve tree problems by deciding what each node returns.
- Object-oriented designSplit a small program into classes that are easy to change.
- Graph traversal and shortest pathsBFS, DFS and Dijkstra, and when to use each.
- Heaps and priority queuesAlways have the smallest or largest item ready.
- Hash maps and sliding windowsSwap nested loops for a single pass.
- Binary searchCut the search in half, even when you're searching for an answer.
- Dynamic programmingSolve each subproblem once and reuse the answer.
- Stacks and monotonic stacksMatch brackets, parse things, and find the next bigger value in one pass.
- IntervalsMerge, insert and schedule ranges without tripping over the edges.
- Union-findKeep track of connected groups as links keep arriving.
- BacktrackingTry every option, and stop early on the ones that can't work.
- Concurrency and threadsShare data between threads without races or deadlocks.
- Bit manipulationMasks, shifts and XOR, for flags, packing and IP addresses.
- TriesStore words by prefix so autocomplete and prefix lookups are fast.