- 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.
- DOU bo'yicha savollar ukrain tilida berilgan, ammo menda hamma narsa rus tilida bo'ladi.
- 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.
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.
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:
-
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.
-
Blokni bajarish ketma-ketligi:
- blokni sinab ko'ring .
- Nihoyat, yashirin .
- Oldingi bosqichlarda istisnolarni ushlaydigan catch bloki .
- Nihoyat aniq .
Qoida tariqasida, ro'yxatda pastroq ko'rinadigan istisnolar yuqoriroq ko'rinadiganlarni to'xtatadi.
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
- 01100011 >> 4 = 00000110
- 01100011 << 3 = 00011000
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?
- 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.
- 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.
- O'zgarmas ob'ektlar dastur ishlayotgan paytda hech qachon o'zgartirilmasligi kerak bo'lgan o'zgarmas (doimiy) ma'lumotlarni saqlash uchun juda yaxshi.
- "Atomlik muvaffaqiyatsizlikka uchragan" - agar o'zgarmas ob'ekt istisno qilsa, u hali ham istalmagan (buzilgan) holatda qolmaydi.
- Ushbu sinflarni sinovdan o'tkazish oson.
- Nusxa konstruktori va klonni amalga oshirish kabi qo'shimcha mexanizmlar kerak emas.
OOP haqida savollar
16. Umuman olganda va protsessual dasturlash bilan solishtirganda OOP ning afzalliklari nimada?
Shunday qilib, OOP afzalliklari:- 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.
- OOP yordamida yozilgan ilovalarni o'zgartirish ancha oson (dizayn tushunchalariga rioya qilingan holda).
- 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).
- Axborot inkapsulyatsiyasi foydalanuvchidan eng muhim ma'lumotlarni himoya qiladi.
- 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.
- Meros va polimorfizm, shuningdek, mavjud kodni qayta ishlatish va kengaytirish imkonini beradi (shunga o'xshash funksiyalarni takrorlash o'rniga).
- Protsessual yondashuvdan ko'ra, dasturning kengaytirilishi osonroq.
- OOP yondashuvi amalga oshirish tafsilotlaridan mavhum olish imkonini beradi.
17. OOPda qanday kamchiliklar borligini ayting
Afsuski, ular ham mavjud:- OOP biror narsa yozishdan oldin o'zlashtirilishi kerak bo'lgan juda ko'p nazariy bilimlarni talab qiladi.
- OOP g'oyalarini tushunish va amalda qo'llash unchalik oson emas (siz bir oz faylasuf bo'lishingiz kerak).
- OOP dan foydalanilganda, tizimning yanada murakkab tashkil etilishi tufayli dasturiy ta'minotning ishlashi biroz kamayadi.
- OOP yondashuvi ko'proq xotirani talab qiladi, chunki hamma narsa oddiy o'zgaruvchilarga qaraganda ko'proq xotirani egallaydigan sinflar, interfeyslar, usullardan iborat.
- 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.
- 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.
GO TO FULL VERSION