1. What is Spring Boot, and how does it differ from the traditional Spring Framework?
Answer: Spring Boot is an extension of the Spring framework that simplifies the setup and development of new Spring applications. It allows developers to create stand-alone, production-grade Spring-based applications with minimal configuration. Unlike the traditional Spring Framework, which requires extensive configuration, Spring Boot comes with default configurations and auto-configuration features that reduce boilerplate code.
2. Explain the concept of Spring Boot Starter.
Answer: Spring Boot Starters are a set of convenient dependency descriptors you can include in your application. They simplify the process of setting up a Spring application by providing pre-defined configurations for various functionalities. For example, spring-boot-starter-web
includes everything needed to create a web application, such as Spring MVC, Jackson for JSON binding, and embedded Tomcat.
3. What are the different ways to configure a Spring Boot application?
Answer: Spring Boot applications can be configured in several ways:
- application.properties or application.yml: For externalized configuration.
- @Value annotation: To inject property values directly into your beans.
- @Configuration classes: For Java-based configuration.
- Profiles: To define different configurations for different environments (e.g., dev, test, prod).
4. What is the purpose of the @SpringBootApplication
annotation?
Answer: The @SpringBootApplication
annotation is a convenience annotation that combines three annotations: @Configuration
, @EnableAutoConfiguration
, and @ComponentScan
. It indicates that the class is a source of bean definitions, enables Spring Boot’s auto-configuration feature, and scans for components in the current package and its sub-packages.
5. How does Spring Boot handle dependency management?
Answer: Spring Boot uses Maven or Gradle for dependency management. It provides a set of starter dependencies that include all the necessary libraries for various features. The spring-boot-dependencies
BOM (Bill of Materials) ensures that all dependencies are compatible and can be managed with specific versions, reducing the risk of version conflicts.
6. What are the different scopes of a Spring bean?
Answer: Spring beans can have several scopes:
- Singleton: A single instance per Spring IoC container (default).
- Prototype: A new instance each time the bean is requested.
- Request: A single instance for each HTTP request (web applications).
- Session: A single instance for each HTTP session (web applications).
- Global Session: A single instance for a global HTTP session (portlet applications).
7. What is the role of the Spring Boot Actuator?
Answer: Spring Boot Actuator provides production-ready features to help monitor and manage Spring Boot applications. It exposes various endpoints that provide information about the application’s health, metrics, environment, and configuration properties. This makes it easier to gather insights and troubleshoot issues in production.
8. How do you create RESTful web services with Spring Boot?
Answer: To create RESTful web services with Spring Boot, follow these steps:
- Annotate a class with
@RestController
to define a REST controller. - Use
@RequestMapping
or@GetMapping
,@PostMapping
, etc., to define endpoint mappings. - Inject a service layer to handle business logic.
- Return response objects, which are automatically converted to JSON format by Spring’s built-in HTTP message converters.
9. Explain the use of @PathVariable
and @RequestParam
.
Answer:
- @PathVariable: Used to extract values from the URI path. It is typically used in RESTful services to capture dynamic values from the URL.
- @RequestParam: Used to extract query parameters from the request URL. It is commonly used to obtain values from the request string, such as form submissions.
10. What is the purpose of @Transactional
in Spring Boot?
Answer: The @Transactional
annotation is used to define the scope of a single database transaction. It ensures that all operations within a method are executed in a single transaction, and if any operation fails, the transaction can be rolled back. It can be applied to classes or methods and can manage transactions declaratively.
11. How can you implement exception handling in a Spring Boot application?
Answer: Exception handling in Spring Boot can be implemented using:
- @ControllerAdvice: A global exception handler that can handle exceptions across all controllers.
- @ExceptionHandler: Specific methods within a controller or in a
@ControllerAdvice
class to handle particular exceptions. - ResponseEntity: To return a custom response for exceptions, including HTTP status codes.
12. What is the role of React in a modern web application?
Answer: React is a front-end JavaScript library for building user interfaces. It allows developers to create reusable UI components, manage application state efficiently, and build single-page applications (SPAs) with a responsive user experience. React’s virtual DOM optimizes rendering performance, enhancing the overall user experience.
13. Explain the concept of JSX in React.
Answer: JSX (JavaScript XML) is a syntax extension for JavaScript that allows developers to write HTML-like code within their JavaScript files. It makes it easier to describe the UI structure and create React elements. JSX is transpiled to JavaScript function calls, which create React elements.
14. What are the differences between functional components and class components in React?
Answer:
- Functional Components: These are simple JavaScript functions that return React elements. They can use hooks for state and lifecycle management and are generally easier to read and test.
- Class Components: These are ES6 classes that extend
React.Component
. They can manage state and lifecycle methods but are more complex and verbose compared to functional components.
15. What is the purpose of useState
and useEffect
hooks in React?
Answer:
- useState: A hook that allows functional components to manage state. It returns an array containing the current state value and a function to update it.
- useEffect: A hook that allows functional components to perform side effects (like data fetching, subscriptions, or manual DOM manipulation). It runs after every render and can be configured to run conditionally based on dependency changes.
16. How do you handle forms in React?
Answer: Forms in React can be handled using controlled or uncontrolled components:
- Controlled Components: Form data is handled by React state. The input value is set via state, and onChange updates the state.
- Uncontrolled Components: Form data is managed by the DOM. You can use refs to access the form values when needed.
17. What is the significance of keys in React lists?
Answer: Keys in React lists help identify which items have changed, been added, or removed. They must be unique among siblings and provide a way for React to optimize rendering by tracking elements more efficiently during updates.
18. Explain the concept of lifting state up in React.
Answer: Lifting state up refers to the practice of moving state from child components to a common parent component. This allows multiple child components to share and synchronize state. By lifting state up, parent components can manage the state and pass it down to children as props, facilitating data flow and reactivity.
19. What are React Router and its purpose?
Answer: React Router is a library that enables dynamic routing in React applications. It allows developers to define routes for different components based on the URL, facilitating navigation between views. React Router supports nested routing, route parameters, and programmatic navigation, enhancing the user experience in single-page applications.
20. How can you manage global state in a React application?
Answer: Global state in a React application can be managed using:
- Context API: Provides a way to share values between components without explicitly passing props through every level of the tree.
- Redux: A state management library that maintains the application state in a central store, allowing components to access and update the state efficiently.
- MobX: Another state management library that utilizes observables and reactions for managing state.
21. What are some common performance optimization techniques in React?
Answer: Common performance optimization techniques in React include:
- Code splitting: Using dynamic imports to load components only when needed.
- Memoization: Using
React.memo
,useMemo
, anduseCallback
to prevent unnecessary re-renders. - Virtualization: Rendering only visible items in large lists (e.g., using libraries like React Virtualized).
- Avoiding inline functions: Defining functions outside of render methods to prevent new references on every render.
22. What is the purpose of the useReducer
hook in React?
Answer: The useReducer
hook is used for state management in functional components. It is particularly useful for managing complex state logic or when the next state depends on the previous state. It works similarly to Redux, using a reducer function to determine state transitions based on dispatched actions.
23. How do you perform API calls in React?
Answer: API calls in React can be performed using:
- Fetch API: A built-in web API for making network requests. It can be used within
useEffect
to fetch data on component mount. - Axios: A popular third-party library for making HTTP requests. It supports promises and can simplify API interaction.
- React Query: A library for managing server state that provides hooks for fetching, caching, and updating data without the need for a local state management solution.
24. What are prop types in React, and why are they useful?
Answer: Prop types are a way to define the expected data types for props passed to a component. They are used for type checking and ensuring that components receive the correct data. This helps catch bugs and improves documentation, making it easier to maintain and understand component usage.
25. How do you implement authentication in a React application?
Answer: Authentication in a React application can be implemented using:
- Context API or Redux: To manage the authentication state and share it across components.
- JWT (JSON Web Tokens): For securely transmitting information between the client and server. Store the token in local storage or cookies for session management.
- React Router: To protect routes by redirecting users based on their authentication status.