JavaRush /Java blogi /Random-UZ /Java dasturchisi uchun intervyudan olingan savollar va ja...

Java dasturchisi uchun intervyudan olingan savollar va javoblarni tahlil qilish. 2-qism

Guruhda nashr etilgan
Hammaga yana salom! Biz kichik, o'rta va katta dasturchilar uchun 250 dan ortiq savollarga javob izlashda davom etamiz . Savollar juda qiziqarli va men ularni tahlil qilishni yaxshi ko'raman: bunday daqiqalarda siz nazariy bilimlardagi bo'shliqlarni va eng kutilmagan joylarda topishingiz mumkin. Oldingi qismni ushbu maqoladaSuhbat savollari va javoblarini tahlil qilish.  2-1-qism topishingiz mumkin . Ammo boshlashdan oldin men sizga shuni eslatmoqchiman:
  1. Ma'lumotni yana bir bor takrorlamaslik uchun men ushbu maqolalar turkumi bilan kesishgan savollarni o'tkazib yuboraman. Men ushbu materiallarni o'qishni tavsiya qilaman, chunki ularda eng keng tarqalgan (mashhur) Java Core intervyu savollari mavjud.
  2. DOU bo'yicha savollar ukrain tilida berilgan, ammo menda hamma narsa rus tilida bo'ladi.
  3. Javoblarni batafsilroq tavsiflash mumkin edi, lekin men buni qilmayman, shundan beri har bir savolga javob butun bir maqolani olishi mumkin. Va ular hech qanday intervyuda sizdan bunchalik batafsil so'ramaydilar.
Agar kerak bo'lsa, men chuqurroq o'rganish uchun havolalarni qoldiraman. Keling, uchamiz!

11. Object sinfining barcha usullarini ayting

Object klassida 11 ta usul mavjud:
  • Class<?> getClass() — joriy obyektning sinfini olish;
  • int hashCode() — joriy obyektning xesh kodini olish;
  • boolean equals​(Object obj) - joriy ob'ektni boshqasi bilan taqqoslash;
  • Object clone() - joriy obyektning nusxasini yaratish va qaytarish;
  • String toString() — obyektning satrli tasvirini olish;
  • void notify() - ushbu ob'ektning monitorida kutayotgan bitta ipni uyg'otish (ip tanlash tasodifiy);
  • void notifyAll() - ushbu ob'ekt monitorida kutilayotgan barcha iplarni uyg'otadi;
  • void wait() - joriy monitörda joriy ipni kutish rejimiga o'tkazadi (uni muzlatib qo'yadi), ba'zilari xabar bermaguncha yoki notifyAll ipni uyg'otmaguncha faqat sinxronlashtirilgan blokda ishlaydi;
  • bekor kutish(uzoq vaqt tugashi) - joriy monitorda (joriy sinxronlashtirilganda) joriy ipni ham muzlatib qo'yadi, lekin bu holatdan chiqish uchun taymer bilan (yoki yana: ogohlantirish yoki notifyAll uyg'onguncha);
  • bekor kutish(uzoq vaqt tugashi, int nanos) - yuqorida tavsiflangan usulga o'xshash, ammo muzlatishdan chiqish uchun aniqroq taymerlar bilan;
  • void finalize() - bu ob'ektni o'chirishdan oldin axlat yig'uvchi ushbu usulni chaqiradi (nihoyat). U egallab olingan resurslarni tozalash uchun ishlatiladi.
HashCode , equals​ , clone , toString va yakuniy usullardan toʻgʻri foydalanish uchun ular joriy vazifa va holatlarni hisobga olgan holda qayta belgilanishi kerak.

12. Resurslar bilan ishlashda sinab ko'rish va "resurslar bilan ishlash" o'rtasidagi farq nima?

Odatda try-catch-finally- dan foydalanilganda , yakuniy blok resurslarni yopish uchun ishlatilgan. Java 7 resurslarni bo'shatish uchun try-with -finally operatorining yangi turini taqdim etdi , ammo ixchamroq va o'qilishi mumkin. Keling, try-catch-finally nimaga o'xshashligini eslaylik :
String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
   bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
} finally {
   try {
       bufferedWriter.close();
   } catch (IOException e) {
       e.printStackTrace();
   }
}
Keling, ushbu kodni qayta yozamiz, lekin resurslar bilan sinab ko'ring :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
}
Bu qandaydir tarzda osonlashdi, shunday emasmi? Soddalashtirishdan tashqari, bir nechta fikrlar mavjud:
  1. Resurslarni sinab ko'rishda qavs ichida e'lon qilingan resurslar (yopiladi) AutoCloseable interfeysi va uning yagona usuli close() ni amalga oshirishi kerak .

    Close usuli yashirin finally blokida bajariladi , aks holda dastur berilgan resursni qanday yopish kerakligini qanday tushunadi?

    Ammo, ehtimol, siz kamdan-kam hollarda o'zingizning resurslaringiz va ularni yopish usulini yozasiz.

  2. Blokni bajarish ketma-ketligi:

    1. blokni sinab ko'ring .
    2. Nihoyat, yashirin .
    3. Oldingi bosqichlarda istisnolarni ushlaydigan catch bloki .
    4. Nihoyat aniq .

    Qoida tariqasida, ro'yxatda pastroq ko'rinadigan istisnolar yuqoriroq ko'rinadiganlarni to'xtatadi.

Tasavvur qiling-a, try-catch-finally- dan foydalanganda try -da istisno paydo bo'ladi . Shunga ko'ra, ma'lum bir catch bloki darhol bajarila boshlaydi , unda siz boshqa istisnoni yozasiz (masalan, xatoni batafsil tavsiflovchi xabar bilan) va siz ushbu istisnoni yanada tashlash usulini xohlaysiz. Keyinchalik finally blokining bajarilishi keladi va unda istisno ham tashlanadi. Lekin bu boshqacha. Ushbu ikki istisnodan qaysi biri bu usul oxir-oqibatda tashlaydi? Nihoyat blok tomonidan tashlangan istisno ! Ammo manbalarni sinab ko'rishda ham bir nuqta bor . Keling , xuddi shu vaziyatda resurslarni sinab ko'rishning xatti-harakatlarini ko'rib chiqaylik . Biz close() usulida resurslarni yopishga harakat qilganimizda try blokida istisnoga ega bo'lamiz , ya'ni yopiq finally . Ushbu istisnolardan qaysi biri ushlaydi ? Bu try bloki tomonidan tashlangan ! Yashirin finally ( yopish() usulidan ) istisno e'tiborga olinmaydi. Bunday e'tiborsizlik istisnolarni bostirish deb ham ataladi.

13. Bitli amallar nima?

Bit bo'yicha operatsiyalar - bu mantiqiy operatsiyalar va bit bo'yicha siljishlarni o'z ichiga olgan bit satrlari bo'yicha operatsiyalar. Mantiqiy operatsiyalar:
  • bitli AND - bit qiymatlarini solishtiradi va bu jarayonda 0 (noto'g'ri) ga o'rnatilgan har qanday bit natijadagi mos bitni 0 qilib o'rnatadi. Ya'ni, agar taqqoslanayotgan ikkala qiymatda ham bit 1 (to'g'ri) bo'lsa, natija ham 1 bo'ladi.

    - VA , & sifatida belgilanadi

    Misol: 10111101 & 01100111 = 00100101

  • bitli OR - oldingisiga teskari operatsiya. 1 ga o'rnatilgan har qanday bit natijada 1 ga o'xshash bitni o'rnatadi. Va shunga mos ravishda, agar bit har ikkala taqqoslangan qiymatda 0 bo'lsa, natijada olingan bit ham 0 bo'ladi.

    - OR , | kabi belgilanadi

    Misol: 10100101 | 01100011 = 11100111

  • bitwise EMAS - bitta qiymatga qo'llaniladi, bitlarni aylantiradi (invert qiladi). Ya'ni, 1 bo'lgan bitlar 0 ga aylanadi; va 0 bo'lganlar 1 ga aylanadi.

    - EMAS , ~ sifatida belgilanadi

    Misol: ~10100101 = 01011010

  • bitli eksklyuziv OR - bit qiymatlarini taqqoslaydi va agar ikkala qiymatda bit 1 ga teng bo'lsa, natija 0 bo'ladi va agar ikkala qiymatda ham bit 0 bo'lsa, natija 0 bo'ladi. Ya'ni, natija 1 ga teng bo'lishi uchun bitlardan faqat bittasi 1 ga, ikkinchisi esa 0 ga teng bo'lishi kerak.

    - XOR , ^ sifatida belgilanadi

    Misol: 10100101 ^ 01100011 = 11000110

Bit yo'nalishi bo'yicha siljish - >> yoki << qiymatning bitlarini belgilangan yo'nalish bo'yicha, ko'rsatilgan son bo'yicha siljitadi. Bo'shatilgan lavozimlar nol bilan to'ldiriladi. Masalan:
  1. 01100011 >> 4 = 00000110
  2. 01100011 << 3 = 00011000
Salbiy raqamni o'ngga siljitishda ham istisno mavjud. Esingizda bo'lsa, birinchi bit belgi uchun javobgardir va agar bu bit 1 ga teng bo'lsa, u holda raqam manfiy hisoblanadi. Agar siz manfiy raqamni ko'chirsangiz, bo'shatilgan pozitsiyalar endi nollar bilan emas, balki birlar bilan to'ldiriladi, chunki belgi bitini saqlash kerak. Masalan: 10100010 >> 2 = 11101000 Shu bilan birga, Java-da qo'shimcha imzosiz o'ngga siljish operatori mavjud >>> Bu operator >> ning analogi bo'lib, siljishda bo'shatilgan o'rinlar 0 bilan to'ldiriladi. raqam salbiy yoki ijobiy. Misol uchun: 10100010 >>> 2 = 00101000 Bit bo'yicha operatsiyalar haqida ko'proq ma'lumotni bu erda o'qing . Intervyu savollari va javoblarini tahlil qilish.  2-2 qismJava-da bit bo'yicha siljishlardan foydalanishga misol sifatida siz kalit uchun maxsus ichki xesh kodini aniqlash uchun ishlatiladigan HashMap-ning hash()Suhbat savollari va javoblarini tahlil qilish.  2-3 qism usulini keltirishingiz mumkin: Bu usul sizga HashMap-da ma'lumotlarni teng ravishda taqsimlash imkonini beradi. to'qnashuvlar soni.

14. Java tilidagi ob'ektlar qanday standart o'zgarmas sinflardir?

O'zgarmas - bu uning asl parametrlarini o'zgartirishga ruxsat bermaydigan ob'ekt. U siz o'zgartirmoqchi bo'lgan parametrlar bilan ma'lum turdagi yangi ob'ektlarni qaytaradigan usullarga ega bo'lishi mumkin. Ba'zi standart o'zgarmas ob'ektlar:
  • Hozirgacha Java-dagi eng mashhur o'zgarmas ob'ekt bu String;
  • standart turlarni o'rab oluvchi o'rash sinflari misollari: Mantiqiy, Belgi, Bayt, Qisqa, Butun, Uzun, Double, Float;
  • odatda, ayniqsa KATTA raqamlar uchun ishlatiladigan ob'ektlar - BigInteger va BigDecimal;
  • stacktracelarda birlik bo'lgan ob'ekt (masalan, stacktrace istisnosida) StackTraceElement;
  • File sinfining ob'ekti - fayllarni o'zgartirishi mumkin, lekin ayni paytda uning o'zi o'zgarmasdir;
  • UUID - ko'pincha elementlar uchun noyob identifikator sifatida ishlatiladi;
  • java.time paketining barcha sinf ob'ektlari;
  • Mahalliy - geografik, siyosiy yoki madaniy mintaqani aniqlash uchun ishlatiladi.

15. O'zgarmas ob'ektning oddiy ob'ektlardan qanday afzalliklari bor?

  1. Bunday ob'ektlar ko'p tarmoqli muhitda foydalanilganda xavfsizdir . Ulardan foydalangan holda, ip poygasi shartlari tufayli ma'lumotlarni yo'qotishdan tashvishlanishingiz shart emas. Oddiy ob'ektlar bilan ishlashdan farqli o'laroq: bu holda siz juda ehtiyotkorlik bilan o'ylashingiz va ob'ektni parallel muhitda ishlatish mexanizmlarini ishlab chiqishingiz kerak bo'ladi.
  2. O'zgarmas ob'ektlar xaritada yaxshi kalitlardir, chunki agar siz o'zgaruvchan ob'ektdan foydalansangiz va keyin ob'ekt o'z holatini o'zgartirsangiz, HashMapdan foydalanishda chalkash bo'lishi mumkin: ob'ekt hali ham mavjud bo'lib qoladi va agar siz containKey() dan foydalansangiz, u bo'lmasligi mumkin. topilsin.
  3. O'zgarmas ob'ektlar dastur ishlayotgan paytda hech qachon o'zgartirilmasligi kerak bo'lgan o'zgarmas (doimiy) ma'lumotlarni saqlash uchun juda yaxshi.
  4. "Atomlik muvaffaqiyatsizlikka uchragan" - agar o'zgarmas ob'ekt istisno qilsa, u hali ham istalmagan (buzilgan) holatda qolmaydi.
  5. Ushbu sinflarni sinovdan o'tkazish oson.
  6. Nusxa konstruktori va klonni amalga oshirish kabi qo'shimcha mexanizmlar kerak emas.

OOP haqida savollar

Suhbat savollari va javoblarini tahlil qilish.  2-4 qism

16. Umuman olganda va protsessual dasturlash bilan solishtirganda OOP ning afzalliklari nimada?

Shunday qilib, OOP afzalliklari:
  1. Murakkab ilovalarni yozish protsessual dasturlashdan ko'ra osonroqdir, chunki hamma narsa kichik modullarga - bir-biri bilan o'zaro ta'sir qiluvchi ob'ektlarga bo'linadi va natijada dasturlash ob'ektlar orasidagi munosabatlarga tushadi.
  2. OOP yordamida yozilgan ilovalarni o'zgartirish ancha oson (dizayn tushunchalariga rioya qilingan holda).
  3. Ma'lumotlar va undagi operatsiyalar yagona ob'ektni tashkil qilganligi sababli, ular butun dastur davomida bulg'anmaydi (bu ko'pincha protsessual dasturlashda sodir bo'ladi).
  4. Axborot inkapsulyatsiyasi foydalanuvchidan eng muhim ma'lumotlarni himoya qiladi.
  5. Xuddi shu kodni turli ma'lumotlar bilan qayta ishlatish mumkin, chunki sinflar ko'plab ob'ektlarni yaratishga imkon beradi, ularning har biri o'z atribut qiymatlariga ega.
  6. Meros va polimorfizm, shuningdek, mavjud kodni qayta ishlatish va kengaytirish imkonini beradi (shunga o'xshash funksiyalarni takrorlash o'rniga).
  7. Protsessual yondashuvdan ko'ra, dasturning kengaytirilishi osonroq.
  8. OOP yondashuvi amalga oshirish tafsilotlaridan mavhum olish imkonini beradi.

17. OOPda qanday kamchiliklar borligini ayting

Afsuski, ular ham mavjud:
  1. OOP biror narsa yozishdan oldin o'zlashtirilishi kerak bo'lgan juda ko'p nazariy bilimlarni talab qiladi.Intervyu savollari va javoblarini tahlil qilish.  2-5 qism
  2. OOP g'oyalarini tushunish va amalda qo'llash unchalik oson emas (siz bir oz faylasuf bo'lishingiz kerak).
  3. OOP dan foydalanilganda, tizimning yanada murakkab tashkil etilishi tufayli dasturiy ta'minotning ishlashi biroz kamayadi.
  4. OOP yondashuvi ko'proq xotirani talab qiladi, chunki hamma narsa oddiy o'zgaruvchilarga qaraganda ko'proq xotirani egallaydigan sinflar, interfeyslar, usullardan iborat.
  5. Dastlabki tahlil uchun talab qilinadigan vaqt protsessualga qaraganda ko'proq.

18. Statik va dinamik polimorfizm nima

Polimorfizm ob'ektlarning bir xil sinf yoki interfeys uchun boshqacha harakat qilishiga imkon beradi. Polimorfizmning ikki turi mavjud, ular erta va kech bog'lanish deb ham ataladi . Statik polimorfizm yoki oldingi bog'lanish:
  • kompilyatsiya vaqtida (dasturning hayot siklining boshida) sodir bo'ladi;
  • kompilyatsiya vaqtida qaysi usulni bajarish kerakligini hal qiladi;
  • Usulning haddan tashqari yuklanishi statik polimorfizmga misoldir;
  • erta bog'lash xususiy, statik va terminal usullarini o'z ichiga oladi;
  • meros erta bog'lanishda ishtirok etmaydi;
  • Statik polimorfizm aniq ob'ektlarni emas, balki o'zgaruvchi nomining chap tomonida turi ko'rsatilgan sinf haqidagi ma'lumotlarni o'z ichiga oladi.
Dinamik polimorfizm yoki kechikish:
  • ish vaqtida sodir bo'ladi (dastur ishlayotganda);
  • dinamik polimorfizm ish vaqtida qanday aniq amalga oshirishga qaror qiladi;
  • usulni bekor qilish dinamik polimorfizmga misoldir;
  • kech bog'lash - bu muayyan ob'ektni belgilash, uning turiga yoki uning yuqori sinfiga havola;
  • meros dinamik polimorfizm bilan bog'liq.
Erta va kech ulanish o'rtasidagi farqlar haqida ko'proq ma'lumotni ushbu maqolada o'qishingiz mumkin .

19. OOPda abstraksiya tamoyilini aniqlang

OOPda abstraktsiya - bu muhim bo'lmagan tafsilotlarni hisobga olmaganda, ob'ektning muhim xususiyatlari to'plamini ajratib ko'rsatish usuli. Ya'ni, dasturni OOP yondashuvi bilan loyihalashda siz ularni amalga oshirish tafsilotlarini o'rganmasdan, umuman modellarga e'tibor qaratasiz. Java-da interfeyslar abstraktsiya uchun javobgardir . Misol uchun, sizda mashina bor va bu interfeys bo'ladi. Va u bilan turli xil shovqinlar - masalan, dvigatelni ishga tushirish, vites qutisidan foydalanish - bu biz amalga oshirish tafsilotlariga kirmasdan foydalanadigan funktsiyalar. Axir, siz mashinani boshqarayotganingizda, vites qutisi o'z maqsadini qanday bajarishi yoki kalit dvigatelni qanday ishga tushirishi yoki rul g'ildiraklarini qanday aylantirishi haqida o'ylamaysiz. Va agar ushbu funktsiyalardan birini amalga oshirish almashtirilsa ham (masalan, dvigatel), siz buni sezmasligingiz mumkin. Bu siz uchun muhim emas: siz amalga oshirish tafsilotlariga kirmaysiz. Harakat amalga oshirilganligi siz uchun muhim. Aslida, bu amalga oshirish tafsilotlaridan mavhumlikdir. Bu erda biz bugun to'xtab qolamiz: davom etish!Suhbat savollari va javoblarini tahlil qilish.  2-6 qism
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION