Проектирование Senior Мобильный system design обновлено

Мобильный system design: перевод денег в банковском приложении

Вопрос

Спроектируйте клиентскую часть перевода денег по номеру телефона в банковском приложении: поиск получателя, ввод суммы, подтверждение, статус операции, история.

Коротко

Поток: выбор получателя (поиск по номеру через сервер, показ имени для проверки), ввод суммы с проверкой лимитов на сервере, экран подтверждения с итоговой комиссией, подтверждение биометрией или кодом. Идемпотентность: при переходе на подтверждение клиент получает или создаёт id операции.

Что должно быть в решении

  1. 1
    Требования: безопасность, точность статуса, плохая сеть, повторные нажатия, доступность
  2. 2
    Безопасность: сессия и биометрия через Keychain/Keystore, подтверждение операции, защита экрана, аттестация
  3. 3
    Идемпотентность: клиентский id операции, повтор без двойного списания
  4. 4
    Состояния: черновик, на подтверждении, в обработке, успех, отказ, неизвестно
  5. 5
    Данные: история с пагинацией, кеш получателей, без хранения лишних персональных данных
  6. 6
    Наблюдаемость: логирование без ПДн, метрики успешности и времени

Что спросит интервьюер

  • Что увидит пользователь, если приложение закрыли во время перевода?
  • Как защититься от подмены получателя вредоносным приложением?

Разбор

Поток: выбор получателя (поиск по номеру через сервер, показ имени для проверки), ввод суммы с проверкой лимитов на сервере, экран подтверждения с итоговой комиссией, подтверждение биометрией или кодом.

Идемпотентность: при переходе на подтверждение клиент получает или создаёт id операции. Отправка POST /transfers с этим id; если ответ не пришёл, клиент повторяет с тем же id или запрашивает статус. Двойное нажатие блокируется на уровне UI и сервера.

Состояния операции явные, включая «неизвестно, проверяем»: пользователь видит статус, а не ошибку, и операция появится в истории с актуальным статусом. Если приложение закрыли, при следующем открытии незавершённые операции досинхронизируются по id.

Безопасность: токены в Keychain/Keystore, биометрия открывает криптографический ключ, подпись операции может выполняться ключом устройства; экран подтверждения защищён от скриншотов и оверлеев; сервер проверяет аттестацию и антифрод. Логи без номеров и сумм в открытом виде.

История: курсорная пагинация, кеш последних операций для быстрого показа.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.