Встречается на собеседованиях • сегодня
Что такое проблема N+1
Проблема N+1 возникает при работе с ORM (например, Hibernate), когда для получения связанных сущностей выполняется один запрос для основной сущности и N дополнительных запросов для связанных данных. Это приводит к неэффективности и снижению производительности.
Пример:
```java
@Entity
public class Author {
@OneToMany(mappedBy = "author")
private List books;
}
// Проблема N+1:
List authors = entityManager.createQuery("SELECT a FROM Author a", Author.class).getResultList();
for (Author a : authors) {
a.getBooks().size(); // Для каждого автора выполняется отдельный запрос для получения книг
}
```
Решение:
1. Использовать JOIN FETCH:
```java
List authors = entityManager.createQuery(
"SELECT DISTINCT a FROM Author a LEFT JOIN FETCH a.books", Author.class).getResultList();
```
2. Настроить eager loading через аннотации (не всегда оптимально)
3. Использовать EntityGraph или Batch fetching
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
