Junior (1-2 yil)
Interview Savollari
Junior iOS Engineer - Interview Savollari va Javoblari (1-2 yil tajriba)
Ushbu qo'llanmada Junior darajadagi iOS dasturchilar uchun suhbatlarda ko'p so'raladigan 50 ta muhim savol va javoblar jamlangan. Har bir javob sodda, tushunarli va professional tilda bayon etilgan.
1. Swift va Xotira Asoslari
1. Struct va Class o'rtasidagi asosiy farqlar nima?
Javob:
- Struct — value type (qiymat turi). Stack xotirasida saqlanadi. Nusxa olinganda (tenglashtirilganda) ma'lumotning o'zi ko'chiriladi. Merosxo'rlikni (inheritance) qo'llab-quvvatlamaydi.
- Class — reference type (havola turi). Heap xotirasida saqlanadi. Nusxa olinganda faqat obyektdan havola (pointer) nusxalanadi. Merosxo'r bo'lishi mumkin.
2. ARC (Automatic Reference Counting) nima?
Javob: ARC — bu Swift'da xotira bilan ishlash tizimi. U class obyektlaridan necha kishi foydalanayotganini (reference count) hisoblab boradi. Hisoblagich 0 ga teng bo'lishi bilan obyektni RAMdan o'chirib, xotirani bo'shatadi.
3. Retain Cycle nima va uni qanday hal qilish mumkin?
Javob: Retain Cycle — ikki obyekt bir-birini kuchli (strong reference) ushlab qolganda va natijada ARC ularni o'chira olmasdan xotirada qolib ketganda yuzaga keladi (Memory Leak). Buni hal qilish uchun kamida bitta havola weak yoki unowned deb e'lon qilinishi kerak.
4. Main Thread nima va nega u muhim?
Javob: Main Thread — ilovaning foydalanuvchi interfeysi (UI) bilan bog'liq barcha amallar bajariladigan asosiy oqim. UI elementlarini yangilash, tugmalarni bosish va animatsiyalar faqat main thread'da ishlashi shart. Og'ir hisob-kitoblar yoki tarmoq so'rovlarini main thread'da bajarish interfeysning qotib (freeze) qolishiga olib keladi.
5. Optional nima va uni xavfsiz ochish (unwrapping) yo'llari qanday?
Javob: Optional — bu o'zgaruvchida qiymat bo'lishi yoki bo'sh (nil) bo'lishi mumkinligini anglatuvchi qobiq. Uni xavfsiz ochish uchun if let, guard let, nil-coalescing (??) yoki optional chaining ishlatiladi. Sug'urib olishda (force unwrap !) xavfli, chunki qiymat nil bo'lsa, ilova crash bo'ladi.
6. Protocol va Delegate dizayn naqshi nima?
Javob:
- Protocol — bu metodlar va xususiyatlar to'plami bo'lib, class yoki struct uchun "shartnoma" vazifasini o'taydi.
- Delegate — bir obyekt o'zidagi ma'lumotlarni yoki hodisalar haqidagi xabarni boshqa obyektga uzatishi uchun ishlatiladigan mexanizm. Odatda
weakholatida ishlatiladi (Retain cycle oldini olish uchun).
7. App Life Cycle (Ilovaning hayot sikli) bosqichlari qanday?
Javob:
- Not Running: Ilova hali ishga tushmagan.
- Inactive: Ilova ochiq, lekin UI eventlarni qabul qilmayapti (masalan, qo'ng'iroq kelganda).
- Active: Ilova faol ishlamoqda.
- Background: Ilova fonda (ekranda ko'rinmaydi, lekin kod ishlayapti).
- Suspended: Ilovaning fondagi faoliyati to'xtatilgan, u RAMda turibdi, lekin CPU sarflamayapti.
8. View Controller Life Cycle bosqichlari qanday?
Javob:
loadView: View'larni yaratish.viewDidLoad: View xotiraga yuklandi (bir marta ishlaydi).viewWillAppear: Ekran ko'rinish arafasida.viewDidAppear: Ekran to'liq paydo bo'ldi.viewWillDisappear: Ekran yopilish arafasida.viewDidDisappear: Ekran yopildi.
9. Frame va Bounds o'rtasidagi farq nima?
Javob:
- Frame — elementning o'zining "ota" (superview) elementiga nisbatan joylashuvi va o'lchami.
- Bounds — elementning o'z ichki koordinatalar sistemasiga nisbatan joylashuvi (odatda x:0, y:0 bo'ladi) va o'lchami.
10. Higher-Order Functions (map, filter, reduce) nima?
Javob: Bular massivlar (collections) ustida tezkor ishlash uchun ishlatiladigan funksiyalar:
map: Har bir elementni o'zgartirib, yangi massiv qaytaradi.filter: Shartga mos keladigan elementlarni saralab oladi.reduce: Barcha elementlarni yagona bitta qiymatga aylantiradi (masalan, yig'indisini topish).
2. Swift Tili Xususiyatlari
11. do-catch, try, throws nima?
Javob: Bular xatolarni boshqarish (error handling) uchun ishlatiladi. Funksiya xato qaytarishi mumkin bo'lsa throws deb ko'rsatiladi. Uni ishlatish uchun try so'zi bilan do-catch bloki ichida chaqiriladi.
12. Access Control (Ruxsat darajalari) turlari?
Javob:
private: Faqat o'sha class/struct ichida.fileprivate: Faqat o'sha fayl ichida.internal(default): Butun loyiha (module) ichida.public: Tashqi loyihalar uchun ham (SPM/CocoaPods), lekin subclass qilib bo'lmaydi.open: Eng keng ruxsat, boshqa modullarda ham subclass qilish mumkin.
13. Generics nima?
Javob: Generics har xil turdagi (type) ma'lumotlar bilan ishlay oladigan universal funksiyalar yoki turlar yaratish imkonini beradi. Masalan, bir xil logikali funksiyani ham Int, ham String uchun alohida yozmasdan, bitta umumiy <T> ko'rinishida yozish mumkin.
14. Any va AnyObject farqi?
Javob:
Any— istalgan turdagi ma'lumotni (int, string, struct, class, closure) qabul qiladi.AnyObject— faqat class obyektlarini qabul qiladi.
15. Tuple nima?
Javob: Tuple — bir nechta qiymatlarni bitta guruhga yig'ish usuli. Masalan, (404, "Not Found"). U struct yaratmasdan turib funksiyadan bir nechta qiymat qaytarishda juda qo'l keladi.
16. Enum (Enumeration) nima?
Javob: Enum — o'zaro bog'liq cheklangan qiymatlar to'plami (masalan, haftaning kunlari). Swift'da enum'lar Associated Values (har bir case'ga qo'shimcha ma'lumot biriktirish) va Raw Values (case'ga boshlang'ich qiymat berish) kabi kuchli xususiyatlarga ega.
17. typealias nima?
Javob: Mavjud biror tur (type) uchun yangi, tushunarliroq nom (taxallus) berish. Masalan: typealias UserID = String. Bu kodni o'qishni osonlashtiradi.
18. Extension nima uchun ishlatiladi?
Javob: Mavjud class, struct, enum yoki protocolga uning original kodiga tegmagan holda yangi metodlar va xususiyatlar qo'shish uchun ishlatiladi.
19. Computed vs Stored properties?
Javob:
- Stored Property: RAMda joy egallaydigan va qiymatni o'zida saqlaydigan property.
- Computed Property: Qiymatni saqlamaydi, balki har safar murojaat qilinganda hisoblab qaytaradi (
getvasetbloklari orqali).
20. lazy o'zgaruvchi nima?
Javob: lazy deb e'lon qilingan o'zgaruvchi faqat unga birinchi marta murojaat qilingandagina xotiradan joy ajratadi va ishga tushadi. Bu unumdorlikni oshirish va ortiqcha xotira sarfini kamaytirish uchun foydali.
3. Murakkabroq Swift Tushunchalari
21. static va class metodlar farqi?
Javob: Ikkalasi ham obyekt yaratmasdan turib to'g'ridan-to'g'ri tur nomi bilan chaqiriladi. Farqi: static metodni subclasslarda o'zgartirib (override) bo'lmaydi, class metodini esa override qilish mumkin.
22. final kalit so'zi nima qiladi?
Javob: Class prefiksiga final qo'yilsa, undan hech kim meros ololmaydi. Metodlarga qo'yilsa, ularni override qilib bo'lmaydi. Bu xavfsizlik va Static Dispatch tufayli tezlikni oshiradi.
23. deinit nima vazifani bajaradi?
Javob: deinit — class obyekti xotiradan o'chirilishidan (deallocate) oldin avtomatik chaqiriladigan maxsus metod. Unda odatda timerlarni to'xtatish yoki bildirishnomalarni (Observer) o'chirish kabi tozalash ishlari qilinadi.
24. Force Unwrapping (!) nega xavfli?
Javob: Chunki u optional ichidagi qiymatni tekshirmasdan to'g'ridan-to'g'ri olishga harakat qiladi. Agar ichida qiymat bo'lmasa (nil bo'lsa), dastur darhol "Fatal error" berib crash bo'ladi. Har doim xavfsiz usullardan foydalanish tavsiya etiladi.
25. Nil-Coalescing Operator (??) nima?
Javob: Agar optional qiymat nil bo'lsa, uning o'rniga zaxira (default) qiymatni tayinlash uchun ishlatiladi. Masalan: let name = inputName ?? "Guest".
26. Type Casting: as, as?, as!?
Javob:
as: Obyektni ota class turiga yoki mos protocolga o'tkazish.as?: Xavfsiz o'tkazish (casting). Agar o'xshamasanilqaytaradi.as!: Majburiy o'tkazish. Agar tur mos kelmasa, crash beradi.
27. Equatable protokoli nima uchun?
Javob: Ikki obyektni o'zaro tengligini (== operatori bilan) solishtirish imkonini beradi. Buni amalga oshirish uchun qaysi property'lar bo'yicha solishtirish kerakligini ko'rsatish lozim.
28. Comparable protokoli nima?
Javob: Obyektlarni "katta" yoki "kichik" deb solishtirish (<, >) va ularni saralash (sort qilish) imkonini beradigan protokol.
29. Hashable nima va qayerda ishlatiladi?
Javob: Obyekt uchun unikal butun sonli "hash value" yaratish. Bu Set to'plamlarida va Dictionary kalitlarida (keys) elementlarni tezkor topish va dublikatlarni aniqlash uchun shartdir.
30. Closure nima?
Javob: Closure — bu kod bloklari bo'lib, ularni o'zgaruvchilarga saqlash, funksiyalarga parametr sifatida uzatish yoki qaytarish mumkin. Funkisyaning bir turi desak ham bo'ladi, lekin nomi yo'q va o'zi joylashgan atrofdagi o'zgaruvchilarni "tutib olish" (capture) xususiyatiga ega.
4. Arxitektura va UI (UIKit) Asoslari
31. Closure ichida [weak self] ishlatish nega muhim?
Javob: Closure'lar self'ni (class'ni) kuchli (strong) ushlab qoladi. Agar closure class ichida saqlangan bo'lsa, bu "Strong Reference Cycle"ga olib keladi. [weak self] orqali ushbu zanjir uziladi va xotira oqishining oldi olinadi.
32. Designated va Convenience Init nima?
Javob:
- Designated Init: Asosiy init metodi bo'lib, barcha property'larni to'liq to'ldirishi shart.
- Convenience Init: Yordamchi init bo'lib, ba'zi property'larga default qiymat berib, oxirida asosiy (designated) init ni chaqiradi.
33. Failable Initializer (init?) nima?
Javob: Agar obyekt yaratishda xatolik yuz bersa (shartlar bajarilmasa), obyekt yaratilmasdan nil qaytarishi mumkin bo'lgan init turi.
34. mutating kalit so'zi nima uchun kerak?
Javob: Struct va Enum'lar value type bo'lgani uchun, ularning metodlari ichida o'z xususiyatlarini (properties) o'zgartirishiga ruxsat berilmaydi. Buning uchun metod oldidan mutating qo'yilishi shart.
35. inout parametri nima?
Javob: Odatda funksiyaga uzatilgan o'zgaruvchilar o'zgarmas (let) bo'ladi. Agar funksiya ichida o'zgaruvchini tahrirlab, tashqaridagi original qiymatni ham o'zgartirmoqchi bo'lsak, inout kalit so'zidan foydalanamiz.
36. defer bloki nima qiladi?
Javob: Funksiya ichidagi barcha kodlar bajarilib bo'lgandan so'ng, eng oxirida (hatto xato bo'lsa ham) ishlaydigan kod bloki. Odatda fayllarni yopish yoki resurslarni tozalashda ishlatiladi.
37. Array, Set va Dictionary farqi?
Javob:
- Array: Tartiblangan ro'yxat, dublikat elementlar bo'lishi mumkin.
- Set: Tartiblanmagan to'plam, faqat unikal (takrorlanmas) elementlar bo'ladi.
- Dictionary: Kalit va qiymat (Key-Value) juftligi. Kalitlar doim unikal bo'ladi.
38. Programmatic UI vs Storyboard?
Javob:
- Storyboard: Vizual chizish oson, lekin katta jamoada Git'da ishlashda "Merge Conflict" ko'p bo'ladi.
- Programmatic UI: Barcha dizayn kodda yoziladi. Git bilan ishlash oson, kodni qayta ishlatish (reusability) qulayroq.
39. IBOutlet va IBAction nima?
Javob: Storyboard'dagi dizayn elementlarini koddagi class bilan bog'lash:
IBOutlet: UI elementini (Label, Button) o'zgaruvchi sifatida bog'laydi.IBAction: Tugma bosilishi kabi amallarni metod sifatida bog'laydi.
40. Auto Layout va Constraints nima?
Javob: Ilovadagi UI elementlarining har xil o'lchamdagi ekranlarda to'g'ri joylashishini ta'minlovchi tizim. Constraints — bu elementlarning kengligi, bo'yi yoki joylashuviga qo'yiladigan "chegaralar" (shartlar).
5. Qo'shimcha Texnik Savollar
41. Safe Area nima?
Javob: Bu ekran ichidagi "xavfsiz" qism bo'lib, u yerdagi kontent status bar, home indicator yoki "notch" kabi tizim elementlari ostida qolib ketmaydi.
42. Content Hugging va Compression Resistance nima?
Javob:
- Content Hugging: Element o'z kontentidan ko'ra kattalashib ketmasligi uchun (ichkariga tortish kuchi).
- Compression Resistance: Element siqilib ketishi oqibatida kontenti ko'rinmay qolmasligi uchun (tashqariga qarshilik kuchi).
43. UIStackView vazifasi?
Javob: Elementlarni vertikal yoki gorizontal qator qilib joylashtirishda ishlatiladi. U avtomatik tarzda barcha constraints'larni boshqaradi va elementlarni qo'shish yoki o'chirishni osonlashtiradi.
44. UITableView qanday qilib unumdorlikni (performance) oshiradi?
Javob: "Cell Reuse" (hujayralarni qayta ishlatish) mexanizmi orqali. Minglab ma'lumotlar bo'lsa ham, faqat ekranda ko'rinib turadigan sanoqli hujayralarni yaratadi va ular ekrandan chiqishi bilan yangi ma'lumotlar uchun qayta ishlatadi.
45. UserDefaults nima uchun ishlatiladi?
Javob: Foydalanuvchining kichik hajmdagi sozlamalarini (settings), masalan tilni tanlashi yoki dark/light mode sozlamasini doimiy saqlash uchun ishlatiladigan sodda ma'lumotlar bazasi.
46. Keychain va UserDefaults farqi?
Javob: UserDefaults xavfsiz emas (oddiy fayl), Keychain esa maxfiy ma'lumotlar (parollar, API tokenlar) uchun mo'ljallangan Apple tomonidan shifrlangan xavfsiz ombor.
47. URLSession nima?
Javob: Apple'ning tarmoq bilan ishlash (HTTP so'rovlar yuborish va ma'lumotlarni qabul qilish) uchun mo'ljallangan asosiy framework'i.
48. JSONDecoder nima qiladi?
Javob: Serverdan kelgan JSON formatidagi ma'lumotlarni Swift'dagi Struct yoki Class obyektlariga (Codable orqali) avtomatik o'tkazib beradi.
49. Static Dispatch va Dynamic Dispatch nima?
Javob: Bu protsessor qaysi metodni chaqirishni qachon hal qilishi:
- Static: Kompilyatsiya vaqtida ma'lum bo'ladi (tezroq).
- Dynamic: Dastur ishlab turgan vaqtda (runtime) aniqlanadi (biroz sekinroq, lekin moslashuvchan).
50. NotificationCenter vs Delegate farqi?
Javob:
- Delegate: Birma-bir (one-to-one) aloqa.
- NotificationCenter: Birma-ko'p (one-to-many) aloqa. Bir joydan yuborilgan xabarni bir nechta joyda tinglash (observe qilish) mumkin.
6. SwiftUI Asoslari va Amaliy Savollar
51. SwiftUI nima va UIKit'dan farqi?
Javob: SwiftUI — bu Apple tomonidan yaratilgan deklarativ UI framework. UIKit'da "qanday qilish kerak" ko'rsatilsa (imperativ), SwiftUI'da "nima ko'rinishi kerak" yoziladi (deklarativ). SwiftUI kamroq kod bilan tezroq natija beradi.
52. @State va @Binding farqi?
Javob:
@State: View ichida mahalliy ma'lumotni saqlash va o'zgarganda UI'ni qayta chizish.@Binding: Bola (child) view'ga ota (parent) view'dagi@Statema'lumotiga ikki tomonlama bog'lanish berish.
53. VStack, HStack, ZStack nima?
Javob:
VStack: Elementlarni vertikal (yuqoridan pastga) joylashtiradi.HStack: Elementlarni gorizontal (chapdan o'ngga) joylashtiradi.ZStack: Elementlarni ustma-ust (Z o'qi) joylashtiradi.
54. NavigationView va NavigationLink nima qiladi?
Javob: NavigationView (iOS 16+ da NavigationStack) ekranlar o'rtasida o'tish (navigatsiya) imkoniyatini beradi. NavigationLink esa bosilganda boshqa ekranga o'tkazadigan tugma vazifasini bajaradi.
55. Codable va JSON Parsing nima?
Javob: Codable = Encodable + Decodable. Serverdan kelgan JSON formatidagi ma'lumotni Swift Struct'ga avtomatik o'tkazish (JSONDecoder) va aksincha Struct'dan JSON'ga aylantirish (JSONEncoder) uchun ishlatiladi.
56. Property Observers: willSet va didSet?
Javob: O'zgaruvchi qiymati o'zgarishidan oldin (willSet) va keyin (didSet) ma'lum bir kodni bajarish. Masalan, slider qiymati o'zgarganda UI'ni yangilash.
57. @Published va ObservableObject nima?
Javob: ObservableObject — class'ni SwiftUI kuzatishi uchun belgilash. @Published — o'sha class ichidagi o'zgaruvchi o'zgarganda UI'ni avtomatik qayta chizishni ta'minlaydi.
58. ForEach va List nima?
Javob:
List: Scroll qilinadigan ro'yxat (UITableView analogi).ForEach: Ma'lumotlar massivi bo'ylab iteratsiya qilish va har bir element uchun view yaratish.
59. Git'da commit, branch, merge nima?
Javob:
- Commit: Kodning "surati" (snapshot) — bir paytdagi holatni saqlash.
- Branch: Asosiy koddan mustaqil ravishda yangi funksiya (feature) ustida ishlash uchun "shoxcha".
- Merge: Branchdagi ishni asosiy kodga qo'shib birlashtirish.
60. @Environment nima?
Javob: SwiftUI tizimidan global sozlamalarni (masalan, color scheme — dark/light mode, calendar, locale) o'qib olish uchun ishlatiladigan property wrapper.
61. onAppear va onDisappear nima?
Javob: SwiftUI'da View ekranda paydo bo'lganda (onAppear) yoki yo'qolganda (onDisappear) kod bajarish uchun ishlatiladigan view modifier'lar. UIKit'dagi viewDidAppear va viewDidDisappear ga o'xshash.
62. ternary operator (?) nima?
Javob: if-elsening qisqa ko'rinishi: shart ? ha_qiymat : yo'q_qiymat. Masalan: let status = age >= 18 ? "Katta" : "Kichik". Kodni qisqartiradi va oson o'qiladi.
63. String Interpolation nima?
Javob: String ichiga o'zgaruvchilarni kiritish usuli: "Salom, \(name)!". Bu qo'shimcha + operatorlaridan foydalanmasdan toza va tushunarli stringlar yaratishga yordam beradi.
64. GCD (Grand Central Dispatch) asosiy tushunchasi?
Javob: Apple'ning ko'p oqimli (multithreading) dasturlash tizimi. DispatchQueue.main — UI ishlari uchun, DispatchQueue.global() — og'ir ishlarni fonda bajarish uchun ishlatiladi.
65. .sheet va .fullScreenCover farqi?
Javob: Ikkalasi ham yangi ekranni modal qilib ochadi. .sheet — ekranning bir qismini qoplaydi (pastga surish bilan yopiladi). .fullScreenCover — butun ekranni to'liq qoplaydi.
Yakuniy Maslahat:
Suhbat davomida nafaqat terminlarni ayting, balki ularni oddiy hayotiy misollar bilan tushuntirishga harakat qiling. SwiftUI haqida so'ralganda oddiy misol kod yozib ko'rsatishdan qo'rqmang. Muvaffaqiyat tilaymiz! 🎯