
Java Fuckup Night 2024
Дата
24.06.2023
Место проведения
Москва
Формат
Оффлайн + Онлайн
Тема доклада
Как продукт воровал деньги у людей и пароходов и ему за это ничего не было (почти).
О чём доклад?
Поговорили о том, как продукт воровал деньги у людей и пароходов. Сразу скажу: это происходило не в Сбере. Приложение стало воровать деньги у ничего подозревающих покупателей, и происходило это от незнания членами команды уровней изоляции транзакций.
Что по теме?
Я препарировал код несколько дней, пытаясь воспроизвести ситуацию и смоделировать её, но это не помогало. Воспроизвести баг не получалось.
И тут я обратил внимание на аннотацию Transactional, которую завели предыдущие разработчики, чтобы, если что-то пойдёт не так, откатить статус задания в первоначальное состояние и попробовать ещё раз.
Как мы знаем, коммит изменений в таком случае происходит при завершении метода.
Всего существует 4 уровня изоляции:
- Самый «грязный» уровень – первый – READ UNCOMMITED. На этом уровне транзакции могут читать не закоммиченные изменения.
- Второй уровень изоляции – READ COMMITED. Транзакции могут читать только закоммиченные изменения.
- Третий уровень – REPEATABLE READ – блокирует изменение данных, если они читаются в рамках другой транзакции. Что позволяет гарантировать, что если вы прочитали данные, они не изменятся, пока ваша транзакция не завершилась.
- И четвёртый уровень – SERIALIZABLE – полностью параллельное исполнение транзакций. Только последовательное.
Вы спрашивали: зачем на собеседованиях спрашивают про уровни изоляции? А вот за этим и спрашивают.
Материалы доклада
Вы можете скачать презентацию в PDF.




