Встречается на собеседованиях • сегодня
Какой уровень изоляции будешь использовать для обеспечения целостности данных при одновременном начислении баллов на счет и их списании
Для таких операций подходит уровень REPEATABLE_READ или SERIALIZABLE. В большинстве случаев достаточно REPEATABLE_READ, который предотвращает "грязное" чтение и неповторяемое чтение, но в высококонкурентных сценариях может потребоваться SERIALIZABLE.
Пример с REPEATABLE_READ:
java
@Transactional(isolation = Isolation.REPEATABLE_READ)
public void transferPoints(Long fromAccountId, Long toAccountId, int amount) {
Account fromAccount = accountRepository.findById(fromAccountId).orElseThrow();
Account toAccount = accountRepository.findById(toAccountId).orElseThrow();
if (fromAccount.getBalance() < amount) {
throw new InsufficientFundsException();
}
fromAccount.setBalance(fromAccount.getBalance() - amount);
toAccount.setBalance(toAccount.getBalance() + amount);
accountRepository.save(fromAccount);
accountRepository.save(toAccount);
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы