# 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! 🏗️
