Se ti sei mai preparato per un colloquio per una posizione di programmatore Java o hai superato un esame di certificazione (non necessariamente sulla programmazione), probabilmente avrai già notato che le domande poste sono molto specifiche. Molti di loro ti costringono a pensare al design della lingua. Alcuni sono progettati per sondare le profondità della tua conoscenza. Ci sono domande che sembrano più enigmi che altro, mentre altre riguardano sfumature della lingua molto difficili da percepire senza pratica. In questo articolo, lo sviluppatore Sarans Sing presenta alcune di queste domande su Java. Con le risposte, ovviamente.
1. Cosa succede se inserisco un'istruzione return o System.exit() in un blocco try/catch? Questa è una domanda Java molto popolare e sottile. Il trucco è che molti programmatori credono che il

finally
blocco venga sempre eseguito. Inserendo return
un'istruzione in un try/catch
blocco o chiamando System.exit()
dall'interno di un try/catch
blocco, la domanda mette in dubbio questa convinzione. La risposta a questa domanda complicata è: il finally
blocco verrà eseguito quando return
un'istruzione viene inserita in un try/catch
blocco, ma non verrà eseguito quando System.exit()
viene chiamato dall'interno di un try/catch
blocco. 2. Java supporta l'ereditarietà multipla? Questa è una domanda molto delicata. Gli intervistatori spesso chiedono: "Se C ++ supporta l'ereditarietà multipla diretta, allora perché Java non può?" La rispostaè un po' più complicato di quanto possa sembrare, dato che Java supporta l'ereditarietà di più tipi. Dopotutto, un'interfaccia Java può estendere altre interfacce. Detto questo, Java non supporta l'ereditarietà multipla delle implementazioni. 3. Se un metodo in una classe genitore lancia NullPointerException
s, può essere sovrascritto da un metodo che lancia RuntimeException
s? Questa è un'altra domanda complicata relativa al sovraccarico e all'override. Risposta: un metodo sottoposto a override può tranquillamente lanciare NullPointerException
la classe genitore di , RuntimeException, ma non puoi fare lo stesso con un tipo di eccezione verificato come Exception
. 4. Come garantite che N
i thread possano accedere N
alle risorse senza deadlock? Se scrivere codice multithread non è il tuo forte, potresti davvero imbatterti in questa domanda. Può essere difficile anche per un programmatore esperto che non ha incontrato stalli e condizioni di gara. L'intero trucco qui è nell'ordine: puoi prevenire i deadlock rilasciando le risorse nell'ordine inverso in cui sono state acquisite. 5. Qual è la differenza tra le classi StringBuffer
e StringBuilder
in Java? Questa è una classica domanda sul linguaggio Java che alcuni sviluppatori trovano complicata e altri molto semplice. La StringBuilder
classe è apparsa in JDK 1.5. L'unica differenza tra queste classi è che StringBuffer
i metodi di , come length()
, capacity()
e append()
, sono sincronizzati, mentre i metodi corrispondenti inStringBuilder
non sono. Questa differenza fondamentale significa che la concatenazione di stringhe è più veloce con StringBuilder
che con StringBuffer
. In realtà, l'utilizzo StringBuffer
non è consigliato, poiché la concatenazione di stringhe viene eseguita sullo stesso thread il 99% delle volte. 6. Qual è il risultato della valutazione dell'espressione 1.0/0.0? Produrrà un'eccezione o un errore di compilazione? Questa è un'altra domanda complicata sulla classe. Gli sviluppatori Java sono a conoscenza dell'esistenza di un tipo di dati double primitivo e di una classe, ma quando eseguono operazioni in virgola mobile non prestano sufficiente attenzione a , , e alle regole che governano i calcoli aritmetici associati. La risposta a questa domanda è semplice: an
Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
non sarà gettato; l'espressione restituisce Double.POSITIVE_INFINITY
. 7. Cosa succede se si tenta di inserire una chiave in un HashMap
che contiene già quella chiave? Questa domanda delicata fa parte di un'altra domanda frequente: come funziona HashMap
in Java? HashMap
è una fonte popolare di domande confuse e complicate su Java. Ecco la risposta: se provi a reinserire una chiave in un HashMap
, la vecchia chiave verrà sostituita, poiché la HashMap
classe non consente chiavi duplicate. E la stessa chiave otterrà lo stesso codice hash, il che significa che finirà nello stesso posto nel secchio hash. Basato sui materiali di Quora
GO TO FULL VERSION