На собеседовании по Spring и Java проверяют две базы одновременно: понимаете ли вы Java как язык и понимаете ли вы, зачем Spring управляет объектами, зависимостями, настройками, web-слоем и транзакциями
Сильный кандидат не просто перечисляет аннотации. Он объясняет, какую проблему решает механизм и что может пойти не так в реальном приложении
- Java-база перед Spring
- IoC и DI
- Bean scope и жизненный цикл
- Spring MVC и REST
- Spring Data и транзакции
- Конфигурация и профили
- Практические задания
- Как объяснять Spring без набора аннотаций
- Как отвечать на вопрос про слои приложения
- Типичные ошибки кандидатов по Spring
- Мини-проект для подготовки
- Как разбирать ошибку Spring-приложения
- Что повторить перед интервью
- Часто задаваемые вопросы
- Что важнее: Java или Spring?
- Нужно ли знать Spring Boot глубоко?
- Как быстро подготовиться?
Java-база перед Spring
Spring не спасает, если слабо понятны коллекции, исключения, интерфейсы и ООП
Что могут спросить:
- зачем нужны интерфейсы
- как работают
equalsиhashCode - чем checked исключения отличаются от unchecked
- какие коллекции выбираете для разных задач
- что такое generics
- как устроена базовая многопоточность
Пример ответа:
Интерфейс позволяет зависеть от поведения, а не от конкретного класса. Например, сервис заказа может работать с PaymentProvider, а конкретная оплата картой или переводом подключается отдельно. Это упрощает тесты и замену реализации
Такой ответ сразу связывает Java и Spring, потому что Spring часто внедряет зависимости именно через интерфейсы
По этой теме полезно отдельно посмотреть Создание динамических форм в React и Next.js, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Вопросы по Java на собеседовании, чтобы расширить контекст и сравнить подходы
IoC и DI
Это сердце Spring. Вопросы:
- что такое Inversion of Control
- что такое Dependency Injection
- что такое bean
- чем constructor injection лучше field injection
- как Spring выбирает нужный bean
- что делать, если есть две реализации интерфейса
Сильный ответ:
IoC означает, что объектами управляет контейнер, а не мы вручную создаем все зависимости через new. DI - способ передать объекту зависимости. Constructor injection удобен тем, что зависимость обязательна, ее легко увидеть и проще тестировать
Пример:
@Service
public class OrderService {
private final PaymentService paymentService;
public OrderService(PaymentService paymentService) {
this.paymentService = paymentService;
}
}
Ошибка кандидата — говорить «Spring сам все создает» и не объяснять, почему это полезно
Bean scope и жизненный цикл
Что повторить:
- singleton
- prototype
- request scope
- application context
@PostConstruct- момент создания бина
Пример ответа:
Singleton в Spring означает один bean на application context. Это не то же самое, что один объект на всю JVM. Если singleton хранит изменяемое состояние пользователя, могут появиться ошибки при параллельных запросах
Это сильный ответ, потому что показывает практический риск
Spring MVC и REST
Частые вопросы:
@Controllerи@RestController@GetMapping,@PostMapping,@PutMapping,@DeleteMapping@PathVariableи@RequestParam- DTO
- обработка ошибок API
- валидация входных данных
Пример endpoint:
@GetMapping("/users/{id}")
public UserDto getUser(@PathVariable Long id) {
return userService.getUser(id);
}
Хорошее объяснение:
Controller принимает HTTP-запрос и передает работу в service. Бизнес-логика не должна жить в controller, иначе код быстро станет трудно тестировать и поддерживать
Spring Data и транзакции
Частые вопросы:
- что такое repository
- как Spring Data строит запрос по имени метода
- когда нужен
@Query - что делает
@Transactional - почему транзакция может не сработать при вызове метода внутри того же класса
- что такое lazy loading
Пример ответа про транзакции:
@Transactional задает границу операции: если внутри возникает ошибка, изменения можно откатить. Но важно понимать, где метод вызывается. Если вызвать transactional-метод из другого метода того же класса, прокси Spring может не включиться
Это уже похоже на реальный опыт, а не на список аннотаций
Конфигурация и профили
В реальных проектах приложение запускается в разных окружениях
Что могут спросить:
- зачем нужны
application.ymlиapplication.properties - что такое profile
- как хранить настройки для dev и prod
- почему нельзя хранить секреты в репозитории
- как передать настройку через environment variable
Пример:
Profiles позволяют включать разные настройки для разных окружений. Например, локально приложение ходит в тестовую базу, а на сервере - в production-базу. Код при этом не меняется
Практические задания
Подготовьте мини-проект или хотя бы устный разбор:
- endpoint для получения пользователя по id
- создание заказа через controller, service, repository
- DTO для ответа API
- обработка ошибки «пользователь не найден»
- валидация входного request
- profile для локальной базы
- тест service с mock-зависимостью
На интервью проговаривайте границы слоев: controller принимает запрос, service содержит логику, repository работает с данными
Как объяснять Spring без набора аннотаций
Интервьюеру важно услышать, что вы понимаете проблему, которую решает Spring
Слабый ответ:
Spring нужен, чтобы ставить аннотации и делать приложение
Сильный ответ:
Spring помогает управлять объектами приложения и их зависимостями. Вместо того чтобы вручную создавать все сервисы через new, мы описываем компоненты, а контейнер собирает их и передает зависимости. Это упрощает тестирование, замену реализаций и конфигурацию
После такого ответа можно переходить к @Service, @Component, constructor injection и конфигурации
Как отвечать на вопрос про слои приложения
Частый вопрос:
Где должна находиться бизнес-логика?
Хороший ответ:
Controller должен принимать HTTP-запрос и отдавать ответ. Repository работает с данными. Основная бизнес-логика должна быть в service, потому что ее проще тестировать и переиспользовать. Если положить логику в controller, web-слой быстро станет слишком тяжелым
Пример:
Создание заказа: controller принимает request, service проверяет правила и считает итог, repository сохраняет данные
Такой ответ показывает архитектурное мышление на базовом уровне
Типичные ошибки кандидатов по Spring
- говорят про DI, но не могут объяснить, зачем она нужна
- используют field injection как единственный вариант
- не понимают, где проходит транзакция
- кладут бизнес-логику в controller
- путают entity и DTO
- хранят секреты в
application.yml - не умеют объяснить, что делать при ошибке «bean not found»
Под каждую ошибку подготовьте короткое объяснение. Например, entity связана с базой данных, а DTO удобен для передачи данных наружу, чтобы не отдавать лишние поля API-клиенту
Мини-проект для подготовки
Сделайте маленький проект или хотя бы проговорите его структуру:
UserControllerUserServiceUserRepositoryUserDto- обработка ошибки «пользователь не найден»
- валидация входных данных
- profile для локальной базы
- простой тест service
Если вы можете объяснить этот проект от HTTP-запроса до базы, большинство базовых вопросов по Spring станут намного спокойнее
Как разбирать ошибку Spring-приложения
На собеседовании могут спросить:
Приложение не стартует, потому что Spring не может создать bean. Что будете смотреть?
Хороший ответ:
Я посмотрю текст ошибки и какой bean не создан. Затем проверю, есть ли нужная аннотация, попадает ли класс в component scan, нет ли двух реализаций без @Qualifier, доступны ли настройки и зависимости конструктора
Такой ответ показывает рабочий порядок, а не только знание слова bean
Что повторить перед интервью
Минимальный набор:
- constructor injection
@Service,@Repository,@RestController- controller-service-repository
- DTO и entity
@Transactional- profiles
- обработка ошибок REST API
Фраза, которую полезно уметь объяснить:
Spring Boot ускоряет старт проекта, но не отменяет понимание Spring. Если приложение не стартует или транзакция не работает, нужно понимать, что происходит под аннотацией
Эта мысль хорошо отделяет практического кандидата от человека, который просто видел готовый шаблон проекта
Часто задаваемые вопросы
Что важнее: Java или Spring?
Нужны оба уровня. Без Java-базы Spring превращается в набор аннотаций, которые кандидат не может объяснить
Нужно ли знать Spring Boot глубоко?
Для junior достаточно понимать starters, auto-configuration, profiles, controller-service-repository. Для middle нужны транзакции, безопасность, тесты и диагностика
Как быстро подготовиться?
Соберите маленький CRUD: controller, service, repository, DTO, validation, обработка ошибок и profile для локального запуска