Friday, September 21, 2018

System Design concepts

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: