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

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

Guruhda nashr etilgan
Salom! JavaRushda turli odamlar to'planishdi. Ba'zilarimiz Java dasturchisi bo'lishni istaymiz, rivojlanishga ko'p vaqt va kuch sarflaymiz, boshqalari esa allaqachon Java dasturchisi. Bir yoki boshqa holatda siz testlarga - texnik suhbatlarga tayyor bo'lishingiz kerak. Bu sinov oson emas, axloqiy tayyorgarlikdan tashqari, texnik tayyorgarlik ham kerak. Yaqinda men dou-da Java dasturchisi intervyu savollariningIntervyu savollari va javoblarini tahlil qilish.  1-1-qism katta ro'yxatiga duch keldim . Bu savollar turli darajalarga bo'lingan - Kichik, O'rta va Katta. Xavotir olmang: hamma savollar oson emas, lekin yulduzchalilarga kamdan-kam so'raladi. Savollar yaxshi, lekin men ularning aksariyatiga javob berishga harakat qilmoqchiman. Men bitta maqola doirasiga kirmasligim aniq, chunki u erda juda ko'p savollar bor. Shuning uchun, bu kabi savollarga javob beradigan to'liq maqolalar turkumi bo'ladi. Men darhol bir nechta fikrlarni ta'kidlayman:
  1. Ular uchun eng yaxshi savollar va javoblar bilan ajoyib maqola mavjud . Ba'zi savollar yuqorida keltirilgan ro'yxat bilan bir-biriga mos keladi (250+), shuning uchun ma'lumotni yana takrorlamaslik uchun bu savollar o'tkazib yuboriladi.

  2. Savollar ukrain tilida berilgan, biroq JavaRush ishtirokchilarining aksariyati rus tilida so‘zlashuvchi (va ko‘proq men ham) bo‘lgani uchun javoblar rus tilida bo‘ladi.

  3. Javoblar qisqa bo'ladi, chunki agar siz batafsil yozsangiz, ba'zi savollarga javoblar alohida maqolani talab qilishi mumkin. Va intervyu paytida bunday batafsil va hajmli javoblar kerak emas, chunki suhbatdoshingiz sizdan kerakli mavzular bo'yicha intervyu olish uchun bor-yo'g'i bir soati bor (va siz eslayotganingizdek, bu etarli). Chuqurroq qazishni yaxshi ko'radiganlar uchun men havolalarni qoldiraman.

Shunday ekan, boshlaylik.

Yoshlar darajasidagi savollar va javoblar

Intervyu savollari va javoblarini tahlil qilish.  1-2 qism

Umumiy masalalar

1. Qanday dizayn naqshlarini bilasiz? Ishingizda foydalangan ikkita shablon haqida bizga xabar bering.

Shablonlarning xilma-xilligi juda katta: siz ular bilan ushbu va ushbu maqoladan tanishishni boshlashingiz mumkin . Xo'sh, ular bilan batafsil tanishishni istaganlar uchun "Birinchi bosh." kitobini o'qishni maslahat beraman. Dizayn naqshlari" . Uning yordami bilan siz eng asosiy dizayn naqshlarini batafsil va oson o'rganishingiz mumkin. Intervyuda misol sifatida foydalanishingiz mumkin bo'lgan dizayn naqshlari haqida gap ketganda, ba'zilari esga tushadi:
  • Builder - tez-tez ishlatiladigan shablon, klassik ob'ekt yaratishga muqobil;
  • Polimorfizmni ifodalovchi strategiya namunasi . Ya'ni, bizda bitta interfeys bor, lekin dasturning xatti-harakati ushbu interfeysning qaysi aniq amalga oshirilishi funksionallikka o'tkazilganiga qarab o'zgaradi (hozir strategiya java ilovalarida deyarli hamma joyda qo'llaniladi).
Agar bu siz uchun etarli bo'lmasa, Bahorga e'tibor bering (agar siz u bilan allaqachon tanish bo'lsangiz), chunki bu ramkalarning butun platformasi bo'lib, ular o'z navbatida yuqoriga va pastga naqshlar bilan qoplangan. Men nima haqida gapirayotganimga bir nechta misollar:
  • Zavod - ApplicationContext-da (yoki BeanFactory-da);
  • Singleton - barcha loviyalar sukut bo'yicha singldir;
  • Proksi - bahorda hamma narsa bu naqshni u yoki bu tarzda ishlatadi, masalan, AOP;
  • Mas'uliyat zanjiri - Spring Security ishlaydigan kontseptsiyaga asoslangan naqsh;
  • Shablon - Spring Jdbc da qo'llaniladi.

Java yadrosi

Intervyu savollari va javoblarini tahlil qilish.  1-3 qism

2. Java-da qanday ma'lumotlar turlari mavjud?

Java-da ibtidoiy ma'lumotlar turlari mavjud:
  • bayt — -128 dan 127 gacha bo'lgan butun sonlar, og'irligi 1 bayt;
  • qisqa — -32768 dan 32767 gacha bo'lgan diapazondagi butun sonlar, og'irligi 2 bayt;
  • int — butun sonlar -2147483648 dan 2147483647 gacha, vazni 4 bayt;
  • long — 9223372036854775808 dan 9223372036854775807 oralig'idagi butun sonlar, og'irligi 8 bayt;
  • float — suzuvchi nuqtali raqamlar -3,4E+38 dan 3,4E+38 oralig'ida, og'irligi 4 bayt;
  • double — suzuvchi nuqtali raqamlar -1,7E+308 dan 1,7E+308 oralig'ida, og'irligi 8 bayt;
  • char — UTF-16 da bitta belgilar, ogʻirligi 2 bayt;
  • mantiqiy qiymatlar true/false , og'irligi 1 bayt.
Uyumdagi ob'ektlarga ishora qiluvchi ma'lumotlar turlariga murojaat qiling .

3. Ob'ekt ibtidoiy ma'lumotlar turlaridan nimasi bilan farq qiladi?

Birinchi farq: band bo'lgan xotira miqdori: ibtidoiylar juda kam joy egallaydi, chunki ular faqat o'z qiymatini o'z ichiga oladi, ob'ektlar esa juda, juda ko'p turli xil qiymatlarni o'z ichiga olishi mumkin: ham primitivlar, ham boshqa ob'ektlarga havolalar. Ikkinchi farq: Java - ob'ektga yo'naltirilgan til, shuning uchun undagi hamma narsa ob'ektlar orasidagi o'zaro ta'sir orqali ishlaydi va primitivlar juda yaxshi mos kelmaydi (aslida Java 100% ob'ektga yo'naltirilgan til emas). Uchinchidan, ikkinchisidan: Java ob'ektlar orasidagi o'zaro ta'sirga qaratilganligi sababli, bu ob'ektlar ularni boshqarish uchun juda ko'p turli mexanizmlarga ega. Masalan, konstruktorlar, usullar, istisnolar (asosan ob'ektlarda ishlaydi) va boshqalar. Aslida, ibtidoiylar ushbu ob'ektga yo'naltirilgan muhitda qandaydir tarzda ishtirok etishi (ishlashi) uchun o'ramlar ibtidoiy turlar uchun ixtiro qilingan ( Integer , Character , Double , Boolean ...)

4. Parametrlarni mos yozuvlar va qiymat bo'yicha o'tkazish o'rtasidagi farq nima?

Primitiv maydonlar o'z qiymatini saqlaydi: masalan, agar biz int i = 9 ni o'rnatsak; i maydoni 9 qiymatini saqlaydi . Bizda ob'ektga havola bo'lsa, bu bizda ob'ektga havola yoki boshqacha aytganda, xotirada ob'ekt manzili qiymatiga ega bo'lgan maydon mavjudligini bildiradi.
Cat cat = new Cat();
Ma'lum bo'lishicha, ob'ektga havola qilingan maydonlar qiymatlarni , xotira manzili qiymatlarini ham saqlaydi. Ya'ni, cat yangi Cat() obyektining manzil qiymatini xotirada saqlaydi. Parametrni metodga o'tkazsak, uning qiymati ko'chiriladi. Primitiv bo'lsa, ibtidoiyning qiymati ko'chiriladi. Shunga ko'ra, usul nusxa bilan ishlaydi, o'zgartirish asl nusxaga ta'sir qilmaydi. Malumot turi bo'lsa, xotira manzilining qiymati ko'chiriladi, mos ravishda manzil u ko'rsatadigan ob'ekt bilan bir xil bo'ladi. Va agar biz ushbu yangi havola yordamida ob'ektni o'zgartirsak, u eskisiga o'zgartiriladi (oxir-oqibat, ikkalasi ham bitta ob'ektga ishora qiladi).

5. JVM, JDK, JRE nima?

JVM - Java virtual mashinasi kompilyator tomonidan oldindan yaratilgan Java baytkodi bilan ishlaydigan virtual mashinadir. JRE - Java Runtime Environment - bu aslida Java dasturlarini ishga tushirish uchun muhit bo'lib, unda JVM , standart kutubxonalar va Java dasturlash tilida yozilgan appletlar va ilovalarni ishga tushirish uchun boshqa komponentlar mavjud. Boshqacha qilib aytganda , JRE kompilyatsiya qilingan Java dasturini ishga tushirish uchun zarur bo'lgan barcha narsalar to'plamidir, lekin ilovalarni ishlab chiqish uchun kompilyatorlar yoki tuzatuvchilar kabi asboblar va yordamchi dasturlarni o'z ichiga olmaydi. JDK - Java Development Kit - kengaytirilgan JRE to'plami , ya'ni nafaqat ishga tushirish uchun, balki Java dasturlarini ishlab chiqish uchun ham muhit. JDK JRE-dagi hamma narsani, shuningdek, Java-da ilovalar yaratish uchun zarur bo'lgan turli xil qo'shimcha vositalar - kompilyatorlar va tuzatuvchilarni o'z ichiga oladi (shuningdek, java hujjatlari ham mavjud).Suhbat savollari va javoblarini tahlil qilish.  1-4 qism

6. Nima uchun JVM dan foydalaniladi?

Yuqorida aytib o'tilganidek, Java Virtual Machine - kompilyator tomonidan oldindan yaratilgan Java baytekodida ishlaydigan virtual mashina. Ya'ni, JVM Java manba kodini tushunmaydi. Shuning uchun, birinchi navbatda, .java fayllari kompilyatsiya qilinadi , ular kompilyatsiyadan keyin allaqachon .class kengaytmasiga ega va JVM tushunadigan bir xil bayt kodi shaklida taqdim etiladi. Har bir OT o'z JVM-ga ega, shuning uchun bayt-kod fayllarini olgandan so'ng, JVM uni amalga oshiradi va uni sodir bo'ladigan OTga moslashtiradi. Aslida, turli xil JVMlar tufayli, JDK (yoki JRE) versiyalari turli xil operatsion tizimlar uchun farq qiladi (ularning har biri o'z JVM-ni talab qiladi). Keling, boshqa dasturlash tillarida ishlab chiqish qanday ishlashini eslaylik. Siz dasturni ishlab chiqasiz, keyin uning kodi ma'lum bir OT uchun mashina kodiga kompilyatsiya qilinadi va keyin uni ishga tushirishingiz mumkin. Boshqacha qilib aytganda, har bir tizim uchun dasturning turli xil versiyalarini yozishingiz kerak. Holbuki, Java-da ikkita kodni qayta ishlash (JVM kod baytlarini kompilyatsiya qilish va qayta ishlash) tufayli siz o'zaro platforma afzalliklaridan bahramand bo'lishingiz mumkin. Biz bir marta kodni yaratdik, uni bayt-kodga qayta kompilyatsiya qildik, uni istalgan operatsion tizimga o'tkazdik va mahalliy JVM kodni boshqaradi. Bu Java-ning afsonaviy xususiyati - bir marta yozing, istalgan joyda ishga tushiring . Bu haqda ko'proq ma'lumotni " Java dasturlarini kompilyatsiya qilish va ishga tushirishIntervyu savollari va javoblarini tahlil qilish.  1-5 qism " maqolasida o'qing .

7. Bayt-kod nima?

Yuqorida aytganimdek, kompilyator Java kodini oraliq baytekodga ( .java kengaytmali fayllarni .class kengaytmali fayllarga) aylantiradi. Baytkod ko'p jihatdan mashina kodiga o'xshaydi, faqat u haqiqiy protsessordan emas, balki virtualdan ko'rsatmalar to'plamidan foydalanadi. Bundan tashqari, u JIT kompilyatoridan foydalanishga qaratilgan bo'limlarni o'z ichiga olishi mumkin, bu dastur ishlayotgan haqiqiy protsessor uchun buyruqlar bajarilishini optimallashtiradi. JIT kompilyatsiyasi, shuningdek, tez kompilyatsiya deb ham ataladi, bu dastur ishlayotgan vaqtda bayt kodini mashinaga yoki boshqa formatga kompilyatsiya qilish orqali bayt kodidan foydalangan holda dastur samaradorligini oshiradigan texnologiya. Siz taxmin qilganingizdek, JVM bayt kodini ishlatganda JIT kompilyatoridan foydalanadi. Keling, bayt-kod misolini ko'rib chiqaylik: Intervyu savollari va javoblarini tahlil qilish.  1-6 qismunchalik o'qilmaydi, shunday emasmi? Xo'sh, bu biz uchun emas, balki JVM uchun ko'rsatma. Bu masalani yaxshiroq tushunishga yordam beradigan maqola .

8. JavaBean ning xususiyatlari qanday?

JavaBeans - bu ma'lum qoidalarga ega Java sinfidir. JavaBean yozish uchun ba'zi qoidalar :
  1. Sinfda umumiy foydalanish modifikatoriga ega bo'sh (parametrsiz) umumiy foydalanish konstruktori bo'lishi kerak . Ushbu konstruktor ushbu sinf ob'ektini keraksiz muammolarsiz yaratishga imkon beradi (parametrlar bilan keraksiz shov-shuv bo'lmasligi uchun).

  2. Sinfning ichki maydonlariga standart bo'lishi kerak bo'lgan get va set usullari orqali kirish mumkin. Misol uchun, agar maydon nomi bo'lsa , getName va setName va boshqalar. Bu, o'z navbatida, turli xil vositalar (ramkalar) loviya tarkibini avtomatik ravishda aniqlash va asoratlarsiz yangilash imkonini beradi.

  3. Sinf teng () hashCode() va toString() usullarining bekor qilingan versiyalarini o'z ichiga olishi kerak .

  4. Sinf seriyali bo'lishi kerak, ya'ni u marker interfeysiga ega bo'lishi kerak - Serializable yoki Externalizable interfeysini amalga oshirish . Bu fasolning holati ishonchli tarzda saqlanishi, saqlanishi va tiklanishi uchun zarur.

Intervyu savollari va javoblarini tahlil qilish.  1-7 qismJavaBeans turlari haqida ushbu materialda o'qishingiz mumkin .

9. OutOfMemoryError nima?

OutOfMemoryError - bu Java Virtual Machine (JVM) ning ishlashi bilan bog'liq ish vaqtining muhim xatolaridan biridir. JVM ob'ektni ajrata olmasa chaqiriladi, chunki u uchun etarli xotira mavjud emas va axlat yig'uvchi ko'proq xotira ajrata olmaydi. OutOfMemoryError ning ayrim turlari :
  • OutOfMemoryError: Java yig'indisi maydoni - xotira yetarli emasligi sababli ob'ektni Java uyasiga ajratib bo'lmaydi. Xato xotiraning oqishi yoki standart yig'ish hajmi joriy dastur uchun etarlicha katta emasligi sababli yuzaga kelishi mumkin.

  • OutOfMemoryError: GC Overhead limiti oshib ketdi – maʼlumotlar miqdori yigʻmaga zoʻrgʻa sigʻishi sababli axlat yigʻuvchi har doim ishlaydi, Java dasturi esa juda sekin ishlaydi va natijada axlat yigʻuvchining qoʻshimcha xarajatlari chegarasi oshib ketgan va dastur ushbu xato bilan ishlamay qoladi.

  • OutOfMemoryError: soʻralgan massiv oʻlchami VM chegarasidan oshib ketdi – ilova yigʻma oʻlchamidan kattaroq massiv uchun xotira ajratishga uringanligini koʻrsatadi, bu yana sukut boʻyicha xotira ajratilmaganligi bilan bogʻliq boʻlishi mumkin.

  • OutOfMemoryError: Metospace - to'pda metama'lumotlar uchun ajratilgan joy tugadi (metadata - bu sinflar va usullar uchun ko'rsatmalar).

  • OutOfMemoryError: sababga ko'ra o'lcham baytlarini so'rang. Swap maydoni yo'q - xotirani yig'ishdan ajratishga urinayotganda ba'zi bir xatolik yuz berdi va natijada yig'ma xotirada etishmayotgan edi.

10. Stek izi nima? Uni qanday olish mumkin?

Stack Trace - bu dasturda shu nuqtaga qadar chaqirilgan sinflar va usullarning ro'yxati. Siz ilovaning ma'lum bir nuqtasida stek iziga qo'ng'iroq qilishingiz mumkin:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
Shunday qilib, biz LIFO tartibida joylashtirilgan iz elementlari majmuasini olamiz - Oxirgi kiruvchi birinchi chiqadi . Intervyu savollari va javoblarini tahlil qilish.  1-8 qismJava-da, qoida tariqasida, stek izi haqida gapirganda, ular xato (yoki istisno) yuzaga kelganda konsolda ko'rsatiladigan stek izini anglatadi. Quyidagi kabi istisnolarning stek izini olishingiz mumkin:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
Xo'sh, agar biz konsolda istisno stek izini chiqarish haqida gapiradigan bo'lsak:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
Bundan tashqari, agar bizda xatolik, tekshirilmagan istisno yoki tekshirilgan istisno mavjud bo'lsa, biz uni qayta ishlamaymiz, lekin faqat yo'naltiramiz, keyin dastur ishlamay qolganda biz avtomatik ravishda konsolda istisnolar stekini olamiz. Konsoldagi stek izi istisnosining kichik misoli: Stack Trace haqida ko'proq ma'lumotni bu yerdaIntervyu savollari va javoblarini tahlil qilish.  1-9 qism o'qishingiz mumkin . Bugun biz ushbu masalaga e'tibor qaratamiz...Intervyu savollari va javoblarini tahlil qilish.  1-10-qism
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION