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

Приведи пример оптимистической блокировки в Java

Оптимистическая блокировка предполагает, что конфликты редки, и проверяет версию данных перед обновлением. Пример с @Version в JPA (Hibernate):

java
@Entity
public class Account {
    @Id
    private Long id;
    private BigDecimal balance;
    
    @Version
    private int version; // Версия для контроля изменений
    
    // Геттеры/сеттеры
}

При обновлении:

java
// В сервисе
@Transactional
public void transfer(Long accountId, BigDecimal amount) {
    Account account = entityManager.find(Account.class, accountId);
    account.setBalance(account.getBalance().add(amount));
    // При коммите Hibernate проверит, что version не изменилась
    // Если изменилась - выбросит OptimisticLockException
}

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

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

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

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

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