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