Kā plaši izmantota prog­ram­mē­ša­nas valoda, Java un tās unikālās funkcijas ir labi pa­zīs­ta­mas personāla atlases spe­ciā­lis­tiem. Tāpēc in­ter­vi­jas sākumā bieži tiek uzdoti jautājumi par dažādiem Java aspektiem. Mēs esam ap­ko­po­ju­ši desmit bieži uzdotus jau­tā­ju­mus Java iz­strā­dā­tā­jiem un pie­vie­no­ju­ši atbildes uz katru no tiem.

Šajā rakstā ir sniegts pārskats par ie­spē­ja­ma­jiem jau­tā­ju­miem, kas var tikt uzdoti par Java prog­ram­mē­ša­nas valodu darba intervijā prog­ram­mē­tā­ja amatam. Atkarībā no amata pra­sī­ta­jai pro­fe­sio­nā­la­jai pieredzei, daži jautājumi var būt sīkāki. Dažreiz in­ter­vi­jās augst­ā­ka­jiem amatiem tiek piedāvāti scenāriji, kuros ir apzināti kļūdas vai kuri ir acīm­re­dza­mi maldinoši, lai pār­bau­dī­tu in­ter­vē­ja­mās personas tehniskās zināšanas. Tāpēc ir svarīgi labi sa­ga­ta­vo­ties in­ter­vi­jai.

1. jautājums: Kādas ir Java īpašās funkcijas un kādas priekš­ro­cī­bas piedāvā šī prog­ram­mē­ša­nas valoda?

Java ir jaudīga un plaši izmantota valoda, kas to pa­da­rī­ju­si par populāru prog­ram­mē­ša­nas valodu, ko apgūt. Vairākas unikālas funkcijas izceļ Java, jo īpaši tās iz­man­to­ša­nas veidā. Viena no gal­ve­na­jām Java priekš­ro­cī­bām ir tā, ka tās kods var darboties dažādās ope­rē­tājsis­tē­mās bez jebkādām mo­di­fi­kā­ci­jām.

Šo elas­tī­gu­mu nodrošina Java virtuālā mašīna, kas garantē, ka izstrāde un lietošana nav ie­ro­be­žo­ta ar konkrētu platformu, ļaujot kodu izmantot vairākās plat­for­mās. Tas nodrošina programmu elastīgu un efektīvu darbību dažādās ierīcēs.

Vēl viena Java priekš­ro­cī­ba ir au­to­mā­tis­kā atmiņas pār­val­dī­ba, ko nodrošina Garbage Collector, kas vienkāršo atmiņas resursu pār­val­dī­bu un samazina iespējamo kļūdu skaitu. Turklāt Java plašās standarta bib­lio­tē­kas ar daudzām gatavām funkcijām paātrina lie­to­jum­prog­ram­mu izstrādi.

ob­jek­to­rien­tē­ta prog­ram­mē­ša­nas valoda Java, tāpat kā citas šīs ka­te­go­ri­jas valodas, izceļas ar to, ka prog­ram­ma­tū­ras kom­po­nen­tus var vieglāk modelēt un kodu var atkārtoti izmantot.

2. jautājums: Kā Java rīkojas ar daudz­kār­tē­ju pār­man­to­ša­nu?

Principā Java ne­at­bal­sta vairāku klašu mantošanu. Tas nozīmē, ka klases var mantot tikai no vienas klases. Vairāku klašu mantošana var negatīvi ietekmēt kodu ob­jek­to­rien­tē­tā prog­ram­mē­ša­nā, labi zināma problēma ir dimanta problēma.

Lai gan Java klasēm nav iespējama daudz­kār­tē­ja pār­man­to­ša­na, šo problēmu var atrisināt, iz­man­to­jot saskarnes. Tā kā Java klasē var īstenot vairākas saskarnes, tā var pārmantot funkcijas no dažādiem avotiem. Šis uzdevums nodrošina, ka funkcijas ir skaidri definētas un nevar rasties problēmas ar daudz­kār­tē­ju pār­man­to­ša­nu.

3. jautājums: Kāda ir atšķirība starp abstraktu klasi un in­ter­fei­su Java valodā?

Gan abs­trak­ci­jas klases, gan in­ter­fei­si tiek izmantoti Java, lai definētu abs­trak­ci­jas tipus, kurus pēc tam var īstenot citas klases. Pastāv būtiskas at­šķi­rī­bas, jo īpaši attiecībā uz pār­man­to­ša­nas no­tei­ku­miem:

  • Pār­man­to­ša­na: Java valodā klase var pārmantot tikai no abstrakta klases. Savukārt abstrakta klase nevar veikt daudz­kār­tē­ju pār­man­to­ša­nu, kas nozīmē, ka šim nolūkam ir jāievieš vairākas saskarnes.
  • Klasu at­tie­cī­bas: Tā kā klase var mantot tikai no abstrakta klases, abstrakto klašu iz­man­to­ša­na ir piemērota „ir” at­tie­cī­bām, savukārt in­ter­fei­si ir pie­mē­ro­tā­ki „var” at­tie­cī­bām.
  • Kon­krē­tums: Abstrakta klase var saturēt abs­trak­tas (ne­īs­te­no­tas) un konkrētas (īstenotas) metodes, kā arī instancē mainīgos. Savukārt saskarnes var definēt tikai abs­trak­tas metodes un kon­stan­tes. Visas metodes saskarnē ir implicīti abs­trak­tas un publiskas.
  • Fun­kcio­na­li­tā­te: abs­trak­ci­jas klases balstās uz kopīgas īs­te­no­ša­nas ko­pī­go­ša­nu (un vairāku in­ter­fei­su īs­te­no­ša­nu). In­ter­fei­si, no otras puses, ir iz­strā­dā­ti, lai deklarētu spe­ci­fis­kas funkcijas, kuras pēc tam tiek īstenotas dažādās klasēs.

4. jautājums: Kāda ir atšķirība starp instancēm un lokālajām mai­nī­ga­jām?

Galvenā atšķirība starp instancēm un lokālajām mai­nī­ga­jām ir to darbības joma un dzīves ilgums. Instances mainīgās gal­ve­no­kārt ir objekta īpašības klasē. Lokālās mainīgās ir pagaidu vērtības, kas iz­vei­do­tas konkrētā darbības jomā.

Instances mainīgie

  • Instances mainīgie ir mainīgie, kas deklarēti klases līmenī, ārpus metodēm, kons­truk­to­riem un blokiem.
  • Katram klases objektam ir sava in­stan­cē­ša­nas mainīgā kopija.
  • Piekļuve instancēm mai­nī­ga­jiem notiek caur klases instanci. Vērtības var at­šķir­ties katram klases objektam.

Vietējās mainīgās

  • Vietējās mainīgās tiek dek­la­rē­tas metodes, kons­truk­to­ra vai bloka ietvaros. To derīgums ir ie­ro­be­žots ar šo definēto jomu.
  • Šīs mainīgās ir skaidri jā­ini­cia­li­zē pirms lie­to­ša­nas un tās pastāv tikai kodbloka izpildes laikā.
  • Tās nav redzamas ārpus koda bloka, kurā tās tika dek­la­rē­tas.

5. jautājums: Ko nozīmē termini JVM, JDK un JRE un kā tie atšķiras viens no otra?

Lai gan šie termini saīsinātā veidā var šķist līdzīgi, to pa­ma­tuz­de­vu­mi un darbības joma Java vidē ir būtiski atšķirīgi.

Java virtuālā mašīna (JVM)

  • Java virtuālā mašīna (JVM) ir virtuālā mašīna, kas kalpo kā saskarne starp Java programmu un pamatā esošo aparatūru vai ope­rē­tājsis­tē­mu, izpildot Java baitkodu.
  • JVM ir ļoti svarīga, jo kā izpildes vide tā var izpildīt to pašu baitkodu dažādās ope­rē­tājsis­tē­mās, ja vien tas ir pieejams at­tie­cī­ga­jās plat­for­mās. Tas ie­vē­ro­ja­mi veicina Java pār­ne­sa­mī­bu.
  • Šo pār­ne­sa­mī­bu nodrošina Java kom­pi­la­tors, kas tulko Java avota kodu baitkodā, kuru pēc tam in­ter­pre­tē JVM.

Java at­tīs­tī­bas komplekts (JDK)

  • Java De­ve­lopment Kit (JDK) ir pilnīgs at­tīs­tī­bas pakete, kas apvieno dažādus rīkus, kas palīdz Java lie­to­jum­prog­ram­mu izstrādē. Tajā ir rīki lie­to­jum­prog­ram­mu izveidei, kom­pi­lē­ša­nai un kļūdu no­vēr­ša­nai.
  • JDK satur Java kom­pi­la­to­ru, Java virtuālo mašīnu (JVM), Java debugger un Java profiler.
  • Papildus šiem rīkiem JDK ietver lielu skaitu iepriekš definētu klašu un in­ter­fei­su bieži lietotām funkcijām, kas ir pieejamas Java API vai Java klašu bib­lio­tē­kā.

Java izpildes vide (JRE)

  • Java Runtime En­vi­ron­ment (JRE) nodrošina sa­ma­zi­nā­tu vidi, kurā var izpildīt Java lie­to­jum­prog­ram­mas.
  • JRE satur Java virtuālo mašīnu (JVM) un Java API, kas abi ir ne­pie­cie­ša­mi lie­to­jum­prog­ram­mu pa­lai­ša­nai un darbībai.
  • At­tīs­tī­bas rīki, piemēram, Java kom­pi­la­tors, nav iekļauti JRE, tāpēc to parasti instalē gala lietotāji.

6. jautājums: Kas ir kolekciju klases Java valodā un kādam nolūkam tās tiek iz­man­to­tas?

Java valodā termins „ko­lek­ci­jas klase” parasti attiecas uz klasēm, kas ir daļa no Java kolekciju satvara. Šis satvars nodrošina stan­dar­ti­zē­tu veidu, kā uzglabāt, organizēt un apstrādāt objektu grupas. Tas sastāv no dažādām saskarnēm un konkrētām datu struktūru imple­men­tā­ci­jām.

Kolekciju klases tiek iz­man­to­tas dažādiem mērķiem:

  • Datu or­ga­ni­zē­ša­na: tie ļauj efektīvi organizēt datus sarakstos, kopās vai kartēs.
  • Datu apstrāde: tie nodrošina metodes elementu pie­vie­no­ša­nai, dzēšanai un mek­lē­ša­nai.
  • Ģeneriskā prog­ram­mē­ša­na: Ģenerisko tipu iz­man­to­ša­na kolekciju klasēs ļauj izveidot atkārtoti iz­man­to­ja­mu un tipa drošu kodu.
  • Algoritmi: Framework satur arī al­go­ritmus, kas darbojas ar datu struk­tū­rām (piemēram, šķirošana vai meklēšana).

7. jautājums: Kāda ir atšķirība starp == un equals() Java valodā?

== un equals() ir divi dažādi mehānismi vai operatori, ko izmanto objektu sa­lī­dzi­nā­ša­nai:

  • Operators == salīdzina objektu atsauces, nevis to satura vērtības. Lietojot ar objektiem, == pārbauda, vai abas atsauces norāda uz to pašu objektu (t. i., vai tās attiecas uz to pašu atmiņas zonu). Savukārt, lietojot ar pri­mi­tī­viem datu tipiem (piemēram, char, int vai byte), operators salīdzina vērtības.
  • Ar equals() var sa­lī­dzi­nāt objektu saturu, lai noteiktu, vai objekti ir vienādi, pat ja tie atrodas dažādās atmiņas vietās. Pēc no­klu­sē­ju­ma equals() darbojas kā ==, pārņemot atsauces sa­lī­dzi­nā­ša­nas loģiku no Object klases. Tomēr parasti to ir jā­pār­rak­sta lietotāja definētās klasēs, lai no­dro­ši­nā­tu jēgpilnu satura sa­lī­dzi­nā­ša­nu.

8. jautājums: Kam tiek izmantoti kons­truk­to­ri?

Kons­truk­to­ri ir īpašas metodes klasē, kuras tiek iz­man­to­tas, lai in­stan­ciē­tu un ini­cia­li­zē­tu objektus. Kons­truk­to­ru četri galvenie uzdevumi ir:

  • Objekta ini­cia­li­zā­ci­ja: Kons­truk­to­ri gal­ve­no­kārt tiek izmantoti, lai objektu pēc tā izveides ne­ka­vē­jo­ties pārvestu derīgā un ini­cia­li­zē­tā stāvoklī. Tiek ini­cia­li­zē­ti atribūti un piešķirti ne­pie­cie­ša­mie resursi.
  • Parametru nodošana: Kons­truk­to­ri var pieņemt pa­ra­met­rus, lai izveidotu dažādas klases instancēs ar at­šķi­rī­gām īpašībām, ļaujot izveidot objektus ar spe­ci­fis­kām atribūtu vērtībām.
  • Koda pār­val­dī­ba: Kons­truk­to­ru iz­man­to­ša­na uzlabo koda lasāmību, jo objekta ini­cia­li­zē­ša­nu var veikt tieši kons­truk­to­rā. Tas arī vienkāršo koda uz­tu­rē­ša­nu, jo izmaiņas ini­cia­li­zē­ša­nas loģikā ir jāveic tikai vienā vietā.
  • Pār­man­to­ša­na: Kons­truk­to­riem ir svarīga loma pār­man­to­ša­nas hie­rar­hi­jā. At­va­si­nā­ta klase parasti izsauc bāzes klases kons­truk­to­ru, lai veiktu tās ini­cia­li­zā­ci­ju, pirms veic savu ini­cia­li­zā­ci­ju.

9. jautājums: Java izmanto vairākus dažādus string tipus. Kādi tie ir un kā tie atšķiras viens no otra?

Java valodā string tipu pārstāv klase java.lang.String. Šī klase ir galvenais veids, kā attēlot rakstzīm­ju virknes. Tā piedāvā arī dažādas iespējas string ma­ni­pu­lā­ci­jai un apstrādei:

  • StringBuil­der: Šī klase tiek izmantota, lai efektīvi izveidotu mo­di­fi­cē­ja­mas virknes Java. Atšķirībā no ne­mai­nī­gās String klases, tā ļauj veikt izmaiņas, ne­iz­vei­do­jot jaunu instanci.
  • String literāls: Tas attiecas uz rakstzīm­ju virknēm, kas ir rakstītas dubultās pēdiņās, piemēram, "Nice to see you!". Identiski string literāli dala vienu instanci string kopā, lai op­ti­mi­zē­tu atmiņas iz­man­to­ša­nu.
  • String objekti: Tos var izveidot kā jaunu instanci, iz­man­to­jot at­slēg­vār­du new, piemēram, kā new string ("Nice to see you!"). Instance tiek izveidota ne­at­ka­rī­gi no satura.
  • StringBuffer: tāpat kā StringBuil­der, šī klase izveido mo­di­fi­cē­ja­mas virknes. Galvenā atšķirība ir tāda, ka StringBuffer ir droša attiecībā uz pa­ve­die­niem, bet StringBuil­der nav.

10. jautājums: Kas atšķir throw no throws?

Java valodā at­slēg­vār­di throw un throws tiek izmantoti, lai ap­strā­dā­tu izņēmumus. Ne­ska­to­ties uz šo līdzību, tie kalpo dažādiem mērķiem un tiek piemēroti dažādos kon­tek­stos:

  • throw tiek izmantots , lai manuāli izraisītu izņēmumu. Iz­strā­dā­tā­ji var to izmantot, lai ģenerētu izņēmumu un nodotu to iz­sau­cējprog­ram­mai.
  • Savukārt throws norāda, ka metode spēj izraisīt konkrētu izņēmumu. To izmanto metodes dek­la­rā­ci­jā, lai norādītu, kurus izņēmumus metode nevar apstrādāt, bet tā vietā nodod iz­sau­cē­jam apstrādei, ļaujot kodam reaģēt at­bil­sto­ši.
Go to Main Menu