Вопросы Java backend developer: Spring Boot, JPA и API

Milad Bonakdar
Автор
Подготовьтесь к собеседованию с практическими вопросами по Spring Boot, REST API, микросервисам, JPA/Hibernate, безопасности, тестам и архитектуре.
Введение
Собеседование по Java backend обычно проверяет, умеете ли вы строить и поддерживать надежные API, а не просто перечислять названия фреймворков. Ожидайте вопросы по Spring Boot, REST-дизайну, персистентности, транзакциям, тестированию, безопасности, observability и архитектурным компромиссам в микросервисах.
Используйте этот материал, чтобы готовить ответы, связанные с реальной практикой: что делает инструмент, когда вы бы его применили, что может пойти не так и как вы будете тестировать или отлаживать. В 2026 году также важно ориентироваться в Java 17+, обсуждениях Java 21/25, проектах Spring Boot 3/4 и современной безопасности API с OAuth2/JWT.
Как пользоваться этим материалом
- Начните с простых основ Spring Boot и Java, затем проговорите вслух средние и сложные вопросы.
- К каждому ответу добавьте один пример из своего резюме или портфолио.
- Если вопрос про компромисс, назовите вариант по умолчанию и сигнал, при котором вы измените подход.
- Если в резюме есть микросервисы, JPA, Kafka, Docker или cloud deployment, подготовьте конкретную историю про сбой или отладку.
Основные концепции Spring Boot
1. Что такое Spring Boot и чем он отличается от традиционного Spring Framework?
Ответ:
- Spring Framework: Комплексный фреймворк для разработки корпоративных Java-приложений. Требует значительной ручной настройки (на основе XML или Java) для установки.
- Spring Boot: Расширение Spring Framework, которое упрощает настройку и разработку новых Spring-приложений.
- Автоконфигурация (Auto-Configuration): Автоматически настраивает бины на основе зависимостей в classpath.
- Встроенные серверы (Embedded Servers): Включает Tomcat, Jetty или Undertow, поэтому вам не нужно развертывать WAR-файлы.
- Стартеры (Starters): Подборки зависимостей для упрощения конфигурации сборки.
- Мнения по умолчанию (Opinionated Defaults): Подход "соглашения важнее конфигурации".
Распространенность: Распространенный Сложность: Легкий
2. Объясните аннотацию @SpringBootApplication.
Ответ: Это удобная аннотация, которая объединяет три другие аннотации:
@Configuration: Помечает класс как источник определений бинов.@EnableAutoConfiguration: Указывает Spring Boot начать добавление бинов на основе настроек classpath, других бинов и различных настроек свойств.@ComponentScan: Указывает Spring искать другие компоненты, конфигурации и сервисы в текущем пакете и подпакетах.
Распространенность: Распространенный Сложность: Легкий
3. Что такое внедрение зависимостей (Dependency Injection, DI) и инверсия управления (Inversion of Control, IoC)?
Ответ:
- IoC: Принцип, согласно которому управление созданием и управлением объектами передается от программиста контейнеру (Spring IoC Container).
- DI: Шаблон проектирования, используемый для реализации IoC. Вместо того, чтобы объект создавал свои зависимости, они "внедряются" в него (через конструктор, сеттер или поле).
- Преимущество: Уменьшение связности, упрощение тестирования (имитация зависимостей) и улучшение удобства обслуживания.
Распространенность: Очень распространенный Сложность: Средний
4. Что такое Spring Boot Starters? Приведите примеры.
Ответ: Стартеры — это набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Они содержат все зависимости, необходимые для быстрого запуска проекта с согласованным, поддерживаемым набором управляемых транзитивных зависимостей.
- Примеры:
spring-boot-starter-web: Для создания веб-приложений (включает Tomcat и Spring MVC).spring-boot-starter-data-jpa: Для использования Spring Data JPA с Hibernate.spring-boot-starter-test: Для тестирования (включает JUnit, Mockito).spring-boot-starter-security: Для Spring Security.
Распространенность: Распространенный Сложность: Легкий
5. Что такое Spring Actuator?
Ответ: Spring Boot Actuator предоставляет готовые к использованию функции, которые помогут вам отслеживать ваше приложение и управлять им.
- Эндпоинты (Endpoints): Предоставляет такие эндпоинты, как
/health(статус приложения),/metrics(использование памяти, ЦП),/info(информация о приложении),/env(свойства среды). - Использование: Критически важно для операционных команд для проверки работоспособности микросервисов в рабочей среде.
Распространенность: Распространенный Сложность: Средний
Микросервисы и архитектура
6. Каковы преимущества микросервисов перед монолитной архитектурой?
Ответ:
- Масштабируемость: Отдельные сервисы можно масштабировать независимо в зависимости от спроса.
- Агностицизм к технологиям: Разные сервисы могут использовать разные технологии (Java, Go, Python), наиболее подходящие для задачи.
- Изоляция неисправностей: Сбой в одном сервисе не обязательно приводит к отказу всей системы.
- Независимое развертывание: Команды могут развертывать сервисы независимо, что обеспечивает более быстрые циклы выпуска (CI/CD).
Распространенность: Распространенный Сложность: Средний
7. Что такое API Gateway? Зачем его использовать?
Ответ: API Gateway — это сервер, который действует как единая точка входа в систему. Он принимает все вызовы API от клиентов, а затем направляет их в соответствующий микросервис.
- Функции: Маршрутизация запросов, компоновка и преобразование протоколов.
- Сквозные задачи: Аутентификация, SSL termination, ограничение скорости (Rate Limiting), кэширование, ведение журнала.
- Примеры: Spring Cloud Gateway, Netflix Zuul, Kong.
Распространенность: Очень распространенный Сложность: Средний
8. Объясните Service Discovery (Eureka).
Ответ: В среде микросервисов экземпляры сервисов имеют динамические IP-адреса. Service Discovery — это механизм, позволяющий сервисам находить друг друга.
- Eureka Server: Действует как реестр сервисов.
- Eureka Client: Микросервисы регистрируются в Eureka Server при запуске и отправляют heartbeat-сигналы.
- Discovery: Когда сервису A необходимо вызвать сервис B, он запрашивает у Eureka адрес сервиса B.
Распространенность: Распространенный Сложность: Средний
9. Что такое шаблон Circuit Breaker?
Ответ: Шаблон Circuit Breaker предотвращает многократные попытки приложения выполнить операцию, которая, вероятно, завершится неудачей (например, вызов неработающего сервиса).
- Состояния:
- Closed (Закрыто): Запросы проходят нормально.
- Open (Открыто): Запросы немедленно блокируются (fail fast), чтобы позволить неработающему сервису восстановиться.
- Half-Open (Полуоткрыто): Ограниченному числу запросов разрешено проходить, чтобы проверить, восстановился ли сервис.
- Инструменты: Resilience4j (рекомендуется), Hystrix (устарел).
Распространенность: Очень распространенный Сложность: Сложный
База данных и JPA
10. Что такое JPA и Hibernate?
Ответ:
- JPA (Java Persistence API): Спецификация для доступа, сохранения и управления данными между Java-объектами и реляционной базой данных. Это всего лишь интерфейс.
- Hibernate: Самая популярная реализация спецификации JPA. Это ORM-инструмент (Object-Relational Mapping).
Распространенность: Распространенный Сложность: Легкий
11. Объясните проблему N+1 Select в Hibernate.
Ответ: Проблема N+1 возникает, когда фреймворк доступа к данным выполняет N дополнительных SQL-запросов для получения тех же данных, которые можно было бы получить при выполнении основного SQL-запроса.
- Сценарий: Получение списка
Author(1 запрос). Итерация и доступ кauthor.getBooks()(N запросов, по одному для каждого автора). - Решение: Используйте Join Fetch в JPQL (
SELECT a FROM Author a JOIN FETCH a.books) или Entity Graphs, чтобы загружать связанные сущности сразу в одном запросе.
Распространенность: Очень распространенный Сложность: Средний
12. В чем разница между @Entity, @Table и @Column?
Ответ:
@Entity: Указывает, что класс является сущностью и сопоставляется с таблицей базы данных.@Table: Необязательно. Указывает имя таблицы базы данных, которая будет использоваться для сопоставления. Если опущено, используется имя класса.@Column: Необязательно. Указывает детали столбца, с которым будет сопоставлено поле или свойство. Если опущено, используется имя поля.
Распространенность: Распространенный Сложность: Легкий
Безопасность и тестирование
13. Как защитить приложение Spring Boot?
Ответ: Используйте Spring Security как основу и объясните модель безопасности под тип приложения. Сильный ответ разделяет аутентификацию, авторизацию, проверку токенов и операционные меры защиты.
- Аутентификация: Проверяет, кто вызывает API, например через OAuth2/OIDC, session login или service-to-service credentials.
- Авторизация: Ограничивает действия вызывающей стороны через роли, scopes, method security вроде
@PreAuthorizeи правила вSecurityFilterChain. - JWT/OAuth2 resource server: Для stateless API проверяйте bearer token, issuer, срок действия, подпись и scopes, а не доверяйте содержимому токена вслепую.
- Защита API: HTTPS, осознанная настройка CORS, CSRF для браузерных сессий, безопасные ошибки, rate limits и audit logs для чувствительных действий.
Распространенность: Распространенный Сложность: Средний
14. В чем разница между @Mock и @InjectMocks в Mockito?
Ответ:
@Mock: Создает фиктивный объект класса/интерфейса. Он не имеет реального поведения; вы определяете его поведение с помощьюwhen(...).thenReturn(...).@InjectMocks: Создает экземпляр класса и внедряет фиктивные объекты, созданные с помощью аннотаций@Mock(или@Spy), в этот экземпляр. Используется для тестируемого класса.
Распространенность: Распространенный Сложность: Средний
15. Как обрабатывать транзакции в Spring Boot?
Ответ:
Используя аннотацию @Transactional.
- Механизм: Spring создает прокси вокруг класса/метода. Он начинает транзакцию перед выполнением метода и фиксирует ее после возврата метода. Если выбрасывается
RuntimeException, он откатывает транзакцию. - Распространение (Propagation): Вы можете настроить, как транзакция связана с существующими транзакциями (например,
REQUIRED,REQUIRES_NEW).
Распространенность: Распространенный Сложность: Средний
Продвинутые темы
16. Что такое Spring Cloud Config?
Ответ: Spring Cloud Config предоставляет поддержку на стороне сервера и клиента для внешней конфигурации в распределенной системе.
- Config Server: Центральное место для управления внешними свойствами для приложений во всех средах. Он может поддерживаться Git, SVN или Vault.
- Преимущество: Вы можете изменять конфигурацию без повторного развертывания приложения (с помощью
@RefreshScope).
Распространенность: Необычный Сложность: Средний
17. Объясните разницу между областью видимости Singleton и Prototype в Spring Beans.
Ответ:
- Singleton (по умолчанию): Создается только один экземпляр бина на Spring IoC container. Он кэшируется и используется повторно.
- Prototype: Новый экземпляр создается каждый раз, когда запрашивается бин.
- Другие: Request, Session (области видимости, поддерживающие веб).
Распространенность: Распространенный Сложность: Легкий
18. В чем разница между Checked и Unchecked исключениями в Java?
Ответ:
- Checked Exceptions (Проверяемые исключения): Наследуются от
Exception(но не отRuntimeException). Компилятор заставляет вас обрабатывать их (try-catch) или объявлять их (throws). Пример:IOException,SQLException. Представляют восстанавливаемые условия. - Unchecked Exceptions (Непроверяемые исключения): Наследуются от
RuntimeException. Компилятор не заставляет вас обрабатывать их. Пример:NullPointerException,IllegalArgumentException. Представляют ошибки программирования. Spring@Transactionalпо умолчанию выполняет откат только при непроверяемых исключениях.
Распространенность: Распространенный Сложность: Легкий
19. Как работает сборка мусора (Garbage Collection) в Java?
Ответ: Сборка мусора (Garbage Collection, GC) — это процесс автоматического освобождения памяти, занятой объектами, которые больше не доступны.
- Generational Hypothesis (Поколенческая гипотеза): Большинство объектов умирают молодыми.
- Heap Structure (Структура кучи): Young Generation (Eden, Survivor spaces) и Old Generation.
- Minor GC: Очищает Young Gen. Быстро.
- Major/Full GC: Очищает Old Gen. Медленнее, может вызвать "Stop-the-world" паузы.
- Алгоритмы: G1GC (по умолчанию в современной Java), ZGC, Shenandoah (низкая задержка).
Распространенность: Распространенный Сложность: Сложный
20. Что такое Java Streams?
Ответ: Представленные в Java 8, Streams предоставляют функциональный подход к обработке коллекций объектов.
- Особенности: Декларативность, конвейерная обработка (Pipelining), внутренняя итерация.
- Операции:
- Промежуточные (Intermediate):
filter,map,sorted(ленивые). - Терминальные (Terminal):
collect,forEach,reduce(запускают обработку).
- Промежуточные (Intermediate):
- Parallel Streams: Может обрабатывать данные параллельно с использованием нескольких потоков (
.parallelStream()).
Распространенность: Распространенный Сложность: Средний


