1. Что такое Spring Boot и в чём его основные преимущества перед обычным Spring Framework?
Ответ: Spring Boot — это надстройка над Spring Framework, упрощающая создание production-ready приложений. Основные преимущества: автоконфигурация (автоматическая настройка бинов на основе зависимостей), встроенные серверы (Tomcat, Jetty, Undertow), отсутствие необходимости в XML-конфигурации, стартеры (удобные дескрипторы зависимостей), готовые метрики, проверка состояния приложения (actuator) и внешняя конфигурация.
2. Что такое «стартеры» (starters) в Spring Boot? Приведите примеры.
Ответ: Стартеры — это агрегированные зависимости, которые включают все необходимые библиотеки для определённой функциональности. Они упрощают управление зависимостями в Maven/Gradle. Примеры: spring-boot-starter-web (для веб-приложений), spring-boot-starter-data-jpa (для работы с JPA), spring-boot-starter-security (для безопасности), spring-boot-starter-test (для тестирования).
3. Как Spring Boot автоматически конфигурирует приложение?
Ответ: Автоконфигурация реализуется через аннотацию @EnableAutoConfiguration (или @SpringBootApplication, которая её включает). Spring Boot сканирует classpath, определяет наличие библиотек (например, H2, Tomcat, Spring MVC) и на основе условий (@Conditional) создаёт необходимые бины по умолчанию. Механизм spring.factories перечисляет классы автоконфигурации.
4. Какие способы настройки конфигурации существуют в Spring Boot?
Ответ: Внешняя конфигурация может задаваться через:
- application.properties или application.yml
- Переменные окружения
- Аргументы командной строки
- Профили (profile-specific файлы)
- JNDI
- @ConfigurationProperties (бин с маппингом свойств)
- @Value для инжекции отдельных значений.
Приоритет определяется чётко (командная строка имеет высший приоритет).
5. Что такое @SpringBootApplication? Какие аннотации она объединяет?
Ответ: @SpringBootApplication — это композитная аннотация, которая включает:
- @Configuration (обозначает класс как источник определений бинов),
- @EnableAutoConfiguration (включает автоконфигурацию),
- @ComponentScan (включает сканирование компонентов в текущем пакете и подпакетах).
6. Как изменить встроенный сервер по умолчанию (Tomcat) на Jetty или Undertow?
Ответ: Исключить зависимость Tomcat и добавить стартер для другого сервера. Например, в Maven:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
7. Что такое Spring Boot DevTools и для чего его используют?
Ответ: DevTools (Developer Tools) — модуль для повышения удобства разработки. Обеспечивает автоматический перезапуск приложения при изменении кода, отключает кэширование шаблонов, позволяет применять настройки для разработки и включает встроенный LiveReload. Не рекомендуется использовать в production.
8. Как создать собственный starter?
Ответ: Необходимо:
- Создать отдельный модуль (Maven/Gradle).
- Добавить зависимость spring-boot-autoconfigure.
- Написать класс автоконфигурации с @Configuration и @Conditional....
- Зарегистрировать этот класс в META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports (или spring.factories в старых версиях).
- При желании добавить properties-привязку через @ConfigurationProperties.
- Запаковать в JAR и подключить starter как зависимость в проекте.
9. Как в Spring Boot задать активный профиль (profile)?
Ответ: Несколькими способами:
- В application.properties: spring.profiles.active=dev
- В командной строке: --spring.profiles.active=prod
- Через переменную окружения: SPRING_PROFILES_ACTIVE=test
- Программно при запуске: SpringApplication.setAdditionalProfiles("dev").
10. Какие существуют способы обработки исключений в Spring Boot REST-приложении?
Ответ:
- @ExceptionHandler внутри контроллера.
- @ControllerAdvice/@RestControllerAdvice — глобальный перехватчик исключений.
- ResponseStatusException (программное выбрасывание с HTTP-статусом).
- Реализация ErrorController или наследование от ResponseEntityExceptionHandler.
- Кастомизация ErrorAttributes для деталей ответа.
11. Для чего нужен файл application.properties (или application.yml)?
Ответ: Это основной файл внешней конфигурации Spring Boot приложения. В нём задаются параметры, влияющие на работу приложения: порт сервера, настройки базы данных, логирования, профили, параметры конкретных библиотек и собственные свойства. YAML позволяет структурировать данные иерархически.
12. Как в Spring Boot подключить базу данных и работать с ней через JPA?
Ответ: Добавить зависимости spring-boot-starter-data-jpa и драйвер БД (например, h2, mysql-connector-java). В application.properties указать URL, имя пользователя, пароль, диалект Hibernate. Spring Boot автоматически сконфигурирует DataSource, EntityManagerFactory и TransactionManager. Достаточно создать сущности с @Entity и репозитории, расширяющие JpaRepository.
13. Что такое Spring Data REST и как его включить?
Ответ: Spring Data REST автоматически экспортирует Spring Data репозитории как RESTful эндпоинты (HATEOAS). Для включения достаточно добавить зависимость spring-boot-starter-data-rest. Тогда, например, репозиторий PersonRepository станет доступен по /persons с поддержкой CRUD через HTTP без написания контроллеров.
14. Как настроить логирование в Spring Boot?
Ответ: По умолчанию используется Logback. Конфигурация может быть в application.properties/yml (через logging.level.*, logging.file.path, logging.pattern.console и др.) или через отдельный файл конфигурации (logback-spring.xml). Можно также использовать Log4j2, исключив Logback и подключив соответствующий стартер.
15. Что такое Spring Boot Actuator и какие полезные эндпоинты он предоставляет?
Ответ: Actuator — модуль для мониторинга и управления приложением в production. Добавляет HTTP (или JMX) эндпоинты: /health (состояние системы), /info (произвольная информация), /metrics (метрики), /env (окружение), /beans (все бины), /mappings (маршруты), /loggers (уровни логирования) и другие. Их можно включать/отключать через свойства.
16. Как защитить Spring Boot приложение с помощью Spring Security?
Ответ: Добавить зависимость spring-boot-starter-security. По умолчанию будет запрошена HTTP Basic аутентификация с логином user и сгенерированным паролем (выводится в лог). Для настройки создают класс с @Configuration и @EnableWebSecurity, в котором объявляют SecurityFilterChain бины, определяют правила авторизации, источник пользователей, форму логина и т.д.
17. В чём разница между @Component, @Service, @Repository и @Controller?
Ответ: Все являются стереотипными аннотациями для объявления бинов Spring.
- @Component — общая аннотация для любого бина.
- @Service — сервисный слой, дополнительной логики не добавляет, но улучшает читаемость.
- @Repository — DAO слой, добавляет преобразование исключений JDBC в иерархию DataAccessException.
- @Controller — MVC контроллер, позволяет обрабатывать запросы.
@RestController = @Controller + @ResponseBody.
18. Как создать и внедрить собственные бины в Spring Boot?
Ответ: Бин создаётся через:
- Аннотации @Component, @Service, @Repository, @Controller на классе (и @ComponentScan).
- Метод с @Bean внутри @Configuration класса.
- Аннотацию @Import или @ImportResource для XML.
Внедрение: через конструктор (предпочтительно), поле (@Autowired) или сеттер.
19. Что такое application.yml и чем он отличается от application.properties?
Ответ: application.yml использует YAML-формат, который более нагляден для иерархических данных (списки, map-структуры). application.properties — классический плоский key-value формат. Оба поддерживаются Spring Boot, можно использовать любой.
20. Как выполнить код при старте приложения в Spring Boot?
Ответ: Несколько способов:
- Имплементировать CommandLineRunner (метод run) или ApplicationRunner.
- Имплементировать интерфейс ApplicationListener<ApplicationReadyEvent>.
- Использовать аннотацию @PostConstruct внутри бина.
- Реализовать InitializingBean (метод afterPropertiesSet).
21. Как настроить CORS в Spring Boot?
Ответ: Глобально — в классе конфигурации реализовать WebMvcConfigurer и переопределить addCorsMappings. Локально — использовать аннотацию @CrossOrigin на уровне контроллера или метода. В Spring Security можно настроить CorsConfigurationSource.
22. Как протестировать Spring Boot приложение?
Ответ: С помощью spring-boot-starter-test, включающего JUnit, Mockito, AssertJ, Hamcrest и др. Основные подходы:
- @SpringBootTest — загружает полный контекст для интеграционного теста.
- @WebMvcTest — тестирование только MVC слоя, не загружает другие бины.
- @DataJpaTest — тестирование JPA репозиториев.
- @MockBean и @SpyBean для моков.
- TestRestTemplate или WebTestClient для REST-тестов.
23. Что такое условные аннотации (@Conditional) в Spring Boot?
Ответ: Аннотации, которые управляют созданием бинов в зависимости от условий. Например:
- @ConditionalOnClass — если класс в classpath.
- @ConditionalOnMissingBean — если бин не определён.
- @ConditionalOnProperty — если свойство имеет определённое значение.
- @ConditionalOnWebApplication — для веб-окружения.
Используются внутри автоконфигураций Spring Boot.
24. Как изменить порт встроенного сервера?
Ответ: Добавить в application.properties строку: server.port=8081. Или через командную строку: --server.port=8081. Можно также задать случайный порт: server.port=0.
25. Что такое Spring Boot Admin?
Ответ: Spring Boot Admin — это сторонний проект (не Spring), предоставляющий веб-интерфейс для управления и мониторинга Spring Boot приложений, использующих Actuator. Сервер Spring Boot Admin собирает информацию от клиентских приложений и отображает состояние, метрики, логи, environment и т.д.
Страховка на собеседовании
Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT
Подпишись на https://t.me/IT_Interview_Partner_Bot
Подпишись на https://t.me/LyakhovEugene