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

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

Вопрос Spring Boot 31
Как получить список всех beans в Spring Boot приложении?

Ответ: Интерфейс ApplicationContext управляет всеми Spring beans. Можно получить имена всех зарегистрированных beans, используя метод getBeanDefinitionNames().

Характеристики:
  • getBeanDefinitionNames() возвращает имена всех зарегистрированных beans
  • Полезно для отладки и проверки регистрации bean'ов
  • Отображает как пользовательские, так и автоматически сконфигурированные beans
Вопрос Spring Boot 32
Можно ли проверить свойства окружения в Spring Boot приложении? Объясните, как

Ответ: Да, можно проверить свойства окружения в Spring Boot приложении. Для этого используется объект Environment в Spring Boot приложении.

Настройки конфигурации приложения включают:
  • Файлы свойств
  • Аргументы командной строки
  • Переменные окружения

Экземпляр Environment можно получить вызовом метода getEnvironment().

Вопрос Spring Boot 33
Как включить debug-логирование в Spring Boot приложении?

Ответ: Debug-логирование предоставляет детальную информацию о запуске приложения, автоконфигурации, создании bean'ов и обработке запросов.

Способы включить debug-логирование:
  • Добавить debug=true в application.properties
  • Установить уровень логирования:
    
    logging.level.org.springframework=DEBUG
                            
  • Запустить приложение с флагом:
    
    java -jar application.jar --debug
                            
  • Изменить уровень логирования во время работы приложения через endpoint Spring Boot Actuator /actuator/loggers
Вопрос Spring Boot 34
Что такое Dependency Injection и какие у него виды?

Ответ: Dependency Injection (DI) — это паттерн проектирования, в котором Spring IoC контейнер автоматически предоставляет требуемые зависимости объекту вместо того, чтобы объект создавал их сам. Это способствует слабой связанности, упрощает тестирование и улучшает сопровождаемость кода.

Виды Dependency Injection:
  • Constructor Injection: Зависимости внедряются через конструктор. Рекомендуемый подход в Spring Boot
  • Setter Injection: Зависимости внедряются через setter-методы. Подходит для опциональных зависимостей
  • Field Injection: Зависимости внедряются напрямую в поля класса с помощью @Autowired
Вопрос Spring Boot 35
Что такое IOC container?

Ответ: Inversion of Control (IoC) Container — это ключевой компонент Spring Framework, который создаёт, конфигурирует, управляет и уничтожает Spring beans. Он также автоматически выполняет Dependency Injection.

Виды IoC-контейнеров:
  • BeanFactory: Базовый IoC-контейнер с ленивой инициализацией
  • ApplicationContext: Продвинутый IoC-контейнер с корпоративными возможностями, такими как AOP, события и интернационализация
Вопрос Spring Boot 36
В чем разница между Constructor и Setter Injection?

Ответ: Основная разница в том, что Constructor Injection предоставляет зависимости через конструктор класса, а Setter Injection предоставляет зависимости через setter-методы.

Сравнительная таблица:
Критерий Constructor Injection Setter Injection
Способ внедрения Использует параметры конструктора Использует setter-методы
Тип зависимости Лучше для обязательных зависимостей Лучше для опциональных зависимостей
Неизменяемость Зависимости нельзя изменить после создания объекта Зависимости можно изменить позже
Null-безопасность Предотвращает частично инициализированные объекты Может допускать объекты с отсутствующими зависимостями
Тестируемость Легче тестировать Немного сложнее тестировать
Рекомендация Рекомендуется в Spring Boot Используется для опциональных или конфигурируемых зависимостей
Вопрос Spring Boot 37
Что такое Bean Scopes и его Types в Spring?

Ответ: Bean Scope определяет жизненный цикл и видимость bean в Spring IoC контейнере. Он определяет, сколько экземпляров bean создаётся и как долго они остаются доступными.

Виды Bean Scope:
Scope Описание
singleton Scope по умолчанию. Создаётся только один экземпляр bean на контейнер Spring
prototype Новый экземпляр bean создаётся при каждом запросе
request Новый экземпляр bean создаётся для каждого HTTP-запроса. Доступен только в веб-приложениях
session Новый экземпляр bean создаётся для каждой HTTP-сессии
application Один экземпляр bean используется на протяжении всего жизненного цикла веб-приложения
websocket Один экземпляр bean создаётся для каждой WebSocket-сессии
Вопрос Spring Boot 38
Какой default bean scope в Spring?

Ответ: Singleton scope — это scope по умолчанию в Spring.

Характеристики:
  • Создаётся только один экземпляр bean на Spring IoC контейнер
  • Один экземпляр bean используется во всём приложении
  • Улучшает использование памяти и производительность
Вопрос Spring Boot 39
Разница между Singleton и Prototype scope?

Ответ: Основные различия перечислены ниже:

Сравнительная таблица:
Критерий Singleton Scope Prototype Scope
Количество экземпляров Один экземпляр на контейнер Spring Новый экземпляр для каждого запроса
Scope по умолчанию Да Нет
Управление жизненным циклом Полностью управляется Spring Spring управляет только созданием
Потребление памяти Ниже Выше
Лучше всего подходит для Beans без состояния (Services, Repositories) Объектов с состоянием или временных объектов
Вопрос Spring Boot 40
Когда следует использовать Prototype scope?

Ответ: Prototype scope следует использовать, когда каждому запросу или операции нужен новый экземпляр bean и bean хранит собственное состояние.

Характеристики:
  • Создаёт новый объект при каждом запросе bean
  • Подходит для компонентов с состоянием
  • Конфигурируется с помощью аннотации @Scope("prototype")
Типичные случаи применения:
  • Объекты — временные хранилища данных
  • Генераторы отчётов или документов
  • Задачи обработки файлов
  • Бизнес-объекты с состоянием
  • Объекты, которые не должны быть общими для разных запросов