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

Какой уровень изоляции будешь использовать для обеспечения целостности данных при одновременном начислении баллов на счет и их списании

Для таких операций подходит уровень 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);
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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