JavaRush /Java blogi /Random-UZ /Java. Harakat rejasi

Java. Harakat rejasi

Guruhda nashr etilgan
Java.  Harakat rejasi - 1

Tarkib:

  1. Nolinchi qism - Java yadrosi
  2. Asboblar
  3. JDK API
  4. Java 8 da nima yangiliklar
  5. SQL, ma'lumotlar bazalari, JDBC
  6. Ramkalar
  7. Sinov uchun kutubxonalar va ramkalar
  8. Xizmat kutubxonalari
  9. API mijozlari
  10. Dizayn naqshlari
  11. Qo'shimcha bilim
Potentsial Java Junior birinchi ishga joylashish yoki hech bo'lmaganda yaxshi kompaniyada Stajyor lavozimiga ariza topshirish uchun nimani bilishi kerak? Java dasturchisiga keyingi bosqichga chiqishga qanday vositalar yordam beradi? Qaysi texnologiyalarni o'rganish va qaysilarini keyinroq qoldirish kerak? Bu savollarga standart javob yo'q, xuddi hammaga mos keladigan yagona harakat rejasi mavjud emas. Ba'zi kompaniyalar rivojlanishga intilishadi, doimiy ravishda yangi texnologiyalarni joriy qilishadi va tilning yangi versiyalarining imkoniyatlarini sinab ko'rishadi, boshqalari esa o'jarlik bilan eskilariga yopishib olishadi. Bundan tashqari, "o'rta" variantlar mavjud va, ehtimol, ularning ko'pi bor. Biroq, biz intiluvchan Java dasturchisi uchun yo'l xaritasini yoki yo'l xaritasini tayyorladik. Buni iloji boricha soddalashtirish uchun biz "javachilar" ning aksariyat qismi uchun zarur bo'lgan texnologiyalar va mavzularni ko'rsatdik. Shuni esda tutish kerakki, hamma narsani batafsil o'rganish kerak emas (yuqorida aytilganlarning ba'zilari faqat jamoada ishlash orqali o'zlashtirilishi mumkin), ammo ular haqida umumiy tushunchaga ega bo'lish zarar qilmaydi.

0. Section Zero - Java Core

Java tilini endigina o‘rganishni rejalashtirayotgan va qaerdan boshlashni bilmaydigan odam bu yerga kelsa, deb maqolaga nol qismini kiritdik. Java Core - bu hatto boshlang'ich ham juda yaxshi bilishi kerak bo'lgan narsa. Ya'ni, asosiy narsalarni bilish, ma'lum bir muammoni hal qilish uchun til nimani taklif qilayotganini tushunish va oddiy holatlarda bu bilimlarni qo'llash imkoniyatiga ega bo'lish. Siz JavaRush-da Java Core-ni mashq qilishingiz mumkin va agar buni hali qilmagan bo'lsangiz, sizni kursga taklif qilamiz ! Xo'sh, boshqalar uchun Java Core-ning asosiy bosqichlarini eslatib o'tamiz:
  • Asosiy Java konstruksiyalari, operatorlari va ma'lumotlar turlari
  • OOP va uning Java-da amalga oshirilishi
  • Istisnolar
  • Java to'plamlari
  • Umumiy
  • Ko'p tarmoqli

1. Asboblar

IDE yoki integratsiyalashgan rivojlanish muhiti

Zamonaviy dasturchining asosiy vositasi IDE hisoblanadi. Bugungi kunda bozorda ularning ko'pi bor, lekin professional Java rivojlanishida odatda faqat ikkita nom mavjud. Bu plaginlar asosida qurilgan bepul Eclipse , ketma-ket ko'p yillar davomida kaftini ushlab turadi va so'nggi yillarda Eclipse-ni faol ravishda almashtirib kelayotgan IntelliJ IDEA va bu Ultimate versiyasiga obuna bo'lish zarurligiga qaramay. mutaxassislar pul talab qiladi. Eslatib o'tamiz, JavaRush kursida biz Community IntelliJ IDEA ning bepul nashridan foydalanamiz, u Ultimate bilan solishtirganda ma'lum funktsional cheklovlarga ega. “Men IDE-ni bilaman” iborasi siz ishlab chiqish muhitining asosiy imkoniyatlari bilan tanish ekanligingizni, fayllarni kompilyatsiya qilish, ishga tushirish, disk raskadrovka va sinovdan o'tkazish, shuningdek, kodni qayta ishlashni bilasiz degan ma'noni anglatadi. Issiq tugmalarni o'zlashtirish ishingizni tezlashtirishda yaxshi yordam beradi. Dangasa bo'lmang, siz bilmagan IDE funksiyalari haqida bir necha soat vaqt ajrating va ulardan amalda foydalanishni boshlang. Va nosozliklarni tuzatishni e'tiborsiz qoldirmang, bu juda foydali mahorat. Bu harakatlarning barchasi ish tezligi va sifatini sezilarli darajada yaxshilashga yordam beradi.

Avtomatik yig'ish uchun asboblar

Bugungi kunda Java loyihalari ko'pincha Maven va Gradle kabi vositalardan foydalanadi. Ularni yaxshilab o'rganish shart emas, lekin ular bir-biridan qanday farq qilishini, nimaga asoslanganligini, qanday vazifalar (Gradleda) va Mavenda maqsadlarga ega bo'lgan bosqichlarni tushunish foydali bo'ladi. Tizimlar haqida o'qish va ularda bir nechta kichik loyihalarni o'rnatish kifoya qiladi. Buni qilish juda oddiy va siz haqiqiy ish sharoitida tafsilotlarni tushunasiz.

Versiyalarni boshqarish tizimlari va onlayn xosting xizmatlari

Versiyalarni boshqarish tizimi dasturchilarga umumiy loyihada uni "buzmasdan" jamoada ishlashga, turli odamlar tomonidan yaratilgan turli xil kod qismlarini sinxronlashtirishga, muvaffaqiyatsiz yangilanishlarni qaytarishga va yangilarini qo'shishga yordam beradi. Eng keng tarqalgan ikkita versiya boshqaruv tizimi. Ulardan biri taqsimlangan va Git deb ataladi, ikkinchisi markazlashtirilgan, SVN (aka Subversion) deb ataladi. Bugungi kunda Git de-fakto standart hisoblanadi. Ushbu tizim bilan ishlash qulayroq va osonroq, u barcha IDElar (shuningdek, SVN) tomonidan qo'llab-quvvatlanadi. Git bilan ishlashni tez va oson sinab ko'rish mumkin, xayriyatki, Internetda ushbu mavzu bo'yicha juda ko'p ma'lumotlar mavjud. Masalan, GitHowTo interaktiv darsligi rus tilida mavjud (juda tez o'tadi). Ajam ishlab chiquvchi uchun versiyalarni boshqarish tizimlari uchun onlayn hosting xizmatlarini o'zlashtirish juda muhimdir. Ko'pincha ular Git-ga asoslangan va Git platformalari deb ataladi (garchi ularning ba'zilari turli versiyalarni boshqarish tizimlari bilan ishlashi mumkin). Ulardan eng mashhuri GitHub. BitBucket va GitLab ham juda keng tarqalgan. Ushbu tizimlar kodni saqlash va olishda yordam beradi, shuningdek, Git qila oladigan narsani faqat buyruq satri orqali emas, balki interfeys orqali amalga oshiradi. GitHub shuningdek, to'g'ridan-to'g'ri saytda kodni tekshirish va muammolarni hal qilishni taklif qilish imkonini beradi. U erda siz boshqa birovning ochiq manba loyihasini topishingiz va uni yaxshilash uchun o'z yechimlaringizni taklif qilishga harakat qilishingiz mumkin. Aslida, GitHub ishlab chiquvchilar uchun o'ziga xos ijtimoiy tarmoqdir. Shunday ekan, agar sizda hali yo'q bo'lsa, GitHub-da hisob qaydnomasini yaratganingizga ishonch hosil qiling va u erda loyihalaringizni joylashtiring. Shuningdek, GitLab va BitBucket haqida o'qing va agar vaqtingiz bo'lsa, ularni sinab ko'rishingiz mumkin, ularning bepul versiyalari mavjud. Aytgancha, ushbu platformalarning barchasi zamonaviy IDElar bilan to'liq integratsiyalashgan. Java.  Harakat rejasi - 2

2. JDK API

Ushbu bo'lim zamonaviy Java dasturchisi ishonchli tarzda bilishi kerak bo'lgan JDK API-larini ta'kidlaydi. Vaqti-vaqti bilan ushbu kutubxonalarning manba kodini ko'rib chiqish, ularni boshqarish va ulardan qachon va nima uchun foydalanish kerakligini tushunish dasturchiga zarar keltirmaydi. Yon ta'siri: agar siz ushbu API-larni yaxshi bilsangiz, intervyu olishingiz osonroq bo'ladi.

Java Collections Framework

Java Collection Framework Java tilining eng muhim API-laridan biridir va har bir dasturchi uni bilishi kerak. Bu roʻyxat, bogʻlangan roʻyxat, toʻplam, stek, navbat, xesh-jadval va boshqalar kabi Java tilidagi standart maʼlumotlar tuzilmalarining interfeyslari va amalga oshirilishi ierarxiyasini ifodalaydi. Ishlab chiquvchi ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet va boshqalar sinflarini yaxshi tushunishi va ularning xossalarini bilishi kerak. Xususan, standart operatsiyalar (indeks, qidirish, qo'shish, o'chirish) uchun ma'lum bir to'plamning vaqt va xotira xarajatlarini tushunishingiz kerak va shunga asoslanib, ularni loyihalaringizda to'g'ri qo'llang. Java-da to'plamlar juda yaxshi amalga oshirilgan, ammo agar kerak bo'lsa, ishlab chiquvchi o'z ilovasini taklif qilishi mumkin. To'plamlarni yaxshi biladigan dasturchi allaqachon yozilgan darslarda mantiqni kengaytirishi yoki qayta belgilashi yoki hamma narsani noldan amalga oshirishi mumkin.

Java Concurrency API

Java dastlab parallel dasturlashni qo'llab-quvvatlash uchun ishlab chiqilgan va 5.0 versiyasidan boshlab, til parallel ish zarralari uchun yuqori darajadagi APIlarni o'z ichiga oladi. Shunday qilib, malakali Java dasturchisi ko'p ish zarralarini yaxshi tushunishi va java.util.concurrent.* paketlarining asosiy API-larini tushunishi kerak . Hech bo'lmaganda, siz Thread, Runnable, ob'ektni qulflash va sinxronizatsiya nima ekanligini bilishingiz va aniq tushunishingiz kerak. O'lik, jonli hayot, poyga sharoitlari va bularning barchasi bilan nima qilish kerakligi tushunchalarini tushunganingizga ishonch hosil qiling. O'zingizni ishonchli his qilish uchun java.util.concurrent.* dan sinxronizatorlarni o'rganing, masalan, Semaphore, CyclicBarrier, CountDownLatch, Phaser, Exchanger<V>, CompleteableFuture va boshqalar. Shuningdek, Callable va Future interfeyslari.

Java I/U API

Ajam ishlab chiquvchilar ko'pincha Java I/U va Java Non-blocking I/U ni chuqur o'rganishni e'tiborsiz qoldiradilar . Ammo behuda: bu Java API-lar iplar bilan ishlashni osonlashtiradi va muntazam ravishda haqiqiy ilovalarda qo'llaniladi. Ayniqsa, Java IO API ning yadrosi bo'lgan java.io paketidagi File, InputStream, OutputStream, Reader va Writer kabi sinflar. Java Non-blocking I/O (java.nio) yuqori unumdorlikdagi kiritish/chiqarish operatsiyalarini amalga oshirish uchun moʻljallangan amaliy dasturlash interfeyslari toʻplamidir. Bularga, xususan, ByteBuffer, FileChannel va Selector va boshqalar kiradi. Ushbu API-larni tushunish uchun qiyinchiliklarga duch keling, pushaymon bo'lmaysiz.

Qurilma sinfi Ob'ekt

Object superklassini tushunganingizdan so'ng, siz qaysidir ma'noda "mahalliy Java ma'ruzachisi" ga aylanasiz, OOP tuzilishi va ko'plab jarayonlardan ancha yaxshi xabardor bo'lasiz. java.lang.Object klassi sinf ierarxiyasining eng yuqori qismida joylashgan. Nima bo'layotganini yaxshiroq tushunishga qo'shimcha ravishda, sinf usullarini bilish intervyu olishni ancha osonlashtiradi - suhbatdoshlar Object sinfi va uning ob'ektlari bilan nomzodlarni sinab ko'rishni yaxshi ko'radilar.

3. Java 8 da yangi funksiyalar

Java 8-ning chiqarilishidan vaqt o'tganiga va boshqa raqamlangan yangilanishlar allaqachon paydo bo'lganiga qaramay, bu sakkizinchi versiya ramziy ma'noga ega bo'ldi. U Java-da dasturlashga yondashuvlarni soddalashtiradigan va qaysidir ma'noda o'zgartiradigan muhim yangiliklarni kiritdi. Siz lambda ifodalarini, shuningdek, Java 8-dagi Stream API va yangi sana va vaqt API-larini qanday ishlatishni tushunishingiz kerak.

4. SQL, ma'lumotlar bazalari, JDBC

Bir nechta Java dasturchilari o'z ishlarida SQL so'rovlari va ma'lumotlar bazalariga duch kelmaydilar. Shuning uchun, SQL va relyatsion ma'lumotlar bazalari nima ekanligini, ular qanday ishlashini tushunish va ikkita jadvalni birlashtirish uchun oddiy so'rovlarni yozishni bilish muhimdir. Trening uchun siz DBMSlardan biri bilan ishlashga harakat qilishingiz mumkin, masalan, PostgreSQL yoki MySQL . Bundan tashqari, aloqador bo'lmagan ma'lumotlar bazalari, noSQL yondashuvlari va hujjatga yo'naltirilgan DBMS MongoDB bilan yuzaki tanishish bo'yicha asosiy bilimlarga ega bo'lish yaxshi bo'lar edi . Sof Java-da ma'lumotlar bazalari bilan ishlash uchun siz bir xil nomdagi API bilan birga JDBC standartidan foydalanishingiz mumkin . U JDK ga kiritilgan java.sql paketi sifatida amalga oshiriladi. Bugungi kunda u kamdan-kam hollarda sof shaklda qo'llaniladi, lekin uni ko'pincha eski qo'llab-quvvatlash dasturlarida topish mumkin va zamonaviyroq va umumiy qabul qilingan vositalar ko'pincha ushbu standartga asoslanadi.

5. Ramkalar

Junior Java dasturchisiga qo'yiladigan talablar orasida bugungi kunda "Bahor, Hibernate, Spring Boot haqidagi bilimlarni" tobora ko'proq topishingiz mumkin. Ushbu texnologiyalarni mustaqil ravishda o'rganish juda qiyin ish, ammo shunga qaramay, bu, ayniqsa, yuzaki darajada mumkin. Ishlayotganingizda chuqurroq tushuncha paydo bo'ladi. Shunday qilib.

Bahor ramka

Hozirgi kunda Java-da yaratilgan deyarli har bir dastur Spring Framework-dan foydalanadi. Ushbu kuchli ramka maxsus koordinatalar tizimini ta'minlaydi, bu dasturning asosini yaratadi. Bahor ilovasini sinab ko'rish va saqlash ancha oson. Va barchasi qaramlik in'ektsiyasi tufayli.

Kutish rejimi

Java dasturchilari uchun yana bir muhim tizim bu Hibernate. U JPA (Java Persistence API) spetsifikatsiyasini amalga oshiradi, bu ob'ekt bilan bog'liq xaritalash (ORM) muammolarini hal qiladi. Ko'pgina Java ilovalari ma'lumotlar bazalari bilan o'zaro ta'sir qiladi va agar biz relyatsion ma'lumotlar bazalari haqida gapiradigan bo'lsak, ular bilan Hibernatesiz ishlash noqulay. Ushbu ramka ishlab chiquvchilarga bir qator muhim xususiyatlarni, xususan, keshlash va qutidan tashqarida tranzaktsiyalarni taqdim etadi, bu esa o'z kuchlarini ilovalar mantig'ini ishlab chiqishga qaratish imkonini beradi va dasturchini relyatsion ma'lumotlar bazalari bilan ishlashda ko'plab past darajadagi vazifalardan ozod qiladi. . Bu ishlab chiquvchilarning samaradorligini sezilarli darajada oshiradi.

Bahor MVC

Ushbu ramka bo'shashmasdan bog'langan tayyor komponentlardan foydalangan holda Model - Ko'rish - Kontroller naqshiga muvofiq ilovalarni ishlab chiqishni ta'minlaydi. Ushbu naqshni (dizayn naqshlari quyida muhokama qilinadi) va Spring MVC mantig'ini o'rganing. Amalda u juda tez-tez ishlatiladi.

Bahorgi etik

To'g'ri mahorat bilan Spring Java dasturini yaratishni osonlashtiradi. O'z navbatida, Spring Boot Spring-ga asoslangan Java dasturini yaratishni osonlashtiradi. Spring Boot sizga minimal harakat bilan ishga tushirilishi mumkin bo'lgan to'liq huquqli Enterprise Spring ilovalarini osongina yaratishga imkon beradi: avtomatik konfiguratsiya Spring ilovalarini sozlash bilan bog'liq ko'pgina qiyinchiliklarni bartaraf qiladi.

6. Sinov uchun kutubxonalar va ramkalar

Ba'zi bo'lajak ishlab chiquvchilar test kodi umuman ularni emas, balki testerlar deb ataladigan maxsus odamlarni tashvishga solayotganiga aminlar. Amalda, bu unchalik emas. Sinov, ayniqsa birlik testi (ko'pincha birlik testi deb ataladi) har bir dasturchi uchun juda muhim mahoratdir. Bundan tashqari, o'z vazifalarini endigina boshlagan yangi kelganlarga ko'pincha kimningdir kodini birlik testlari bilan qoplash vazifasi yuklanadi. Shuning uchun biz JUnit kutubxonasini o'rganishni va kodingiz uchun birlik testlarini yozish odatini rivojlantirishni tavsiya qilamiz. Shuningdek, JUnit bilan soxta qaramlik sinflarini yaratish uchun ishlatilishi mumkin bo'lgan Mockito ramkasini ko'rib chiqing.

7. Xizmat kutubxonalari

Java-da dasturchi duch keladigan deyarli har qanday muammoni hal qilishga yordam beradigan juda ko'p xizmat kutubxonalari mavjud. Ularning barchasini o'rganishning iloji yo'q va buni qilishning alohida ma'nosi yo'q. Ammo ular orqali navigatsiya qilish ajoyib g'oya. Bu erda biz amalda juda tez-tez qo'llaniladigan bir nechtasini ta'kidlaymiz.

Ro'yxatga olish uchun kutubxonalar

Avvalo, log4j va Slf4j ni eslatib o'tishimiz mumkin . Bu kutubxonalar Java ilovalari ishlayotgan vaqtda sodir bo'ladigan muntazam jurnalga yozish operatsiyalarini amalga oshirishni yashirish uchun mo'ljallangan.

JSON uchun kutubxonalar

JSON, mijozdan serverga ma'lumot uzatish formati bugungi kunda eng ko'p qo'llaniladigan formatdir. JSON bilan ishlaydigan bir nechta yaxshi kutubxonalar mavjud, eng mashhurlari Jekson va google-gson .

Google Guava

Guava Google tomonidan ishlab chiqilgan asosiy Java kutubxonalariga ega loyihadir. Bu yerda siz yangi turdagi to'plamlarni (multimap, multiset va boshqalar), o'zgarmas to'plamlar, grafiklar, funksionallar, parallelizm uchun yordamchi dasturlar, kiritish-chiqarish, xeshlash, string ishlov berish va boshqalarni topishingiz mumkin.

Apache Commons

Commons - bu turli maqsadlar uchun juda ko'p foydali Java yordam dasturlarini o'z ichiga olgan ulkan loyiha. Shunday qilib, Apache Commons kutubxonalari Tomcat, Hibernate va boshqa bir qator yirik loyihalar asosida yotadi. Apache Commons-da juda ko'p kutubxonalar mavjud. Kiritish-chiqarish operatsiyalarini soddalashtiradigan Commons IO, csv fayllar bilan ishlash uchun Commons CSV, murakkab matematik va statistik operatsiyalar va hisob-kitoblar bilan ishlash uchun Commons Math, buyruq qatori argumentlarini tahlil qilish uchun Commons CLI ni eslatib o'tamiz.

8. API mijozlari

REST - inson o'qiy oladigan formatda tarmoq orqali resurslarga kirish uchun so'nggi nuqtalar uchun nomlash uslubi. Zamonaviy Java dasturchisi REST mafkurasini tushunishi va REST mijozini yaratish uchun juda foydali kutubxona bo'lgan Spring RestTemplate ni bilishi yaxshiroqdir .

9. Dizayn naqshlari

Agar yangi boshlanuvchi dasturchi dizayn naqshlari, ya'ni Java dasturlashda yaxshi xulq-atvor qoidalari bilan tanish bo'lsa va hatto ularni amalda qo'llashni bilsa, u bir zumda mehnat bozorida o'z qiymatini oshiradi. Yangi boshlanuvchilar ko'pincha naqshlarni kam baholaydilar, chunki ular o'qish paytida kamdan-kam hollarda murakkab dasturlarni yaratadilar. Biroq, agar naqshlar jiddiy loyihalarga qo'llanilmasa, kodni saqlash va moslashtirish juda qiyin vazifaga aylanadi. Shuning uchun dangasa bo'lmang, naqshlarni o'rganing va ularni shaxsiy loyihalaringizda qo'llang. Sizning kelajakdagi ish beruvchingiz buning uchun juda minnatdor bo'ladi.

10. Qo'shimcha bilimlar

Algoritmlar va ma'lumotlar tuzilmalari

"Algoritmlar va ma'lumotlar tuzilmalari" - bu texnik universitetlarda o'qitiladigan butun kursning nomi. U turli xil ma'lumotlar tuzilmalarini qurishning nazariy asoslarini ochib beradi. Amaliy mashg'ulotlarda esa ular bilan ishlashni o'rganadilar - ma'lumotlarni joylashtirish va olish, ularni qidirish va saralash. Aslida, bu iboradagi "Algoritmlar" aniq saralash va qidirishni anglatadi. Yillar davomida kompyuter olimlari ko'plab algoritmlarni ishlab chiqdilar. Ulardan ba'zilari o'quv xarakteriga ega, chunki amalga oshirishning nisbatan qulayligiga qaramay, ular ishlashda unchalik samarali emas. Misol uchun, ular sekin ishlaydi, bu katta ma'lumotlar hovuzlarida sezilarli bo'lishi mumkin. Yoki ular juda ko'p xotirani iste'mol qiladilar. Boshqa algoritmlar juda samarali ekanligi isbotlangan. Shunday qilib, ular ko'pchilik dasturlash tillarining rasmiy kutubxonalariga kiritilgan. Shunga ko'ra, bugungi kunda bunday algoritmlarni mustaqil ravishda ishlab chiqish kerak emas. Ularning qaerdaligini bilish kifoya. Va shunga qaramay, ko'pchilik tajribali ishlab chiquvchilar yangi boshlanuvchilarga "algoritm maktabi" dan o'tishni tavsiya qiladi - o'qish paytida ularni mustaqil ravishda amalga oshiradi. Bu dasturchi fikrlashni rivojlantiradi. Bu intervyularda ham yordam beradi; ular muammolarni saralash va qidirishni so'rashni yaxshi ko'radilar.

Servletlar

Servlet - bu foydalanuvchi so'rovini boshqarish usuli. Bugungi kunda ular hamma joyda va har doim ham qo'llanilmaydi, lekin ular haqida tasavvurga ega bo'lish foydali bo'ladi.

HTML va CSS

Har bir inson tartib asoslarini bilishi kerak. Ushbu bilimni olish juda oson va agar siz hali buni qilmagan bo'lsangiz, ushbu faoliyatga bir necha kun ajrating. Shu bilan birga, siz murakkabroq mavzulardan tanaffus qilasiz.

XML

Extensible Markup Language ilgari Java-ni ishlab chiqishda hamma joyda mavjud edi. U asta-sekin JSON bilan almashtiriladi, ammo XML bugungi kunda ham qo'llaniladi. O'rganish qiyin emas, shuning uchun siz bu tilga ozgina e'tibor berishingiz mumkin.

JavaScript

Ishlab chiquvchilarning so'rovlari shuni ko'rsatadiki, hatto front-end ishlab chiqish bilan mutlaqo aloqasi bo'lmaganlar ham vaqti-vaqti bilan JavaScript-da skriptlarni yozishgan. Ushbu tilning asoslarini bilish yaxshi xulq-atvor qoidasi deb hisoblanishi mumkin, shuning uchun dangasa bo'lmang, bu haqda o'qing va o'nlab yoki ikkita skript yarating. Bu ortiqcha bo'lmaydi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION