Software Design & Systems
Learn the design patterns, testing practices, and system design principles that separate working code from well-engineered software — from GoF patterns to scalable distributed architectures.
Creational Design Patterns
Patterns for object creation — singleton, factory, abstract factory, prototype, and builder.
-
- Explain what design patterns are
- Classify patterns into creational, structural, and behavioral categories
- Read UML class diagrams
-
- Implement singleton (thread-safe)
- Implement factory and abstract factory patterns
- Implement prototype pattern
-
- Implement builder for complex construction
- Describe object pool pattern
Structural Design Patterns
Patterns for composing classes and objects — adapter, decorator, facade, proxy, composite, and flyweight.
-
- Implement adapter pattern
- Implement decorator pattern
- Implement facade pattern
-
- Implement proxy pattern
- Implement composite pattern
- Implement flyweight pattern
Behavioral Design Patterns
Patterns for communication between objects — observer, strategy, command, state, iterator, visitor, and more.
-
- Implement observer (pub/sub) pattern
- Implement strategy (interchangeable algorithms) pattern
- Implement command (encapsulated actions) pattern
-
- Implement state machine pattern
- Implement Python iterator protocol
- Implement visitor pattern
-
- Implement memento (snapshot/restore) pattern
- Implement delegation pattern
- Implement template method pattern
Testing
Unit testing, mocking, dependency injection, and test-driven development.
-
- Explain unit test purpose
- Write test cases with assertions
- Organize test suites
-
- Explain mock objects and test doubles
- Implement dependency injection
- Describe integration testing
-
- Apply red-green-refactor cycle
- Write tests before implementation
- Identify TDD benefits and limitations
System Design Fundamentals
Scalability, databases, caching, load balancing, and distributed systems concepts.
-
- Define horizontal vs vertical scaling
- Explain load balancing
- Describe caching strategies
-
- Compare SQL vs NoSQL
- Explain sharding and replication
- Describe CAP theorem
-
- Explain consensus algorithms
- Describe message queues
- Identify microservices tradeoffs
System Design Practice
Hands-on system design exercises — URL shortener, cache system, and social feed.
-
- Walk through system design for a URL shortener
- Identify bottlenecks
- Propose solutions
-
- Design a distributed cache (Memcached/Redis-like)
- Handle eviction and consistency
-
- Design a news feed system
- Handle fan-out strategies
- Optimize for read-heavy workloads
Computer Security & Parallel Programming
Security fundamentals, parallel programming concepts, and garbage collection.
-
- Identify common attack vectors
- Explain defense-in-depth
- Describe secure coding practices
-
- Distinguish parallelism from concurrency
- Explain MapReduce
- Describe Python multiprocessing
-
- Explain reference counting and tracing GC
- Describe generational collection
- Identify GC implications