50 iOS intervyu savollari va javoblari

Yangilanish: 2019 yil 14-avgust

1- Live Rendering-ni qanday sozlashingiz mumkin?
@IBDesignable atributi Interface Builder-ga ma'lum bir ko'rinishda jonli yangilanishlarni amalga oshirishga imkon beradi. IBDesignable dasturiga UIView klassida ham Init freymini aniqlash kerak.

2- Sinxron va asenkron vazifaning farqi nimada?
Sinxron: ​​vazifani tugatguncha kutadi Asenkron: vazifani fonda bajaradi va tugallanganda sizga xabar beradi

3- Kompilyatsiya shartlarini tushuntiring

Agar kompilyatsiya qilish, agar DEBUG… endif struktura berilgan bo'lsa, blok kodni va alohida maqsadlarni blokirovka qilish uchun foydalanish shartlari.

4- NSError ob'ekti nimadan iborat?
NSError ob'ektining uchta qismi domen, xato kodi va foydalanuvchi ma'lumotlari lug'atidan iborat. Domen - bu xato kategoriyalarini aniqlaydigan satr.

5- Enum yoki raqamlar nima?

Apple Swift hujjatlariga ko'ra:

Ilovani boshqarish holati, hozirgi vaqtda dastur qanday ishlatilayotganligini kuzatib boruvchi ma'lumotlar to'plami ilovangizni rivojlantirishda muhim qism hisoblanadi. Hisob-kitoblar sonli sonlarni aniqlaydi va har bir alohida holat bilan bog'liq qiymatlarni birlashtirishi mumkin, shuning uchun siz ulardan ilovangiz va uning ichki jarayonlarini modellashtirish uchun foydalanishingiz mumkin.

Enum - bu asosan bir xil soyabonda bir-biriga bog'langan qiymatlar guruhini o'z ichiga oladigan, ammo kichik misollar bizga misol yaratishga imkon bermaydi.

Malumot: https://developer.apple.com/documentation/swift/maintaining_state_in_your_apps

6- bog'lash qutisi nima?
Cheklov qutisi - bu geometriyada ishlatiladigan atama; u berilgan nuqtalar to'plami ichidagi eng kichik o'lchovni (maydon yoki hajm) anglatadi.

7- Nega biz Objective-C-da Enum mulkiga kuchli foydalanmaymiz?
Enums ob'ektlar emasligi sababli, biz bu erda kuchli yoki kuchsizni ko'rsatmaymiz.

8- Objective-C-da @ synthesize nima?
sintez qilish sizning mulkingiz uchun getter va setter usullarini yaratadi.

9- Objective-C-da @ dinamika nima?
Biz NSManagedObject kichik sinflari uchun dinamikadan foydalanamiz. @dynamic kompilyatorga getter va setters boshqa joyda amalga oshirilishini aytadi.

10- Nima uchun biz sinxronlashdan foydalanamiz?
sinxronlashtirilgan, blokda ushbu kodni istalgan vaqtda faqat bitta ip bajarishi mumkinligini sinxronlashtiradi.

11- Qanday farq kuchli, zaif, faqat o'qish va nusxalash?

kuchli, kuchsiz, tayinlangan xususiyat atributlari ushbu mulk uchun xotira qanday boshqarilishini belgilaydi.

Kuchli, ma'lumotlarning soni ko'payishini va
unga havola ob'ektning hayoti davomida saqlanib qoladi

Zaif (kuchli bo'lmagan ma'lumot) bu biz ob'ektga ishora qilayotganimizni, ammo uning mos yozuvlar sonini oshirmaganligini anglatadi. Ko'pincha ota-ona farzandlari bilan munosabatlarni yaratishda foydalaniladi. Ota-ona bolaga qattiq murojaat qiladi, lekin bola faqat ota-onaga nisbatan zaif ma'lumotga ega.

  • Har safar ishlatilgan var
  • Ixtiyoriy turda ishlatiladigan har safar
  • Avtomatik ravishda nolga o'zgaradi

Faqat o'qish uchun, avval mulkni sozlashimiz mumkin, ammo keyin uni o'zgartirish mumkin emas.

Nusxalash bu ob'ekt yaratilganda uning qiymatini nusxalash demakdir. Shuningdek, uning qiymati o'zgarishiga yo'l qo'ymaydi.

batafsil ma'lumot uchun buni tekshiring

12- Dinamik dispetcherlik nima?
Dynamic Dispatch bu amalga oshirilishini tanlash jarayoni
ish paytida qo'ng'iroq qilish usuli yoki funktsiyasi bo'lgan polimorfik operatsiya. Bu shuni anglatadiki, biz metod usuli kabi metodlarimizni ishga tushirmoqchi bo'lganimizda. ammo Swift dinamik yuborish uchun odatiy emas

13- Kodni qamrab olish nimani anglatadi?
Kod qamrovi bizning o'lchov birliklarini aniqlashda yordam beradigan metrikadir.

14- Tugatish ishlovchisi nima?
Bizning dasturimiz API qo'ng'iroqini amalga oshirganda, tugallash uchun ishlov beruvchilar juda qulaydir va biz bu vazifani bajarganimizda, masalan, API qo'ng'irog'idagi ma'lumotlarni ko'rsatish uchun UI-ni yangilash kabi biror narsa qilishimiz kerak. Apple-ning API-larida dataTaskWithRequest kabi tugallashlarni qayta ko'rib chiquvchilarni ko'ramiz va ular sizning kodingizda juda qulay bo'lishi mumkin.

Tugatish ishlov beruvchisi uchta dalil bilan kodning katta qismini oladi: (NSData?, NSURLResponse?, NSError?), Bu hech narsani qaytarmaydi: Bo'sh. Bu yopildi.

Tugatish uchun ishlov beruvchilar @escaping belgisini qo'yishlari kerak, chunki ular o'rni yopish funktsiyasi bajarilgandan keyin bir muncha vaqt bajarilgan.

15- Dizaynda foydalanishga qanday ustuvorlik berish kerak?
4 bosqichda foydalanish uchun ustuvorlik berish uchun dizayn jarayonini buzib tashlang:

  • Foydalanuvchi kabi o'ylab ko'ring, keyin UX dizaynini tuzing.
  • Foydalanuvchilar demografik emas, balki odamlar ekanligini unutmang.
  • Ilovani targ'ib qilishda foydali bo'lishi mumkin bo'lgan barcha vaziyatlarni ko'rib chiqing.
  • Ilovaning yordamchi dasturini ishga tushirgandan keyin ham ishlashda davom eting.

16- Ramka va chegara o'rtasidagi farq nima?
UIView chegaralari - bu (x, y) va o'lchamlari (kengligi, balandligi) o'z koordinata tizimiga (0,0) nisbatan ifodalangan to'rtburchak.
UIView ramkasi - bu joylashuv (x, y) va o'lcham (kenglik, balandlik) ko'rinishida ko'rsatilgan to'rtburchaklar.

17- Javob beruvchilar zanjiri nima?
ResponderChain - bu qabul qilingan voqealarga javob berish imkoniyatiga ega bo'lgan ob'ektlar ierarxiyasi.

18- Doimiy iboralar nima?
Doimiy iboralar bu satr orqali qanday qidirishni tasvirlaydigan maxsus torli naqshlardir.

19- Operatorning ortiqcha yuklanishi nima?
Operatorning haddan tashqari yuklanishi mavjud operatorlarning ikkalasini allaqachon mavjud bo'lgan turlar bilan qanday ishlashini o'zgartirishga imkon beradi. Operatorlar - bu +, * va / kabi kichik belgilar.

20- TVMLKit nima?
TVMLKit - bu TVML, JavaScript va o'zingizning ona TVOS ilovangiz o'rtasidagi yopishtiruvchi.

21- tvOS platformasining cheklovlari nima?
Birinchidan, tvOS hech qanday brauzerni qo'llab-quvvatlamaydi, va sizga qarshi dasturlashingiz mumkin bo'lgan WebKit yoki boshqa veb-asoslangan vosita mavjud emas. Bu shuni anglatadiki, sizning ilovangiz veb-havolalar, OAuth yoki ijtimoiy media saytlari kabi biron bir narsa uchun veb-brauzer bilan bog'lana olmaydi.

Ikkinchidan, tvOS ilovalari mahalliy xotiradan aniq foydalana olmaydi. Mahsulotni ishga tushirganda, qurilmalar 32 Gb yoki 64 Gb bo'sh joyni egallaydi, ammo ilovalarga to'g'ridan-to'g'ri bortdagi saqlash joyiga yozishga ruxsat berilmaydi.

tvOS ilovalar to'plami 4 Gb dan oshmasligi kerak.

22- Vazifalar nima?
Vazifalar bizga biron bir vazifani bajarish uchun bir qator bayonotlarni birlashtirishga imkon beradi. Funktsiya yaratilgandan so'ng, uni kodingizda qayta-qayta ishlatish mumkin. Agar siz kodingizda iboralarni takrorlayotganingizni ko'rsangiz, bu takrorlanmaslik uchun javob bo'lishi mumkin.

Pro Maslahat, Yaxshi funktsiyalar kirish va qaytish natijalarini qabul qiladi. Yomon funktsiyalar global o'zgaruvchilarni o'rnatadi va ishlash uchun boshqa funktsiyalarga ishonadi.

23- ABI nima?
Tashqi kutubxonalardan foydalanadigan dasturlar haqida gap ketganda, ABI muhim ahamiyatga ega. Agar dastur ma'lum bir kutubxonadan foydalanish uchun qurilgan bo'lsa va u keyinchalik yangilangan bo'lsa, siz ushbu dasturni qayta kompilyatsiya qilishingiz shart emas (va oxirgi foydalanuvchi nuqtai nazaridan siz manbaga ega bo'lmasligingiz mumkin). Agar yangilangan kutubxona xuddi shu ABI-dan foydalansa, unda sizning dasturingizni o'zgartirish kerak bo'lmaydi. ABI barqarorligi Swift 5.0 bilan birga keladi

24- Nima uchun dizayn naqshlari juda muhim?
Dizayn naqshlari dasturiy ta'minotni loyihalashda keng tarqalgan muammolarga qayta foydalanish mumkin. Ular sizga tushunishga va qayta ishlatishga oson bo'lgan kodni yozishga yordam beradigan andozalardir. Kakao dizaynining eng keng tarqalgan namunalari:

  • Ijod: Singleton.
  • Tarkibiy: bezak, adapter, fasad.
  • Xulq-atvori: kuzatuvchi va Memento

25- Singleton Pattern nima?
Singleton dizayni naqshlari ushbu sinf uchun faqat bitta namunaning mavjudligini va bu namunaga global kirish nuqtasi mavjudligini ta'minlaydi. Odatda birinchi marta kerak bo'lganda bitta misolni yaratish uchun dangasa yuklashdan foydalanadi.

26- Fasad dizayni namunasi nima?
Fasad dizayni namunasi murakkab quyi tizim uchun yagona interfeysni ta'minlaydi. Foydalanuvchilarni bir qator sinflar va ularning API-lari bilan tanishtirishning o'rniga, siz faqat bitta oddiy birlashtirilgan API-ni ochasiz.

27- Dekorativ dizayn naqsh nima?
Dekorator naqshi ob'ektga uning kodini o'zgartirmasdan xatti-harakatlar va majburiyatlarni dinamik ravishda qo'shadi. Bu sinfning xatti-harakatlarini boshqa ob'ekt bilan o'rash orqali o'zgartiradigan pastki sinflarga alternativa.

Objective-C-da ushbu naqshning ikkita keng tarqalgan bajarilishi mavjud: Kategoriya va Delegatsiya. Swift-da ushbu uslubning juda keng tarqalgan ikkita tatbiqi mavjud: Kengaytmalar va Delegatsiya.

28- Adapter naqsh nima?
Adapter mos kelmaydigan interfeysli sinflarga birgalikda ishlashga imkon beradi. O'zini ob'ekt atrofida o'rab oladi va ushbu ob'ekt bilan o'zaro aloqa qilish uchun standart interfeysni ochadi.

29- Observer Pattern nima?
Observer naqshida bitta ob'ekt boshqa har qanday holat o'zgarishi to'g'risida xabar beradi.

Kakao kuzatuvchi namunasini ikki shaklda amalga oshiradi: Bildirishnomalar va kalitlarni tekshirish (KVO).

30- Memento naqsh nima?
Memento Pattern-da narsalaringizni biron bir joyda saqlaydi. Keyinchalik, bu tashqi holati kapsapulyatsiyani buzmasdan tiklanishi mumkin; ya'ni shaxsiy ma'lumotlar maxfiy bo'lib qoladi. Apple-ning Memento naqshini ixtisoslashgan dasturlaridan biri arxivlash iOS-da Memento naqshini davlat tiklanishida ishlatadi.

31- MVC-ni tushuntiring

  • Modellar - domen ma'lumotlari yoki ma'lumotlarni boshqaradigan ma'lumotlarga kirish qatlami uchun javobgardir, "Shaxs" yoki "PersonDataProvider" sinflari haqida o'ylang.
  • Ko'rishlar - taqdimot sathi (GUI) uchun javobgar, iOS muhiti uchun 'UI' prefiksidan boshlanadigan hamma narsani o'ylab ko'ring.
  • Nazoratchi / Taqdimotchi / ViewModel - Model va Ko'rish o'rtasidagi yopishtiruvchi yoki vositachi, umuman, Ko'rish bo'yicha foydalanuvchining harakatlariga munosabat va Modelni o'zgartirgan holda Viewni yangilash orqali Modelni o'zgartirish uchun javobgardir.

32- MVVM-ni tushuntiring
UIKit sizning nuqtai nazaringiz va uning holatini mustaqil ravishda taqdim etish. View Model Modelda o'zgarishlarni keltirib chiqaradi va yangilangan Model bilan o'zini yangilaydi va biz View va View Model o'rtasida bog'liqlik borligi sababli, birinchisi shunga mos ravishda yangilanadi.

Ko'rish modelingiz aslida sizning modelingizda bo'ladi va u sizning ko'rinishingizda ko'rsatiladigan ma'lumotlarni formatlashi mumkin.

RxSwift deb nomlanuvchi ko'proq ma'lum ramka mavjud. Uning tarkibida Kakao va CocoaTouch uchun reaktiv kengaytmalar bo'lgan RxCocoa mavjud.

33- Maqsad-C-da nechta turli izoh mavjud?

  • _Null_unspecified, qaysi ixtiyoriy ravishda o'ralmagan holda Swiftga ko'prik. Bu odatiy.
  • _Nonnull, bu qiymat muntazam havolaga bog'lanmaguncha bo'lmaydi.
  • _Noolable qiymati nolga teng bo'lishi mumkin, u ixtiyoriy ravishda o'rnatiladi.
  • _Null_resettable qiymat o'qilganda hech qachon nolga teng bo'lmaydi, lekin uni qayta o'rnatishni bilishingiz mumkin. Bu faqat mulkka tegishli.

34- JSON / PLIST cheklovlari nima?

  • Biz sizning ob'ektlaringizni yaratamiz va keyin ularni diskka ketma-ket joylashtiramiz ..
  • Bu juda ajoyib va ​​juda cheklangan holatlar.
  • Sizning natijalaringizni filtrlash uchun aniq so'rovlardan foydalana olmaymiz.
  • Bu juda sekin.
  • Har safar biror narsaga muhtoj bo'lganimizda, biz uni seriyalashtirishimiz yoki yo'q qilishimiz kerak.
  • bu xavfsiz emas.

35- SQLite chegaralari nima?

  • Biz jadvallar o'rtasidagi munosabatlarni aniqlashimiz kerak. Barcha jadvallarning sxemasini aniqlang.
  • Ma'lumotlarni olish uchun so'rovlarni qo'lda yozishimiz kerak.
  • Biz natijalarni so'rab, keyin ularni modellarga xaritalashimiz kerak.
  • So'rovlar juda tez.

36- Qirollik foydasi nima?

  • Ochiq manbali ma'lumotlar bazasi.
  • Noldan amalga oshiriladi.
  • Nol nusxa ko'chirish ob'ektlari do'koni.
  • Tez.

37- Batareyani tejaydigan joyni aniqlash uchun nechta API mavjud
3 ta apis mavjud.

  • Joylashuvda sezilarli o'zgarishlar - joylashuv har 500 metrda (odatda 1 kmgacha) etkaziladi
  • Viloyat monitoringi - radiusi 100 m va undan ortiq bo'lgan dumaloq mintaqalardan kirish / chiqish voqealarini kuzatib borish. Mintaqaviy kuzatuv GPSdan keyin eng aniq API hisoblanadi.
  • Voqealarni ziyorat qilish - joyni (uyni / ofisni) kiradigan yoki chiqadigan tadbirlarga tashrif buyuring.

38- Swiftning asosiy ustunligi nimada?
Swift-ning asosiy afzalliklarini aytib o'tish:

  • Ilovalarni ishdan chiqishga bardoshli qiluvchi ixtiyoriy turlari
  • O'rnatilgan xatolar bilan ishlash
  • Yopiqlar
  • Boshqa tillarga qaraganda ancha tezroq
  • Xavfsiz til
  • Naqsh solishtirishni qo'llab-quvvatlaydi

39- Sviftdagi generiklarni tushuntiring?
Generiklar ma'lumotlarning asosiy turlari to'g'risida aniq ma'lumotga ega bo'lmagan kodni yaratadilar. Ushbu maqolani ushlamang. Avlodlar bizga uning qaysi turini o'z ichiga olishini bilishimizga imkon beradi. Generics shuningdek, bizning kodimiz uchun optimallashtirishni ta'minlaydi.

40- Sviftda dangasa bo'lishni tushuntiring?
Dangasa saqlangan xususiyatlarning boshlang'ich qiymati, agar mulk birinchi marta chaqirilsa, hisoblanadi. Dangasa xususiyatlar ishlab chiquvchilarga juda qulay bo'lgan holatlar mavjud.

41- Kechiktirish nima deganini tushuntiring?
 Defer kalit so'zini, agar u joriy hajmni tark etsa, bajariladigan kod blokini ta'minlaydi.

42- O'zgaruvchini ma'lumot sifatida qanday o'tkazish kerak?
Shuni ta'kidlash kerakki, ikki xil o'zgaruvchilar mavjud: mos yozuvlar va qiymat turlari. Ushbu ikki tur o'rtasidagi farq shundaki, o'zgaruvchi qiymat turini o'zgartirib, ma'lumotlarning nusxasini yaratadi va mos yozuvlar turi o'zgaruvchisi faqat xotiradagi asl ma'lumotlarga ishora qiladi.

43- Ko'rishni boshqarish nazoratchilari o'rtasida ma'lumotlarni qanday uzatish mumkin?

Ko'rish nazorati o'rtasida ma'lumotlarni uzatishning 3 usuli mavjud.

  1. Segue, tayyorlashForSegue usulida (Oldinga)
  2. Delegatsiya (Orqaga)
  3. O'zgaruvchini to'g'ridan-to'g'ri o'rnatish (Oldinga yo'naltirish)

44- Muvofiqlik nima?
Muvofiqlik bu sizning dasturingizning bajarilish yo'llarini ikkiga bo'lib, ular bir vaqtning o'zida ishlashi mumkin. Umumiy terminologiya: jarayon, ip, ko'p tarmoqli va boshqalar. Terminologiya;

  • Jarayon, Amaliyot ilovasi namunasi
  • Mavzu, kodni bajarish uchun yo'l
  • Bir vaqtning o'zida ko'p oqimli, bir nechta iplar yoki bajarilishning bir nechta yo'li.
  • Muvofiqlik, bir vaqtning o'zida bir nechta vazifalarni kengaytiriladigan tarzda bajarish.
  • Queues, Queues - bu ob'ektlarni First-in, First-out (FIFO) tartibida boshqaradigan engil ma'lumotlar tuzilmalari.
  • Sinxron va boshqalar asinxron vazifalar

45 - Grand Markaziy Dispatch (GCD)
GCD - bu past darajadagi va ob'ektga asoslangan API-ni vazifalarni bir vaqtning o'zida sahnalar orqasida boshqarish bilan ta'minlaydigan kutubxona. Terminologiya;

  • Dispatch navbatlari, jo'natish navbati birinchi va birinchi tartibda vazifani bajarish uchun javobgardir.
  • Serial jo'natish navbatlari ketma-ket jo'natish navbatida vazifalar birma-bir bajariladi.
  • Bir vaqtning o'zida jo'natish navbati Bir vaqtda ketma-ket jo'natish navbatida, iloji boricha ko'p vazifalar bajarilib, boshlangan vazifalar tugashini kutmasdan turib ishlaydi.
  • Asosiy jo'natish navbati Ilovaning asosiy tarmog'idagi vazifalarni bajaradigan global miqyosda mavjud bo'lgan seriyali navbat.

46- O'quvchi-yozuvchilar
Bir vaqtning o'zida bir nechta o'qishlar, bitta yozuvdan iborat bo'lishi kerak. Muammoning echimi - bir vaqtning o'zida o'qishga va eksklyuziv yozuvga kirishga imkon beradigan o'quvchi-yozuvchilarni qulflash. Terminologiya;

  • Poyga holati Musobaqaning sharti, agar ikki yoki undan ortiq mavzular umumiy ma'lumotlarga kirish imkoniga ega bo'lsa va ular bir vaqtning o'zida o'zgartirishga harakat qilsalar.
  • Deadlock Ikki yoki ba'zan bir nechta vazifa ikkinchisining tugashini kutib turganda va hech qachon bunday bo'lmaydi.
  • "O'quvchi-yozuvchilar" muammosi Bir vaqtning o'zida bir nechta mavzularda o'qish, lekin bitta yozuvdan iborat bo'lishi kerak.
  • Yozuvchi-o'quvchilarni qulflash Ushbu qulf umumiy manbaga bir vaqtning o'zida o'qish uchun ruxsat beradi, yozish operatsiyalari esa eksklyuziv kirishni talab qiladi.
  • Dispatch Barrier Block Dispatch to'siq bloklari bir vaqtning o'zida navbat bilan ishlayotganda ketma-ketlikdagi torliklarni yaratadi.

47- NSOperation - NSOperationQueue - NSBlockOperation
NSOperation GCD bilan taqqoslaganda qo'shimcha qo'shimcha xarajatlarni qo'shadi, ammo biz turli xil operatsiyalar orasida bog'liqlikni qo'shishimiz va ularni qayta ishlatish, bekor qilish yoki to'xtatib qo'yishimiz mumkin.

NSOperationQueue, NSOperations-ni parallel ravishda bajarish uchun ishlatiladigan iplar pulini yaratishga va ishlatishga imkon beradi. Operatsion navbatlari GCD-ning tarkibiga kirmaydi.

NSBlockOperation sizga bir yoki bir nechta yopilishlardan NSOperation yaratishga imkon beradi. NSBlockOperations bir vaqtning o'zida ishlaydigan bir nechta bloklarga ega bo'lishi mumkin.

48- KVC - KVO
KVC Kalitlarni kodlash uchun stendlarni qo'shadi. Bu ishlab chiqish vaqtida mulk nomlarini statik ravishda bilishning o'rniga, ish vaqtida ob'ekt xususiyatlariga kirish mumkin bo'lgan mexanizmdir.

KVO kalit-qiymatni kuzatishni anglatadi va nazoratchi yoki sinfga mulk qiymatidagi o'zgarishlarni kuzatishga imkon beradi. KVO-da ob'ekt ma'lum mulkdagi har qanday o'zgarishlar to'g'risida xabardor qilishni so'rashi mumkin, agar mulk qiymati o'zgarganda, kuzatuvchi avtomatik ravishda xabardor qilinadi.

49 - Iltimos, Swiftning taqqoslash texnikasini tushuntiring

  • Tuple naqshlari mos keladigan tuplar turlarining qiymatlarini moslashtirish uchun ishlatiladi.
  • Turli translyatsiya naqshlari sizga translyatsiya qilish yoki turlarni moslashtirish imkonini beradi.
  • Joker naqshlari har qanday turdagi va qiymat turlariga mos keladi va e'tibor bermaydi.
  • Ixtiyoriy naqshlar ixtiyoriy qiymatlarga mos kelish uchun ishlatiladi.
  • Hisoblash holatlarining shakllari mavjud ro'yxatlash turlari bilan mos keladi.
  • Ifoda naqshlari berilgan qiymatni berilgan ifoda bilan taqqoslashga imkon beradi.

50- Gvardiya bayonotini tushuntiring
Qo'riqlashning uchta katta foydasi bor.

Ulardan biri, boshqalarning ta'kidlashicha, qiyomat piramidasidan qochishdir - agar ular bir-birining ichiga o'rnatilgan so'zlar bir-birining ichida va o'ngga siljigan bo'lsa, juda zerikarli bo'ladi. Ikkinchi foyda - break yoki return yordamida funktsiyadan erta chiqish.

So'nggi foyda, qo'riqchi bayonoti ixtiyoriy ravishda xavfsiz tarzda ochishning yana bir usuli hisoblanadi.

2-qism bu erda. Bo'ldi shu. Reading O'qiganingiz uchun tashakkur.

Mening oldingi maqolalarimni bu erda ko'rishingiz mumkin.