Pitanja za intervju s Java Flow Control (+ odgovori)

Ovaj je članak dio serije: • Pitanja za intervju za Java Collections

• Pitanja o intervjuu za sustav tipa Java

• Pitanja za intervju s Java-om (+ odgovori)

• Struktura Java razreda i pitanja za intervju za inicijalizaciju

• Java 8 pitanja za intervju (+ odgovori)

• Upravljanje memorijom u Java intervjuu Pitanja (+ odgovori)

• Pitanja o intervjuu za Java Generics (+ odgovori)

• Pitanja za intervju s Java Flow Control (+ odgovori) (trenutni članak) • Pitanja za intervju za Java Exceptions (+ odgovori)

• Pitanja za intervju s Java Annotations (+ odgovori)

• Najpopularnija pitanja za proljetni okvirni intervju

1. Uvod

Izvještaji kontrolnog toka omogućavaju programerima da koriste donošenje odluka, petlje i grananje da bi uvjetno promijenili tijek izvršavanja određenih blokova koda.

U ovom ćemo članku proći kroz nekoliko pitanja o intervjuu za kontrolu protoka koja bi se mogla pojaviti tijekom intervjua i, gdje je to prikladno; implementirat ćemo primjere kako bismo bolje razumjeli njihove odgovore.

2. Pitanja

Q1. Opišite ako tada i ako-onda-drugo izjave. Koje se vrste izraza mogu koristiti kao uvjeti?

Obje izjave govore našem programu da izvrši kôd unutar njih samo ako određeni uvjet procijeni na pravi. Međutim ako-onda-drugo naredba pruža sekundarni put izvršenja u slučaju da klauzula if procjenjuje na lažno:

if (dob> = 21) {// ...} else {// ...}

Za razliku od ostalih programskih jezika, Java podržava samo boolean izrazi kao uvjeti. Ako pokušamo upotrijebiti drugu vrstu izraza, dobit ćemo pogrešku u kompilaciji.

Q2. Opišite sklopka izjava. Koji se tipovi objekata mogu koristiti u sklopka klauzula?

Prekidač omogućuje odabir nekoliko putova izvršenja na temelju vrijednosti varijabli.

Svaka je staza označena slučaj ili zadano, sklopka izjava procjenjuje svaku slučaj izraz za podudaranje i izvršava sve izraze koji slijede oznaku podudaranja sve dok a pauza Izjava je pronađena. Ako ne može pronaći podudarnost, zadano umjesto toga izvršit će se blok:

prekidač (yearsOfJavaExperience) {slučaj 0: System.out.println ("Student"); pauza; slučaj 1: System.out.println ("Junior"); pauza; slučaj 2: System.out.println ("Srednji"); pauza; zadano: System.out.println ("Senior"); }

Možemo koristiti bajt, kratak, ugljen, int, njihove omotane verzije, nabrajanjes i Nizs kao sklopka vrijednosti.

Q3. Što se događa kada zaboravimo staviti znak pauza izjava u a slučaj klauzula a sklopka?

The sklopka izjava pada-korito. To znači da će se nastaviti izvršenje svih slučaj oznake dok ne nađe a pauza , iako se te oznake ne podudaraju s vrijednošću izraza.

Evo primjera koji to pokazuje:

int operacija = 2; int broj = 10; prekidač (operacija) {slučaj 1: broj = broj + 10; pauza; slučaj 2: broj = broj - 4; slučaj 3: broj = broj / 3; slučaj 4: broj = broj * 10; pauza; }

Nakon pokretanja koda, broj sadrži vrijednost 20, umjesto 6. To može biti korisno u situacijama kada želimo povezati istu radnju s više slučajeva.

Q4. Kada je poželjno koristiti Svještica Preko jaf-onda-drugo Izjava i obratno?

A sklopka naredba je prikladnija za testiranje pojedine varijable na više pojedinačnih vrijednosti ili kada će nekoliko vrijednosti izvršiti isti kod:

prekidač (mjesec) {slučaj 1: slučaj 3: slučaj 5: slučaj 7: slučaj 8: slučaj 10: slučaj 12: dani = 31; pauza; slučaj 2: dana = 28; pauza; zadano: dana = 30; }

An ako-onda-drugo Izjava je poželjnija kada moramo provjeriti raspone vrijednosti ili više uvjeta:

if (aPassword == null || aPassword.isEmpty ()) {// prazna lozinka} else if (aPassword.length () <8 || aPassword.equals ("12345678")) {// slaba lozinka} else {/ / dobra lozinka}

P5. Koje vrste petlji podržava Java?

Java nudi tri različite vrste petlji: za, dok, i učiniti-dok.

A za petlja pruža način ponavljanja kroz raspon vrijednosti. Najkorisnije je kad unaprijed znamo koliko će se puta zadatak ponoviti:

za (int i = 0; i <10; i ++) {// ...}

A dok petlja može izvršiti blok naredbi dok je određeni uvjet pravi:

while (iterator.hasNext ()) {// ...}

A učiniti-dok je varijacija a dok izjava u kojoj se ocjenjuje boolean izraz je na dnu petlje. To jamči da će se kôd izvršiti barem jednom:

do {// ...} while (izbor! = -1);

P6. Što je poboljšana za petlja?

Je li još jedna sintaksa za izjava dizajnirana za iteriranje kroz sve elemente zbirke, niza, nabrajanja ili bilo kojeg objekta koji implementira Iterativ sučelje:

za (Niz aString: arrayOfStrings) {// ...}

P7. Kako možete očekivano izaći iz petlje?

Koristiti pauza naredbu, možemo odmah prekinuti izvršavanje petlje:

for (int i = 0;; i ++) {if (i> 10) {break; }}

P8. Koja je razlika između neobilježenog i označenog pauza izjava?

Neoznačena pauza iskaz završava najdublje sklopka, za, dok ili učiniti-dok izjava, dok je označena pauza završava izvršavanje vanjske izjave.

Stvorimo primjer da to dokažemo:

int [] [] tablica = {{1, 2, 3}, {25, 37, 49}, {55, 68, 93}}; logička vrijednost pronađena = netačno; int loopCycles = 0; vanjski: za (int [] retke: tablica) {za (int redak: redovi) {loopCycles ++; if (redak == 37) {pronađeno = točno; probiti se vanjski; }}}

Kada se pronađe broj 37, označen pauza izraz završava krajnji za petlje i više se ciklusi ne izvršavaju. Tako, loopCycles završava vrijednošću 5.

Međutim, neoznačeni pauza završava samo najskrovitija izjava, vraćajući tok kontrole na najudaljeniju za koja nastavlja petlju do sljedeće red u stol varijabla, čineći loopCycles završi s vrijednošću 8.

P9. Koja je razlika između neobilježenog i označenog nastaviti izjava?

Neoznačena nastaviti naredba preskače na kraj trenutne iteracije u unutrašnjosti za, dok, ili učiniti-dok petlja, dok je označena nastaviti preskače na vanjsku petlju označenu datom oznakom.

Evo primjera koji to pokazuje:

int [] [] tablica = {{1, 15, 3}, {25, 15, 49}, {15, 68, 93}}; int loopCycles = 0; vanjski: za (int [] retke: tablica) {za (int redak: redovi) {loopCycles ++; if (row == 15) {nastavi vanjski; }}}

Obrazloženje je isto kao i u prethodnom pitanju. Označeni nastaviti izraz završava krajnji za petlja.

Tako, loopCycles završava s vrijednošću 5, dok neobilježena verzija završava samo najunutarnjiji iskaz, čineći loopCycles završi s vrijednošću 9.

Q10. Opišite tijek izvršenja unutar a probaj-uhvati-napokon konstruirati.

Kada je program ušao u probati blok, a u njega se ubacuje izuzetak, izvršenje probati blok je prekinut, a tok kontrole se nastavlja s a ulov blok koji može obraditi izuzetak koji se baca.

Ako takav blok ne postoji, izvršenje trenutne metode zaustavlja se, a izuzetak se prebacuje na prethodnu metodu na stogu poziva. Ako se ne dogodi iznimka, svi ulov blokovi se zanemaruju, a izvršavanje programa nastavlja se normalno.

A konačno blok se uvijek izvršava bez obzira je li izuzetak ubačen ili nije unutar tijela probati blok.

Q11. U kojim situacijama konačno blok možda nije izvršen?

Kada se JVM prekine tijekom izvršavanja probati ili ulov blokovi, na primjer, pozivanjem System.exit (), ili kada se izvršna nit prekine ili ubije, tada se konačno blok ne izvršava.

Q12. Koji je rezultat izvršavanja sljedećeg koda?

javna statička int dodjela () {int broj = 1; probajte {broj = 3; if (true) {throw new Exception ("Test Exception"); } broj = 2; } catch (Iznimka ex) {return broj; } napokon {broj = 4; } povratni broj; } System.out.println (zadatak ());

Kôd daje broj 3. Iako je konačno blok se uvijek izvršava, to se događa tek nakon probati blok izlazi.

U primjeru, povratak naredba se izvršava prije pokušaj uhvatiti završava blok. Dakle, zadatak za broj u konačno blok nema učinka, jer je varijabla već vraćena pozivnom kodu apotpisivanje metoda.

Q13. U kojim situacijama probaj-napokon blok može se koristiti čak i kad se izuzeci možda ne bacaju?

Ovaj je blok koristan kada želimo osigurati da slučajno ne zaobiđemo čišćenje resursa korištenih u kodu naišavši na pauza, nastaviti ili povratak izjava:

HeavyProcess heavyProcess = novi HeavyProcess (); pokušajte {// ... return heavyProcess.heavyTask (); } napokon {heavyProcess.doCleanUp (); }

Također, možemo se suočiti sa situacijama u kojima ne možemo lokalno obraditi izuzetak koji se baca ili želimo da trenutna metoda još uvijek izbaci izuzetak dok nam omogućuje oslobađanje resursa:

javna void doDangerousTask (zadatak zadatka) baca ComplicatedException {try {// ... task.gatherResources (); if (task.isComplicated ()) {baciti novi ComplicatedException ("Preteško"); } // ...} napokon {task.freeResources (); }}

P14. Kako pokušajte s resursima raditi?

The pokušajte s resursima naredba deklarira i inicijalizira jedan ili više resursa prije izvođenja probati blokiraju i automatski ih zatvaraju na kraju izraza bez obzira je li blok dovršen normalno ili naglo. Bilo koji objekt koji se provodi AutoCloseable ili Može se zatvoriti sučelja se mogu koristiti kao resurs:

try (StringWriter Writer = new StringWriter ()) {Writer.write ("Pozdrav svijetu!"); }

3. Zaključak

U ovom smo članku pokrili neka od najčešće postavljanih pitanja koja se pojavljuju u tehničkim intervjuima za programere Java, u vezi s izjavama o tijeku kontrole. To bi trebalo tretirati samo kao početak daljnjih istraživanja, a ne kao iscrpan popis.

Sretno u intervjuu.

Sljedeći » Pitanja o intervjuu za iznimke Java (+ odgovori) « Prethodna pitanja o intervjuu za Java Generics (+ odgovori)