Domande e risposte per colloqui su Core Java ti aiutano a prepararti per i colloqui basati su Java. Che tu sia un neolaureato o un professionista altamente esperto, Core Java gioca un ruolo vitale in qualsiasi colloquio su Java/JEE.
Core Java è l’area preferita nella maggior parte dei colloqui e svolge un ruolo cruciale nel decidere l’esito del tuo colloquio.
Questo post proviene direttamente dalla mia esperienza di programmazione Java di oltre 14 anni e da molta esperienza in interviste. Java 16 è stato rilasciato di recente e ho aggiornato il post per includere alcune domande dalle ultime versioni.
Domande e risposte per colloqui su Core Java
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Domande per colloqui su Java String
- Domande per colloqui su Thread Java
- Domande per colloqui su Collections Java
- Domande per colloqui su Exception Java
Ecco alcuni dei principali quesiti di intervista sul core Java con risposte che dovresti conoscere. Puoi segnare questa pubblicazione per rinfrescare le tue conoscenze prima di un colloquio.
1. Nomina alcune importanti caratteristiche del rilascio di Java 14?
Java 14 è stato rilasciato il 17 marzo 2020. Si tratta di una versione Non-LTS. Alcune delle specifiche per sviluppatori Caratteristiche di Java 14 sono:
- Espressioni Switch – JEP 361
- Miglioramenti del matching di pattern dell’operatore instanceof – Funzionalità di anteprima, JEP 305
- Messaggi di NullPointerException utili – JEP 358
- Blocchi di testo – Seconda anteprima, JEP 368
- Records – classe dati, funzionalità di anteprima, JEP 359.
2. Nomina alcune importanti caratteristiche del rilascio di Java 13?
Java 13 è stato lanciato il 17 settembre 2019. Si tratta di una versione Non-LTS. Alcune delle specifiche per sviluppatori Caratteristiche di Java 13 sono:
- Blocchi di testo – Funzionalità di anteprima, JEP 355
- Espressioni switch – Funzionalità di anteprima, JEP 354
- Riscrittura dell’API Java Sockets – JEP 353
- Archivio CDS dinamico – JEP 350
- Metodo FileSystem.newFileSystem()
- Fabbriche DOM e SAX con supporto per namespace
- Supporto Unicode 12.1
- Miglioramenti di ZGC per restituire Memoria Inutilizzata – JEP 351
3. Elenca alcune importanti funzionalità del rilascio di Java 12?
Java 12 è stato lanciato il 19 marzo 2019. Si tratta di una versione Non-LTS. Alcune delle Funzionalità di Java 12 sono:
- Modifiche JVM – JEP 189, JEP 346, JEP 344 e JEP 230.
- Espressioni switch
- Metodo mismatch() di File
- Formattazione numeri compatta
- Collector Teeing in Stream API
- Nuovi metodi nella classe String
- JEP 334: API Costanti JVM
- JEP 305: Pattern Matching per instanceof
- Raw String Literals è rimosso da JDK 12.
4. Quali sono le caratteristiche importanti del rilascio di Java 11?
Java 11 è il secondo rilascio LTS dopo Java 8. Hanno cambiato il modello di licenza e supporto, il che significa che se si scarica l’Oracle JDK di Java 11, sarà a pagamento per uso commerciale. Se si desidera utilizzare una versione gratuita, è possibile scaricarla dal sito web di OpenJDK.
Alcune delle caratteristiche importanti di Java 11 sono:
- Possiamo eseguire direttamente un programma Java tramite il comando
java
. Il file sorgente verrà compilato ed eseguito implicitamente. Fa parte dell’implementazione della funzione JEP 330. - Sono stati aggiunti 6 nuovi metodi alla classe String – isBlank(), lines(), strip(), stripLeading(), stripTrailing(), e repeat(). È possibile leggere tutto su di essi nel nostro articolo sulla classe String di Java.
- La classe Files ha ottenuto due nuovi metodi per leggere/scrivere dati stringa – readString() e writeString().
- Possiamo utilizzare “var” anche con le espressioni lambda. Fa parte dell’implementazione JEP 323.
- Epsilon: Un Garbage Collector No-Op per gli ambienti di test. È una funzionalità sperimentale e fa parte di JEP 318.
I moduli Java EE e CORBA sono stati rimossi dalla build standard di JDK. L’Engine JavaScript Nashorn è stato anche deprecato. - Java EE e moduli CORBA sono stati rimossi dalla build standard JDK. L’engine Nashorn per JavaScript è stato anche deprecato.
- Nuovo client HTTP (JEP 321) e Flight Recorder (JEP 328)
Per un’overview completa, leggere Java 11 Features.
5. Quali sono le caratteristiche importanti del rilascio di Java 10?
Java 10 è il primo rilascio ogni sei mesi da parte della Oracle corporation, quindi non è un rilascio importante come le versioni precedenti. Tuttavia, alcune delle caratteristiche importanti di Java 10 sono:
- Inferenza del Tipo di Variabile Locale
- Migliorare java.util.Locale e le API correlate per implementare estensioni Unicode aggiuntive dei tag di lingua BCP 47.
- Abilitare il VM HotSpot per allocare il heap degli oggetti Java su un dispositivo di memoria alternativa, come un NV-DIMM, specificato dall’utente.
- Fornire un set predefinito di certificati di Autorità di Certificazione (CA) radice nel JDK.
Java 10 è principalmente una versione di manutenzione, tuttavia mi è piaciuta molto la funzionalità di inferenza del tipo di variabile locale. Per un’ampia panoramica di Java 10, si prega di consultare Caratteristiche di Java 10.
6. Quali sono le caratteristiche importanti del rilascio di Java 9?
Java 9 è stato un rilascio importante e ha introdotto molte funzionalità. Alcune delle caratteristiche importanti sono:
- REPL Java 9 (JShell)
- Sistema Modulare Java 9
- Metodi di Fabbrica per Liste, Set, Mappe e Map.Entry Immutabili
- Metodi privati in Interfacce
- Flussi Reattivi
- Miglioramenti GC (Garbage Collector)
Troverai maggiori dettagli su di loro al Caratteristiche di Java 9.
7. Quali sono le caratteristiche importanti del rilascio di Java 8?
Java 8 è stato rilasciato nel marzo 2014, quindi è uno dei temi caldi nei quesiti di colloquio sul linguaggio Java. Se rispondi a questa domanda in modo chiaro, dimostrerai che ti tieni aggiornato sulle ultime tecnologie.
Java 8 è stato uno dei rilasci più importanti dopo le annotazioni e i generici di Java 5. Alcune delle caratteristiche principali di Java 8 sono:
- Modifiche all’interfaccia con metodi predefiniti e statici
- Interfacce funzionali e Espressioni Lambda
- API Stream Java per le classi di raccolta
- API Java Data Time
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. Nomina alcuni concetti di programmazione orientata agli oggetti (OOPS) in Java?
Java si basa su concetti di programmazione orientata agli oggetti (OOPS), ecco alcuni dei concetti OOPS implementati nella programmazione Java.
- Astrazione
- Incassamento
- Polimorfismo
- Ereditarietà
- Associazione
- Aggregazione
- Composizione
Per saperne di più su di loro visita Concetti OOPS in Java.
9. Cosa intendi per indipendenza di piattaforma di Java?
L’indipendenza di piattaforma significa che è possibile eseguire lo stesso programma Java in qualsiasi sistema operativo. Ad esempio, è possibile scrivere un programma Java su Windows ed eseguirlo su Mac OS.
10. Cos’è JVM e è indipendente dalla piattaforma?
Java Virtual Machine (JVM) è il cuore del linguaggio di programmazione Java. JVM è responsabile della conversione del codice a byte in codice leggibile dalla macchina. JVM non è indipendente dalla piattaforma, ecco perché hai diversi JVM per diversi sistemi operativi. Possiamo personalizzare JVM con Java Options, come allocare memoria minima e massima a JVM. Si chiama virtuale perché fornisce un’interfaccia che non dipende dal sistema operativo sottostante.
11. Qual è la differenza tra JDK e JVM?
Java Development Kit (JDK) è per scopi di sviluppo e JVM ne è una parte per eseguire i programmi Java.
JDK fornisce tutti gli strumenti, gli eseguibili e le binarie richieste per compilare, eseguire il debug ed eseguire un programma Java. La parte di esecuzione è gestita da JVM per fornire l’indipendenza dalla macchina.
12. Qual è la differenza tra JVM e JRE?
Java Runtime Environment (JRE) è l’implementazione di JVM. JRE consiste di JVM e binarie Java e altre classi per eseguire con successo qualsiasi programma. JRE non contiene strumenti di sviluppo come il compilatore Java, debugger, ecc. Se si desidera eseguire qualsiasi programma Java, è necessario avere JRE installato.
13. Quale classe è la superclasse di tutte le classi?
java.lang.Object
è la classe di base per tutte le classi Java e non è necessario estenderla.
14. Perché Java non supporta l’ereditarietà multipla?
Java non supporta l’ereditarietà multipla nei classi a causa del “problema del diamante”. Per saperne di più sul problema del diamante con esempio, leggi Multiple Inheritance in Java.
Tuttavia, l’ereditarietà multipla è supportata negli interfacce. Un’interfaccia può estendere più interfacce perché dichiarano solo i metodi e la realizzazione sarà presente nella classe che implementa. Quindi non c’è alcun problema del diamante con le interfacce.
15. Perché Java non è considerato un linguaggio orientato agli oggetti puro?
Java non è considerato orientato agli oggetti puro perché supporta tipi primitivi come int, byte, short, long, ecc. Credo che questo apporti semplicità al linguaggio mentre si scrive il codice. Java potrebbe avere oggetti wrapper per i tipi primitivi, ma solo per la rappresentazione, non avrebbero fornito alcun beneficio.
Come sappiamo, per tutti i tipi primitivi abbiamo classi wrapper come Integer, Long ecc che forniscono alcuni metodi aggiuntivi.
16. Qual è la differenza tra le variabili di percorso (path) e classpath?
PATH è una variabile di ambiente utilizzata dall’operativo sistema per individuare gli eseguibili. Ecco perché quando installiamo Java o vogliamo che qualsiasi eseguibile sia individuato dall’OS, dobbiamo aggiungere la posizione della directory nella variabile PATH. Se lavori su Windows OS, leggi questo post per imparare come impostare la variabile PATH su Windows.
Classpath è specifico per Java e viene utilizzato dagli eseguibili Java per individuare i file di classe. Possiamo fornire la posizione della classpath durante l’esecuzione dell’applicazione Java ed essa può essere una directory, file ZIP, file JAR, ecc.
17. Qual è l’importanza del metodo main in Java?
Il metodo main() è il punto di ingresso di qualsiasi applicazione Java standalone. La sintassi del metodo main è public static void main(String args[])
.
Il metodo principale di Java è pubblico e statico in modo che il runtime di Java possa accedercelo senza inizializzare la classe. Il parametro di input è un array di String che ci permette di passare argomenti di runtime al programma Java. Dai un’occhiata a questo post per imparare come compilare e eseguire un programma Java.
18. Cos’è il sovraccarico e l’override in Java?
Quando abbiamo più metodi con lo stesso nome in una singola classe, ma i parametri sono diversi, allora si chiama sovraccarico del metodo.
Il concetto di override entra in gioco con l’ereditarietà quando abbiamo due metodi con la stessa firma, uno nella classe padre e un altro nella classe figlia. Possiamo utilizzare @Override nell’annotazione del metodo sovrascritto nella classe figlia per assicurarci che se il metodo della classe padre viene modificato, lo sia anche quello della classe figlia.
19. Possiamo sovraccaricare il metodo main()?
Sì, possiamo avere più metodi con il nome “main” in una singola classe. Tuttavia, se eseguiamo la classe, l’ambiente di runtime Java cercherà il metodo main con la sintassi come public static void main(String args[])
.
20. Possiamo avere più classi pubbliche in un file sorgente Java?
Non possiamo avere più di una classe pubblica in un singolo file sorgente Java. Un singolo file sorgente può avere più classi che non sono pubbliche.
21. Cos’è un Pacchetto Java e quale pacchetto viene importato per impostazione predefinita?
Un pacchetto Java è il meccanismo per organizzare le classi Java raggruppandole. La logica di raggruppamento può essere basata sulla funzionalità o su moduli. Una classe Java completamente classificata contiene il nome del pacchetto e il nome della classe. Ad esempio, java.lang.Object
è il nome completo della classe Object
che fa parte del pacchetto java.lang
.
Il pacchetto java.lang
viene importato per impostazione predefinita e non abbiamo bisogno di importare esplicitamente nessuna classe da questo pacchetto.
22. Cosa sono gli access modifiers in Java?
Java fornisce il controllo di accesso attraverso le parole chiave di accesso public, private e protected. Quando nessuna di queste viene utilizzata, viene chiamato accesso di default.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. Cos’è la parola chiave final?
La parola chiave final viene utilizzata con la classe per assicurarsi che nessun’altra classe possa estenderla. Ad esempio, la classe String è final e non possiamo estenderla.
Possiamo usare la parola chiave final con i metodi per assicurarsi che le classi figlie non possano sovrascriverla.
La parola chiave final di Java può essere utilizzata con le variabili per assicurarsi che possa essere assegnata una sola volta. Tuttavia, lo stato della variabile può essere cambiato, ad esempio, possiamo assegnare una variabile final a un oggetto una sola volta, ma le variabili dell’oggetto possono cambiare in seguito.
Le variabili dell’interfaccia Java sono per impostazione predefinita final e static.
24. Cos’è la parola chiave static?
Il modificatore statico può essere utilizzato con variabili a livello di classe per renderlo globale, ovvero tutti gli oggetti condivideranno la stessa variabile.
Possiamo utilizzare il modificatore statico con i metodi anche. Un metodo statico può accedere solo a variabili statiche della classe e richiamare solo metodi statici della classe.
Per ulteriori dettagli, leggi java static keyword.
25. Cos’è finally e finalize in java?
Il blocco finally viene utilizzato con try-catch per inserire il codice che si desidera eseguire sempre, anche se viene generata un’eccezione dal blocco try-catch. Il blocco finally viene utilizzato principalmente per liberare le risorse create nel blocco try.
Il finalize() è un metodo speciale nella classe Object che possiamo sovrascrivere nelle nostre classi. Questo metodo viene chiamato dal garbage collector quando l’oggetto viene raccolto a causa della spazzatura. Questo metodo viene generalmente sovrascritto per rilasciare le risorse del sistema quando l’oggetto viene raccolto a causa della spazzatura.
26. Possiamo dichiarare una classe come static?
Non possiamo dichiarare una classe di primo livello come statica, tuttavia una classe interna può essere dichiarata come statica. Se la classe interna è dichiarata come statica, viene chiamata classe nidificata statica.
La classe nidificata statica è la stessa di qualsiasi altra classe di primo livello e viene nidificata solo per comodità di packaging.
Per saperne di più sulle classi interne, consulta java inner class.
27. Cos’è l’importazione statica?
Se dobbiamo utilizzare una qualsiasi variabile o metodo statico da un’altra classe, di solito importiamo la classe e poi utilizziamo il metodo/variabile con il nome della classe.
Possiamo fare la stessa cosa importando solo il metodo o la variabile statica e poi usarlo nella classe come se appartenesse ad essa.
L’uso dell’importazione statica può causare confusione, quindi è meglio evitarla. L’abuso dell’importazione statica può rendere il tuo programma poco leggibile e difficile da mantenere.
28. Cos’è try-with-resources in Java?
Una delle caratteristiche di Java 7 è la dichiarazione try-with-resources per la gestione delle risorse automatiche. Prima di Java 7, non c’era una gestione automatica delle risorse e dovremmo chiudere esplicitamente la risorsa. Di solito, veniva fatto nel blocco finally
di una dichiarazione try-catch. Questo approccio causava perdite di memoria quando dimentichiamo di chiudere la risorsa.
A partire da Java 7, possiamo creare risorse all’interno del blocco try e usarle. Java si prende cura di chiuderle non appena il blocco try-catch viene terminato. Leggi di più su Gestione delle risorse automatiche in Java.
29. Cos’è un blocco multi-catch in java?
Java 7 ha introdotto un miglioramento con il blocco multi-catch, dove possiamo catturare più eccezioni in un singolo blocco catch. Ciò rende il nostro codice più breve e più pulito quando ogni blocco catch ha un codice simile.
Se un blocco catch gestisce più eccezioni, puoi separarle utilizzando una barra verticale (|) e in questo caso, il parametro dell’eccezione (ex) è finale, quindi non puoi cambiarlo.
Leggi di più su Java multi catch block.
30. Cos’è un blocco statico?
Un blocco statico in Java è un insieme di istruzioni che viene eseguito quando la classe viene caricata in memoria dal Java ClassLoader. Viene utilizzato per inizializzare le variabili statiche della classe. Di solito viene utilizzato per creare risorse statiche quando la classe viene caricata.
31. Cos’è un’interfaccia?
Le interfacce sono concetti fondamentali del linguaggio di programmazione Java e vengono utilizzate molto non solo nel JDK ma anche nei design pattern Java, nella maggior parte dei framework e strumenti. Le interfacce forniscono un modo per ottenere l’astrazione in Java e vengono utilizzate per definire il contratto per le sottoclassi da implementare.
Le interfacce sono buone per un punto di partenza per definire il tipo e creare la gerarchia di livello superiore nel nostro codice. Poiché una classe Java può implementare più interfacce, è meglio utilizzare le interfacce come classe superiore nella maggior parte dei casi. Leggi di più su interfaccia Java.
32. Cos’è una classe astratta?
Le classi astratte vengono utilizzate in Java per creare una classe con alcune implementazioni di metodi predefinite per le sottoclassi. Una classe astratta può avere un metodo astratto senza corpo e può avere anche metodi con implementazione.
La parola chiave abstract viene utilizzata per creare una classe astratta. Le classi astratte non possono essere istantiate e vengono principalmente utilizzate per fornire una base alle sottoclassi per estendere e implementare i metodi astratti e sovrascrivere o utilizzare i metodi implementati nella classe astratta. Leggi i punti importanti sulle classi astratte su classe astratta Java.
33. Qual è la differenza tra classe astratta e interfaccia?
- La parola chiave abstract viene utilizzata per creare una classe astratta, mentre l’interfaccia è la parola chiave per le interfacce.
- Le classi astratte possono avere implementazioni di metodi, mentre le interfacce no.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Possiamo eseguire una classe astratta se ha un metodo main(), mentre non possiamo eseguire un’interfaccia.
Alcune differenze più dettagliate si trovano al Differenza tra classe astratta e interfaccia.
34. Un’interfaccia può implementare o estendere un’altra interfaccia?
Le interfacce non implementano un’altra interfaccia, ma la estendono. Poiché le interfacce non possono avere implementazioni di metodi, non sorge il problema del diamante. Ecco perché abbiamo l’ereditarietà multipla nelle interfacce, ovvero un’interfaccia può estendere più interfacce.
A partire da Java 8, le interfacce possono avere implementazioni di metodi predefiniti. Quindi, per gestire il problema del diamante quando un metodo predefinito comune è presente in più interfacce, è obbligatorio fornire l’implementazione del metodo nella classe che le implementa. Per ulteriori dettagli con esempi, leggi Modifiche all’interfaccia di Java 8.
35. Cos’è un’interfaccia marcatore?
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. Cos’è la classe Wrapper?
Le classi wrapper in Java sono la rappresentazione degli oggetti delle otto tipologie primitive in Java. Tutte le classi wrapper in Java sono immutabili e finali. Java 5 autoboxing e unboxing consentono una conversione facile tra tipologie primitive e le loro classi wrapper corrispondenti.
Per saperne di più su Classi wrapper in Java.
37. Cos’è Enum in Java?
Enum è stato introdotto in Java 1.5 come un nuovo tipo i cui campi consistono in un set fisso di costanti. Ad esempio, in Java, possiamo creare la direzione come enum con campi fissi come EST, OVEST, SUD, NORD.
enum è la parola chiave per creare un tipo enum e simile alla classe. Le costanti enum sono implicitamente statiche e finali. Per saperne di più in dettaglio su java enum.
38. Cos’è Java Annotations?
Le annotazioni Java forniscono informazioni sul codice e non hanno un effetto diretto sul codice che annotano. Le annotazioni sono state introdotte in Java 5. L’annotazione è metadati sul programma incorporati nel programma stesso. Può essere analizzato dall’analizzatore di annotazioni o dal compilatore. Possiamo anche specificare la disponibilità dell’annotazione solo a tempo di compilazione o fino all’esecuzione. Le annotazioni integrate in Java sono @Override, @Deprecated e @SuppressWarnings. Leggi di più su annotazioni Java.
39. Cos’è l’API di Reflection di Java e perché è così importante?
L’API di Reflection di Java fornisce la possibilità di ispezionare e modificare il comportamento a runtime dell’applicazione Java. Possiamo ispezionare una classe Java, un’interfaccia, un’enumerazione e ottenere i dettagli dei loro metodi e campi. L’API di Reflection è un argomento avanzato e dovremmo evitarlo nella programmazione normale. L’uso dell’API di Reflection può rompere il pattern di progettazione come il pattern Singleton invocando il costruttore privato, violando così le regole dei modificatori di accesso.
Anche se non usiamo l’API Reflection nella programmazione normale, è molto importante avere. Non possiamo avere alcun framework come Spring, Hibernate o server come Tomcat, JBoss senza l’API Reflection. Essi invocano i metodi appropriati e instanziano le classi attraverso l’API Reflection e la usano molto per altri processi.
Leggi Java Reflection Tutorial per ottenere una conoscenza approfondita dell’API Reflection.
40. Cos’è la Composizione in java?
La composizione è la tecnica di progettazione per implementare una relazione has-a nelle classi. Possiamo usare la composizione degli oggetti per il riuso del codice.
La composizione Java è ottenuta utilizzando variabili di istanza che fanno riferimento ad altri oggetti. Il vantaggio dell’uso della composizione è che possiamo controllare la visibilità degli altri oggetti alle classi client e riusare solo ciò di cui abbiamo bisogno. Leggi di più con esempio a Java Composition esempio.
41. Qual è il vantaggio della Composizione rispetto all’Ereditarietà?
Una delle migliori pratiche della programmazione Java è “favorire la composizione rispetto all’ereditarietà”. Alcuni dei possibili motivi sono:
- Qualsiasi modifica nella superclasse potrebbe influenzare la sottoclasse anche se potremmo non utilizzare i metodi della superclasse. Ad esempio, se abbiamo un metodo test() nella sottoclasse e improvvisamente qualcuno introduce un metodo test() nella superclasse, otterremo errori di compilazione nella sottoclasse. La composizione non avrà mai questo problema perché stiamo utilizzando solo i metodi di cui abbiamo bisogno.
- L’ereditarietà espone tutti i metodi e le variabili della superclasse al cliente e se non abbiamo controllo nella progettazione della superclasse, può portare a falle di sicurezza. La composizione ci consente di fornire un accesso limitato ai metodi e quindi maggiore sicurezza.
- Possiamo ottenere il binding a runtime nella composizione dove l’ereditarietà lega le classi a tempo di compilazione. Quindi la composizione fornisce flessibilità nell’invocazione dei metodi.
Puoi leggere ulteriori informazioni sui vantaggi della composizione rispetto all’ereditarietà su java composition vs inheritance.
42. Come ordinare una collezione di oggetti personalizzati in Java?
Dobbiamo implementare l’interfaccia Comparable per supportare l’ordinamento di oggetti personalizzati in una collezione. L’interfaccia Comparable ha il metodo compareTo(T obj) che è utilizzato dai metodi di ordinamento e fornendo questa implementazione del metodo, possiamo fornire un modo predefinito per ordinare la collezione di oggetti personalizzati.
Tuttavia, se si desidera ordinare in base a criteri diversi, come ad esempio ordinare una collezione di dipendenti in base allo stipendio o all’età, allora possiamo creare istanze di Comparator e passarle come metodologia di ordinamento. Per ulteriori dettagli leggere Java Comparable and Comparator.
43. Cos’è una classe interna in Java?
Possiamo definire una classe all’interno di un’altra classe e sono chiamate classi nidificate. Qualsiasi classe nidificata non statica è nota come classe interna. Le classi interne sono associate all’oggetto della classe e possono accedere a tutte le variabili e ai metodi della classe esterna. Poiché le classi interne sono associate all’istanza, non possiamo avere alcune variabili statiche in esse.
Possiamo avere una classe interna locale o una classe interna anonima all’interno di una classe. Per ulteriori dettagli leggere java inner class.
44. Cos’è una classe interna anonima?
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
Dato che una classe anonima non ha un nome, non è possibile definire un costruttore per una classe anonima. Le classi interne anonime sono accessibili solo nel punto in cui vengono definite.
45. Cos’è un Classloader in Java?
Il Classloader di Java è il programma che carica il programma bytecode in memoria quando vogliamo accedere a una qualsiasi classe. Possiamo creare il nostro Classloader estendendo la classe ClassLoader e sovrascrivendo il metodo loadClass(String name). Per saperne di più, visita java classloader.
46. Quali sono i diversi tipi di classloader?
Ci sono tre tipi di classloader integrati in Java.
- Bootstrap ClassLoader – Carica le classi interne di JDK, tipicamente carica rt.jar e altre classi di base.
- Caricatore di classi delle estensioni – Carica classi dalla directory delle estensioni JDK, di solito la directory $JAVA_HOME/lib/ext.
- Caricatore di classi di sistema – Carica classi dal percorso di classe corrente che può essere impostato durante l’invocazione di un programma usando le opzioni della riga di comando -cp o -classpath.
47. Cos’è l’operatore ternario in Java?
L’operatore ternario Java è l’unico operatore condizionale che prende tre operandi. È una sostituzione in una sola riga per l’istruzione if-then-else e viene utilizzato molto nella programmazione Java. Possiamo utilizzare l’operatore ternario per condizioni if-else o addirittura condizioni switch usando operatori ternari nidificati. Un esempio può essere trovato su operatore ternario Java.
48. Cosa fa la parola chiave super?
La parola chiave super può essere utilizzata per accedere al metodo della superclasse quando si è sovrascritto il metodo nella classe figlia.
Possiamo utilizzare la parola chiave super per invocare i costruttori della superclasse nel costruttore della classe figlia ma, in questo caso, dovrebbe essere la prima istruzione nel metodo del costruttore.
L’uso della parola chiave super può essere visto nell’implementazione della classe figlia sottostante.
49. Cosa sono le istruzioni break e continue?
Possiamo utilizzare l’istruzione break per terminare i cicli for, while o do-while. Possiamo utilizzare un’istruzione break nello statement switch per uscire dal caso switch. Puoi vedere l’esempio dell’istruzione break su java break. Possiamo utilizzare un break con l’etichetta per terminare i cicli nidificati.
L’istruzione continue salta l’iterazione corrente di un ciclo for, while o do-while. Possiamo utilizzare l’istruzione continue con l’etichetta per saltare l’iterazione corrente del ciclo più esterno.
50. Cos’è la parola chiave this in Java?
Questa parola chiave fornisce il riferimento all’oggetto corrente ed è principalmente utilizzata per assicurarsi che le variabili dell’oggetto siano utilizzate, non le variabili locali con lo stesso nome.
Possiamo anche usare questa parola chiave per invocare altri costruttori da un costruttore.
51. Qual è il costruttore predefinito?
Il costruttore senza argomenti di una classe è conosciuto come costruttore predefinito. Quando non definiamo alcun costruttore per la classe, il compilatore Java crea automaticamente il costruttore predefinito senza argomenti per la classe. Se sono definiti altri costruttori, allora il compilatore non creerà il costruttore predefinito per noi.
52. Possiamo avere un try senza blocco catch?
Sì, possiamo avere l’istruzione try-finally e quindi evitare il blocco catch.
53. Cos’è la Garbage Collection?
La Garbage Collection è il processo di esaminare la memoria heap, identificare quali oggetti sono in uso e quali non lo sono, e eliminare gli oggetti non utilizzati. In Java, il processo di deallocazione della memoria è gestito automaticamente dal raccoglitore di rifiuti.
Possiamo eseguire il garbage collector con il codice Runtime.getRuntime().gc()
o utilizzare il metodo di utilità System.gc()
. Per un’analisi dettagliata della Memoria dell’Heap e della Garbage Collection, si prega di leggere Java Garbage Collection.
54. Cos’è la Serializzazione e la Deserializzazione?
Possiamo convertire un oggetto Java in uno Stream che viene chiamato Serializzazione. Una volta che un oggetto è convertito in Stream, può essere salvato su file o inviato tramite la rete o utilizzato nelle connessioni socket.
L’oggetto dovrebbe implementare un’interfaccia Serializable e possiamo utilizzare java.io.ObjectOutputStream per scrivere gli oggetti su file o su qualsiasi oggetto OutputStream. Per ulteriori informazioni, leggere su Java Serialization.
Il processo di conversione dei dati di flusso creati tramite serializzazione in Oggetto è chiamato deserializzazione. Per ulteriori informazioni, leggere su Java Deserialization.
Come eseguire un file JAR tramite prompt dei comandi?
È possibile eseguire un file JAR utilizzando il comando java, ma richiede un’entrata Main-Class nel file manifesto del JAR. Main-Class è il punto di ingresso del JAR e utilizzato dal comando java per eseguire la classe. Per saperne di più su file JAR Java.
Qual è l’uso della classe System?
La classe System di Java è una delle classi principali. Uno dei modi più semplici per registrare informazioni per il debug è il metodo System.out.print().
La classe System è finale quindi non possiamo sottoclassificarla e sovrascrivere il suo comportamento tramite l’ereditarietà. La classe System non fornisce costruttori pubblici, quindi non possiamo istanziare questa classe e quindi tutti i suoi metodi sono statici.
Alcuni dei metodi di utilità della classe System sono per la copia di array, per ottenere l’ora corrente, per leggere le variabili d’ambiente. Per saperne di più su Classe System di Java.
57. Qual è la parola chiave instanceof?
Possiamo usare la parola chiave instanceof per verificare se un oggetto appartiene o meno a una classe. Dovremmo evitare il suo utilizzo il più possibile. Un esempio di utilizzo è:
Dato che str è di tipo String al runtime, la prima istruzione if valuta a vero e la seconda a falso.
58. Possiamo usare String con switch case?
Una delle caratteristiche di Java 7 era il miglioramento della gestione di switch case per consentire l’utilizzo di Stringhe. Quindi, se stai usando Java 7 o una versione successiva, puoi utilizzare le Stringhe nelle istruzioni switch-case. Leggi di più su esempio di switch-case String in Java.
59. Java è Pass by Value o Pass by Reference?
Questa è una domanda molto confusa, sappiamo che le variabili di oggetto contengono il riferimento agli oggetti nello spazio heap. Quando si invoca un metodo, una copia di queste variabili viene passata e memorizzata nella memoria stack del metodo. Possiamo testare qualsiasi linguaggio, che sia per passaggio per riferimento o per passaggio per valore, attraverso un semplice metodo di scambio generico, per saperne di più leggi Java è Pass By Value e Non Pass By Reference.
60. Qual è la differenza tra la memoria Heap e Stack?
Le principali differenze tra la memoria Heap e Stack sono le seguenti:
- La memoria Heap è utilizzata da tutte le parti dell’applicazione mentre la memoria stack è utilizzata solo da un singolo thread di esecuzione.
- Ogni volta che viene creato un oggetto, viene sempre memorizzato nello spazio Heap e la memoria stack contiene il riferimento ad esso. La memoria stack contiene solo variabili primitive locali e variabili di riferimento agli oggetti nello spazio heap.
- La gestione della memoria nello stack avviene in modo LIFO mentre è più complessa nella memoria Heap perché è utilizzata globalmente.
Per una spiegazione dettagliata con un programma di esempio, leggi Java Heap vs Stack Memory.
61. Il compilatore Java è memorizzato in JDK, JRE o JVM?
Il compito del compilatore Java è quello di convertire il programma Java in bytecode, abbiamo l’eseguibile javac
per questo. Quindi deve essere memorizzato in JDK, non ne abbiamo bisogno in JRE e JVM sono solo le specifiche.
62. Qual sarà l’output dei seguenti programmi?
Contesto: metodo statico nella classe
Risposta: Il codice non compilerà perché non possiamo avere un metodo della classe Object con la parola chiave statica. Nota che la classe Object ha il metodo toString(). Otterrai un errore di compilazione come “Questo metodo statico non può nascondere il metodo di istanza da Object”. Il motivo è che il metodo statico appartiene alla classe e poiché ogni classe di base è un Object, non possiamo avere lo stesso metodo sia nell’istanza che nella classe. Non otterrai questo errore se cambi il nome del metodo da toString() a qualcos’altro che non è presente nella superclasse Object
.
Contesto: invocazione del metodo statico
Risposta: Beh, questa è una situazione strana. Tutti abbiamo visto NullPointerException
quando invochiamo un metodo sull’oggetto che è NULL. Ma qui questo programma funzionerà e stamperà “Test foo called”.
Il motivo di ciò è l’ottimizzazione del codice del compilatore Java. Quando il codice Java viene compilato per produrre bytecode, si capisce che foo() è un metodo statico e dovrebbe essere chiamato usando la classe. Quindi cambia la chiamata del metodo obj.foo()
in Test.foo()
e quindi non c’è nessun NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
Questo è tutto per le domande e risposte dell’intervista di base su Java. Continuerò ad aggiungere più domande alla lista, se pensi che ne abbia saltata qualcuna importante, fammelo sapere nei commenti.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers