15 Technical Core Java Interview Questions Risposte per sviluppatori esperti
Quando l’esperienza di un programmatore Java cresce negli anni, ad esempio quando passa dagli anni principianti ( da 2 a 4) a più esperienza o tipo di livello senior ( da 5 a 7 anni), anche le domande di intervista Java core cambiano un po’. Naturalmente, le basi come la struttura dei dati, gli algoritmi e la programmazione orientata agli oggetti rimangono le stesse, ma i tipi di domande diventeranno più avanzati e le loro risposte dovranno sicuramente essere più dettagliate e accurate. Ricevo spesso domande su domande Java di base poste a uno sviluppatore senior di 5 a 6 anni di esperienza, o, a volte, sto andando per un’intervista di senior Java developer, che tipo di domande dovrei aspettarmi. Questo a volte mi lascia perplesso, che una volta diventato senior, inizi automaticamente a prendere parte all’intervista, e dovresti avere un’idea di cosa aspettarti nelle interviste, ma allo stesso tempo, posso capire che avere un’idea delle domande prima di andare all’intervista, aiuta la preparazione. Naturalmente, non hai intenzione di ottenere una domanda come quella che hai affrontato in interviste Java a livello di 2 o 3 anni, ma dipende anche da diversi round di interviste.
Non ho visto molti cambiamenti nelle domande poste sul round telefonico, che rimane quasi lo stesso. Troverai alcune domande basate sui fatti, alcune domande di codifica e alcune domande difficili. D’altra parte faccia a faccia, le interviste sono diventate più dettagliate e più complicate, specialmente con follow-up cattivi.
In questo articolo, ho intenzione di condividere alcuni 15 nucleo tecnico Java Intervista Domande, che ho visto chiesto sviluppatori senior ed esperti di 4 a 6 anni di esperienza in diverse interviste, per lo più su turni telefonici. Non sto postando risposte al momento, ma puoi trovare le risposte alla maggior parte delle domande qui o sul blog Javarevisited.
Se siete di fretta e attivamente alla ricerca di un lavoro sviluppatore Java, si può anche prendere l’aiuto di alcuni buoni libri scritti per preparare per le interviste Java J2EE. Libri come, Java Programming Interview Exposed copre tutti gli argomenti importanti sia per le interviste core Java e Java EE, che includono domande Java di base, struttura dati e algoritmi, interni JVM e messa a punto GC, domande Hibernate e Spring interview, domande JUnit ant unit testing e alcune cose Java 8.
Copre anche la conoscenza di altre lingue JVM come Scala, Groovy e altre piattaforme come Android. Un compagno perfetto per fare bene nelle interviste Java.
Se si vuole preparare di più sul lato di codifica, allora si può anche verificare Cracking the Coding Interview, che contiene quasi 150 domande di programmazione e soluzioni da interviste tecniche di grandi aziende tecnologiche come Amazon, Facebook, Google, Twitter, e Microsoft.
15 Domande Java di base per 5 a 6 anni di esperienza
Tutte queste domande sono state raccolte da sviluppatori abbastanza anziani, che ha almeno 5 anni di esperienza. Hanno visto queste domande su diversi round delle loro interviste Java di base, tra cui round telefonici e faccia a faccia su diverse società, per lo più su banche d’investimento come Barclays, Morgan, RBS e altri.
Che cosa è occupato di filatura? Perché dovresti usarlo in Java?
Una delle interessanti domande di multithreading per i programmatori Java senior, busy spinning è una strategia di attesa, in cui un thread aspetta solo in un ciclo, senza rilasciare la CPU per andare a dormire. Questa è una strategia di attesa molto avanzata e specializzata utilizzata nell’applicazione di trading ad alta frequenza quando il tempo di attesa tra due messaggi è molto minimo.
Non rilasciando la CPU o sospendendo il thread, il thread mantiene tutti i dati e le istruzioni memorizzati nella cache, che potrebbero essere persi se il thread è stato sospeso e ripreso in un altro core della CPU.
Questa domanda è molto popolare nel dominio di programmazione a bassa latenza ad alta frequenza, dove i programmatori stanno cercando una latenza estremamente bassa nell’intervallo da micro a millisecondi. Vedi qui più 50 + domande di intervista thread avanzate per programmatori esperti.
Che cos’è il blocco lettura-scrittura? ConcurrentHashMap in Java utilizza il blocco ReadWrite?
ReadWrite Lock è un’implementazione di una tecnica di blocco stripping, in cui due blocchi separati vengono utilizzati per la lettura e l’operazione di scrittura. Poiché l’operazione di lettura non modifica lo stato dell’oggetto, è sicuro consentire l’accesso a più thread a un oggetto condiviso per la lettura senza bloccare e suddividendo un blocco nel blocco di lettura e scrittura, è possibile farlo facilmente.
Java fornisce un’implementazione di un blocco di lettura-scrittura nella forma della classe ReentrantReadWritLock in java.util.simultaneo.pacchetto di blocco. Vale la pena guardare prima di decidere di scrivere la propria implementazione di blocco di lettura-scrittura.
Inoltre, l’attuale implementazione di java.util.ConcurrentHashMap non utilizza ReadWriteLock, ma divide la mappa in diversi segmenti e li blocca separatamente utilizzando blocchi diversi. Ciò significa che in un dato momento, solo una parte della ConcurrentHashMap è bloccata, invece dell’intera mappa. Vedi come ConcurrentHashMap funziona internamente in Java per maggiori dettagli.
Questa domanda Java di base è anche molto popolare nelle interviste Java di livello senior e più esperto, ad esempio da 4 a 6 anni, in cui ci si aspetta che l’Intervistatore entri più in dettaglio, ad esempio chiedendo di fornire un’implementazione del blocco di lettura-scrittura con politiche diverse. Se sei un programmatore Java esperto, considera la lettura della concorrenza Java in pratica per ottenere maggiore sicurezza sul multithreading e sulla concorrenza in Java.
Come rendere un oggetto immutabile in Java? Perché dovresti rendere un oggetto immutabile?
Bene, l’immutabilità offre diversi vantaggi tra cui la sicurezza del thread, la capacità di memorizzare nella cache e il risultato in un codice multithreading più leggibile. Vedi qui per imparare come rendere gli oggetti immutabili. Ancora una volta, questa domanda può anche entrare più in dettaglio e, a seconda della risposta, può portare diverse altre domande, ad esempio quando menzioni che Spring è Immutabile, sii pronto con alcuni motivi sul Perché String è Immutabile in Java.
Quali modelli di progettazione hai usato nel tuo progetto Java?
Aspettatevi sempre qualche domanda relativa ai modelli di progettazione per l’intervista Java Core della posizione di sviluppatore senior. È una strategia migliore menzionare qualsiasi modello di progettazione GOF piuttosto che Singleton o MVC, che quasi tutti gli altri sviluppatori Java lo usano.
La soluzione migliore può essere un modello di decoratore o forse un modello di iniezione di dipendenza, che è molto popolare nel framework Spring. È anche bene menzionare solo i modelli di progettazione che hai effettivamente utilizzato nel tuo progetto e sa che sono compromessi.
È comune che una volta menzionato un particolare modello di progettazione, ad esempio Fabbrica o Fabbrica astratta, la prossima domanda dell’intervistatore sarebbe: hai usato questo modello nel tuo progetto? Quindi sii pronto con esempi appropriati e perché scegli un modello particolare. Puoi anche vedere questo articolo per domande più avanzate sul modello di progettazione dalle interviste Java.
Conosci il principio di progettazione aperto chiuso o il principio di sostituzione di Liskov?
I modelli di progettazione si basano su principi di progettazione orientati agli oggetti, che ho fortemente ritenuto che ogni sviluppatore orientato agli oggetti e il programmatore dovrebbero conoscere, o, almeno, avere un’idea di base di quali sono questi principi e come ti aiutano a scrivere un codice orientato agli oggetti migliore. I
se non conosci la risposta a questa domanda, puoi educatamente dire di no, poiché non ci si aspetta da te di conoscere la risposta a ogni domanda, ma rispondendo a questa domanda, puoi rendere la tua richiesta più forte poiché molti sviluppatori esperti non riescono a rispondere a domande di base come questa. Vedere Clean Code ulteriori informazioni sui principi di progettazione SOLIDI e orientati agli oggetti.
Quale modello di progettazione utilizzerai per proteggere il tuo codice da una libreria di terze parti che probabilmente verrà sostituita da un’altra in un paio di mesi?
Questo è solo un esempio della domanda di intervista del modello di progettazione basata su scenari. Al fine di testare l’esperienza pratica degli sviluppatori Java con più di 5 anni di esperienza, le aziende chiedono questo tipo di domanda. Ci si può aspettare più problemi di progettazione del mondo reale in diversi formati, alcuni con una spiegazione più dettagliata con il contesto, o alcuni con il solo intento in giro.
Un modo per proteggere il codice da una libreria di terze parti è quello di codificare un’interfaccia piuttosto che l’implementazione e quindi utilizzare l’iniezione di dipendenze per fornire una particolare implementazione. Questo tipo di domanda viene anche chiesto abbastanza frequentemente agli sviluppatori Java esperti e senior con 5 o 7 anni di esperienza.
Domanda 7) Come si impedisce l’iniezione SQL nel codice Java?
Questa domanda è più richiesta agli sviluppatori J2EE e Java EE rispetto agli sviluppatori Java core, ma è comunque una buona domanda verificare l’abilità JDBC e di sicurezza dei programmatori Java esperti.
È possibile utilizzare PreparedStatement per evitare l’iniezione SQL nel codice Java. L’uso di PreparedStatement per l’esecuzione di query SQL non solo fornisce prestazioni migliori, ma protegge anche l’applicazione Java e J2EE dall’attacco SQL Injection.
In una nota simile, se stai lavorando di più su Java EE o J2EE, dovresti anche avere familiarità con altri problemi di sicurezza, tra cui l’attacco di fissazione della sessione o l’attacco di scripting cross-site e come risolverli. Questi sono alcuni campi e domande in cui una buona risposta può fare molta differenza nella tua selezione.
Domanda 8) Parlami di diversi tipi di riferimento disponibili in Java, ad esempio WeakReference, SoftReference o PhantomReference? e perché dovresti usarli?
Beh, sono diversi tipi di riferimento provenienti da java.lang.ref package e fornito per assistere Java Garbage Collector in caso di problemi di memoria insufficiente. Se avvolgi un oggetto con WeakReference, sarà idoneo per la raccolta dei rifiuti se ci sono riferimenti forti. In seguito possono essere recuperati dal Garbage collector se la JVM è a corto di memoria.
Il java.util.WeakHashMap è un’implementazione speciale della mappa, le cui chiavi sono l’oggetto di WeakReference, quindi se solo Map contiene il riferimento di qualsiasi oggetto e nessun altro, quegli oggetti possono essere raccolti in garbage se GC ha bisogno di memoria. Vedere Java Performance The Definitive Guide ulteriori informazioni su come affrontare i problemi di prestazioni in Java.
Domanda 9) Come funziona il metodo get di HashMap in Java?
Sì, questa è ancora una delle domande core Java più popolari per le interviste agli sviluppatori senior. Puoi anche aspettarti questa domanda sul round telefonico, seguito da molte domande di follow-up come discusso nel mio post come funziona HashMap in Java.
La risposta breve a questa domanda è che HashMap si basa sulla struttura dei dati della tabella hash e utilizza il metodo hashCode() per calcolare il codice hash per trovare la posizione del bucket sull’array sottostante e il metodo equals() per cercare l’oggetto nello stesso bucket in caso di collisione. Vedi qui per saperne di più su come funziona il metodo get() di HashMap in Java.
Domanda 10) Quali due metodi HashMap key Object dovrebbero implementare?
Questa è una delle domande di follow-up che stavo dicendo nelle domande precedenti. Poiché il lavoro di HashMap si basa sulla struttura dei dati della tabella hash, qualsiasi oggetto che si desidera utilizzare come chiave per HashMap o qualsiasi altra raccolta basata su hash, ad esempio Hashtable o ConcurrentHashMap, deve implementare il metodo equals() e hashCode ().
L’hashCode() viene utilizzato per trovare la posizione del bucket, ovvero l’indice dell’array sottostante e il metodo equals() viene utilizzato per trovare l’oggetto giusto in un elenco collegato memorizzato nel bucket in caso di collisione. A proposito, da Java 8, HashMap ha anche iniziato a utilizzare una struttura dati ad albero per memorizzare l’oggetto in caso di collisione per ridurre le prestazioni del caso peggiore di HashMap da O(n) a O(logN). Vedere l’articolo per saperne di più su come funziona HashMap senza mani collisioni in Java.
Domanda 11) Perché un oggetto usato come chiave dovrebbe essere Immutabile?
Questo è un altro follow-up delle precedenti domande di intervista Java core. È bene testare la profondità delle conoscenze tecniche dei candidati ponendo sempre più domande sullo stesso argomento. Se conosci l’immutabilità, puoi rispondere a questa domanda da solo. La risposta breve a questa domanda è key dovrebbe essere immutabile in modo che il metodo hashCode() restituisca sempre lo stesso valore.
Poiché il codice hash restituito dal metodo hashCode() dipende dal contenuto dell’oggetto, ovvero dai valori delle variabili membro. Se un oggetto è mutabile di quei valori può cambiare e così è il codice hash. Se lo stesso oggetto restituisce un codice hash diverso una volta inserito il valore in HashMap, si finirà per cercare in diverse posizioni del bucket e non sarà in grado di recuperare l’oggetto. Ecco perché un oggetto chiave dovrebbe essere immutabile. Non è una regola applicata dal compilatore, ma dovresti prendertene cura come programmatore esperto. Vedere l’articolo per domande più avanzate intervista Java Collection.
Domanda 12) In che modo ConcurrentHashMap raggiunge la sua scalabilità?
A volte viene posta anche questa domanda di intervista multithreading + collection come, la differenza tra ConcurrentHashMap e Hashtable in Java. Il problema con HashMap sincronizzato o Hashtable era che l’intera mappa è bloccata quando un thread esegue qualsiasi operazione con Map.
Il java.util.La classe ConcurrentHashMap risolve questo problema utilizzando una tecnica di blocco, in cui l’intera mappa è bloccata in segmenti diversi e solo un particolare segmento viene bloccato durante l’operazione di scrittura, non l’intera mappa. ConcurrentHashMap raggiunge anche la sua scalabilità consentendo letture senza blocco come read è un’operazione thread-safe. Vedi qui per domande più avanzate di multi-threading e concorrenza in Java.
Domanda 13) Come si condivide un oggetto tra i thread? o Come passare un oggetto da un thread all’altro?
Ci sono diversi modi per farlo, ad esempio Code, scambiatori, ecc., ma BlockingQueue utilizzando il modello Produttore-consumatore è il modo più semplice per passare un oggetto da thread a un altro.
Domanda 14) Come trovare se il tuo programma ha un deadlock?
Prendendo thread dump usando kill -3, usando JConsole o VisualVM), suggerisco di preparare questa domanda di intervista java di base in modo più dettagliato, poiché all’Intervistatore piace sicuramente andare con più dettagli, ad esempio premeranno con domande come, l’hai davvero fatto nel tuo progetto o no?
Domanda 15 )Come si evita il deadlock durante la codifica?
Assicurando che i blocchi vengano acquisiti e rilasciati in modo ordinato, vedi qui per una risposta dettagliata a questa domanda.
Questo è tutto in questo elenco di domande di intervista Java di base per sviluppatori senior e programmatori esperti. Non ho incluso molte domande da altri argomenti importanti come la gestione delle eccezioni, la messa a punto della Garbage Collection e gli interni JVM, che è anche molto popolare tra i programmatori Java con 5-6 anni di esperienza, forse li includerò nella prossima parte.
A proposito, se non trovi la risposta a nessuna di queste domande principali di Java, fammi sapere. Posso aggiornare il post con un’opzione più dettagliata, in base alla richiesta del mio lettore.
Ulteriore apprendimento
La Masterclass Java completa
Java Fundamentals: Il Linguaggio Java
Java Correlate Intervista Domande su altri argomenti
- Java Domande per Telefono a Schermo Interviste (elenco)
- Thread e di Concorrenza di Domande da Java Interviste (elenco)
- Java Enum Intervista Domande e Risposte (elenco)
- Java OOP Domande di Intervista con le Risposte (elenco)
- Spring MVC Intervista Domande e Risposte (elenco)
- Hibernate Domande di Intervista con le Risposte (elenco)
- JDBC Intervista Domande e Risposte (elenco)
- Array Concetto di Domande di Intervista in Java (elenco)
- RESTful Web Service Intervista Domande (elenco)
- Servlet e JSP Intervista Domande e risposte (elenco)
- Java Web Service Intervista Domande e risposte (elenco)
Leave a Reply