Junior — Senior
75
Корректное списание средств с пользовательского баланса
Компании, где спрашивали:
Lamoda Tech
Условие задачи
В системе есть таблица user, где хранится текущий остаток средств каждого пользователя. Представлена функция на псевдокоде, реализующая процесс снятия суммы с баланса. Необходимо проанализировать её, выявить проблемные места и предложить улучшения, учитывая, что код работает в продакшене. Особое внимание следует уделить вопросам конкурентного доступа, атомарности операций, использованию транзакций и возможным гонкам данных (race conditions).
func withdrawBalance(userID int32, amount float32) {
balance = exec('select balance from user u where u.id=$1', userID)
if balance - amount >= 0.0 {
exec('update user u set balance=balance-$1', amount)
return exec('select balance from user u where u.id=$1', userID)
}
}