Kokie yra 10 dažniausiai užduodamų klausimų Java interviu metu? (Ir kaip į juos atsakyti)
Java yra plačiai naudojama programavimo kalba, todėl jos unikalios savybės yra gerai žinomos personalo atrankos specialistams. Dėl to dažnai interviu pradžioje užduodami klausimai apie įvairius Java aspektus. Sudarėme dešimties dažniausiai užduodamų klausimų Java programuotojams sąrašą ir pridėjome atsakymus į kiekvieną iš jų.
Šiame straipsnyje pateikiama apžvalga galimų klausimų apie Java, kurie gali būti užduoti per darbo pokalbį su programuotoju. Priklausomai nuo pareigoms reikalingos profesinės patirties lygio, kai kurie klausimai gali būti išsamesni. Kartais pokalbiuose dėl vyresniųjų pareigų pateikiami scenarijai, kuriuose yra sąmoningai padarytų klaidų arba kurie yra akivaizdžiai klaidinantys, siekiant patikrinti kandidato technines žinias. Todėl svarbu gerai pasiruošti pokalbiui.
1 klausimas: Kokios yra Java ypatybės ir kokius privalumus siūlo ši programavimo kalba?
Java yra galinga ir plačiai naudojama kalba, todėl ji tapo populiari programavimo kalba, kurią verta išmokti. Java išsiskiria keletu unikalių savybių, ypač jos naudojimo būdu. Pagrindinis Java privalumas yra tai, kad jos kodas gali veikti įvairiose operacinėse sistemose be jokių pakeitimų.
Šį lankstumą užtikrina Java Virtual Machine, kuri garantuoja, kad programų kūrimas ir taikymas nėra ribojami konkrečia platforma, todėl kodą galima naudoti keliose platformose. Tai užtikrina, kad programos veiktų lanksčiai ir efektyviai įvairiuose įrenginiuose.
Kitas Java privalumas – automatinis atminties valdymas, kurį užtikrina Garbage Collector, supaprastinantis atminties išteklių valdymą ir sumažinantis galimų klaidų skaičių. Be to, Java turi daugybę išsamių standartinių bibliotekų su daugybe parengtų funkcijų, kurios pagreitina programų kūrimą.
Kaip objektų orientuota programavimo kalba, Java, kaip ir kitos šios kategorijos kalbos, išsiskiria tuo, kad programinės įrangos komponentus galima lengviau modeliuoti, o kodą galima pakartotinai naudoti.
2 klausimas: Kaip Java tvarko daugkartinį paveldėjimą?
Iš esmės Java nepalaiko daugkartinio klasių paveldėjimo. Tai reiškia, kad klasės gali paveldėti tik iš vienos klasės. Daugkartinis paveldėjimas gali turėti neigiamos įtakos objektų orientuoto programavimo kodui, gerai žinoma problema yra vadinamoji deimanto problema.
Nors Java klasėse negalima naudoti daugkartinio paveldėjimo, šią problemą galima išspręsti naudojant sąsajas. Kadangi Java klasė gali įgyvendinti kelias sąsajas, ji gali paveldėti funkcijas iš skirtingų šaltinių. Šis priskyrimas užtikrina, kad funkcijos būtų aiškiai apibrėžtos ir nekiltų problemų dėl daugkartinio paveldėjimo.
3 klausimas: Koks yra skirtumas tarp abstrakčios klasės ir sąsajos Java kalboje?
Java kalboje tiek abstrakčiosios klasės, tiek sąsajos naudojamos abstrakčių tipų apibrėžimui, kuriuos vėliau gali įgyvendinti kitos klasės. Yra reikšmingų skirtumų, ypač paveldėjimo taisyklių atžvilgiu:
- Paveldėjimas: Java kalboje klasė gali paveldėti tik iš abstrakčios klasės. Abstrakčios klasės savo ruožtu negali atlikti daugkartinio paveldėjimo, o tai reiškia, kad tam turi būti įgyvendinti keli sąsajų modeliai.
- Klasės santykis: Kadangi klasė gali paveldėti tik iš abstrakčios klasės, abstrakčių klasių naudojimas yra tinkamas „yra“ santykiams, o sąsajos yra labiau tinkamos „gali“ santykiams.
- Konkretumas: abstrakčioji klasė gali turėti abstrakčius (neįgyvendintus) ir konkrečius (įgyvendintus) metodus, taip pat gali turėti instancines kintamuosius. Tuo tarpu sąsajos gali apibrėžti tik abstrakčius metodus ir konstantas. Visi sąsajos metodai yra numanomai abstrakčiai ir vieši.
- Funkcionalumas: abstrakčios klasės remiasi bendru įgyvendinimu (ir kelių sąsajų įgyvendinimu). Sąsajos, kita vertus, yra skirtos deklaruoti konkrečias funkcijas, kurios vėliau įgyvendinamos skirtingose klasėse.
4 klausimas: Koks skirtumas tarp instancinių kintamųjų ir vietinių kintamųjų?
Pagrindinis skirtumas tarp instancinių kintamųjų ir vietinių kintamųjų yra jų taikymo sritis ir gyvavimo trukmė. Instanciniai kintamieji yra daugiausia objekto savybės klasėje. Vietiniai kintamieji yra laikinai sukurti reikšmės tam tikroje taikymo srityje.
Instancinės kintamieji
- Instancinės kintamosios yra kintamosios, deklaruojamos klasės lygiu, už metodų, konstruktorių ir blokų ribų.
- Kiekvienas klasės objektas turi savo kopiją instancinio kintamojo.
- Prie instancinių kintamųjų prieinama per klasės instancą. Vertės gali skirtis kiekvienam klasės objektui.
Vietinės kintamosios
- Vietinės kintamosios yra deklaruojamos metodo, konstruktoriaus arba bloko viduje. Jų galiojimas yra ribotas šia apibrėžta sritimi.
- Šios kintamosios turi būti aiškiai inicijuotos prieš naudojimą ir egzistuoja tik kodo bloko vykdymo metu.
- Jos nematomos už kodo bloko, kuriame buvo deklaruotos, ribų.
5 klausimas: Ką reiškia terminai JVM, JDK ir JRE ir kuo jie skiriasi vienas nuo kito?
Nors šie terminai gali atrodyti panašūs, kai yra sutrumpinti, jų pagrindinės užduotys ir taikymo sritis Java kalboje yra iš esmės skirtingos.
Java virtualioji mašina (JVM)
- Java Virtual Machine (JVM) yra virtuali mašina, kuri veikia kaip sąsaja tarp Java programos ir pagrindinės aparatinės įrangos arba operacinės sistemos, vykdydama Java baitkodą.
- JVM yra labai svarbi, nes, kaip vykdymo aplinka, ji gali vykdyti tą patį baitkodą skirtingose operacinėse sistemose, jei jis yra prieinamas atitinkamose platformose. Tai labai prisideda prie Java perkeliamumo.
- Šis perkeliamumas įmanomas dėl Java kompiliatoriaus, kuris verčia Java šaltinio kodą į baitkodą, kurį vėliau interpretuoja JVM.
Java kūrimo rinkinys (JDK)
- Java Development Kit (JDK) yra išsamus kūrimo paketas, kuriame yra įvairūs įrankiai, padedantys kurti Java programas. Jame yra įrankiai programų kūrimui, kompiliavimui ir derinimo klaidų taisymui.
- JDK sudėtyje yra Java kompiliatorius, Java virtualioji mašina (JVM), Java derinimo priemonė ir Java profiliavimo priemonė.
- Be šių įrankių, JDK apima daugybę iš anksto apibrėžtų klasių ir sąsajų dažnai naudojamoms funkcijoms, kurios yra prieinamos Java API arba Java klasės bibliotekoje.
Java vykdymo aplinka (JRE)
- Java Runtime Environment (JRE) suteikia supaprastintą aplinką, kurioje galima vykdyti Java programas.
- JRE sudaro Java Virtual Machine (JVM) ir Java API, kurie yra būtini programų paleidimui ir veikimui.
- Kūrimo įrankiai, tokie kaip Java kompiliatorius, nėra įtraukti į JRE, todėl paprastai juos įdiegia galutiniai vartotojai.
6 klausimas: Kas yra Java kolekcijų klasės ir kam jos naudojamos?
Java kalboje terminas „kolekcijos klasė“ paprastai reiškia klases, kurios yra Java kolekcijų sistemos dalis. Ši sistema suteikia standartizuotą būdą saugoti, tvarkyti ir manipuliuoti objektų grupėmis. Ji susideda iš įvairių sąsajų ir konkrečių duomenų struktūrų įgyvendinimų.
Kolekcijų klasės naudojamos įvairiais tikslais:
- Duomenų organizavimas: jie leidžia efektyviai organizuoti duomenis sąrašuose, rinkiniuose ar žemėlapiuose.
- Duomenų tvarkymas: jie suteikia metodus elementų pridėjimui, pašalinimui ir paieškai.
- Generinis programavimas: generinių tipų naudojimas kolekcijų klasėse leidžia kurti pakartotinai naudojamą ir tipų saugų kodą.
- Algoritmai: sistemoje taip pat yra algoritmai, kurie veikia duomenų struktūras (pvz., rūšiavimas ar paieška).
7 klausimas: Koks yra skirtumas tarp == ir equals() Java kalboje?
== ir equals() yra du skirtingi mechanizmai arba operatoriai, naudojami objektams palyginti:
- Operatorius
==lygina objektų nuorodas, o ne jų turinio vertes. Naudojant su objektais,==tikrina, ar abi nuorodos nurodo tą patį objektą (t. y. ar jos nurodo tą pačią atminties sritį). Tuo tarpu su primityviais duomenų tipais (pvz., char, int arba byte) operatorius lygina vertes. - Naudojant
equals(), galite palyginti objektų turinį, kad nustatytumėte, ar objektai yra vienodi, net jei jie yra skirtingose atminties vietose. Pagal numatytuosius nustatymusequals()veikia kaip==, perimdamas nuorodų palyginimo logiką iš Object klasės. Tačiau paprastai jį reikia perrašyti vartotojo apibrėžtose klasėse, kad būtų galima atlikti prasmingą turinio palyginimą.
8 klausimas: Kam naudojami konstruktoriai?
Konstruktoriai yra specialūs metodai klasėje, naudojami objektams instancijuoti ir inicijuoti. Keturios pagrindinės konstruktorių užduotys yra:
- Objekto inicijavimas: Konstruktoriai pirmiausia naudojami tam, kad objektas būtų įvestas į galiojančią ir inicijuotą būseną iškart po jo sukūrimo. Inicijuojami atributai ir paskirstomi reikalingi ištekliai.
- Parametrų perdavimas: konstruktoriai gali priimti parametrus, kad sukurtų skirtingas klasės instancas su skirtingomis savybėmis, leidžiant kurti objektus su konkrečiomis atributų vertėmis.
- Kodo valdymas: konstruktorių naudojimas pagerina kodo skaitomumą, nes objekto inicijavimas gali būti atliekamas tiesiogiai konstruktoriuje. Tai taip pat supaprastina kodo priežiūrą, nes inicijavimo logikos pakeitimus reikia atlikti tik vienoje vietoje.
- Paveldėjimas: Konstruktoriai atlieka svarbų vaidmenį paveldėjimo hierarchijoje. Išvestinė klasė paprastai iššaukia bazinės klasės konstruktorių, kad jis atliktų jos inicijavimą prieš atliekant savo inicijavimą.
9 klausimas: Java naudoja keletą skirtingų styginių tipų. Kokie jie yra ir kuo skiriasi vienas nuo kito?
Java kalboje stygos tipas yra atstovaujamas klasės java.lang.String. Ši klasė yra pagrindinis būdas atstovauti simbolių stygas. Ji taip pat suteikia įvairias stygos manipuliavimo ir apdorojimo galimybes:
- StringBuilder: Ši klasė naudojama efektyviai kurti modifikuojamus styginius Java kalboje. Skirtingai nei nekintama String klasė, ji leidžia daryti pakeitimus nesukuriant naujo egzemplioriaus.
- String literal: Tai reiškia simbolių eilutes, kurios yra rašomos dvigubose kabutėse, pavyzdžiui,
"Nice to see you!". Identiški string literals dalijasi vienu egzemplioriumi string pool, kad būtų optimizuotas atminties naudojimas. - String objektai: jie gali būti sukurti kaip naujas egzempliorius naudojant
newraktinį žodį, pavyzdžiui, kaipnew string ("Nice to see you!"). Egzempliorius sukurtas nepriklausomai nuo turinio. - StringBuffer: kaip ir StringBuilder, ši klasė sukuria modifikuojamas eilutes. Pagrindinis skirtumas yra tas, kad StringBuffer yra saugus sriegiams, o StringBuilder – ne.
10 klausimas: Kuo skiriasi throw nuo throws?
Java kalboje raktažodžiai throw ir throws naudojami išimtims tvarkyti. Nepaisant šio panašumo, jie tarnauja skirtingiems tikslams ir taikomi skirtingose aplinkybėse:
thrownaudojamas išimčiai mesti rankiniu būdu. Kūrėjai gali tai naudoti išimčiai sugeneruoti ir perduoti ją iškvietusiai programai.- Priešingai,
throwsreiškia, kad metodas gali sukelti konkrečią išimtį. Jis naudojamas metodo deklaracijoje, kad būtų nurodyta, kokios išimtys negali būti tvarkomos metodu, bet perduodamos skambinančiajam tvarkyti, leidžiant kodui reaguoti atitinkamai.