Sparround

Mobile system design: bank tətbiqi nümunəsi

Mobile system design müsahibəsi ("mobil bank tətbiqi dizayn et") backend system design-dan fərqlidir — səndən gözlənilən çərçivə:

1. Tələbləri dəqiqləşdir (5 dəq) — funksional: hansı ekranlar (login, hesablar, köçürmə, tarixçə)? qeyri-funksional: offline dəstəyi? təhlükəsizlik səviyyəsi? cihaz spektri? Bu mərhələni atlamaq ən böyük səhvdir.

2. Yüksək səviyyəli arxitektura (10 dəq) — qatlar: UI (MVVM/MVI) → domain → data (repository, Room SSOT, Retrofit); modullaşdırma (feature + core); DI (Hilt).

3. Kritik axınların dərinliyi (15 dəq) — müsahibəçinin seçdiyi 1-2 axını detallaşdır:

  • Login: token cütü, biometrika (CryptoObject), sessiya kilidi
  • Tranzaksiya tarixçəsi: Paging + RemoteMediator, offline cache, köhnəlik göstəricisi
  • Köçürmə: idempotency key, step-up auth, optimistic olmayan UI (server təsdiqi)

4. Kəsişən mövzular (10 dəq) — təhlükəsizlik (pinning, Keystore, hardening), performans (startup, baseline profile), monitorinq (crash, ANR, analytics), test strategiyası.

Hər addımda trade-off-ları səsləndir: "burada offline queue qura bilərdik, amma ödənişdə double-charge riski onu istisna edir".

text
[Transfer ekranı]
   │ məbləğ + alıcı (client validasiya = yalnız UX)
   ▼
[ViewModel] ──── idempotencyKey = UUID yaradılır
   │
   ▼
[TransferRepository]
   │  POST /transfers  (Idempotency-Key: header)
   │  ├── timeout/şəbəkə xətası → EYNİ key ilə retry təklifi
   │  │     (server key-i tanıyır → əvvəlki nəticə, double-charge YOX)
   │  ├── 402 limit / 403 → error body-dən səbəb → UI
   │  └── step-up tələbi (böyük məbləğ) → biometrika/OTP → təkrar
   ▼
[Server təsdiqi gələnə qədər "İcra olunur..."]
   │  (optimistic "uğurlu" YOX — pul əməliyyatıdır)
   ▼
[Nəticə ekranı] → tarixçə cache-i invalidate → Room yenilənir → Flow UI-ı yeniləyir

Köçürmə axınının dizaynı — lövhəyə çəkiləcək sxem

Qiymətləndirmə meyarları (müsahibəçinin vərəqindəki): tələb sualları verdimi? qatları ayırdımı? offline/xəta hallarını düşündümü? təhlükəsizliyi özü qaldırdımı (bank!)? trade-off-ları əsaslandırdımı? Ünsiyyət texniki dərinlik qədər vacibdir: düşünərkən səsli düşün, lövhəni istifadə et, müsahibəçidən istiqamət soruş ("login-i dərinləşdirim, yoxsa data qatını?").

🛠 Tapşırıq

45 dəqiqəlik taymer qur və kağız üzərində "mobil bank tətbiqi" dizayn et.

  • İlk 5 dəqiqəni yalnız suallara ayır (özünə ver və yaz).
  • Qatlar diaqramını çək, sonra köçürmə axınını (idempotency, step-up, server təsdiqi) detallaşdır.
  • Son 5 dəqiqədə öz dizaynının 3 zəif nöqtəsini yaz.

Bitdi sayılır: vərəqdə diaqram + 5 tələb sualı + 3 trade-off qeydi varsa.

📚 Mənbələr və sənədlər