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