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

Hibernate и JPA

Persistence context, проблема N+1, Spring Data JPA и ленивые загрузки.

11вопросов
1Junior
10Middle
  1. 01Что такое проблема N+1 запросов и как её решать?

    N+1 — один запрос за списком и ещё по запросу на связанные данные каждого элемента: 100 заказов → 101 запрос. Причина — ленивая загрузка связей в цикле.

    Middle
  2. 02Чем отличается оптимистичная блокировка от пессимистичной?

    Пессимистическая — блокируем строку заранее (SELECT ... FOR UPDATE), остальные ждут. Оптимистическая — не блокируем, а при записи проверяем версию (WHERE version = ?); не совпала…

    Middle
  3. 03Почему возникает LazyInitializationException в Hibernate и как его правильно лечить?

    Ленивую связь трогают после закрытия сессии (вне транзакции, в контроллере или сериализаторе) — прокси не может выполнить запрос и бросает исключение.

    Middle
  4. 04Что верно про persistence context (сессию) в JPA?

    Persistence context — кэш первого уровня и единица работы: одна сущность в одном экземпляре на сессию, изменения отслеживаются автоматически (dirty checking) и сбрасываются при…

    Middle
  5. 05Почему для эндпоинта, отдающего список из тысяч записей, обычно предпочитают проекцию в DTO, а не загрузку сущностей?

    Сущность в сессии стоит памяти (снимок для dirty checking) и рискует потянуть ленивые связи. DTO-проекция выбирает ровно нужные поля одним запросом и не управляется сессией.

    Middle
  6. 06Что делает ORM?

    ORM связывает объекты и таблицы: вы работаете с сущностями, а SQL для загрузки и сохранения генерируется автоматически.

    Junior
  7. 07Что даёт Spring Data JPA?

    Объявляете интерфейс, наследующий JpaRepository, — Spring создаёт реализацию с CRUD, пагинацией и сортировкой. Запросы — по имени метода (findByEmailAndStatus), через @Query (JPQL…

    Middle
  8. 08Почему изменение JPA-сущности внутри @Transactional сохраняется в БД без явного вызова save()?

    Dirty checking: сущность, загруженная в транзакции, — managed; при flush (перед коммитом) Hibernate сравнивает её поля со снимком и сам отправляет UPDATE изменённых полей. save()…

    Middle
  9. 09Список из 100 заказов рендерится вместе с покупателем каждого, и в логе видно 101 SQL-запрос. Какие способы исправят проблему?

    JOIN FETCH в @Query, @EntityGraph на методе репозитория или пакетная загрузка (hibernate.default_batch_fetch_size). EAGER не решает — делает проблему постоянной.

    Middle
  10. 10Что делает включённый по умолчанию в Spring Boot режим open-in-view и почему его считают спорным?

    Open Session in View держит сессию Hibernate и соединение с базой до конца формирования ответа: ленивые связи «просто работают» в контроллере и сериализации. Цена — соединение…

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

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

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

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

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

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