Interview Questions for Web Developer - General
Tags: architecture, interview
Published: 2024-01-01 10:15:16

**1. What is OOP? Name its principles?**
OOP stands for Object-Oriented Programming, a programming paradigm that revolves around the concept of objects. In OOP, objects are instances of classes that encapsulate data (attributes or properties) and behavior (methods or functions).The main principles of OOP are:

- **Encapsulation**: Encapsulation involves bundling the data (attributes) and the methods (functions) that operate on the data within a single unit (an object). It restricts access to some of the object's components, allowing only the necessary parts to be exposed and manipulated, enhancing security and maintainability.

- **Abstraction**: Abstraction focuses on representing the essential features of an object while hiding its complex details. It allows developers to focus on what an object does rather than how it does it, simplifying the interaction with complex systems by providing a simplified interface.

- **Inheritance**: Inheritance allows one class (the child or derived class) to inherit properties and behaviors (methods) from another class (the parent or base class). This facilitates code reusability, allowing new classes to be created based on existing ones, extending their functionality without rewriting existing code.

- **Polymorphism**: Polymorphism refers to the ability of objects to take on different forms or have multiple behaviors. It allows objects of different classes to be treated as objects of a common superclass through method overriding or method overloading, providing flexibility and enabling a single interface to represent multiple data types or classes.


**2. What is SOLID? Explain each component?**
The SOLID is an acronym that stands for:

- **S - Single Responsibility Principle (SRP):**
A class should have only one reason to change, meaning it should have only one job or responsibility.

- **O - Open/Closed Principle (OCP):**
Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification.
New functionality should be added via extension rather than altering existing code.

- **L - Liskov Substitution Principle (LSP):**
Objects of a superclass should be replaceable with objects of its subclass without affecting the correctness of the program.
Subtypes should be substitutable for their base types without altering the desirable properties of the program.

- **I - Interface Segregation Principle (ISP):**
A client should not be forced to depend on methods it does not use.
Interfaces should be specific to the requirements of the clients, rather than having one large interface.

- **D - Dependency Inversion Principle (DIP):**
High-level modules/classes should not depend on low-level modules/classes; both should depend on abstractions.
Abstractions should not depend on details; rather, details should depend on abstractions.

**3. Explain DRY, KISS, YAGNI principles?**
- **DRY (Don't Repeat Yourself)**: DRY advocates for eliminating redundancy by ensuring that each piece of knowledge or logic in a system is only represented in a single, authoritative location. It promotes code reusability, reduces duplication, and enhances maintainability by keeping code concise and avoiding repetition.
- **KISS (Keep It Simple, Stupid)**: KISS suggests that simplicity should be a key goal in design and development. It encourages avoiding unnecessary complexity and favoring straightforward, easy-to-understand solutions. By keeping things simple, code becomes more readable, maintainable, and less prone to errors.
- **YAGNI (You Aren't Gonna Need It)**: YAGNI advises against adding functionality or features until they are actually needed to solve a problem. It discourages preemptively implementing functionality based on assumptions about future requirements. Instead, it encourages focusing on current requirements and avoiding unnecessary development that may never be used, reducing unnecessary complexity and waste.