Challenges
Each challenge is a small part of a real backend. Build it by hand and check it stage by stage.
Data structures
Useful, less-known data structures, built by hand.
- Ring Buffer (6 stages, Go, Python, JavaScript, Rust)
- Trie (6 stages, Go, Python, JavaScript, Rust)
- LRU Cache (6 stages, Go, Python, JavaScript, Rust)
- Min Heap (6 stages, Go, Python, JavaScript, Rust)
- Bloom Filter (6 stages, Go, Python, JavaScript, Rust)
- Hash Map (6 stages, Go, Python, JavaScript, Rust)
- LFU Cache (6 stages, Go, Python, JavaScript, Rust)
Load and timing
Limits, retries and timers that keep a service up under load.
- Rate Limiter (7 stages, Go, Python, JavaScript, Rust)
- Retry with Backoff (6 stages, Go, Python, JavaScript, Rust)
- Circuit Breaker (6 stages, Go, Python, JavaScript, Rust)
- Cron Scheduler (7 stages, Go, Python, Rust)
Data consistency
Records, money and replicas that stay correct when many things happen at once.
- Idempotency Keys (6 stages, Go, Python, JavaScript, Rust)
- Inventory Reservation (6 stages, Go, Python, JavaScript, Rust)
- Double-Entry Ledger (6 stages, Go, Python, JavaScript, Rust)
- Visibility Checker (6 stages, Go, Python, JavaScript, Rust)
- Consistent Hashing (6 stages, Go, Python, JavaScript, Rust)
- Counters and Sets That Merge (6 stages, Go, Python, JavaScript, Rust)
Protocols and sockets
Wire formats, protocol states and real sockets with injected faults.
- RESP Codec (6 stages, Go, Python, JavaScript, Rust)
- TCP State Machine (6 stages, Go, Python, JavaScript, Rust)
- Connection Pool (5 stages, Go, Python, JavaScript)
- Task Queue (5 stages, Go, Python, JavaScript)
- Message Log Reader (6 stages, Go)