Hva er de 10 vanligste spørsmålene i Java-intervjuer? (Og hvordan du svarer på dem)
Som et mye brukt programmeringsspråk er Java og dets unike funksjoner godt kjent for rekrutterere. Derfor blir det ofte stilt spørsmål om ulike aspekter ved Java i de tidlige fasene av et intervju. Vi har samlet en liste over ti vanlige spørsmål til Java-utviklere, og har også inkludert svar på hvert av dem.
Denne artikkelen gir en oversikt over potensielle spørsmål du kan bli stilt om Java i et jobbintervju for utviklere. Avhengig av hvilket nivå av yrkeserfaring som kreves for stillingen, kan noen spørsmål være mer detaljerte. Noen ganger i intervjuer for seniorstillinger blir det presentert scenarier som inneholder bevisste feil eller som er klart misvisende for å teste den tekniske kunnskapen til personen som intervjuer for stillingen. Derfor er det viktig å være godt forberedt til intervjuet.
Spørsmål 1: Hva er Java sine spesielle egenskaper, og hvilke fordeler tilbyr programmeringsspråket?
Java er et kraftig og mye brukt språk, noe som har gjort det til et populært programmeringsspråk å lære. Flere unike funksjoner gjør Java spesielt, særlig når det gjelder hvordan det brukes. En viktig fordel med Java er at koden kan kjøres på ulike operativsystemer uten endringer.
Denne fleksibiliteten er mulig takket være Java Virtual Machine, som sikrer at utvikling og bruk ikke er begrenset til en bestemt plattform, slik at koden kan brukes på flere plattformer. Dette sikrer at programmer kjører fleksibelt og effektivt på ulike enheter.
En annen fordel med Java er den automatiske minnehåndteringen som tilbys av Garbage Collector, som forenkler håndteringen av minneressurser og reduserer potensielle feil. I tillegg akselererer Javas omfattende standardbiblioteker med mange ferdige funksjoner utviklingen av applikasjoner.
Som et objektorientert programmeringsspråk utmerker Java seg, i likhet med andre språk i denne kategorien, ved at programvarekomponenter kan modelleres lettere og koden kan gjenbrukes gjentatte ganger.
Spørsmål 2: Hvordan håndterer Java multiarv?
I prinsippet støtter Java ikke multiarv av klasser. Dette betyr at klasser kun kan arve fra én enkelt klasse. Multiarv kan ha en negativ innvirkning på koden i objektorientert programmering, og et velkjent problem er diamantproblemet.
Selv om multiarv ikke er mulig for klasser i Java, kan dette løses ved hjelp av grensesnitt. Siden en klasse kan implementere flere grensesnitt i Java, kan den arve funksjonaliteter fra forskjellige kilder. Denne oppgaven sikrer at funksjonene er klart definert og at problemer med multiarv ikke kan oppstå.
Spørsmål 3: Hva er forskjellen mellom en abstrakt klasse og et grensesnitt i Java?
Både abstrakte klasser og grensesnitt brukes i Java til å definere abstrakte typer, som deretter kan implementeres av andre klasser. Det er betydelige forskjeller, særlig når det gjelder arveregler:
- Arv: I Java kan en klasse bare arve fra en abstrakt klasse. Abstrakte klasser kan på sin side ikke utføre multiarv, noe som betyr at flere grensesnitt må implementeres for dette.
- Klasseforhold: Siden en klasse kun kan arve fra en abstrakt klasse, er bruk av abstrakte klasser godt egnet for «er en»-forhold, mens grensesnitt er bedre egnet for «kan»-forhold.
- Konkrethet: En abstrakt klasse kan inneholde abstrakte (ikke-implementerte) og konkrete (implementerte) metoder og kan også ha instansvariabler. Grensesnitt kan derimot bare definere abstrakte metoder og konstanter. Alle metoder i et grensesnitt er implisitt abstrakte og offentlige.
- Funksjonalitet: Abstrakte klasser er avhengige av å dele en felles implementering (og implementere flere grensesnitt). Grensesnitt er derimot designet for å deklarere spesifikke funksjoner, som deretter implementeres i forskjellige klasser.
Spørsmål 4: Hva er forskjellen mellom instansvariabler og lokale variabler?
Hovedforskjellen mellom instansvariabler og lokale variabler ligger i deres omfang og levetid. Instansvariabler er hovedsakelig egenskaper til et objekt innenfor en klasse. Lokale variabler representerer midlertidig opprettede verdier i et bestemt omfang.
Instansvariabler
- Instansvariabler er variabler som er deklarert på klassenivå, utenfor metoder, konstruktører og blokker.
- Hvert objekt i en klasse har sin egen kopi av en instansvariabel.
- Instansvariabler er tilgjengelige gjennom instansen av en klasse. Verdiene kan variere for hvert objekt i klassen.
Lokale variabler
- Lokale variabler deklareres innenfor en metode, en konstruktør eller en blokk. Deres gyldighet er begrenset til dette definerte området.
- Disse variablene må initialiseres eksplisitt før bruk og eksisterer bare så lenge kodeblokken utføres.
- De er ikke synlige utenfor kodeblokken der de ble deklarert.
Spørsmål 5: Hva betyr begrepene JVM, JDK og JRE, og hvordan skiller de seg fra hverandre?
Selv om disse begrepene kan virke like når de forkortes, er deres underliggende oppgaver og omfang i Java fundamentalt forskjellige.
Java Virtual Machine (JVM)
- Java Virtual Machine (JVM) er en virtuell maskin som fungerer som grensesnitt mellom Java-programmet og den underliggende maskinvaren eller operativsystemet, og som utfører Java-bytecode.
- JVM er avgjørende fordi den, som et kjøretidsmiljø, kan kjøre samme bytecode på forskjellige operativsystemer, forutsatt at den er tilgjengelig på de respektive plattformene. Dette bidrar betydelig til portabiliteten til Java.
- Denne portabiliteten muliggjøres av Java-kompilatoren som oversetter Java-kildekoden til bytecode, som JVM deretter tolker.
Java Development Kit (JDK)
- Java Development Kit (JDK) er en komplett utviklingspakke som inneholder ulike verktøy som hjelper til med utviklingen av Java-applikasjoner. Den inneholder verktøy for å lage, kompilere og feilsøke applikasjoner.
- JDK inneholder Java-kompilatoren, Java Virtual Machine (JVM), Java-feilsøker og Java-profiler.
- I tillegg til disse verktøyene inneholder JDK et stort antall forhåndsdefinerte klasser og grensesnitt for ofte brukte funksjoner som er tilgjengelige i Java API eller Java-klassebiblioteket.
Java Runtime Environment (JRE)
- Java Runtime Environment (JRE) gir et redusert miljø hvor Java-applikasjoner kan kjøres.
- JRE inneholder Java Virtual Machine (JVM) og Java API, som begge er nødvendige for å starte og kjøre applikasjoner.
- Utviklingsverktøy, som Java-kompilatoren, er ikke inkludert i JRE, så det installeres vanligvis av sluttbrukere.
Spørsmål 6: Hva er samlingsklasser i Java, og hva brukes de til?
I Java refererer begrepet samlingsklasse vanligvis til klasser som er en del av Java Collections Framework. Dette rammeverket gir en standardisert måte å lagre, organisere og manipulere grupper av objekter på. Det består av ulike grensesnitt og konkrete implementeringer av datastrukturer.
Samlingsklasser brukes til ulike formål:
- Dataorganisering: De muliggjør effektiv organisering av data i lister, sett eller kart.
- Datamanipulering: De gir metoder for å legge til, fjerne og søke etter elementer.
- Generisk programmering: Bruken av generiske typer i samlingsklasser muliggjør oppretting av gjenbrukbar og typesikker kode.
- Algoritmer: Rammeverket inneholder også algoritmer som opererer på datastrukturer (f.eks. sortering eller søking).
Spørsmål 7: Hva er forskjellen mellom == og equals() i Java?
== og equals() er to forskjellige mekanismer eller operatører som brukes til å sammenligne objekter:
- Operatoren
==sammenligner referansene til objekter, ikke innholdsverdiene deres. Når den brukes med objekter, sjekker==om de to referansene peker til samme objekt (dvs. at de refererer til samme minneområde). I kontrast til dette, med primitive datatyper (f.eks. char, int eller byte), sammenligner operatoren verdiene. - Med
equals()kan du sammenligne innholdet i objekter for å avgjøre om objektene er like, selv om de befinner seg på forskjellige minneplasser. Som standard oppførerequals()seg som==, og arver referansesammenligningslogikken fra Object-klassen. Imidlertid må den vanligvis overstyres i brukerdefinerte klasser for å muliggjøre meningsfull innholdssammenligning.
Spørsmål 8: Hva brukes konstruktører til?
Konstruktører er spesielle metoder innenfor en klasse som brukes til å instansiere og initialisere objekter. De fire hovedoppgavene til konstruktører er:
- Objektinitialisering: Konstruktører brukes primært til å sette et objekt i en gyldig og initialisert tilstand så snart det er opprettet. Attributter initialiseres, og nødvendige ressurser tildeles.
- Parameteroverføring: Konstruktører kan akseptere parametere for å opprette forskjellige instanser av klassen med varierende egenskaper, slik at objekter med spesifikke attributtverdier kan opprettes.
- Kodestyring: Bruk av konstruktorer forbedrer kodens lesbarhet, da objektinitialisering kan utføres direkte i konstruktoren. Dette forenkler også vedlikeholdet av koden, siden endringer i initialiseringslogikken bare trenger å gjøres på ett sted.
- Arv: Konstruktører spiller en viktig rolle i arvehierarkiet. En avledet klasse kaller vanligvis konstruktøren til baseklassen for å håndtere initialiseringen før den utfører sine egne initialiseringer.
Spørsmål 9: Java bruker en rekke forskjellige strengtyper. Hva er disse, og hvordan skiller de seg fra hverandre?
I Java representeres strengtypen av klassen java.lang.String. Denne klassen er den primære måten å representere tegnstrenger på. Den tilbyr også ulike alternativer for strengmanipulering og -behandling:
- StringBuilder: Denne klassen brukes til å effektivt opprette endringsbare strenger i Java. I motsetning til den uforanderlige String-klassen, tillater den endringer uten å generere en ny instans.
- Strenglitteral: Dette refererer til tegnstrenger som er skrevet i doble anførselstegn, for eksempel
"Nice to see you!". Identiske strenglitteraler deler én instans i strengpoolen for å optimalisere minnebruken. - String-objekter: Disse kan opprettes som en ny instans ved å bruke nøkkelordet
new, for eksempel somnew string ("Nice to see you!"). Instansen opprettes uavhengig av innholdet. - StringBuffer: I likhet med StringBuilder oppretter denne klassen endringsbare strenger. Hovedforskjellen er at StringBuffer er tråd-sikker, mens StringBuilder ikke er det.
Spørsmål 10: Hva skiller throw fra throws?
I Java brukes nøkkelordene throw og throws begge til å håndtere unntak. Til tross for denne likheten har de forskjellige formål og brukes i forskjellige sammenhenger:
throwbrukes til å kaste en unntak manuelt. Utviklere kan bruke dette til å generere et unntak og sende det til det påkallende programmet.- I kontrast til dette indikerer
throwsat en metode er i stand til å kaste en spesifikk unntak. Det brukes i metodedeklarasjonen for å spesifisere hvilke unntak som ikke kan håndteres av metoden, men i stedet sendes videre til den som kaller for håndtering, slik at koden kan reagere deretter.