Подборка вопросов

Подготовка по Spring

IoC, бины, транзакции, Spring MVC, Spring Boot и Spring Security — вопросы с разбором.

63вопроса
23Junior
34Middle
6Senior
  1. 01Spring оборачивает бины в прокси, чтобы работали @Transactional и @Cacheable. Какие практические следствия из этого вытекают?

    Прокси перехватывает только внешние вызовы: this.method() внутри класса идёт мимо прокси — аннотация не сработает. CGLIB не проксирует final-классы и final-методы, JDK-прокси…

    Middle
  2. 02Как соотносятся IoC и DI в Spring?

    IoC (инверсия управления) — принцип: объекты не создают свои зависимости и не управляют своим жизненным циклом, это делает контейнер. DI (внедрение зависимостей) — конкретный…

    Junior
  3. 03Какая аннотация объединяет @Controller и @ResponseBody, чтобы методы возвращали данные прямо в тело ответа?

    @RestController = @Controller + @ResponseBody: возвращаемое значение каждого метода сериализуется в тело ответа (обычно JSON через Jackson), а не трактуется как имя представления.

    Junior
  4. 04Какие преимущества у constructor injection по сравнению с field injection? Выберите все верные.

    Внедрение через конструктор даёт final-поля, полностью готовый объект сразу после создания, явные зависимости и тесты без Spring — достаточно вызвать конструктор.

    Junior
  5. 05Что такое Spring Bean?

    Бин — объект, которым управляет контейнер Spring: создаёт, внедряет зависимости, инициализирует, оборачивает прокси и уничтожает при закрытии контекста.

    Junior
  6. 06Как работает @Transactional и почему вызов метода внутри того же класса (self-invocation) может не открыть транзакцию?

    @Transactional реализован прокси: вызов снаружи идёт через прокси, который открывает транзакцию и вызывает метод. Вызов this.other() внутри класса идёт мимо прокси — аннотация на…

    Middle
  7. 07Какой scope у Spring-бина по умолчанию?

    По умолчанию singleton — один экземпляр на контейнер, общий для всех потоков. Ещё: prototype (новый на каждый запрос к контейнеру), веб-scope request, session, application…

    Junior
  8. 08Чем @Component отличается от @Bean?

    @Component — на своём классе, бин находится сканированием. @Bean — на методе в @Configuration-классе, который создаёт и настраивает объект; подходит для чужих классов и сложной…

    Middle
  9. 09При каком исключении @Transactional по умолчанию откатывает транзакцию?

    По умолчанию откат — на RuntimeException и Error. На checked-исключения транзакция коммитится. Меняется через rollbackFor и noRollbackFor.

    Middle
  10. 10Как разрешить неоднозначность, когда для внедрения подходят несколько бинов одного типа?

    При нескольких кандидатах — NoUniqueBeanDefinitionException. Решения: @Primary — бин по умолчанию; @Qualifier("имя") — выбрать конкретный в точке внедрения (он сильнее @Primary).

    Middle
  11. 11Что такое AOP в Spring и его ключевые понятия?

    AOP выносит сквозную функциональность (транзакции, безопасность, логирование, метрики) из бизнес-кода в аспекты. Advice — что и когда выполнить; pointcut — где; join point …

    Middle
  12. 12Как в Spring Boot 3 возвращать ошибки REST API в едином формате?

    @RestControllerAdvice с @ExceptionHandler централизует обработку, а ответ — ProblemDetail (стандарт RFC 9457, application/problem+json): type, title, status, detail, instance и…

    Middle
  13. 13Чем HTTP GET отличается от POST?

    GET — получить ресурс: безопасный (не меняет состояние) и идемпотентный, параметры в URL, ответ кэшируется. POST — отправить данные на обработку или создать ресурс: не…

    Junior
  14. 14Чем cookie отличается от server-side session?

    Cookie — небольшие данные, которые хранит браузер и отправляет с каждым запросом к домену. Серверная сессия — данные на сервере, а в cookie лежит только её идентификатор…

    Junior
  15. 15Чем ответы 401, 403 и 404 отличаются и что возвращать на запрос чужого ресурса?

    401 Unauthorized — личность не установлена: нет токена или он неверный. 403 Forbidden — личность известна, но прав нет. 404 Not Found — ресурс не найден.

    Junior
  16. 16Каков жизненный цикл сервлета?

    Сервлет — объект, обрабатывающий HTTP-запросы в контейнере (Tomcat). Цикл: init один раз → service (doGet, doPost…) на каждый запрос в разных потоках → destroy при остановке.

    Middle
  17. 17Что такое Post/Redirect/Get и как сделать его в Spring MVC?

    PRG: после успешного POST сервер отвечает редиректом на GET-страницу результата. Обновление страницы повторит безопасный GET, а не POST — заказ не создастся дважды.

    Middle
  18. 18Чем Spring MVC отличается от Spring WebFlux?

    Spring MVC — сервлетная модель «поток на запрос», блокирующий код. WebFlux — неблокирующая модель на event loop (Netty) с Reactor: малое число потоков обслуживает много…

    Senior
  19. 19Чем ApplicationContext отличается от BeanFactory?

    BeanFactory — базовый контейнер: создаёт бины и внедряет зависимости, лениво. ApplicationContext — надстройка, которой пользуются почти всегда: события, интернационализация…

    Middle
  20. 20Что такое BeanPostProcessor и зачем он нужен?

    BeanPostProcessor вызывается для каждого бина до и после инициализации и может изменить или заменить объект — так появляются прокси для @Transactional, @Async, AOP и…

    Middle
  21. 21Как внедрить сразу все реализации интерфейса и выбирать нужную в рантайме?

    Внедрить List<T> или Map<String, T>: Spring передаст все бины типа. Список — в порядке @Order, карта — с именами бинов в ключах. Нужная стратегия выбирается в рантайме.

    Middle
  22. 22Чем Servlet Filter отличается от HandlerInterceptor?

    Filter — уровень сервлетного контейнера: работает до DispatcherServlet и видит любой запрос, включая статику и ошибки. HandlerInterceptor — внутри Spring MVC, знает обработчик…

    Middle
  23. 23Как в Spring MVC обычно обрабатывают ошибки и валидацию входных DTO?

    Ограничения — аннотациями Bean Validation на полях DTO (@NotBlank, @Email, @Size, @Positive), проверка — @Valid на параметре контроллера, ошибки — в @RestControllerAdvice в едином…

    Middle
  24. 24Что такое Spring Batch и из каких основных частей состоит batch job?

    Spring Batch — фреймворк для пакетной обработки больших объёмов: Job состоит из Step, шаг обычно chunk-ориентированный — ItemReader → ItemProcessor → ItemWriter пачками с коммитом…

    Senior
  25. 25Когда полезен Spring Integration?

    Spring Integration — реализация Enterprise Integration Patterns: сообщения проходят через каналы и конечные точки (маршрутизаторы, преобразователи, фильтры, разделители…

    Senior
  26. 26Чем REST отличается от SOAP?

    REST — архитектурный стиль поверх HTTP: ресурсы, методы, обычно JSON, кэширование, простота. SOAP — протокол обмена XML-сообщениями со строгим контрактом WSDL, стандартами…

    Middle
  27. 27Какие основные backend-риски у GraphQL?

    Клиент сам составляет запрос, поэтому риски на бэкенде: N+1 в резолверах, дорогие и глубокие запросы (DoS одним запросом), сложное кэширование (всё через POST на один URL)…

    Senior
  28. 28Добавь эндпоинт GET /users/{id}, возвращающий User по идентификатору.

    @RestController с @GetMapping("/users/{id}") и @PathVariable; сервис возвращает Optional → 200 с DTO или 404; наружу отдавать DTO, а не сущность JPA.

    Junior
  29. 29Что делает propagation=REQUIRES_NEW и какой подводный камень с пулом соединений он несёт?

    REQUIRES_NEW приостанавливает текущую транзакцию и открывает новую независимую — со своим соединением. На это время поток держит два соединения: при большом параллелизме пул…

    Senior
  30. 30Как корректно получать prototype-бин внутри singleton-бина, чтобы каждый раз создавался новый экземпляр?

    Singleton создаётся один раз, и prototype внедряется в него один раз — «застывает». Новый экземпляр при каждом использовании дают ObjectProvider<T>.getObject(), @Lookup-метод или…

    Senior
  31. 31В каком порядке контейнер выполняет шаги инициализации бина?

    Порядок: конструктор → внедрение полей и сеттеров → Aware-колбэки → BPP before → @PostConstruct → afterPropertiesSet → initMethod → BPP after (здесь появляются прокси).

    Middle
  32. 32Бин объявлен со scope prototype и содержит @PreDestroy. Когда контейнер вызовет этот метод?

    Никогда: контейнер создаёт prototype-бин, отдаёт и забывает о нём — destroy-колбэки не вызываются. Освобождение ресурсов — забота вызывающего кода.

    Middle
  33. 33Почему внедрение через конструктор предпочтительнее внедрения в поле?

    Конструктор даёт final-поля, тестируемость без контейнера и честный сигнал о раздутых зависимостях; поле прячет зависимости и позволяет создать объект в неполном состоянии.

    Middle
  34. 34Интерфейс PaymentGateway реализуют два бина: один помечен @Primary, другой имеет имя sbpGateway. В точке внедрения стоит @Qualifier("sbpGateway"). Какой бин будет внедрён?

    @Qualifier в точке внедрения сильнее @Primary: явное указание перекрывает умолчание. Будет внедрён sbpGateway.

    Middle
  35. 35Чем @Repository отличается от @Component помимо семантики?

    @Repository включает трансляцию исключений: SQLException и исключения JPA превращаются в единую иерархию DataAccessException (DuplicateKeyException…

    Middle
  36. 36Что на самом деле задаёт аннотация @Order на бине?

    @Order задаёт порядок бинов при внедрении списком и в цепочках (фильтры, аспекты, обработчики событий), но не порядок создания — для этого @DependsOn или явная зависимость.

    Middle
  37. 37Что верно про события приложения и @EventListener в Spring?

    События ApplicationEventPublisher по умолчанию обрабатываются синхронно, в том же потоке и той же транзакции: исключение слушателя откатит публикатора. Асинхронность — явно через…

    Middle
  38. 38Что произойдёт при создании ресурса через POST, если контроллер возвращает ResponseEntity со статусом 201?

    201 Created сопровождают заголовком Location с адресом созданного ресурса; тело — созданный ресурс или пусто. Spring сам Location не проставляет.

    Middle
  39. 39Чем @Validated отличается от @Valid?

    @Valid — стандарт Jakarta Bean Validation, включает каскадную проверку вложенных объектов. @Validated — аннотация Spring: группы валидации и проверка параметров методов бинов (на…

    Middle
  40. 40В контроллере стоит @Valid @RequestBody CreateUserRequest, и клиент прислал невалидное тело. Что произойдёт по умолчанию?

    Spring бросает MethodArgumentNotValidException, метод контроллера не вызывается, ответ по умолчанию — 400. Список ошибок полей нужно отдать клиенту через @RestControllerAdvice.

    Middle
  41. 41Чем @ControllerAdvice отличается от @ExceptionHandler внутри контроллера?

    @ExceptionHandler в контроллере — локальный, в @ControllerAdvice — глобальный. Локальный обработчик подходящего типа выигрывает у глобального.

    Middle
  42. 42Разработчик добавил в @RestController поле private User currentUser и заполняет его в начале каждого метода. Что не так?

    Контроллер — singleton, запросы обслуживаются параллельно в разных потоках. Поле currentUser общее: один пользователь увидит данные другого — гонка и утечка.

    Middle
  43. 43Чем forward отличается от redirect?

    Forward — внутренняя передача запроса другому обработчику в том же запросе: URL в браузере не меняется, атрибуты запроса сохраняются. Redirect — ответ 302/303 с Location: браузер…

    Middle
  44. 44Какие виды advice существуют в Spring AOP?

    @Before — до метода, @AfterReturning — после успешного возврата, @AfterThrowing — после исключения, @After — в любом случае (как finally), @Around — вокруг, с вызовом proceed().

    Middle
  45. 45Какие ограничения есть у Spring AOP из-за того, что он основан на прокси?

    Spring AOP на прокси перехватывает только внешние вызовы публичных методов бинов: не работает self-invocation, private-методы, final-методы и классы при CGLIB, объекты не из…

    Middle
  46. 46Когда Spring создаёт JDK dynamic proxy, а когда CGLIB-прокси?

    JDK dynamic proxy — реализует интерфейсы бина, перехватывает только методы интерфейсов. CGLIB — подкласс бина, работает без интерфейсов. Spring Boot по умолчанию включает CGLIB…

    Middle
  47. 47Что реально делает @Transactional(readOnly = true)?

    readOnly = true — оптимизация чтения: Hibernate не делает снимков и flush (FlushMode.MANUAL), драйверу передаётся подсказка setReadOnly(true), можно направить на реплику. Это не…

    Middle
  48. 48Какие флаги cookie и зачем используют для сессионного идентификатора?

    HttpOnly — недоступна из JavaScript (кража при XSS), Secure — только по HTTPS (перехват), SameSite (Lax/Strict) — не уходит с межсайтовыми запросами (CSRF). Флага Encrypted не…

    Middle
  49. 49Как устроена chunk-ориентированная обработка в Spring Batch и что она даёт?

    Chunk — порция: прочитать N записей по одной, обработать, записать пачкой в одной транзакции. Память ограничена размером чанка, а после сбоя задание продолжается с последнего…

    Middle
  50. 50Что такое ApplicationContext в Spring?

    ApplicationContext — контейнер бинов: создаёт их, внедряет зависимости, управляет жизненным циклом и даёт инфраструктуру — события, свойства, профили, ресурсы.

    Junior
  51. 51Что делает аннотация @Autowired?

    @Autowired — точка внедрения: контейнер находит бин по типу и подставляет. Несколько кандидатов — уточняют @Primary, @Qualifier или имя.

    Junior
  52. 52Сколько экземпляров бина со scope singleton создаст контейнер?

    Один экземпляр на контекст — не на всю JVM, как классический паттерн. Два контекста — два экземпляра; можно создать объект класса и вручную через new.

    Junior
  53. 53Что означает код ответа 404?

    404 Not Found — ресурса по этому адресу нет. Это группа 4xx — ошибка на стороне клиента; 5xx — ошибка сервера.

    Junior
  54. 54Зачем нужна аннотация @Valid на теле запроса в контроллере?

    @Valid на теле запроса включает проверку ограничений на полях DTO (@NotBlank, @Email, @Size); при нарушении метод контроллера не вызывается, клиент получает 400.

    Junior
  55. 55Что делает DispatcherServlet в Spring MVC?

    DispatcherServlet — единая точка входа (front controller): принимает запрос, через HandlerMapping находит метод контроллера, вызывает его через HandlerAdapter, превращает…

    Junior
  56. 56Какую задачу решает AOP?

    AOP выносит сквозную функциональность — транзакции, логирование, безопасность, метрики, кэширование — из бизнес-методов в аспекты. Метод содержит только бизнес-логику.

    Junior
  57. 57Что происходит при выходе из метода с @Transactional, если исключений не было?

    Успешный выход из метода — коммит (если метод начал транзакцию). Исключение по умолчанию откатывает только неконтролируемые (RuntimeException, Error); checked — коммит.

    Junior
  58. 58Почему HTTP называют протоколом без состояния (stateless)?

    Каждый запрос HTTP независим: сервер не помнит предыдущие. Чтобы связать запросы одного пользователя, нужен явный механизм — cookie с идентификатором сессии или токен.

    Junior
  59. 59Из каких частей состоит JWT?

    Три части через точку: header (алгоритм), payload (claims: sub, exp, роли), signature. Каждая — base64url. Payload не зашифрован — его может прочитать любой.

    Junior
  60. 60Чем неблокирующая модель обработки отличается от модели «поток на запрос»?

    «Поток на запрос»: пока запрос ждёт базу или сеть, его поток простаивает. Неблокирующая модель: мало потоков на много соединений — ожидание не держит поток, он берёт другую работу.

    Junior
  61. 61Почему у каждого вызова внешнего сервиса должен быть таймаут?

    Без ограничения ожидание держит поток и соединение бесконечно: зависшая зависимость занимает все потоки, и ваш сервис перестаёт отвечать — чужая медлительность становится вашим…

    Junior
  62. 62Чем unit-тест отличается от интеграционного?

    Unit-тест проверяет изолированную логику без внешних зависимостей (моки), быстро. Интеграционный — что компоненты правильно связаны между собой и с реальными системами: база…

    Junior
  63. 63Для чего предназначен Spring Batch?

    Пакетная обработка больших объёмов: импорт и выгрузка файлов, перерасчёты, рассылки — чтение, преобразование и запись порциями с сохранением прогресса и перезапуском с места сбоя.

    Junior
Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования