🚀 Вопросы интервью по Spring Boot

Вопросы 21-30 для разработчиков

Вопрос Spring Boot 21
Объясните аннотацию @RestController в Spring Boot

Ответ: @RestController — это специализированная аннотация Spring, используемая для создания RESTful веб-сервисов. Она объединяет функциональность @Controller и @ResponseBody, позволяя каждому обработчику (handler method) возвращать данные напрямую как тело HTTP-ответа вместо рендеринга представления.

Характеристики:
  • Возвращает данные напрямую как JSON, XML или другие поддерживаемые форматы
  • Исключает необходимость использования @ResponseBody на каждом методе
  • Поддерживает все методы HTTP-запросов, такие как GET, POST, PUT, DELETE и PATCH
Пример:

@RestController
@RequestMapping("/employees")
public class EmployeeController {
    
    @GetMapping
    public List<Employee> getEmployees() {
        return employeeService.getEmployees();
    }
}
                
Вопрос Spring Boot 22
Разница между @Controller и @RestController

Ответ: Список различий между @Controller и @RestController приведён ниже.

Сравнительная таблица:
Критерий @Controller @RestController
Назначение Используется для создания Spring MVC контроллеров Используется для создания контроллеров RESTful веб-сервисов
Тип ответа Возвращает View (JSP, Thymeleaf, HTML) Возвращает данные (JSON, XML и т.д.)
@ResponseBody Должно быть добавлено явно Включено автоматически
Основное применение Веб-приложения REST API и микросервисы
View Resolver Требуется Не требуется
Сериализация данных Вручную, через @ResponseBody Автоматическая

Примечание: Обе аннотации обрабатывают запросы, но @RestController в первую очередь ориентирован на возврат данных при построении API.

Вопрос Spring Boot 23
В чем разница между RequestMapping и GetMapping?

Ответ: @RequestMapping и @GetMapping оба используются для сопоставления входящих HTTP-запросов с методами контроллера. Основная разница в том, что @RequestMapping может обрабатывать любой HTTP-метод, а @GetMapping предназначен только для HTTP GET-запросов.

Сравнительная таблица:
Критерий @RequestMapping @GetMapping
Назначение Сопоставляет запросы для любого HTTP-метода Сопоставляет только HTTP GET-запросы
HTTP-методы GET, POST, PUT, DELETE, PATCH и т.д. Только GET
Появился в Spring Framework Spring Framework 4.3
Синтаксис @RequestMapping(method = RequestMethod.GET) @GetMapping
Читаемость Более многословный Более чистый и лаконичный
Рекомендуется для Общего маппинга запросов GET-операций
Вопрос Spring Boot 24
В чём разница между аннотациями @SpringBootApplication и @EnableAutoConfiguration?

Ответ: @SpringBootApplication — это комбинированная аннотация, которая конфигурирует и запускает Spring Boot приложение, тогда как @EnableAutoConfiguration только включает автоматическую конфигурацию. Ниже список различий.

Сравнительная таблица:
Критерий @SpringBootApplication @EnableAutoConfiguration
Когда использовать Когда нужна автоконфигурация Когда нужна кастомизация автоконфигурации
Точка входа Обычно используется в главном классе Spring Boot приложения, служит точкой входа Может использоваться в любом классе конфигурации или вместе с @SpringBootApplication
Сканирование компонентов Включает аннотацию @ComponentScan для сканирования компонентов Не выполняет сканирование компонентов самостоятельно
Пример @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } @Configuration @EnableAutoConfiguration public class MyConfiguration { }
Вопрос Spring Boot 25
Что такое Profiles в Spring?

Ответ: Spring Profiles похожи на разные сценарии для приложения в зависимости от окружения.

Характеристики Profiles:
  • Вы определяете наборы конфигураций (например, URL баз данных) для разных ситуаций (разработка, тестирование, продакшен)
  • Используйте аннотацию @Profile, чтобы уточнить, какой конфигурации что принадлежит
  • Активируйте profile через переменные окружения или параметры командной строки

Чтобы использовать Spring Profiles, нужно задать свойство spring.profiles.active для указания, какой profile использовать.

Вопрос Spring Boot 26
Упомяните различия между WAR и embedded containers

Ответ: WAR (Web Application Archive) развёртывается на внешнем веб-сервере, таком как Tomcat или Jetty, тогда как embedded container упаковывает веб-сервер внутри приложения, делая его автономным и исполняемым.

Сравнительная таблица:
Критерий Развёртывание WAR Embedded Container
Упаковка WAR-файл Исполняемый JAR
Сервер Требуется внешний сервер приложений (Tomcat, WildFly, WebLogic и т.д.) Встроенный Tomcat, Jetty или Undertow
Развёртывание Развёртывание WAR вручную на сервере Запуск напрямую через java -jar
Конфигурация Конфигурация внешнего сервера Конфигурация внутри приложения
Запуск Немного медленнее Быстрый запуск
Портируемость Зависит от установки сервера Полностью автономный
Лучше всего подходит для Традиционных корпоративных приложений Микросервисов и cloud-native приложений
Поддержка в Spring Boot Поддерживается Рекомендуется
Вопрос Spring Boot 27
Что такое Spring Boot Actuator?

Ответ: Spring Boot Actuator — это готовый для продакшена модуль, который предоставляет возможности мониторинга, управления и эксплуатации для Spring Boot приложений. Он открывает несколько встроенных endpoint'ов, которые помогают отслеживать состояние приложения (health), производительность, метрики и конфигурацию.

Общие Actuator Endpoints:
  • /actuator/health
  • /actuator/info
  • /actuator/metrics
  • /actuator/env
  • /actuator/beans
  • /actuator/loggers
  • /actuator/mappings
Dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
                
Вопрос Spring Boot 28
Как включить Actuator в Spring Boot приложении?

Ответ: Шаги для включения Actuator в Spring Boot:

Шаг 1: Добавить зависимость spring-boot-starter-actuator в проект
Шаг 2: Открыть нужные Actuator endpoint'ы в application.properties или application.yml
Шаг 3: Запустить Spring Boot приложение
Шаг 4: Обратиться к Actuator endpoint'ам по URL, таким как /actuator, /actuator/health и /actuator/metrics
Вопрос Spring Boot 29
В чём назначение использования @ComponentScan в файлах классов?

Ответ: @ComponentScan используется, чтобы указать Spring IoC контейнеру просканировать заданные пакеты на предмет управляемых Spring компонентов, таких как @Component, @Service, @Repository и @Controller. Найденные классы автоматически регистрируются как Spring beans.

Характеристики @ComponentScan:
  • Регистрирует найденные классы как beans в Spring IoC контейнере
  • Исключает необходимость ручной конфигурации bean'ов
  • По умолчанию сканирует пакет главного класса приложения и все его подпакеты
Общие способы использования @ComponentScan:
  • Без аргументов (сканирование пакета по умолчанию)
  • Используя basePackages
  • Используя basePackageClasses
Вопрос Spring Boot 30
Для чего используются @RequestMapping и @RestController annotations в Spring Boot?

Ответ:

@RequestMapping:

@RequestMapping используется для сопоставления входящих HTTP-запросов с классами контроллеров или методами-обработчиками. Он поддерживает маппинг на основе URL, HTTP-метода, параметров запроса, заголовков и типов содержимого.

  • Может быть применён на уровне класса и метода
  • Поддерживает GET, POST, PUT, DELETE, PATCH и т.д.
@RestController:

@RestController — это специализированная аннотация, используемая для создания RESTful веб-сервисов. Она объединяет @Controller и @ResponseBody, поэтому каждый метод-обработчик возвращает тело ответа напрямую вместо

  • Возвращает JSON, XML или другие данные напрямую
  • Исключает необходимость аннотировать каждый метод с @ResponseBody

@RestController = @Controller + @ResponseBody