Dacă v-ați pregătit vreodată pentru un interviu pentru un post de programator Java sau ați promovat vreun examen de certificare (nu neapărat despre programare), atunci probabil ați observat deja că întrebările puse acolo sunt foarte specifice. Multe dintre ele te obligă să te gândești la designul limbii. Unele sunt concepute pentru a sonda profunzimea cunoștințelor tale. Există întrebări care arată mai mult ca puzzle-uri decât orice altceva, în timp ce altele se referă la nuanțe ale limbajului care sunt foarte greu de perceput fără practică. În acest articol, dezvoltatorul Sarans Sing prezintă câteva astfel de întrebări despre Java. Cu răspunsuri, desigur. 1. Ce se întâmplă dacă pun o instrucțiune return sau System.exit() într-un bloc try/catch? Aceasta este o întrebare Java foarte populară și subtilă. Trucul este că mulți programatori cred că blocul
finally
este întotdeauna executat. Prin plasarea unei return
declarații într-un try/catch
bloc sau apelarea System.exit()
din interiorul unui try/catch
bloc, întrebarea pune la îndoială această credință. Răspunsul la această întrebare dificilă este: blocul finally
va fi executat atunci când o return
instrucțiune este plasată într-un try/catch
bloc, dar nu va fi executat când System.exit()
este apelat din interiorul unui try/catch
bloc. 2. Java acceptă moștenirea multiplă? Aceasta este o întrebare foarte dificilă. Intervievatorii întreabă adesea: „Dacă C ++ acceptă moștenirea directă multiplă, atunci de ce nu poate Java?” Răspunsul _este puțin mai complicat decât ar părea, deoarece Java acceptă moștenirea de mai multe tipuri. La urma urmei, o interfață Java poate extinde alte interfețe. Acestea fiind spuse, Java nu acceptă moștenirea multiplă a implementărilor. 3. Dacă o metodă dintr-o clasă părinte aruncă NullPointerException
s, poate fi suprascrisă de o metodă care aruncă RuntimeException
s? Aceasta este o altă întrebare dificilă legată de supraîncărcare și suprascriere. Răspuns: O metodă suprascrisă poate arunca în siguranță NullPointerException
clasa părinte a lui — RuntimeException, dar nu puteți face același lucru cu un tip de excepție verificat, cum ar fi Exception
. 4. Cum garantați că N
firele de execuție pot accesa N
resurse fără un blocaj? Dacă scrierea codului cu mai multe fire nu este punctul tău forte, s-ar putea să dai cu adevărat la această întrebare. Poate fi dificil chiar și pentru un programator experimentat care nu a întâlnit blocaje și condiții de cursă. Întregul truc aici este în ordine: puteți preveni blocajele eliberând resursele în ordinea inversă în care au fost achiziționate. 5. Care este diferența dintre clasele StringBuffer
și StringBuilder
în Java? Aceasta este o întrebare clasică de limbaj Java pe care unii dezvoltatori o consideră dificilă, iar alții – foarte simplă. Clasa StringBuilder
a apărut în JDK 1.5. Singura diferență dintre aceste clase este că StringBuffer
metodele lui, cum ar fi length()
, capacity()
, și append()
, sunt sincronizate, în timp ce metodele corespunzătoare dinStringBuilder
nu sunt. Această diferență fundamentală înseamnă că concatenarea șirurilor este mai rapidă cu StringBuilder
decât cu StringBuffer
. De fapt, utilizarea StringBuffer
nu este recomandată, deoarece concatenarea șirurilor se efectuează pe același fir în 99% din timp. 6. Care este rezultatul evaluării expresiei 1.0/0.0? Va produce o excepție sau o eroare de compilare? Aceasta este o altă întrebare dificilă despre clasă. Dezvoltatorii Java sunt conștienți de existența unui tip de date dublu primitiv și a unei clase, dar atunci când efectuează operații în virgulă mobilă nu acordă suficientă atenție , , , și regulilor care guvernează calculele aritmetice asociate. Răspunsul la această întrebare este simplu: anDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
nu va fi aruncat; expresia evaluează la Double.POSITIVE_INFINITY
. 7. Ce se întâmplă dacă încercați să introduceți o cheie într-o cheie HashMap
care conține deja acea cheie? Această întrebare dificilă face parte dintr-o altă întrebare frecventă: cum funcționează HashMap
în Java? HashMap
este o sursă populară de întrebări confuze și complicate despre Java. Iată răspunsul: dacă încercați să reintroduceți o cheie într-un HashMap
, vechea cheie va fi înlocuită, deoarece HashMap
clasa nu permite chei duplicate. Și aceeași cheie va primi același cod hash, ceea ce înseamnă că va ajunge în același loc în găleată hash. Pe baza materialelor Quora
GO TO FULL VERSION