Category: System Design
Low Level Design Interview (All Topics in Details)
Cornerstones of Object-oriented Programming Background of Object-oriented Programming (OOP) Encapsulation Abstraction Inheritance Polymorphism Object-oriented Design Introduction to Object-oriented Analysis and Design (OOAD) Introduction to the Unified Modeling Language Types of UML Diagrams Use Case Diagram Class Diagram Sequence Diagram Activity Diagram Object-oriented Design Principles Introduction to SOLID Design Principles SOLID: Single Responsibility Principle SOLID: Open…
Read More “Low Level Design Interview (All Topics in Details)” »
Low-level design interview preparation
Preparing for a low-level design interview involves understanding various concepts related to designing software systems at a detailed level. Here’s a comprehensive list of topics you should cover: Object-Oriented Design Principles: SOLID principles (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) DRY (Don’t Repeat Yourself) principle KISS (Keep It Simple, Stupid) principle YAGNI (You…
Design Rate Limiter
Definition of Rate limiter and its benefit Where to put rate limiter : server side or client side? Algorithm for Rate limiter : Token bucket algorithm : Leaking bucket algorithm Fixed window counter algorithm : Sliding window log algorithm : Sliding window counter algorithm : Rate limiting rules : Detailed design of rate limiting :…
SOLID Design Principles in C++
Dependency Inversion Principle
High level modules should not depend upon low level modules. Both should depend upon abstractions. Dependency inversion talks about the coupling between the different classes or modules. It focuses on the approach where the higher classes are not dependent on the lower classes instead depend upon the abstraction of the lower classes. The main motto…
Interface Segregation Principle(ISP)
Clients should not be forced to depend upon interfaces that they do not use. Do not force any client to implement an interface which is irrelevant to them You should prefer many client interfaces rather than one general interface and each interface should have a specific responsibility. Interface Segregation Principle is very much related to…
Liskov Substitution Principle
Subtypes must be substitutable for their base types without altering the correctness of the program Methods that use references to base classes must be able to use objects of derived classes without knowing it. If S is a subtype of T, then objects of type T in a program may be replaced with objects of type S without altering any of the…
Open-Closed Principle
Classes should be open for extension and closed to modification. Modification means changing the code of an existing class, and extension means adding new functionality. We should be able to add new functionality without touching the existing code for the class. This is because whenever we modify the existing code, we are taking the risk…
Single Responsibility Principle
A class should have only one reason to change. It means a class should have only one task to perform. This means that if a class is a data container, like a Book class or a Student class, and it has some fields regarding that entity, it should change only when we change the data…