Junior — Senior
74
Корректное списание средств с пользовательского баланса
Companies where asked:
Lamoda Tech
Task condition
В системе есть таблица 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)
}
}