Following are some of the system design concepts asked in an interview for a technical architect/senior software engineer position. It might be a good way to judge a candidate's breadth -
High Level Design:
- Vertical vs Horizontal scaling
- CAP theorem
- ACID vs BASE (atomicity, consistency, isolation & durability; basically available soft state eventual consistency)
- Partitioning/Sharding of data
- Consistent Hashing
- Optimistic vs Pessimistic locking
- Strong vs Eventual consistency
- Relational DB vs NoSQL DB
- Types of NoSQL DBs-
- Key Value (Redis cache)
- Wide Column (Cassandra)
- Document based (MongoDB)
- Graph based (Neo4J)
- Caching
- Data center/Racks/Hosts
- CPU/Memory/Harddrive/Nw bandwidth
- Random vs sequential read write on disk
Low Level Design:
- Http vs Http2 vs Websockets
- TCP/IP model
- IP4 vs IPv6
- TCP vs UDP
- DNS lookup
- HTTPS & TLS/SSL
- Public key infrastructure & certificate authority
- Symmetric vs Asymetric key
- Load balancer
- CDNs and Edge servers
- Bloom filters and Count-min sketch
- Design Patterns & OOD
- Virtual Machines and containers
- Publish-Subscribe/Queues
- Map Reduce
- Multi-threading, concurrency, locks, synchronization, CAS.
No comments:
Post a Comment