Azimjon Abdurasulov

System Design

Interview Savollari

iOS System Design Interview Savollari va Javoblari (Senior daraja)

Ushbu qo'llanmada katta texnologiya kompaniyalarida (FAANG, Yandex, Uber) so'raladigan 20 ta System Design savollari iOS nuqtai nazaridan batafsil tushuntirilgan. Bu savollar Senior va Staff darajadagi suhbatlarga tayyorgarlik uchun mo'ljallangan.


System Design Savollari

1. Instagram klon ilovasi arxitekturasini loyihalang

Javob:

  • Networking: URLSession + Codable yoki Alamofire. Pagination uchun cursor-based API.
  • Image Loading: Lazy loading + Downsampling. NSCache (RAM kesh) + Disk Cache (FileManager). SDWebImage yoki Kingfisher kutubxonalari.
  • Arxitektura: MVVM + Coordinator. Yirik loyihada TCA yoki VIPER.
  • Feed: UICollectionView + CompositionalLayout yoki SwiftUI LazyVStack.
  • Offline: Core Data yoki Realm orqali local cache.
  • Performance: Prefetching (kelayotgan postlarni oldindan yuklash), image downsampling, lazy rendering.

2. Chat (Messenger) ilovasini loyihalang

Javob:

  • Real-time: WebSocket (URLSessionWebSocketTask yoki Starscream) orqali real-time xabarlar.
  • Local Storage: Core Data / SQLite (xabarlar tarixi). Offline mode uchun local-first arxitektura.
  • Encryption: End-to-End Encryption (Signal Protocol). Keychain'da kalitlarni saqlash.
  • Push: APNs orqali background notification. Silent push orqali yangi xabarlarni fetch qilish.
  • UI: UICollectionView bilan DiffableDataSource — past va yuqoriga scroll, pagination, typing indicator, read receipts.
  • Media: Rasm/video jo'natish uchun multipart upload, CDN'dan yuklash.

3. Video Streaming (YouTube klon) ilovasi?

Javob:

  • Video Player: AVFoundation (AVPlayer, AVPlayerLayer). HLS (HTTP Live Streaming) formatida oqimli video.
  • Adaptive Bitrate: Tarmoq tezligiga qarab video sifatini (240p, 720p, 1080p) avtomatik o'zgartirish.
  • Caching: Video segmentlarni diskka keshlab offline ko'rish imkoniyati.
  • UI: PIP (Picture in Picture), fullscreen rotation, mini-player (scroll qilinganda kichik player).
  • Performance: Background audio play, AirPlay qo'llab-quvvatlash.

4. E-Commerce (Online do'kon) ilovasini loyihalang?

Javob:

  • Catalog: Paginated product list. Filtrlash va saralash uchun query parameters.
  • Cart: Local UserDefaults yoki Core Data'da saqlash. Server bilan sinxronizatsiya.
  • Payment: Apple Pay (PassKit), StoreKit 2 (In-App Purchase). PCI compliance.
  • Search: Debounce qilingan search bar + server-side search yoki local Algolia.
  • Arxitektura: Clean Architecture (Domain, Data, Presentation layers).
  • Xavfsizlik: SSL Pinning, Keychain da tokenlar, biometric authentication (Face ID/Touch ID).

5. Map-based ilova (Uber/Yandex Go kabi) arxitekturasi?

Javob:

  • Map: MapKit yoki Google Maps SDK. Custom annotation'lar.
  • Location: CLLocationManager (background location updates). Geofencing.
  • Real-time: WebSocket orqali haydovchi joylashuvi real-time yangilanishi.
  • Routing: MKDirections yoki server-side routing. ETA (Estimated Time of Arrival) hisoblash.
  • Background: Background location + significant location changes.
  • Battery: Lokatsiya yangilanish chastotasini (frequency) boshqarish — aniqlik va batareya o'rtasida balans.

6. Social Media Feed Performance Optimization

Javob:

  • Prefetching: UICollectionViewDataSourcePrefetching orqali keyingi elementlarni oldindan yuklash.
  • Image: Progressive JPEG, downsampling, kesh siyosati (LRU — Least Recently Used).
  • Cell: Reusable cell'larni to'g'ri konfiguratsiya qilish. prepareForReuse() ga e'tibor berish.
  • Main Thread: API va rasm ishlari faqat background thread'da. Faqat UI yangilanishi Main thread'da.
  • Diffable Data Source: Faqat o'zgargan elementlarni qayta chizish.

7. Offline-First ilova arxitekturasi

Javob:

  • Local DB: Core Data yoki Realm asosiy ma'lumotlar manbasi (source of truth) sifatida.
  • Sync Engine: Ilova onlayn bo'lganda local o'zgarishlarni serverga push qilish (Conflict resolution kerak).
  • Queue: Offline paytda amalga oshirilgan amallarni navbatga (operation queue) qo'yish.
  • Network Monitoring: NWPathMonitor orqali tarmoq holatini kuzatish.
  • Merge Strategy: "Last Writer Wins" yoki "Server Wins" strategiyasi.

8. Push Notification tizimini loyihalang

Javob:

  • APNs: Device token olish → Backend'ga yuborish → Backend APNs'ga so'rov → Qurilmaga yetkazish.
  • Rich Push: UNNotificationServiceExtension orqali mediaga boy (rasm, video) bildirishnomalar.
  • Silent Push: Background'da ma'lumotlarni yangilash uchun content-available push.
  • Grouping: NotificationCenter'da xabarlarni guruhlash (threading).
  • Analytics: Ochilish darajasini (open rate), yetkazilishni kuzatish.

9. Authentication (Login/Auth) tizimi?

Javob:

  • Login: Email/Password, Apple Sign In (majburiy), Google/Facebook Sign In.
  • Token: Access Token (qisqa muddatli) + Refresh Token (uzoq muddatli). Keychain'da saqlash.
  • Token Refresh: 401 kelganda avtomatik refresh qiluvchi Interceptor / Middleware.
  • Biometric: Face ID / Touch ID orqali qayta kirish (LAContext).
  • Security: SSL Pinning, Certificate Transparency, jailbreak detection.

10. Search tizimining arxitekturasi

Javob:

  • Debounce: Foydalanuvchi yozishni to'xtatguncha so'rov yubormaslik (300ms delay). Combine debounce operatori.
  • Cancel: Yangi so'rov kelganda eskisini bekor qilish (task.cancel()).
  • Cache: Oxirgi qidiruv natijalarini keshlab, tezkor qayta ko'rsatish.
  • Suggestions: Local + Server-side tavsiyalar. Recent searches saqlash.
  • UI: searchable modifier (SwiftUI) yoki UISearchController (UIKit).

Arxitektura va Tizim Qarorlari

11. Networking Layer dizayni?

Javob:

  • Abstraction: Protokol asosidagi NetworkService — endpoint'larni enum bilan aniqlash.
  • Request Building: URLRequest ni generik builder orqali yaratish.
  • Response Handling: Generic Result<T: Decodable, Error>.
  • Interceptors: Auth token qo'shish, logging, retry logic.
  • Testing: Protocol-based DI orqali Mock network layer.

12. Modular Architecture (Micro-features)?

Javob:

  • Loyihani mustaqil SPM package'larga bo'lish: NetworkKit, AuthKit, UIComponents, FeatureHome.
  • Har bir modul o'z testlariga ega.
  • Modullar bir-birini faqat protokollar orqali biladi.
  • Build vaqtini drastik qisqartiradi (faqat o'zgargan modul qayta kompilyatsiya qilinadi).

13. A/B Testing tizimi ilovada?

Javob:

  • Remote Config: Firebase Remote Config yoki custom backend orqali feature flag'lar.
  • Variant Distribution: Foydalanuvchilarni guruhlarga ajratish (control vs test).
  • Analytics: Har bir variant natijasini o'lchash (conversion rate, engagement).
  • Architecture: Feature Flag Manager — bu barcha flag'larni markaziy boshqaruvchi klass.

14. App Launch Time optimizatsiyasi?

Javob:

  • Pre-main: Dinamik framework'larni kamaytirish, static linking, +load metodlaridan qochish.
  • Post-main: didFinishLaunching da faqat kerakli SDK'larni boshlash. Qolganlarini lazy yoki background'da.
  • Measurement: Xcode Instruments — App Launch template. MetricKit orqali real-user ma'lumotlar.
  • Target: Apple 400ms ichida first frame tavsiya qiladi.

15. Database Migration strategiyasi?

Javob:

  • Lightweight: Field qo'shish/o'chirish — iOS avtomatik boshqaradi.
  • Heavy: Jadval strukturasi o'zgarishi — Mapping Model + Background migration. Eski ma'lumotlarni yangi formatga o'tkazish.
  • Versioning: Har bir reliz uchun model versiyasi. Sequential migration (v1 → v2 → v3).
  • Safety: Background thread'da migration, progress indicator ko'rsatish.

16. Analytics arquitecturasi?

Javob:

  • Abstraction: AnalyticsService protokoli — Firebase, Amplitude, custom backend ga bog'lanmagan.
  • Event Tracking: Enum-based event'lar (type-safe). AnalyticsEvent struct bilan parametrlar.
  • Batching: Event'larni to'plab, bir vaqtda yuborish (battery va traffic tejash).
  • Privacy: ATT (App Tracking Transparency) so'rash. GDPR/CCPA talablarini hisobga olish.

17. Error Handling va Crash Reporting?

Javob:

  • Crashlytics: Firebase Crashlytics yoki Sentry orqali crash'larni real-time kuzatish.
  • Non-fatal Errors: Crashlytics'ga log qilish (masalan, API xatolari, decoding xatolari).
  • User-facing: Alert yoki Toast orqali foydalanuvchiga tushunarli xabar. Retry tugmasi.
  • Logging: os_log yoki custom logger — debug vs release loglari.

18. Accessibility Testing?

Javob:

  • VoiceOver: Barcha interactive elementlarda accessibilityLabel va accessibilityHint.
  • Dynamic Type: Shriftlar foydalanuvchi sozlamasiga moslashishini tekshirish.
  • Color Contrast: WCAG 2.1 standartlariga mos ranglar. Accessibility Inspector asbobida tekshirish.
  • Automated: XCTest'da accessibility audit'larini qo'llash.

19. Release va Deploy Strategy?

Javob:

  • Phased Release: App Store'da bosqichma-bosqich chiqarish (1, 2, 5, 10, 20, 50, 100%).
  • Feature Flags: Yangi funksiyalarni yashirin holatda joylash, kerak bo'lganda remote'dan yoqish.
  • Rollback: Bug topilganda tezda eski versiyaga qaytish rejasi.
  • Monitoring: Crash rate, ANR (App Not Responding), user feedback kuzatish. Sentry/Crashlytics alert'lari.

20. Ilovani 0 dan loyihalash — qanday qarorlar qabul qilasiz?

Javob:

  1. Platform: Minimal iOS versiyasini aniqlash (iOS 16+? 17+?).
  2. UI Framework: SwiftUI (yangi loyihalar) yoki UIKit (legacy qo'llab-quvvatlash).
  3. Arxitektura: MVVM + Coordinator (o'rta), TCA/RIBs (katta loyiha).
  4. Networking: URLSession + async/await (native) yoki Alamofire.
  5. Storage: UserDefaults, Keychain, Core Data, yoki SwiftData (iOS 17+).
  6. DI: Swinject yoki Factory pattern.
  7. CI/CD: GitHub Actions yoki Xcode Cloud + Fastlane.
  8. Testing: XCTest + Swift Testing. 80% minimum code coverage maqsad.
  9. Monitoring: Crashlytics, Analytics, Performance monitoring.
  10. Design System: Reusable UI komponentlar kutubxonasi.

Yakuniy Maslahat:

System Design savollarida "to'g'ri javob" yo'q — muhimi sizning fikrlash jarayoningiz. Trade-off'larni (tezlik vs xotira, murakkablik vs soddalik) tushuntira olishingiz va har bir qarorni asoslashingiz kerak. Doska yoki qog'ozda chizib tushuntiring — bu katta ta'sir qoldiradi! 🏗️

Markdown manba

iOS Lessons