ML Skills
Scalable Distributed Systems
Interview Questions
Last updated on Mar 26, 2023

thinking

Interview questions

In this post, I will show you some real common interview questions, which I was asked during my interviews, related to distributed systems and scalable applications. These questions can help you prepare for technical interviews in software engineering roles that require expertise in building distributed systems.

Load balancer

  • What is a load balancer? How does it work?
  • Can the load balancer be a bottleneck? How to resolve it?

Caching

  • What are cache invalidation patterns, their advantages, and disadvantages?
  • What is the Least Recently Used cache policy?

Database

  • Compare relational databases and non-relational databases by definition, structure, storage, access methods, scaling methods, and when to use them
  • What is a database transaction?
  • How is a database transaction handled?
  • What is a dirty read?
  • What are transaction isolation levels?
  • Compare ACID in relational databases and BASE in non-relational databases
  • How to control concurrent transactions? Compare optimistic control and pessimistic control
  • How to make a distributed transaction? How does the 2-phase commit work?
  • What is a database connection pool? What can it help?
  • What is database replication?
  • What is the binary log?
  • What is database sharding? Advantages and disadvantages?
  • Compare database sharding and partitioning

Concurrency and parallelism

  • What is a thread pool?
  • What is a critical section?
  • What is race condition? How to handle this?
  • What are synchronizing objects?
  • What is deadlock? How to avoid it?

Besides the above questions, there will be some system design questions I already showed in this post, which also lists down resources that I used to learn about distributed system design.

Ending

In this blog series, we explored scalable distributed systems, including application services, distributed caching, distributed databases, message queues, event-driven architecture, and stream processing platforms. With careful consideration of factors like scalability, architecture, performance, availability, and fault tolerance, developers can design and implement distributed systems that meet modern application demands.

I hope this series provided valuable insights for building resilient and scalable distributed systems. Thank you for being a part of this series and making it happen. Please don't hesitate to contact me if you have any questions. See you again soon in the future series when I learn something interesting.