Встречается на собеседованиях • сегодня

Что такое конкуренция между транзакциями

Конкуренция транзакций возникает, когда несколько транзакций пытаются одновременно получить доступ к одним и тем же данным в БД. Основные проблемы:

  1. Lost Update - две транзакции читают данные, затем обе изменяют их, но сохраняется только последнее изменение.
  2. Dirty Read - чтение незафиксированных данных другой транзакции.
  3. Non-repeatable Read - разные результаты при повторном чтении в одной транзакции.
  4. Phantom Read - появление новых строк при повторном запросе.

Пример:

java
// Транзакция 1
entityManager.getTransaction().begin();
Product p = entityManager.find(Product.class, 1); // Читает product
// Транзакция 2 в это время изменяет product
p.setPrice(p.getPrice() + 100); // Может перезаписать изменения
entityManager.getTransaction().commit();

Решение - уровни изоляции (READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE) и блокировки (оптимистичные/пессимистичные).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы