декабря 21, 2025
8 мин. чтения

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

interview
career-advice
job-search
Вопросы Java backend developer: Spring Boot, JPA и API
Milad Bonakdar

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.

Ответ: Это удобная аннотация, которая объединяет три другие аннотации:

  1. @Configuration: Помечает класс как источник определений бинов.
  2. @EnableAutoConfiguration: Указывает Spring Boot начать добавление бинов на основе настроек classpath, других бинов и различных настроек свойств.
  3. @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 (запускают обработку).
  • Parallel Streams: Может обрабатывать данные параллельно с использованием нескольких потоков (.parallelStream()).

Распространенность: Распространенный Сложность: Средний

Newsletter subscription

Еженедельные советы по карьере, которые действительно работают

Получайте последние идеи прямо на вашу почту

Перестаньте откликаться. Начните получать предложения.

Превратите своё резюме в магнит для собеседований с оптимизацией на базе ИИ, которой доверяют соискатели по всему миру.

Начать бесплатно

Поделиться этим постом

Удвойте Количество Приглашений на Собеседование

Кандидаты, адаптирующие свои резюме под описание вакансии, получают в 2,5 раза больше собеседований. Используйте наш ИИ для автоматической настройки вашего резюме для каждой заявки мгновенно.