Domande a cui ogni buon sviluppatore Java / Java EE dovrebbe essere in grado di rispondere? [chiuso]


138

Stavo esaminando le domande a cui ogni buon sviluppatore .Net dovrebbe essere in grado di rispondere e sono rimasto molto colpito dal contenuto e dall'approccio di questa domanda, e quindi con lo stesso spirito, sto ponendo questa domanda per Java / Java EE Developer.

A quali domande pensi che dovrebbe essere in grado di rispondere un buon programmatore EE Java / Java?

Sto contrassegnando questa domanda come wiki della comunità in quanto non è specifica dell'utente e mira a servire la comunità di programmazione in generale.

In attesa di risposte sorprendenti.

EDIT : per favore, rispondi anche alle domande, come suggerito nei commenti, in modo che le persone possano imparare qualcosa di nuovo anche riguardo alla lingua.


3
Perché questa domanda non è in grado di ottenere una risposta simile alla domanda .Net?
Rachel,

5
Buon Dio :), la domanda .Net è stata posta un anno fa e questa ha solo un giorno e stai confrontando le risposte.
zapping

1
Perché non modifichi la tua domanda e aggiungi la frase "Rispondi alla tua domanda", in modo che le persone possano persino imparare qualcosa (nuovo).
r3zn1k,

9
"qual è l'attuale abbreviazione di Enterprise Edition";)
Bozho,

17
Aneddoto di Albert Einstein .. UNO DEI colleghi di Einstein gli ha chiesto il suo numero di telefono un giorno. Einstein prese un elenco telefonico e lo cercò. "Non ricordi il tuo numero?" chiese l'uomo sorpreso. "No", rispose Einstein. "Perché dovrei memorizzare qualcosa che posso facilmente ottenere da un libro?" Sto raggiungendo tutti;)? Sì, lo so, Einstein non stava affrontando un intervistatore ...
SB.

Risposte:


83

Qual è la relazione tra hashCode () e equals ()? Qual è il significato di questi metodi? Quali sono i requisiti per implementarli?


Sì, ogni sviluppatore dovrebbe almeno essere consapevole dei problemi, anche se non li incontrerai necessariamente nella pratica.
sleske,

3
equals () e hashCode () in java @ technofundo.com/tech/java/equalhash.html
pramodc84

70

Qual è la differenza tra Set, Mappa ed Elenco?

Sono ancora stupito da quante persone non lo conoscono in un'intervista telefonica.


8
Certo, ma è questione di 20 secondi guardando i documenti in rete ("framework di raccolte java"), così tante persone utili potrebbero non preoccuparsi di tenerlo in memoria.
Manur,

127
Non dispiace non comprarlo, è una conoscenza di base che ogni sviluppatore dovrebbe conoscere.
Jon

15
Vorrei dire che chiunque, anche solo pensando a un lavoro nel software, deve capire non solo quello, ma anche le differenze tra i diversi tipi di elenchi (ArrayList / LinkedList). Non necessariamente la migliore implementazione o anche la notazione O (n), ma una comprensione di quando è giusto usare cosa.
Reverendo Gonzo,

11
+1 @Jon: di solito mi iscrivo alla scuola di pensiero "non c'è bisogno di memorizzare i dettagli", ma se non conosci nemmeno le differenze concettuali di base tra quelle interfacce di base, allora sicuramente non sei un buon sviluppatore Java.
Joachim Sauer,

13
@Joachim: potresti eliminare la parola "Java" dalla tua dichiarazione. Insiemi, mappe ed elenchi sono nozioni algoritmiche di base.
CPerkins,

44

Un'interfaccia può estendere più interfacce?

Molte persone rispondono "no", perché sanno che Java non ha ereditarietà multipla. Ma un'interfaccia può ancora estendere più interfacce (ma una classe non può estendere più classi). Questo non porta al problema del diamante.

Se la risposta è "no", l'intervistatore dovrebbe chiedere "perché dovrebbe essere proibito?". Quindi inizi a pensarci e dovresti capire che non ci sono problemi.

Quindi hai imparato qualcosa (da solo) nell'intervista e hai mostrato all'intervistatore che sei in grado di ragionare su classi, oggetti, eredità, polimorfismo, ecc. In realtà è molto meglio di un candidato che conosce la risposta a memoria ma non lo fa capire perché


Ieri ho confuso un docente di C ++ con il problema dell'ereditarietà dei diamanti, non lo sapeva affatto :)
Esko,

2
Una volta mi è stata posta questa domanda e ho risposto "no". Penso che sia stato lo stress e ho risposto troppo in fretta. è sempre difficile conoscere le risposte a cose che non usi mai.
IAdapter il

1
Elaborerò un po 'di più nel testo. Rispondere "no" è effettivamente ok. La cosa bella di questa domanda è che è un buon modo per innescare una discussione sui concetti di OO e vedere come ragiona il candidato. Se l'intervistatore che volevi solo sentire "sì", è effettivamente inutile. L'ereditarietà multipla delle interfacce non è davvero così comune essere conosciuta a memoria.
ewernli,

3
Una versione più complicata di questa domanda è "Java supporta l'ereditarietà multipla?" a cui la risposta è "una specie di" solo per le interfacce
nsfyn55

23

Utilizzo della parola chiave finale nelle chiamate al metodo. Ad esempio, perché il test del metodo nel codice seguente non fornisce alcun errore di compilazione nonostante l'utilizzo del qualificatore finale per il parametro del metodo.

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}


Mi piacerebbe davvero conoscere la risposta a questa domanda. Sembra molto interessante.
Rachel,

@Rachel: il motivo è perché la finalparola chiave è stata applicata Nameall'oggetto, non al namecampo di classeName
ryanprayogo,

20
Bene, il parametro nè dichiarato come definitivo, il che significa che non può essere riassegnato nel testcorpo del metodo. Non causa un errore perché il metodo testnon tenta di riassegnare il parametro, imposta semplicemente una proprietà sul parametro ... n = new Name("test");causerebbe un errore di compilazione ...
rjohnston

7
Aggiungendo ai commenti di @ rjohnston: l'uso del parametro final per method non garantisce l'immutabilità di un'istanza di classe. Se è necessaria l'immutabilità, la classe (Nome nella fattispecie) deve essere progettata in modo tale (ad esempio, nella fattispecie, non fornire il setter)
sateesh

Grazie a tutti per aver condiviso informazioni preziose. Apprezzo molto i tuoi contributi su questo.
Rachel,

19

Uno è sicuramente il confronto di stringhe. Differenza tra

String helloWorld = "Hello World";
helloWorld == "Hello World";
"Hello World" .equals (helloWorld);


14
Abbastanza sicuro che avresti bisogno di fare qualcosa come il nuovo String ("Hello World"). Le costanti di stringa non vengono estratte da un pool, proprio come avrebbe l'effetto intern (), quindi rendere vere entrambe le affermazioni?
Steven Schlansker,


17

Domanda a sorpresa: quali tipi di parametri vengono passati per riferimento in Java?

È incredibile quante persone pappaglino ancora il mantra "i primitivi sono passati per valore, gli oggetti sono passati per riferimento".


4
Mi chiedo se la risposta corretta sia sempre quella da dare in un'intervista. In un posto in cui ho intervistato, l'intervistatore ha anche fatto da pappagallo alla stessa cosa.
Fai il

2
Ho notato una differenza tra persone che hanno studiato C come prima lingua e persone che hanno studiato C ++ come prima lingua nel rispondere a questa domanda su Java. Probabilmente perché agli utenti C viene insegnato che passare un puntatore a un valore è un "passaggio per riferimento".
Uri,

23
Questa è una domanda stupida in quanto la risposta "sbagliata" molto probabilmente diventerà tecnicamente giusta se anche tu chiedessi "quali conseguenze ha avuto un riferimento?" . È solo una questione di definizione di ciò che significa passare per riferimento e quindi non ha molto valore nel mondo Java in quanto esiste un solo modo per passare oggetti. È più importante capire cosa succede realmente piuttosto che usare una definizione aribitrary per passare per riferimento nel modo desiderato.
x4u,

3
Questa domanda è almeno problematica, perché dipende principalmente dalla definizione esatta di "passa per valore" / "passa per riferimento", che viene spesso utilizzata in modo errato. Mentre sono d'accordo che un buon sviluppatore dovrebbe conoscere le definizioni, è più importante capire le conseguenze. Se capisci il comportamento reale di Java, allora conoscere il nome corretto per il concetto non è molto significativo, perché non è qualcosa di cui parli in pratica, poiché non cambia mai.
sleske,

3
Ehm, gli oggetti vengono passati per riferimento in Java. Non è possibile passare un oggetto per valore; tra l'altro, gli oggetti non esistono mai nello stack. I riferimenti vengono passati per valore, certo.
Sean Owen,

17

Hai detto "Buono", "Sviluppatore". Ecco anche i miei 2 centesimi .. :)

  • Che cosa significa "eccezione verificata"?
  • Quale è meglio usare e quando: asserzioni o eccezioni per gestire condizioni impreviste?
  • Perché la classe String è definitiva? (o no?;))
  • sono i metodi wait, Notify e NotifyAll nella classe Object?
  • Perché la classe Thread non è definitiva? Perché dovrei estendere Thread, mai?
  • Perché ci sono due classi Date; uno nel pacchetto java.util e un altro in java.sql?
  • Cosa succede se viene generata un'eccezione nel blocco infine? Il rimanente viene finalmente eseguito o no?
  • Esiste un garbage collector, ma allora una perdita di memoria è totalmente assente nelle applicazioni Java? In caso contrario, come?

Per J2EE:

  • È buono avere variabili di istanza / statiche in un servlet? Perchè no? Allora dove memorizzi "stato"?
  • continuando sulla domanda precedente: che cosa e dove è uno "stato" per un'applicazione (web)?
  • Cosa succede se ho iniziato a creare / chiudere connessioni DB in "JSP"?
  • Quali sono i modi per gestire le eccezioni JSP? prova a prendere? Hmmm .. c'è qualcos'altro?

Posso pensare a molti, molti, molti di più, ma per ora lo farà :)


8
Le risposte sarebbero carine, non conosco la risposta ad alcuni di loro.
Fai il

Le eccezioni verificate sono quelle che un programma deve avere un piano da gestire qualora si verifichino. Se non esiste un blocco try / catch attorno a qualcosa che genera un'eccezione controllata, il programma non verrà compilato. attendere, avvisare e avvisare Tutti servono per sincronizzare i thread e in Java tutti gli oggetti possono essere sincronizzati. Estenderei Thread (anziché implementare Runnable) se concettualmente la classe richiede il proprio thread, cioè deve fare un po 'di gestione e non rappresenta un'attività che potrebbe essere eseguita su un altro thread di lavoro.
ZoFreX,

Se viene generata un'eccezione in un blocco finally, il resto non verrà eseguito. In un programma Java "puro", non esistono perdite di memoria canonica. Tuttavia, la memoria potrebbe ancora essere utilizzata, cosa che non dovrebbe accadere se le strutture di dati contengono riferimenti a oggetti non più necessari. Se si utilizzano librerie native, potrebbe essere necessario gestirne le risorse, ad esempio in SWT è importante chiamare .dispose () su determinate risorse per assicurarsi che non perdano.
ZoFreX,

2
Usa asserzioni per errori "Questo non dovrebbe mai accadere mai" che devono essere affrontati nello sviluppo. Utilizzare le eccezioni per gli errori che potrebbero effettivamente verificarsi in fase di esecuzione e il programma dovrà gestirli in qualche modo.
MatrixFrog,

16

Qual è la differenza tra String, StringBuffer e StringBuilder?


5
String - classe immutabile che rappresenta una stringa. StringBuffer - modello di generatore introdotto nelle versioni precedenti di Java che si sincronizza su ogni operazione (o la maggior parte di esse) da utilizzare per creare una stringa. StringBuilder - introdotto in Java 5 (JDK 1.5), una classe che condivide l'API StringBuffer da utilizzare per creare una stringa che non si sincronizza su ogni operazione (o la maggior parte di esse). Poiché la costruzione di stringhe tende ad accadere in un singolo thread, StringBuilder è preferito per questo scopo in runtime / JDK Java che lo supportano.
MetroidFan2002,

13

"Che cos'è un descrittore di distribuzione?"

Se il candidato rabbrividisce involontariamente, ha esperienza di lavoro con EJB precedenti alla 3.0.


falla "rabbrividire involontariamente + suda pesantemente + cade morto dopo aver ripetuto questa domanda altre 2 volte", a volte sento che è la "sola e unica" ragione per cui hanno aggiunto / supportato l'intera faccenda delle Annotazioni! :)
Elister,

12

Molte domande e interviste sono disponibili su http://www.techinterviews.com/interview-questions/java e non vedo davvero il valore nel copiare / incollare una selezione di esse.

No, sta a te creare la tua raccolta di cose che ritieni importanti. Personalmente, procedo sempre in due fasi: prima alcune domande per avere un'idea di base dell'esperienza e delle capacità, quindi una situazione di problem solving. Non sono davvero convinto che essere in grado di rispondere a qualsiasi domanda conosciuta ti renda un risolutore di problemi sconosciuti positivi o negativi . Quindi, preferisco chiedere alle persone di risolvere un determinato problema, dare loro alcuni requisiti e chiedere loro di scrivere codice (ma non su carta). Concedo loro un po 'di tempo per tornare da me e controllare come hanno fatto, il loro stile di programmazione, come hanno usato le API suggerite, ecc.

Detto questo, la mia domanda preferita è "cosa non ti piace di Java?" (nello spirito di questo ). È davvero una domanda eccellente, ti dà un feedback immediato su quanto un candidato ha usato Java ed esplorato la sua API e se solo religioso o no (come ha scritto l'OP).

Aggiornamento: come suggerito da CPerkins, una formulazione migliore per la domanda suggerita sopra potrebbe essere "Cosa ti piacerebbe vedere di più cambiato in Java?". E in effetti, preferisco così.


Non mi piace la domanda "cosa non ti piace di Java?", Mentirei, perché sembra proprio "perché hai lasciato la tua ultima compagnia?". inoltre potrebbero pensare: "se odi java non ti offriremo il lavoro".
IAdapter il

@ 01 Hai ragione, ma non sono d'accordo con te e penso che ti sia sfuggito il punto di questa domanda.
Pascal Thivent,

1
Di solito l'ho visto più simile a: "Cosa ti piacerebbe di più vedere cambiato in Java", piuttosto che "non mi piace".
CPerkins,

@CPerkins È davvero una formulazione migliore, migliore di "non mi piace" e molto meglio di "odio" (nel riferimento). Grazie.
Pascal Thivent,

11

Che cos'è "System", "out", "println" in System.out.println? Cosa succede quando chiami 'put' su HashMap?


qual è la risposta ?? non penso mai a quale classe di sistema !! mi chiedo di conoscere la
risposta

10
  1. Spiegare i vari modificatori di accesso utilizzati in Java. Ho avuto molte persone che lottano con questo, in particolare l'accesso predefinito.
  2. Se potessi cambiare una cosa del linguaggio o della piattaforma Java quale sarebbe? I bravi sviluppatori avranno una risposta qui mentre quelli che non sono veramente interessati allo sviluppo probabilmente non se ne curano.
  3. Se il loro CV dice qualcosa come loro usano EJB2.1, allora chiedi di EJB3 per vedere cosa ne sanno. I migliori sviluppatori terranno il passo con gli ultimi sviluppi anche se non usano le versioni più recenti.

3
Se ci fosse solo una cosa che potrei cambiare, aggiungerei un sovraccarico dell'operatore alla lingua, probabilmente con solo un insieme limitato di operatori sovraccaricabili (ovvero, nessun sovraccarico newo ^o >>, <<e >>>). Se potessi cambiare un'altra cosa, sarebbe aggiungere una vera semantica di chiamata per riferimento. Una terza cosa sarebbe aggiungere unsignedtipi integrali.
Chinmay Kanchi,

1
delegati e chiusure e forse un'espressione lambda, ma non è davvero necessario. Anche i metodi di estensione sarebbero grandiosi. Possono davvero ripulire il codice se usato correttamente.
Joel

10
  • Qual è il contratto generale in caso di override uguale?
  • L'opzione migliore è preferire elenchi o matrici?
  • Quali sono le convenzioni di denominazione generalmente accettate?
  • Come funziona la serializzazione?
  • Come implementare Comparable?
  • Quali sono i vantaggi dell'utilizzo delle dichiarazioni preparate di JDBC?
  • Che cos'è Java EE?
  • Che cos'è un contenitore e quali servizi fornisce?

9

Se stai assumendo laureati con "esperienza" Java, una semplice domanda come Scrivere un codice che causerà il lancio di una NullPointerException può distinguere quali candidati hanno usato Java di recente e non si fermano quando hanno finito la loro unità / corso.


16
"Throw new NullPointerException ()" è una risposta corretta?
Thorbjørn Ravn Andersen,

1
Bene, spetta all'intervistatore. Se mostrassero un esempio di testare una variabile e di lanciare un NPE con un messaggio utile, sarei felice. Se pensassi che usassero quella risposta perché non potevano trovare un codice che avrebbe legittimamente lanciato un NPE, allora sarei preoccupato.
David,

9

Cosa verrà stampato?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Risposta : CoolReturn + 1

Un po 'più difficile:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Risposta : Ritorno


il primo codice indica che finalmente viene sempre escluso anche se l'istruzione return era disponibile nel blocco try, ma non ho ottenuto il secondo codice ?? cosa è successo quando builder istruzione = null; succede ??
palAlaa,

3
@Alaa, è quasi come se un valore temporaneo sia impostato sul builder, il builder è impostato su null nel blocco finally, e quindi il valore temporaneo è ciò che viene restituito.
deterb

1
@VextoR, sì Alaa ha dato una bella descrizione. Quel codice controlla come l'intervistato comprende il tentativo ... infine blocca con ritorno all'interno e ambito delle variabili in generale, gestione delle variabili
zaletniy

4
L'istruzione return restituisce il riferimento all'oggetto StringBuilder. La modifica del riferimento in Infine non fa nulla per il riferimento effettivamente restituito. Tuttavia, la modifica del contenuto dell'oggetto influisce su ciò che viene restituito, come nel primo esempio.
Derek Litz

8

Qual è la differenza tra una classe astratta e un'interfaccia? Quando li useresti?

Molti sviluppatori Java non lo sanno, ho chiesto alla maggior parte delle persone nel mio corso di informatica all'università e la stragrande maggioranza non ha potuto rispondere.


L'unica differenza è che la classe astratta può contenere metodi non astratti.
TBH

1
Questa è la risposta che avresti se leggessi un libro Java, certo. Anche se quindi potresti anche aggiungere che possono contenere anche variabili membro: P Ma la differenza su quando usarli e perché, è ancora più interessante.
ZoFreX,

1
l'uso dell'interfaccia mi fornisce una tecnica molto potente che è il polimofismo, che può chiamare qualsiasi metodo ignorato da classi che implementano l'interfaccia in modo apparentemente privo di necessità di conoscere il tipo di ogni classe figlio.
PalAlaa,

@TBH - Non dimenticare che, nel singolo modello di ereditarietà attualmente utilizzato da Java, puoi estendere solo una classe astratta, per un set di funzionalità - ma puoi combinare più interfacce in una singola classe per implementare più funzionalità senza la singola restrizione ereditaria.
MetroidFan2002,

8

Domande semplici come

  • Che cos'è JRE e JDK?
  • Perché java rivendica l'interoperabilità?

Sebbene siano molto semplici, molti sviluppatori non conoscono le risposte. Suggerisco di chiederle prima delle domande relative al codice.


Non so della parte JDK / JRE. Ad esempio, non esiste tale distinzione sul Mac. Quindi, come sviluppatore Java su Mac, non c'è davvero bisogno di saperlo.
Fabian Steeg,

Penso che questa sia una bella domanda, e se aiuta a esporre le persone che sono abbastanza fuorviate da tentare tanto seriamente lo sviluppo di Java su un Mac. Seriamente, se affermi di essere uno sviluppatore Java ma non sai quale link di download fare clic su java.sun.com, allora c'è un problema.
Mark B,

Benché sia ​​uno sviluppatore Java non è necessario preoccuparsi affatto della piattaforma su cui sta puntando. Comprendere gli strumenti Java sembra un requisito di base. Almeno lo considero. Non sono a conoscenza di Mac OS. Ancora non mi preoccupo molto sul sistema operativo in cui lavoro.
Ravisha,

@mbaird Questo viene fuori come un commento piuttosto meschino. Anche se sviluppo su un Mac e so cosa sono i JRE / JDK, siamo onesti, in uno sviluppo reale, importa davvero? Soprattutto con gli IDE che fanno della riga di comando un ricordo del passato, uno sviluppatore Java deve sapere come usare la lingua più di ogni altra cosa.
Alexis King,

6

Le 5 domande più frequenti su J2EE / JEE

L'elenco delle domande sul middleware J2EE / JEE che ho affrontato è eccezionalmente lungo, ma qui ci sono le prime 5 domande che mi sono state poste e hanno portato a buone discussioni:

  1. Cosa succede quando un MDB incontra un'eccezione che non può gestire?
    Questa domanda di solito porta a varie interessanti discussioni su messaggi velenosi, code di errori, ecc.,
  2. Dato un argomento JMS e alcuni consumatori su diverse JVM, domande su vari scenari con e senza consumatori durevoli.
    Questa domanda di solito mi permette di discutere in termini di quando usare abbonati durevoli, quando usare le code, ecc.,
  3. Se bloccato in una situazione in cui l'accesso a contenuti Hibernate / JPA POJO porta a eccezioni, come si risolverebbe?
    Questo porta a meravigliose discussioni su caricamento lento, reidratazione, ecc., Ha persino portato a confrontare e confrontare JPA con bean Entity. Ho trovato utile essere preparati ed essere chiari nei concetti.
  4. Come potrebbe essere fornito un semplice servizio web?
    Qualsiasi soluzione, da un semplice server Web basato su sofisticate soluzioni SOAP / REST, e qualsiasi altra via di mezzo, dovrebbe essere abbastanza buona. Inoltre, basato sull'intervistatore, a volte porta a discussioni molto interessanti su argomenti come alcune idee di design - prima WSDL, in stile doc, intermediari SOAP, ecc., Potrebbe portare a domande come l'elenco dei miglioramenti in JAX-WS su JAX -RPC, o SOAP1.2 su SOAP1.1, le risposte a cui di solito si basano su quanto ricordo.
  5. Iniezione di risorse JEE 5
    Questa domanda si pone in molti modi, a partire dal modello di Service Locator alle javax.naming.Contextdomande.

Un'altra domanda difficile che trovo preoccupante, ma che ho affrontato molte volte è: come vengono raccolte le librerie dipendenti in un archivio?
o Visibilità di varie classi in un archivio raggruppato.
Se la discussione non porta alla gerarchia del caricatore di classi di diversi server applicazioni, archivi di risorse, ecc., È meglio dimettersi e andare avanti.

Le 5 domande principali su Java:

  1. Domande su java.util.collections
    Questa è la madre di tutte le domande. Una volta che puoi effettivamente far atterrare l'intervistatore in quest'area, e se sei preparato, il resto dell'intervista di solito rimane qui. Essere sicuri di sapere Set, List, Map, e l'importanza di Object.equals()e Object.hashCode()in ogni implementazione di queste interfacce.
  2. Domande di refactoring
    Queste sono buone se l'intervistatore ha una mente aperta. Se l'intervistatore ha già in mente una soluzione specifica e la tua non corrisponde alla sua, sei praticamente condannato. È meglio concordare con la risposta "Capisco che sono possibili altre soluzioni".
  3. Domande sul multi-threading in JDK5, rispetto alle precedenti versioni di JDK, ho scoperto che è meglio essere preparati con le classi di pacchetti java.util.concurrent . Il libro di Doug Lea ha la maggior parte delle risposte.
  4. Cosa c'è di nuovo in JDK1.6 / JDK1.7 ...?
    Questa è una domanda sicura con molti intervistatori. Per quanto odio questo, è meglio essere preparati. Almeno ricordare alcuni con cui ho lavorato e condurre la discussione in un'altra direzione, schiva e risolve in gran parte ed efficacemente il problema.
  5. Pattern nell'API Java Più
    volte mi è stato chiesto di indicare un pattern GoF nell'API Java. Meglio essere preparati per questo.



5

perché dovresti sovrascrivere il metodo toString ()?


4

Una domanda Java più pura:

Qual'è la differenza tra sleep e wait? In realtà non molte persone capiscono come funziona l'attesa.

Come è necessario gestire InterruptedExceptions?


4

Questa è la domanda che ho affrontato nella mia intervista.

Perché il metodo principale in Java viene chiamato main vuoto statico pubblico (String [] args)?

Risposta:

1. main () deve essere dichiarato pubblico perché viene invocato da JVM ogni volta che inizia l'esecuzione del programma. JVM non appartiene al nostro pacchetto di programmi.

Per accedere a main al di fuori del pacchetto, dobbiamo dichiararlo come pubblico. Se lo dichiariamo come qualsiasi cosa diversa da pubblico, mostra un errore di runtime ma non un errore di tempo di compilazione

2. main () deve essere dichiarato come statico perché se un metodo viene dichiarato come statico, allora possiamo chiamarlo al di fuori della classe usando ClassName.methodName ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

La JVM caricherà prima la classe Test, verificherà gli argomenti Commandline e chiamerà il metodo principale come Test.main ();

3. main () deve essere dichiarato nullo main () perché JVM non si aspetta alcun valore da main (), quindi deve essere dichiarato nullo.

Se viene fornito un altro tipo di ritorno, si tratta di RunTimeError, ovvero NoSuchMethodFoundError.

4. main () deve avere argomenti String come matrici perché JVM chiama il metodo principale passando l'argomento della riga di comando. Poiché sono memorizzati nell'oggetto array di stringhe, viene passato come argomento a main ().


Puoi usarlo public static void main(String... args)se sei così propenso :-) Ha la stessa firma di[]
corsiKa

3

Qual è la differenza tra J2SE e J2EE (o JSE e JEE)?

Uno sviluppatore dovrebbe essere in grado di sottolineare che l'edizione enterprise è sostanzialmente una definizione di interfaccia (ovvero una specifica) che può essere implementata dai fornitori. Considerando che l'edizione standard è un'implementazione a sé stante


4
La capacità di mantenere chiara la terminologia del marketing è davvero così importante alla fine della giornata?
Laurence Gonsalves il

@Laurence - questa è una cosa ridicola da dire. C'è una vera differenza tra le due cose che rimarrai stupito da quanti sviluppatori apparentemente esperti non capiscono
oxbow_lakes,

Il mio punto è che se qualcuno è un buon programmatore, non me ne può fregare di meno se conoscono la differenza tra J2SE e J2EE.
Laurence Gonsalves,

Ho letto la domanda come "roba che uno sviluppatore JEE + JSE dovrebbe sapere", nel qual caso penso che sia rilevante comprendere la differenza tra le due tecnologie.
oxbow_lakes,

4
@ Thorbjørn Ravn Andersen Dubito che la maggior parte dei programmatori Java, compresi quelli buoni, siano fortemente consapevoli della distinzione di cui sopra, "l'edizione enterprise è sostanzialmente una definizione di interfaccia ... Mentre l'edizione standard è un'implementazione a sé stante". Per la maggior parte dei programmatori Java, la distinzione che conta è quali API sono disponibili. es: i servlet fanno parte di EE, ecc. In ogni caso, proprio come penso che sia più importante trovare buoni programmatori che buoni programmatori X-linguaggio, penso che sia più importante trovare buoni programmatori Java che buoni programmatori JSE / JEE.
Laurence Gonsalves,

3

In che modo volatileinfluisce sull'ottimizzazione del codice da parte del compilatore?


3
Quella voce dovrebbe contenere anche la risposta corretta.
Thorbjørn Ravn Andersen,

Non ricordo la risposta completa, guarda questa lezione su youtube.com/… per una buona spiegazione. In poche parole: supponiamo che il metodo usi la variabile volatile ad un certo punto. Quindi il compilatore non ottimizza il codice di questo metodo dopo quel punto.
Roman,

2

Che ne dite di cosa sia un bean di sessione e descrivete alcune differenze tra bean di sessione stateless e stateful.


2

Scrivi un programma per accettare due numeri interi e generare il più grande di due numeri in un file in una posizione a tua scelta. Ora descrivi cosa fa ogni affermazione.

È possibile eseguire il drill down piuttosto in profondità a partire dal significato della dichiarazione di importazione, fino alla chiusura anomala


2

Core: 1. Cosa sono le eccezioni verificate e non selezionate? 2. Durante l'aggiunta di una nuova eccezione nel codice, quale tipo (selezionato / non selezionato) utilizzare quando?

Servlet: 1. Qual è la differenza tra response.sendRedirect () e request.forward ()?


puoi per favore rispondere a queste domande? È la prima volta che mi rendo conto di "eccezioni controllate e non controllate" !!
palAlaa,

La semplice ricerca su Google può darti risposte: google.co.in/…
YoK

1

Come threadsfunzionano? Che cosa è synchronized? Se ci sono due synchronizedmetodi in una classe, possono essere eseguiti simultaneamente da due thread. Sarai sorpreso di sentire molte persone rispondere di . Quindi tutte le domande relative al thread, ad esempio deadlock , fame ecc.


2
Questo perché la risposta è sì ...
Fortega,

@Fortega - Come può essere? Ogni metodo ha un blocco sull'oggetto. Se uno threadsta eseguendo il metodo, nessun altro threadpuò ottenere il blocco.
fastcodejava,

1
Se si hanno due oggetti dello stesso tipo, è possibile chiamare contemporaneamente il primo metodo e il secondo metodo sul secondo oggetto. A meno che i metodi non siano statici, ovviamente.
Fortega,

2
Se non capisci correttamente come avviene il bloccaggio, non è un gioco da ragazzi. Inoltre, anche se potrebbe essere un gioco da ragazzi, ciò non significa che la mia risposta sia errata :-)
Fortega,

1
La risposta potrebbe fare confusione per i progrmmers che non hanno utilizzato le discussioni nel loro lavoro, ma penso che sia una buona :)
palAlaa

1

Una cosa che molti programmatori Java non sanno è che le stringhe sono immutabili, quindi usa StringBuilder o StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}

E Number è Integer, Long e così via
Arthur Ronald,

Per quanto riguarda le prestazioni, non c'è più differenza tra concatenare stringhe immutabili e usare StringBuilder. Questo perché i moderni compilatori Java ottimizzeranno la concatenazione: java.sun.com/docs/books/jls/third_edition/html/… È meglio usare qualunque metodo sia più leggibile.
Brent Wilson,

1
@BrentWilson ciò che colleghi non farà ciò che pensi. Si trasformerà s += "a" + "b" + "c"in uno Stringbuilder.append(...)scenario. Ma non ottimizzerà un forciclo. Il codice in questa risposta finirà per creare un totale di 201 stringhe, 100 StringBuilder e (a seconda dell'implementazione) 300 diverse char[]s all'interno di tali StringBuilder e circa 425k + caratteri. Modificandolo per utilizzare un StringBuilder in modo diretto, questo ridurrà a 1 String, 1 StringBuilder e 13-15 char[]s interni usando solo ~ 8k caratteri invece come dovrebbe.
corsiKa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.