Java yra plačiai naudojama prog­ra­ma­vi­mo kalba, todėl jos unikalios savybės yra gerai žinomos personalo atrankos spe­cia­lis­tams. Dėl to dažnai interviu pradžioje užduodami klausimai apie įvairius Java aspektus. Sudarėme dešimties daž­niau­siai užduodamų klausimų Java prog­ra­muo­to­jams sąrašą ir pridėjome atsakymus į kiekvieną iš jų.

Šiame straips­ny­je pa­tei­kia­ma apžvalga galimų klausimų apie Java, kurie gali būti užduoti per darbo pokalbį su prog­ra­muo­to­ju. Pri­klau­so­mai nuo pareigoms rei­ka­lin­gos pro­fe­si­nės patirties lygio, kai kurie klausimai gali būti išsamesni. Kartais po­kal­biuo­se dėl vy­res­nių­jų pareigų pa­tei­kia­mi sce­na­ri­jai, kuriuose yra są­mo­nin­gai padarytų klaidų arba kurie yra aki­vaiz­džiai klai­di­nan­tys, siekiant pa­tik­rin­ti kandidato technines žinias. Todėl svarbu gerai pa­si­ruoš­ti pokalbiui.

1 klausimas: Kokios yra Java ypatybės ir kokius pri­va­lu­mus siūlo ši prog­ra­ma­vi­mo kalba?

Java yra galinga ir plačiai naudojama kalba, todėl ji tapo populiari prog­ra­ma­vi­mo kalba, kurią verta išmokti. Java iš­si­ski­ria keletu unikalių savybių, ypač jos naudojimo būdu. Pag­rin­di­nis Java pri­va­lu­mas yra tai, kad jos kodas gali veikti įvairiose ope­ra­ci­nė­se sistemose be jokių pakeitimų.

Šį lankstumą užtikrina Java Virtual Machine, kuri ga­ran­tuo­ja, kad programų kūrimas ir taikymas nėra ribojami konkrečia platforma, todėl kodą galima naudoti keliose plat­for­mo­se. Tai užtikrina, kad programos veiktų lanksčiai ir efek­ty­viai įvai­riuo­se įren­gi­niuo­se.

Kitas Java pri­va­lu­mas – au­to­ma­ti­nis atminties valdymas, kurį užtikrina Garbage Collector, su­pa­pras­ti­nan­tis atminties išteklių valdymą ir su­ma­ži­nan­tis galimų klaidų skaičių. Be to, Java turi daugybę išsamių stan­dar­ti­nių bi­b­lio­te­kų su daugybe parengtų funkcijų, kurios pa­grei­ti­na programų kūrimą.

Kaip objektų ori­en­tuo­ta prog­ra­ma­vi­mo kalba, Java, kaip ir kitos šios ka­te­go­ri­jos kalbos, iš­si­ski­ria tuo, kad prog­ra­mi­nės įrangos kom­po­nen­tus galima lengviau mo­de­liuo­ti, o kodą galima pa­kar­to­ti­nai naudoti.

2 klausimas: Kaip Java tvarko daug­kar­ti­nį pa­vel­dė­ji­mą?

Iš esmės Java nepalaiko daug­kar­ti­nio klasių pa­vel­dė­ji­mo. Tai reiškia, kad klasės gali paveldėti tik iš vienos klasės. Daug­kar­ti­nis pa­vel­dė­ji­mas gali turėti neigiamos įtakos objektų ori­en­tuo­to prog­ra­ma­vi­mo kodui, gerai žinoma problema yra va­di­na­mo­ji deimanto problema.

Nors Java klasėse negalima naudoti daug­kar­ti­nio pa­vel­dė­ji­mo, šią problemą galima išspręsti naudojant sąsajas. Kadangi Java klasė gali įgy­ven­din­ti kelias sąsajas, ji gali paveldėti funkcijas iš skirtingų šaltinių. Šis pri­sky­ri­mas užtikrina, kad funkcijos būtų aiškiai api­brėž­tos ir nekiltų problemų dėl daug­kar­ti­nio pa­vel­dė­ji­mo.

3 klausimas: Koks yra skirtumas tarp abst­rak­čios klasės ir sąsajos Java kalboje?

Java kalboje tiek abst­rak­čio­sios klasės, tiek sąsajos nau­do­ja­mos abst­rak­čių tipų api­brė­ži­mui, kuriuos vėliau gali įgy­ven­din­ti kitos klasės. Yra reikš­min­gų skirtumų, ypač pa­vel­dė­ji­mo taisyklių atžvilgiu:

  • Pa­vel­dė­ji­mas: Java kalboje klasė gali paveldėti tik iš abst­rak­čios klasės. Abst­rak­čios klasės savo ruožtu negali atlikti daug­kar­ti­nio pa­vel­dė­ji­mo, o tai reiškia, kad tam turi būti įgy­ven­din­ti keli sąsajų modeliai.
  • Klasės santykis: Kadangi klasė gali paveldėti tik iš abst­rak­čios klasės, abst­rak­čių klasių nau­do­ji­mas yra tinkamas „yra“ san­ty­kiams, o sąsajos yra labiau tinkamos „gali“ san­ty­kiams.
  • Konk­re­tu­mas: abst­rak­čio­ji klasė gali turėti abst­rak­čius (ne­įgy­ven­din­tus) ir konk­re­čius (įgy­ven­din­tus) metodus, taip pat gali turėti ins­tan­ci­nes kin­ta­muo­sius. Tuo tarpu sąsajos gali apibrėžti tik abst­rak­čius metodus ir kons­tan­tas. Visi sąsajos metodai yra numanomai abst­rak­čiai ir vieši.
  • Funk­cio­na­lu­mas: abst­rak­čios klasės remiasi bendru įgy­ven­di­ni­mu (ir kelių sąsajų įgy­ven­di­ni­mu). Sąsajos, kita vertus, yra skirtos dekla­ruo­ti konk­re­čias funkcijas, kurios vėliau įgy­ven­di­na­mos skir­tin­go­se klasėse.

4 klausimas: Koks skirtumas tarp ins­tan­ci­nių kintamųjų ir vietinių kintamųjų?

Pag­rin­di­nis skirtumas tarp ins­tan­ci­nių kintamųjų ir vietinių kintamųjų yra jų taikymo sritis ir gyvavimo trukmė. Ins­tan­ci­niai kin­ta­mie­ji yra dau­giau­sia objekto savybės klasėje. Vietiniai kin­ta­mie­ji yra laikinai sukurti reikšmės tam tikroje taikymo srityje.

Ins­tan­ci­nės kin­ta­mie­ji

  • Ins­tan­ci­nės kin­ta­mo­sios yra kin­ta­mo­sios, dekla­ruo­ja­mos klasės lygiu, už metodų, konst­ruk­to­rių ir blokų ribų.
  • Kiek­vie­nas klasės objektas turi savo kopiją ins­tan­ci­nio kintamojo.
  • Prie ins­tan­ci­nių kintamųjų prieinama per klasės instancą. Vertės gali skirtis kiek­vie­nam klasės objektui.

Vietinės kin­ta­mo­sios

  • Vietinės kin­ta­mo­sios yra dekla­ruo­ja­mos metodo, konst­ruk­to­riaus arba bloko viduje. Jų ga­lio­ji­mas yra ribotas šia apibrėžta sritimi.
  • Šios kin­ta­mo­sios turi būti aiškiai ini­ci­juo­tos prieš naudojimą ir eg­zis­tuo­ja tik kodo bloko vykdymo metu.
  • Jos nematomos už kodo bloko, kuriame buvo dekla­ruo­tos, 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 su­trum­pin­ti, jų pag­rin­di­nės užduotys ir taikymo sritis Java kalboje yra iš esmės skir­tin­gos.

Java vir­tu­a­lio­ji mašina (JVM)

  • Java Virtual Machine (JVM) yra virtuali mašina, kuri veikia kaip sąsaja tarp Java programos ir pag­rin­di­nės apa­ra­ti­nės įrangos arba ope­ra­ci­nės sistemos, vykdydama Java baitkodą.
  • JVM yra labai svarbi, nes, kaip vykdymo aplinka, ji gali vykdyti tą patį baitkodą skir­tin­go­se ope­ra­ci­nė­se sistemose, jei jis yra pri­ei­na­mas ati­tin­ka­mo­se plat­for­mo­se. Tai labai prisideda prie Java per­ke­lia­mu­mo.
  • Šis per­ke­lia­mu­mas įmanomas dėl Java kom­pi­lia­to­riaus, kuris verčia Java šaltinio kodą į baitkodą, kurį vėliau in­ter­pre­tuo­ja JVM.

Java kūrimo rinkinys (JDK)

  • Java De­velop­ment Kit (JDK) yra išsamus kūrimo paketas, kuriame yra įvairūs įrankiai, pa­de­dan­tys kurti Java programas. Jame yra įrankiai programų kūrimui, kom­pi­lia­vi­mui ir derinimo klaidų taisymui.
  • JDK sudėtyje yra Java kom­pi­lia­to­rius, Java vir­tu­a­lio­ji mašina (JVM), Java derinimo priemonė ir Java pro­fi­lia­vi­mo priemonė.
  • Be šių įrankių, JDK apima daugybę iš anksto apibrėžtų klasių ir sąsajų dažnai nau­do­ja­moms funk­ci­joms, kurios yra pri­ei­na­mos Java API arba Java klasės bi­b­lio­te­ko­je.

Java vykdymo aplinka (JRE)

  • Java Runtime En­vi­ron­ment (JRE) suteikia su­pa­pras­tin­tą aplinką, kurioje galima vykdyti Java programas.
  • JRE sudaro Java Virtual Machine (JVM) ir Java API, kurie yra būtini programų pa­lei­di­mui ir veikimui.
  • Kūrimo įrankiai, tokie kaip Java kom­pi­lia­to­rius, nėra įtraukti į JRE, todėl paprastai juos įdiegia ga­lu­ti­niai var­to­to­jai.

6 klausimas: Kas yra Java kolekcijų klasės ir kam jos nau­do­ja­mos?

Java kalboje terminas „ko­lek­ci­jos klasė“ paprastai reiškia klases, kurios yra Java kolekcijų sistemos dalis. Ši sistema suteikia stan­dar­ti­zuo­tą būdą saugoti, tvarkyti ir ma­ni­pu­liuo­ti objektų grupėmis. Ji susideda iš įvairių sąsajų ir konkrečių duomenų struktūrų įgy­ven­di­ni­mų.

Kolekcijų klasės nau­do­ja­mos įvairiais tikslais:

  • Duomenų or­ga­ni­za­vi­mas: jie leidžia efek­ty­viai or­ga­ni­zuo­ti duomenis sąrašuose, rin­ki­niuo­se ar že­mė­la­piuo­se.
  • Duomenų tvarkymas: jie suteikia metodus elementų pri­dė­ji­mui, pa­ša­li­ni­mui ir paieškai.
  • Generinis prog­ra­ma­vi­mas: generinių tipų nau­do­ji­mas kolekcijų klasėse leidžia kurti pa­kar­to­ti­nai naudojamą ir tipų saugų kodą.
  • Al­go­rit­mai: sistemoje taip pat yra al­go­rit­mai, kurie veikia duomenų struk­tū­ras (pvz., rū­šia­vi­mas ar paieška).

7 klausimas: Koks yra skirtumas tarp == ir equals() Java kalboje?

== ir equals() yra du skirtingi me­cha­niz­mai arba ope­ra­to­riai, naudojami objektams palyginti:

  • Ope­ra­to­rius == 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 pri­mi­ty­viais duomenų tipais (pvz., char, int arba byte) ope­ra­to­rius lygina vertes.
  • Naudojant equals(), galite palyginti objektų turinį, kad nu­sta­ty­tu­mė­te, ar objektai yra vienodi, net jei jie yra skir­tin­go­se atminties vietose. Pagal nu­ma­ty­tuo­sius nu­sta­ty­mus equals() veikia kaip ==, per­im­da­mas nuorodų pa­ly­gi­ni­mo logiką iš Object klasės. Tačiau paprastai jį reikia perrašyti vartotojo api­brėž­to­se klasėse, kad būtų galima atlikti prasmingą turinio pa­ly­gi­ni­mą.

8 klausimas: Kam naudojami konst­ruk­to­riai?

Konst­ruk­to­riai yra specialūs metodai klasėje, naudojami objektams ins­tan­ci­juo­ti ir ini­ci­juo­ti. Keturios pag­rin­di­nės konst­ruk­to­rių užduotys yra:

  • Objekto ini­ci­ja­vi­mas: Konst­ruk­to­riai pir­miau­sia naudojami tam, kad objektas būtų įvestas į ga­lio­jan­čią ir ini­ci­juo­tą būseną iškart po jo sukūrimo. Ini­ci­juo­ja­mi atributai ir pa­skirs­to­mi rei­ka­lin­gi ištekliai.
  • Parametrų per­da­vi­mas: konst­ruk­to­riai gali priimti pa­ra­met­rus, kad sukurtų skir­tin­gas klasės instancas su skir­tin­go­mis savybėmis, leidžiant kurti objektus su konk­re­čio­mis atributų vertėmis.
  • Kodo valdymas: konst­ruk­to­rių nau­do­ji­mas pagerina kodo skai­to­mu­mą, nes objekto ini­ci­ja­vi­mas gali būti at­lie­ka­mas tie­sio­giai konst­ruk­to­riu­je. Tai taip pat su­pa­pras­ti­na kodo priežiūrą, nes ini­ci­ja­vi­mo logikos pa­kei­ti­mus reikia atlikti tik vienoje vietoje.
  • Pa­vel­dė­ji­mas: Konst­ruk­to­riai atlieka svarbų vaidmenį pa­vel­dė­ji­mo hie­rar­chi­jo­je. Išvestinė klasė paprastai iššaukia bazinės klasės konst­ruk­to­rių, kad jis atliktų jos ini­ci­ja­vi­mą prieš atliekant savo ini­ci­ja­vi­mą.

9 klausimas: Java naudoja keletą skirtingų styginių tipų. Kokie jie yra ir kuo skiriasi vienas nuo kito?

Java kalboje stygos tipas yra at­sto­vau­ja­mas klasės java.lang.String. Ši klasė yra pag­rin­di­nis būdas at­sto­vau­ti simbolių stygas. Ji taip pat suteikia įvairias stygos ma­ni­pu­lia­vi­mo ir ap­do­ro­ji­mo galimybes:

  • String­Buil­der: Ši klasė naudojama efek­ty­viai kurti mo­di­fi­kuo­ja­mus styginius Java kalboje. Skir­tin­gai nei nekintama String klasė, ji leidžia daryti pa­kei­ti­mus ne­su­ku­riant naujo eg­zemp­lio­riaus.
  • String literal: Tai reiškia simbolių eilutes, kurios yra rašomos dvigubose kabutėse, pa­vyz­džiui, "Nice to see you!". Identiški string literals dalijasi vienu eg­zemp­lio­riu­mi string pool, kad būtų op­ti­mi­zuo­tas atminties nau­do­ji­mas.
  • String objektai: jie gali būti sukurti kaip naujas eg­zemp­lio­rius naudojant new raktinį žodį, pa­vyz­džiui, kaip new string ("Nice to see you!"). Eg­zemp­lio­rius sukurtas ne­pri­klau­so­mai nuo turinio.
  • String­Buf­fer: kaip ir String­Buil­der, ši klasė sukuria mo­di­fi­kuo­ja­mas eilutes. Pag­rin­di­nis skirtumas yra tas, kad String­Buf­fer yra saugus sriegiams, o String­Buil­der – ne.

10 klausimas: Kuo skiriasi throw nuo throws?

Java kalboje rak­ta­žo­džiai throw ir throws naudojami išimtims tvarkyti. Nepaisant šio panašumo, jie tarnauja skir­tin­giems tikslams ir taikomi skir­tin­go­se ap­lin­ky­bė­se:

  • throw nau­do­ja­mas išimčiai mesti rankiniu būdu. Kūrėjai gali tai naudoti išimčiai su­ge­ne­ruo­ti ir perduoti ją iš­kvie­tu­siai programai.
  • Prie­šin­gai, throws reiškia, kad metodas gali sukelti konkrečią išimtį. Jis nau­do­ja­mas metodo dekla­ra­ci­jo­je, kad būtų nurodyta, kokios išimtys negali būti tvarkomos metodu, bet per­duo­da­mos skam­bi­nan­čia­jam tvarkyti, leidžiant kodui reaguoti ati­tin­ka­mai.
Go to Main Menu