System design approach
A repeatable framework for system design rounds - clarify requirements, estimate capacity, sketch APIs and data, design the high-level architecture, deep dive on bottlenecks - with latency numbers, estimation math and a building-block cheat sheet.
Design a URL shortener
Complete design of a URL shortening service - requirements, capacity estimates, short code generation with Base62 and ID ranges, data model, caching, redirect semantics (301 vs 302), analytics pipeline and failure handling, with tested Java code.
Design a rate limiter
Rate limiting algorithms compared - fixed window, sliding window, token bucket, leaky bucket - with tested Java implementations, a Redis Lua script for distributed token buckets, placement, response headers, failure modes and Spring integration.
Design order processing
End-to-end design of e-commerce order processing with Java microservices - order state machine, inventory reservation, payment, saga orchestration, idempotent APIs, transactional outbox, failure handling, scaling for flash sales and observability.
Design a notification service
Design a scalable multi-channel notification service - event ingestion, templating, user preferences, per-channel queues, retries with jittered backoff, provider failover, idempotency, rate limits, delivery tracking and compliance.
Trade-off discussions
A framework for discussing architectural trade-offs plus decision guides for consistency vs availability, sync vs async, SQL vs NoSQL, monolith vs microservices, caching strategies, push vs pull, REST vs gRPC vs GraphQL, and build vs buy.