Fragen, die jeder gute Java / Java EE-Entwickler beantworten sollte? [geschlossen]

138

Ich habe Fragen durchgearbeitet, die jeder gute .Net-Entwickler beantworten sollte, und war sehr beeindruckt von Inhalt und Ansatz dieser Frage. In diesem Sinne stelle ich diese Frage auch für Java / Java EE Developer.

Welche Fragen sollte ein guter Java / Java EE-Programmierer Ihrer Meinung nach beantworten können?

Ich markiere diese Frage als Community-Wiki, da sie nicht benutzerspezifisch ist und der Programmier-Community insgesamt dienen soll.

Ich freue mich auf einige erstaunliche Antworten.

BEARBEITEN : Bitte beantworten Sie auch Fragen, wie in den Kommentaren vorgeschlagen, damit die Leute auch etwas Neues in Bezug auf die Sprache lernen können.

Rachel
quelle
3
Warum kann diese Frage keine ähnliche Antwort auf die .Net-Frage erhalten?
Rachel
5
Mein Gott :), die .Net-Frage wurde vor einem Jahr gestellt und diese ist erst einen Tag alt und Sie vergleichen die Antworten.
Zappen
1
Warum bearbeiten Sie Ihre Frage nicht und fügen den Satz "Bitte beantworten Sie Ihre eigene Frage" hinzu, damit die Leute sogar etwas (Neues) lernen können.
r3zn1k
9
"Was ist die aktuelle Abkürzung für die Enterprise Edition";)
Bozho
17
Albert Einsteins Anekdote. Einer von Einsteins Kollegen fragte ihn eines Tages nach seiner Telefonnummer. Einstein griff nach einem Telefonbuch und schlug es nach. "Du erinnerst dich nicht an deine eigene Nummer?" fragte der Mann erschrocken. "Nein", antwortete Einstein. "Warum sollte ich mir etwas merken, das ich so leicht aus einem Buch bekommen kann?" Erreiche ich alle;)? Ja, ich weiß, Einstein stand keinem Interviewer gegenüber ...
SB.

Antworten:

83

Welche Beziehung besteht zwischen hashCode () und equals ()? Welche Bedeutung haben diese Methoden? Was sind die Voraussetzungen für deren Umsetzung?

Jeff
quelle
Ja, jeder Entwickler sollte sich zumindest der Probleme bewusst sein, auch wenn Sie ihnen in der Praxis nicht unbedingt begegnen werden.
Sleske
3
equals () und hashCode () in java @ technofundo.com/tech/java/equalhash.html
pramodc84
70

Was ist der Unterschied zwischen Set, Map und List?

Ich bin immer noch erstaunt, wie viele Leute diesen in einem Telefoninterview nicht kennen.

Jon
quelle
8
Zugegeben, aber es ist eine Frage von 20 Sekunden, die Dokumente im Internet zu betrachten ("Java Collections Framework"), so dass sich viele lohnende Leute möglicherweise nicht darum kümmern, sie im Gedächtnis zu behalten.
Manur
127
Nein, tut mir leid, kauf das nicht, es ist das Grundwissen, das jeder Entwickler kennen sollte.
Jon
15
Ich würde sogar sagen, dass jeder, der über einen Job in Software nachdenkt, nicht nur das verstehen muss, sondern auch die Unterschiede zwischen verschiedenen Arten von Listen (ArrayList / LinkedList). Nicht unbedingt die beste Implementierung oder sogar O (n) -Notation, sondern ein Verständnis dafür, wann es richtig ist, was zu verwenden.
Reverend Gonzo
11
+1 @Jon: Normalerweise abonniere ich die Denkschule "Keine Notwendigkeit, sich Details zu merken", aber wenn Sie nicht einmal die grundlegenden konzeptionellen Unterschiede zwischen diesen grundlegenden Schnittstellen kennen, sind Sie definitiv kein guter Java-Entwickler.
Joachim Sauer
13
@ Joachim: Sie könnten das Wort "Java" aus Ihrer Aussage streichen. Sets, Maps und Listen sind grundlegende algorithmische Begriffe.
CPerkins
44

Kann eine Schnittstelle mehrere Schnittstellen erweitern?

Die meisten Leute antworten mit "Nein", weil sie wissen, dass Java keine Mehrfachvererbung hat. Eine Schnittstelle kann jedoch immer noch mehrere Schnittstellen erweitern (eine Klasse kann jedoch nicht mehrere Klassen erweitern). Dies führt nicht zum Diamantproblem.

Wenn die Antwort "Nein" ist, sollte der Interviewer fragen "Warum sollte es verboten sein?". Dann fängst du an darüber nachzudenken und solltest erkennen, dass es kein Problem damit gibt.

Sie haben also im Interview etwas (selbst) gelernt und dem Interviewer gezeigt, dass Sie über Klassen, Objekte, Vererbung, Polymorphismus usw. nachdenken können. Es ist tatsächlich viel besser als ein Kandidat, der die Antwort auswendig kennt, dies aber nicht weiß verstehen warum

ewernli
quelle
Ich habe gestern eine C ++ - Dozentin mit dem Problem der Diamantenvererbung verwechselt, sie wusste überhaupt nichts davon :)
Esko
2
Diese Frage wurde mir einmal gestellt und ich antwortete mit "Nein". Ich denke, es war Stress und ich antwortete zu schnell. Es ist immer schwer, Antworten auf Dinge zu finden, die man nie benutzt.
IAdapter
1
Ich gehe im Text etwas näher darauf ein. Die Antwort "Nein" ist eigentlich in Ordnung. Das Schöne an dieser Frage ist, dass es eine gute Möglichkeit ist, eine Diskussion über OO-Konzepte auszulösen und zu sehen, wie die Kandidaten begründen. Wenn der Interviewer, den Sie nur "Ja" hören wollten, dann ist es praktisch sinnlos. Die mehrfache Vererbung von Schnittstellen ist in der Tat nicht so häufig bekannt.
Ewernli
3
Eine schwierigere Version dieser Frage lautet: "Unterstützt Java die Mehrfachvererbung?" auf die die Antwort nur für Schnittstellen "irgendwie"
lautet
23

Verwendung des letzten Schlüsselworts in Methodenaufrufen. Zum Beispiel , warum funktioniert die Methode Test im folgenden Code gibt keine Kompilierung - Fehler trotz Verwendung endgültige Qualifikation für die Methodenparameter.

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");
}

sateesh
quelle
Ich würde wirklich gerne eine Antwort auf diese Frage wissen. Das klingt sehr interessant.
Rachel
@ Rachel: Der Grund ist, dass das finalSchlüsselwort auf das NameObjekt angewendet wird, nicht auf das nameFeld der KlasseName
Ryanprayogo
20
Nun, der Parameter nwird als final deklariert, was bedeutet, dass er im testMethodenkörper nicht neu zugewiesen werden kann . Es verursacht keinen Fehler, da die Methode testnicht versucht, den Parameter neu n = new Name("test");
zuzuweisen
7
Hinzufügen zu den Kommentaren von @ rjohnston: Die Verwendung des Parameters final for method gewährleistet nicht die Unveränderlichkeit einer Klasseninstanz. Wenn Unveränderlichkeit erforderlich ist, sollte die Klasse (Name im vorliegenden Fall) so gestaltet sein (zum Beispiel im vorliegenden Fall nicht den Setter
angeben
Vielen Dank für den Austausch wertvoller Informationen. Ich freue mich sehr über Ihre Beiträge dazu.
Rachel
19

Ein sicherer ist der Vergleich der Zeichenfolge. Unterschied zwischen

String helloWorld = "Hallo Welt";
helloWorld == "Hallo Welt";
"Hallo Welt" .equals (helloWorld);

Zappen
quelle
14
Ich bin mir ziemlich sicher, dass Sie so etwas wie einen neuen String ("Hello World") machen müssen. Werden nicht String-Konstanten aus einem Pool gezogen, ähnlich wie der Effekt intern (), wodurch beide Aussagen wahr werden?
Steven Schlansker
17

Trickfrage: Welche Arten von Parametern werden in Java als Referenz übergeben?

Es ist erstaunlich, wie viele Menschen noch das Mantra "Primitive werden als Wert übergeben, Objekte werden als Referenz übergeben" nachahmen.

Chinmay Kanchi
quelle
4
Ich frage mich, ob die richtige Antwort immer die ist, die man in einem Interview gibt. An einem Ort, für den ich interviewt habe, hat der Interviewer das Gleiche auch nachgeprüft.
MAK
2
Ich habe bei der Beantwortung dieser Frage zu Java einen Unterschied zwischen Leuten festgestellt, die C als Muttersprache studiert haben, und Leuten, die C ++ als Muttersprache studiert haben. Wahrscheinlich, weil den C-Benutzern beigebracht wird, dass das Übergeben eines Zeigers auf einen Wert eine "Referenzübergabe" ist.
Uri
23
Das ist eine dumme Frage, da die "falsche" Antwort höchstwahrscheinlich technisch richtig wird, wenn Sie auch fragen: "Welche Konsequenzen hat das Vorbeigehen?" . Es ist nur eine Frage der Definition dessen, was Pass-by-Reference bedeutet, und ist daher in der Java-Welt von geringem Wert, da es nur einen Weg gibt, Objekte zu übergeben. Es ist wichtiger zu verstehen, was wirklich passiert, als eine beliebige Definition für die Referenzübergabe nach Ihren Wünschen zu verwenden .
x4u
3
Diese Frage ist zumindest problematisch, da sie hauptsächlich von der genauen Definition von "Wertübergabe" / "Referenzübergabe" abhängt, die häufig falsch verwendet wird. Ich stimme zu, dass ein guter Entwickler die Definitionen kennen sollte, aber es ist wichtiger, die Konsequenzen zu verstehen. Wenn Sie das tatsächliche Verhalten von Java verstehen, ist es nicht sehr aussagekräftig, den richtigen Namen für das Konzept zu kennen, da Sie dies in der Praxis nicht diskutieren, da es sich nie ändert.
Sleske
3
Ähm, Objekte werden in Java als Referenz übergeben. Sie können ein Objekt nicht als Wert übergeben. Unter anderem existieren Objekte nie auf dem Stapel. Referenzen werden sicher als Wert übergeben.
Sean Owen
17

Sie sagten "Gut", "Entwickler". Hier sind auch meine 2 Cent .. :)

  • Was bedeutet eine "geprüfte Ausnahme"?
  • Welches ist besser zu verwenden und wann: Behauptungen oder Ausnahmen, um mit unerwarteten Bedingungen umzugehen?
  • Warum ist die String-Klasse endgültig? (oder nicht ?;))
  • Sind die Methoden wait, notify und notifyAll in der Object-Klasse?
  • Warum ist die Thread-Klasse nicht endgültig? Warum sollte ich Thread jemals verlängern?
  • Warum gibt es zwei Datumsklassen? eine in java.util Paket und eine andere in java.sql?
  • Was passiert, wenn eine Ausnahme in finally block ausgelöst wird? Wird der Rest endgültig ausgeführt oder nicht?
  • Es gibt einen Garbage Collector in Ordnung, aber fehlt dann in einer Java-Anwendung ein Speicherverlust? Wenn nicht, wie?

Für J2EE:

  • Ist es gut, Instanz- / statische Variablen in einem Servlet zu haben? Warum nicht? Wo speichern Sie dann "Zustand"?
  • Fortsetzung der obigen Frage: Was und wo ist ein "Status" für eine (Web-) Anwendung?
  • Was passiert, wenn ich mit dem Erstellen / Schließen von DB-Verbindungen in "JSP" begonnen habe?
  • Wie können JSP-Ausnahmen behandelt werden? versuchen zu fangen? Hmmm .. gibt es noch etwas?

Ich kann viele, viele, viele mehr von ihnen denken, aber das reicht fürs Erste :)

Elister
quelle
8
Antworten wären nett, ich kenne die Antwort auf einige von ihnen nicht.
MAK
Überprüfte Ausnahmen sind solche, für die ein Programm einen Plan haben muss, falls sie auftreten sollten. Wenn es keinen Try / Catch-Block um etwas gibt, das eine aktivierte Ausnahme auslöst, wird das Programm nicht kompiliert. wait, notify und notifyAll dienen zum Synchronisieren von Threads, und in Java können alle Objekte synchronisiert werden. Ich würde Thread erweitern (im Gegensatz zur Implementierung von Runnable), wenn die Klasse konzeptionell einen eigenen Thread benötigt, dh eine gewisse Verwaltung benötigt und keine Aufgabe darstellt, die auf einem anderen Arbeitsthread ausgeführt werden könnte.
ZoFreX
Wenn eine Ausnahme in einem finally-Block ausgelöst wird, wird der Rest nicht ausgeführt. In einem "reinen" Java-Programm existieren keine kanonischen Speicherlecks. Es könnte jedoch immer noch Speicher verwendet werden, der nicht verwendet werden sollte, wenn Datenstrukturen Verweise auf Objekte enthalten, die nicht mehr benötigt werden. Wenn Sie native Bibliotheken verwenden, müssen deren Ressourcen möglicherweise verwaltet werden. Beispielsweise ist es in SWT wichtig, .dispose () für bestimmte Assets aufzurufen, um sicherzustellen, dass sie nicht auslaufen.
ZoFreX
2
Verwenden Sie Aussagen für "Dies sollte niemals passieren" -Fehler, die in der Entwicklung behandelt werden sollen. Verwenden Sie Ausnahmen für Fehler, die zur Laufzeit tatsächlich auftreten können, und das Programm muss sie auf irgendeine Weise behandeln.
MatrixFrog
16

Was ist der Unterschied zwischen String, StringBuffer und StringBuilder?

Thunderhashy
quelle
5
String - unveränderliche Klasse, die einen String darstellt. StringBuffer - Builder-Muster, das in älteren Java-Versionen eingeführt wurde und bei jedem Vorgang (oder den meisten von ihnen) synchronisiert wird, um einen String zu erstellen. StringBuilder - eingeführt in Java 5 (JDK 1.5), einer Klasse, die die StringBuffer-API gemeinsam nutzt, um einen String zu erstellen, der nicht bei jeder Operation (oder den meisten von ihnen) synchronisiert wird. Da die Erstellung von Strings in der Regel in einem einzelnen Thread erfolgt, wird StringBuilder zu diesem Zweck in Java-Laufzeiten / JDKs bevorzugt, die dies unterstützen.
MetroidFan2002
13

"Was ist ein Bereitstellungsdeskriptor?"

Wenn der Kandidat unwillkürlich schaudert, hat er Erfahrung in der Arbeit mit EJBs vor 3.0.

Michael Borgwardt
quelle
mache es "schaudert unwillkürlich + schwitzt stark + fällt tot um, nachdem ich diese Frage noch zweimal wiederholt habe", ich fühle manchmal, dass es der "einzige" Grund ist, warum sie die ganze Annotations-Sache hinzugefügt / unterstützt haben! :)
Elister
12

Viele Fragen und Interviews sind unter http://www.techinterviews.com/interview-questions/java verfügbar, und ich sehe keinen wirklichen Wert darin, eine Auswahl davon zu kopieren / einzufügen.

Nein, es liegt an Ihnen, Ihre eigene Zusammenstellung von Dingen zu erstellen, die Sie für wichtig halten. Persönlich gehe ich immer in zwei Schritten vor: zuerst ein paar Fragen, um eine grundlegende Vorstellung von den Erfahrungen und Fähigkeiten zu bekommen, dann eine Problemlösungssituation. Ich bin in der Tat nicht davon überzeugt, dass die Beantwortung bekannter Fragen Sie zu einem guten oder schlechten unbekannten Problemlöser macht. Daher ziehe ich es vor, die Leute zu bitten, ein bestimmtes Problem zu lösen, ihnen einige Anforderungen zu stellen und sie zu bitten, Code zu schreiben (aber nicht auf Papier). Ich gebe ihnen etwas Zeit, um zu mir zurückzukehren und zu überprüfen, wie sie es gemacht haben, ihren Codierungsstil, wie sie die vorgeschlagenen APIs verwendet haben usw.

Abgesehen davon ist meine Lieblingsfrage "Was magst du nicht an Java?" (im Geiste dieses einen ). Es ist wirklich eine ausgezeichnete Frage, sie gibt Ihnen sofort ein Feedback darüber, wie oft ein Kandidat Java verwendet und seine API untersucht hat und ob er nur religiös darüber ist oder nicht (wie das OP schrieb).

Update: Wie von CPerkins vorgeschlagen, könnte ein besserer Wortlaut für die oben vorgeschlagene Frage "Was möchten Sie am liebsten in Java geändert sehen?" Sein. Und in der Tat bevorzuge ich diesen Weg.

Pascal Thivent
quelle
Ich mag die Frage "Was magst du nicht an Java?" Nicht, ich würde lügen, weil es sich nur so anhört wie "Warum hast du deine letzte Firma verlassen?". Außerdem denken sie vielleicht: "Wenn du Java hasst, bieten wir dir den Job nicht an."
IAdapter
@ 01 Es ist dein Recht, aber ich stimme dir nicht zu und ich denke, dass du den Punkt dieser Frage verpasst hast.
Pascal Thivent
1
Ich habe diesen Satz normalerweise eher wie folgt gesehen: "Was möchten Sie am liebsten in Java geändert sehen", anstatt "nicht mögen".
CPerkins
@CPerkins Das ist in der Tat eine bessere Formulierung, besser als "nicht mögen" und viel besser als "hassen" (in der Referenz). Vielen Dank.
Pascal Thivent
11

Was ist "System", "out", "println" in System.out.println? Was passiert, wenn Sie "put" auf HashMap aufrufen?

Adisesha
quelle
Was ist die Antwort? Ich denke nie an welche Systemklasse! Ich frage mich, die Antwort zu kennen :)
PalAlaa
10
  1. Erläutern Sie die verschiedenen in Java verwendeten Zugriffsmodifikatoren. Ich hatte viele Leute damit zu kämpfen, insbesondere mit dem Standardzugriff.
  2. Wenn Sie eine Sache an der Java-Sprache oder -Plattform ändern könnten, welche wäre das? Gute Entwickler werden hier eine Antwort haben, während diejenigen, die nicht wirklich an Entwicklung interessiert sind, sich wahrscheinlich nicht darum kümmern.
  3. Wenn ihr Lebenslauf so etwas wie EJB2.1 sagt, fragen Sie nach EJB3, um zu sehen, was sie darüber wissen. Die besten Entwickler werden mit den neuesten Entwicklungen Schritt halten, auch wenn sie die neueren Versionen nicht verwenden.
Mark
quelle
3
Wenn es nur war eine Sache konnte ich, ändere ich Bediener eine Überlastung der Sprache hinzufügen würde, wahrscheinlich mit nur einem eingeschränkten Satz von überladbaren Operatoren (dh ohne Überlastung newoder ^oder >>, <<und >>>). Wenn ich etwas anderes ändern könnte, wäre das, eine echte Call-by-Reference-Semantik hinzuzufügen . Eine dritte Sache wäre, unsignedintegrale Typen hinzuzufügen .
Chinmay Kanchi
1
Delegierte und Schließungen und vielleicht ein Lambda-Ausdruck, aber das ist nicht wirklich notwendig. Erweiterungsmethoden wären ebenfalls großartig. Sie können Code wirklich bereinigen, wenn sie richtig verwendet werden.
Joel
10
  • Was ist der Generalvertrag bei Überschreibung gleich?
  • Ist eine bessere Option bevorzugt Listen oder Arrays?
  • Was sind die allgemein anerkannten Namenskonventionen?
  • Wie funktioniert die Serialisierung?
  • Wie implementiere ich Comparable?
  • Welche Vorteile bietet die Verwendung der vorbereiteten Anweisungen von JDBC?
  • Was ist Java EE?
  • Was ist ein Container und welche Dienstleistungen erbringt er?
JuanZe
quelle
9

Wenn Sie Absolventen mit Java "Erfahrung" einstellen, kann eine einfache Frage wie Schreiben von Code, die dazu führt, dass eine NullPointerException ausgelöst wird, unterscheiden, welche Kandidaten Java in letzter Zeit verwendet haben und nicht erst nach Abschluss ihrer Einheit / ihres Kurses aufgehört haben.

David
quelle
16
Ist "Neue NullPointerException () werfen" eine richtige Antwort?
Thorbjørn Ravn Andersen
1
Nun, es liegt am Interviewer. Wenn sie ein Beispiel für das Testen einer Variablen und das Auslösen einer NPE mit einer hilfreichen Nachricht zeigen würden, wäre ich glücklich. Wenn ich dachte, sie hätten diese Antwort verwendet, weil sie keinen Code finden konnten, der eine NPE legitimerweise auslösen würde, wäre ich besorgt.
David
9

Was wird gedruckt?

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");
    }
}

Antwort : CoolReturn + 1

Etwas schwieriger:

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;  /* ;) */
    }
}

Antwort : CoolReturn

zaletniy
quelle
Der erste Code zeigt an, dass schließlich immer ausgeführt wird, auch wenn die return-Anweisung im try-Block verfügbar war, aber ich habe den zweiten Code nicht erhalten? Was ist passiert, wenn der Anweisungsgenerator = null ist? passieren?
PalAlaa
3
@Alaa, es ist fast so, als würde ein temporärer Wert für den Builder festgelegt, der Builder wird im finally-Block auf null gesetzt und dann wird der temporäre Wert zurückgegeben.
Deterb
1
@VextoR, ja Alaa hat eine nette Beschreibung gegeben. Dieser Code prüft, wie der Befragte den Versuch versteht ... schließlich mit Rückgabe im Inneren blockieren und Variablenbereich im Allgemeinen, Variablenbehandlung
zaletniy
4
Die return-Anweisung gibt den Verweis auf das StringBuilder-Objekt zurück. Das Ändern der Referenz in der schließlich hat nichts mit der Referenz zu tun, die tatsächlich zurückgegeben wird. Das Ändern des Inhalts des Objekts wirkt sich jedoch wie im ersten Beispiel auf die Rückgabe aus.
Derek Litz
8

Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? Wann würden Sie jeden von ihnen verwenden?

Viele Java-Entwickler wissen das nicht, ich habe die meisten Leute in meinem Informatikkurs an der Universität gefragt, und die große Mehrheit konnte es nicht beantworten.

ZoFreX
quelle
Der einzige Unterschied besteht darin, dass abstrakte Klassen nicht abstrakte Methoden enthalten können.
TBH
1
Das ist die Antwort, die Sie haben würden, wenn Sie ein Java-Buch lesen würden. Dann können Sie aber auch hinzufügen, dass sie auch Mitgliedsvariablen enthalten können: P Aber der Unterschied, wann und warum sie verwendet werden sollen, ist noch interessanter.
ZoFreX
1
Die Verwendung der Schnittstelle bietet mir eine sehr leistungsfähige Technik, nämlich den Polymophismus, der jede überschriebene Methode aus Klassen aufrufen kann, die die Schnittstelle auf scheinbar einfache Weise implementiert, sodass Sie den Typ jeder untergeordneten Klasse nicht kennen müssen.
PalAlaa
@TBH - Vergessen Sie nicht, dass Sie in dem derzeit von Java verwendeten Einzelvererbungsmodell nur eine abstrakte Klasse für einen Satz von Funktionen erweitern können. Sie können jedoch mehrere Schnittstellen in einer Klasse kombinieren, damit mehrere Funktionen ohne die einzige implementiert werden können Vererbungsbeschränkung.
MetroidFan2002
8

Einfache Fragen wie:

  • Was ist JRE und JDK?
  • Warum beansprucht Java Interoperabilität?

Obwohl diese sehr einfach sind, kennen viele Entwickler die Antworten nicht. Ich schlage vor, diese vor den Code-bezogenen Abfragen zu stellen.

Ravisha
quelle
Ich weiß nichts über den JDK / JRE-Teil. Zum Beispiel gibt es auf dem Mac keine solche Unterscheidung. Als Java-Entwickler auf dem Mac müssen Sie also überhaupt nichts darüber wissen.
Fabian Steeg
Ich denke, das ist eine gute Frage, und wenn es hilft, Leute zu entlarven, die irregeführt genug sind, um eine ernsthafte Java-Entwicklung auf einem Mac zu versuchen, umso besser. Im Ernst, wenn Sie behaupten, ein Java-Entwickler zu sein, aber nicht wissen, auf welchen Download-Link Sie auf java.sun.com klicken sollen, liegt ein Problem vor.
Mark B
Als Java-Entwickler muss man sich überhaupt keine Sorgen um die Plattform machen, auf der er / sie arbeitet. Das Verständnis der Java-Tools scheint eine Grundvoraussetzung zu sein. Zumindest denke ich, dass ich mir Mac OS nicht bewusst bin. Trotzdem mache ich mir keine großen Sorgen über Betriebssystem, in dem ich arbeite.
Ravisha
@mbaird Das kommt als eher gemeiner Kommentar raus. Obwohl ich auf einem Mac entwickle und weiß, was die JRE / JDK sind, ist es in einer tatsächlichen Entwicklung wirklich wichtig, ehrlich zu sein. Insbesondere bei IDEs, bei denen die Verwendung der Befehlszeile der Vergangenheit angehört, muss ein Java-Entwickler vor allem wissen, wie er die Sprache verwendet.
Alexis King
6

Top 5 J2EE / JEE-Fragen

Die Liste der Fragen zu J2EE / JEE-Middleware, mit denen ich konfrontiert war, ist außergewöhnlich lang, aber hier sind die Top 5, die mir gestellt wurden und zu guten Diskussionen geführt haben:

  1. Was passiert, wenn eine MDB auf eine Ausnahme stößt, die sie nicht behandeln kann?
    Diese Frage führt normalerweise zu verschiedenen interessanten Diskussionen über Giftmeldungen, Fehlerwarteschlangen usw.
  2. Angesichts eines JMS-Themas und einiger Verbraucher in verschiedenen JVMs Fragen zu verschiedenen Szenarien mit und ohne dauerhafte Verbraucher.
    Mit dieser Frage kann ich normalerweise diskutieren, wann dauerhafte Abonnenten zu verwenden sind, wann Warteschlangen zu verwenden sind usw.
  3. Wenn Sie in einer Situation stecken bleiben, in der der Zugriff auf einen Hibernate / JPA POJO-Inhalt zu Ausnahmen führt, wie würde man das beheben?
    Dies führt zu wunderbaren Diskussionen über verzögertes Laden, Rehydratisieren usw. Es hat sogar dazu geführt, dass JPA mit Entity-Bohnen verglichen und gegenübergestellt wurde. Ich fand es nützlich, vorbereitet zu sein und klare Konzepte zu haben.
  4. Wie könnte ein einfacher Webdienst bereitgestellt werden?
    Jede Lösung, vom einfachen Webserver bis hin zu hoch entwickelten SOAP / REST-Lösungen, und jede dazwischen, sollte gut genug sein. Basierend auf dem Interviewer führt dies manchmal zu sehr interessanten Diskussionen über Themen wie einige Designideen - zuerst WSDL, Doc-Style, SOAP-Intermediäre usw. Es kann zu Fragen wie der Auflistung von Verbesserungen in JAX-WS gegenüber JAX führen -RPC oder SOAP1.2 über SOAP1.1, deren Antworten normalerweise darauf basieren, an wie viel ich mich erinnere.
  5. JEE 5-Ressourceninjektion
    Diese Frage wird auf viele Arten gestellt, angefangen vom Service Locator- Muster bis hin zu javax.naming.ContextFragen.

Eine andere knifflige Frage, die ich beunruhigend finde, aber oft gestellt habe, ist: Wie werden abhängige Bibliotheken in ein Archiv gepackt?
oder Sichtbarkeit verschiedener Klassen in einem gebündelten Archiv.
Wenn die Diskussion nicht zu einer Klassenladeprogrammhierarchie verschiedener Anwendungsserver, Ressourcenarchive usw. führt, ist es am besten, zurückzutreten und fortzufahren.

Die 5 wichtigsten Java-Kernfragen:

  1. Fragen zu java.util.collections
    Dies ist die Mutter aller Fragen. Sobald Sie den Interviewer effektiv in diesem Bereich landen können und wenn Sie vorbereitet sind, bleibt der Rest des Interviews normalerweise hier. Achten Sie darauf , zu wissen Set, List, Map, und die Bedeutung Object.equals()und Object.hashCode()in jeder Implementierung dieser Schnittstellen.
  2. Refactoring-Fragen
    Diese sind gut, wenn der Interviewer offen ist. Wenn der Interviewer bereits eine bestimmte Lösung im Sinn hat und Ihre nicht mit seiner übereinstimmt, sind Sie ziemlich zum Scheitern verurteilt. Es ist am besten, der Antwort zuzustimmen: "Ich verstehe, dass andere Lösungen möglich sind."
  3. Fragen zum Multithreading in JDK5 im Vergleich zu früheren JDK-Versionen Ich habe festgestellt, dass es am besten ist, mit den Paketklassen java.util.concurrent vorbereitet zu sein . Doug Leas Buch hat die meisten Antworten.
  4. Was ist neu in JDK1.6 / JDK1.7 ...?
    Dies ist eine sichere Frage bei vielen Interviewern. So sehr ich das hasse, ist es am besten, vorbereitet zu sein. Zumindest wenn ich mich an einige erinnere, mit denen ich gearbeitet habe, und die Diskussion in eine andere Richtung leite, weicht das Problem weitgehend und effektiv aus und löst es.
  5. Muster in der Java-API
    Immer wieder wurde ich gebeten, auf ein GoF-Muster in der Java-API hinzuweisen. Sei besser darauf vorbereitet.
CMR
quelle
5

Unterschied zwischen und Webserver und einem Webcontainer

user256777
quelle
5

Was magst du am meisten / am wenigsten an Java und warum?

Carsten
quelle
5

Warum sollten Sie die toString () -Methode überschreiben?

SWD
quelle
4

Eine reinere Java-Frage:

Was ist der Unterschied zwischen Schlaf und Warten? Nicht viele Leute verstehen tatsächlich, wie das Warten funktioniert.

Wie müssen Sie mit InterruptedExceptions umgehen?

David Nouls
quelle
4

Dies ist die Frage, mit der ich in meinem Interview konfrontiert war.

Warum wird die Hauptmethode in Java als public static void main (String [] args) bezeichnet?

Antworten:

1. main () muss als öffentlich deklariert werden, da es von JVM aufgerufen wird, wenn die Programmausführung beginnt. JVM gehört nicht zu unserem Programmpaket.

Um außerhalb des Pakets auf main zuzugreifen, müssen wir es als public deklarieren. Wenn wir es als etwas anderes als public deklarieren, wird ein Laufzeitfehler angezeigt, jedoch kein Kompilierungszeitfehler

2. main () muss als statisch deklariert werden, denn wenn eine Methode als statisch deklariert ist, können wir diese Methode außerhalb der Klasse mit ClassName.methodName () aufrufen.

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

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

Die JVM lädt zuerst die Testklasse, sucht nach den Befehlszeilenargumenten und ruft die Hauptmethode als Test.main () auf.

3. main () muss als void main () deklariert werden, da JVM keinen Wert von main () erwartet. Daher muss es als void deklariert werden.

Wenn ein anderer Rückgabetyp angegeben wird, handelt es sich um einen RunTimeError, dh NoSuchMethodFoundError.

4. main () muss String-Argumente als Arrays haben, da JVM die main-Methode durch Übergeben der Befehlszeilenargumentation aufruft. Da sie im String-Array-Objekt gespeichert sind, wird sie als Argument an main () übergeben.

Sai Upadhyayula
quelle
Sie können verwenden, public static void main(String... args)wenn Sie so geneigt sind :-) Es hat die gleiche Signatur wie[]
corsiKa
3

Was ist der Unterschied zwischen J2SE und J2EE (oder JSE und JEE)?

Ein Entwickler sollte darauf hinweisen können, dass die Enterprise Edition im Grunde eine Schnittstellendefinition (dh eine Spezifikation) ist, die von Anbietern implementiert werden kann. Während die Standard Edition eine eigenständige Implementierung ist

oxbow_lakes
quelle
4
Ist die Fähigkeit, die Marketing-Terminologie klar zu halten, am Ende des Tages wirklich so wichtig?
Laurence Gonsalves
@Laurence - das ist eine lächerliche Sache zu sagen. Es gibt einen echten Unterschied zwischen den beiden Dingen, von denen Sie erstaunt sein werden, wie viele angeblich erfahrene Entwickler einfach nicht verstehen
oxbow_lakes
Mein Punkt ist, wenn jemand ein guter Programmierer ist, ist es mir egal, ob er den Unterschied zwischen J2SE und J2EE kennt.
Laurence Gonsalves
Ich habe die Frage als "Dinge, die ein JEE + JSE-Entwickler wissen sollte" gelesen. In diesem Fall denke ich, dass das Verständnis des Unterschieds zwischen den beiden Technologien relevant ist.
oxbow_lakes
4
@ Thorbjørn Ravn Andersen Ich bezweifle, dass die meisten Java-Codierer, einschließlich der guten, die obige Unterscheidung genau kennen: "Die Enterprise Edition ist im Grunde eine Schnittstellendefinition ... während die Standard Edition eine eigenständige Implementierung ist." Für die meisten guten Java-Codierer ist es wichtig zu unterscheiden, welche APIs verfügbar sind. Beispiel: Servlets sind Teil von EE usw. In jedem Fall denke ich, dass es wichtiger ist, gute Java-Programmierer als gute JSE / JEE-Programmierer zu finden, genau wie ich denke, dass es wichtiger ist, gute Programmierer als gute Language-X-Programmierer zu finden.
Laurence Gonsalves
3

Wie wirkt sich das volatileauf die Codeoptimierung durch den Compiler aus?

römisch
quelle
3
Dieser Eintrag sollte auch die richtige Antwort enthalten.
Thorbjørn Ravn Andersen
Ich erinnere mich nicht an die vollständige Antwort. Schauen Sie sich diese Lektion auf youtube.com/… an, um eine gute Erklärung zu erhalten. Kurz gesagt: Nehmen Sie an, dass die Methode irgendwann eine flüchtige Variable verwendet. Dann optimiert der Compiler den Code dieser Methode nach diesem Zeitpunkt nicht mehr.
Roman
2

Wie wäre es mit einer Session-Bean und beschreiben Sie einige Unterschiede zwischen zustandslosen und statusbehafteten Session-Beans.

Kristian
quelle
2

Schreiben Sie ein Programm, um zwei Ganzzahlen zu akzeptieren, und geben Sie die größte von zwei Zahlen in eine Datei an einem Speicherort Ihrer Wahl aus. Beschreiben Sie nun, was jede Anweisung bewirkt.

Es ist möglich, von der Bedeutung der Importanweisung bis hin zur abnormalen Beendigung einen ziemlich tiefen Drilldown durchzuführen

Jeder
quelle
2

Kern: 1. Was sind geprüfte und ungeprüfte Ausnahmen? 2. Welchen Typ (aktiviert / deaktiviert) soll beim Hinzufügen einer neuen Ausnahme im Code wann verwendet werden?

Servlet: 1. Was ist der Unterschied zwischen response.sendRedirect () und request.forward ()?

YoK
quelle
Kannst du bitte diese Fragen beantworten? Es ist das erste Mal, dass ich von "aktivierten und nicht aktivierten Ausnahmen" erfahre !!
PalAlaa
Einfache Google-Suche kann Sie zu Antworten führen: google.co.in/…
YoK
1

Wie threadsfunktioniert das? Was ist synchronized? Wenn synchronizedeine Klasse zwei Methoden enthält, können sie gleichzeitig von zwei Threads ausgeführt werden. Sie werden überrascht sein, wenn viele Leute mit Ja antworten . Dann alle Thread-bezogenen Fragen, zB Deadlock , Hunger etc.

fastcodejava
quelle
2
Das liegt daran, dass die Antwort "Ja" lautet ...
Fortega
@Fortega - Wie kann das sein? Jede Methode hat eine Sperre für das Objekt. Wenn einer threaddie Methode ausführt, kann kein anderer threaddie Sperre erhalten.
Fastcodejava
1
Wenn Sie zwei Objekte desselben Typs haben, können Sie die erste Methode für das erste Objekt und die zweite Methode für das zweite Objekt gleichzeitig aufrufen. Es sei denn, die Methoden sind natürlich statisch.
Fortega
2
Wenn Sie nicht richtig verstehen, wie die Verriegelung erfolgt, ist das kein Problem. Auch wenn es ein Kinderspiel sein könnte, heißt das nicht, dass meine Antwort falsch war :-)
Fortega
1
Die Antwort könnte für Programmierer, die keine Threads in ihrer Arbeit verwendet haben, Verwirrung stiften, aber ich denke, es ist eine gute :)
palAlaa
1

Eine Sache, die viele Java-Programmierer nicht wissen, ist, dass Strings unveränderlich sind. Verwenden Sie also StringBuilder oder StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
Shervin Asgari
quelle
Und Zahlen wie Integer, Long und so weiter
Arthur Ronald
In Bezug auf die Leistung gibt es keinen Unterschied mehr zwischen der Verkettung unveränderlicher Zeichenfolgen und der Verwendung von StringBuilder. Dies liegt daran, dass moderne Java-Compiler die Verkettung optimieren: java.sun.com/docs/books/jls/third_edition/html/… Verwenden Sie am besten eine besser lesbare Methode.
Brent Wilson
1
@BrentWilson, was Sie verlinken, wird nicht tun, was Sie denken. Es wird sich s += "a" + "b" + "c"in ein Stringbuilder.append(...)Szenario verwandeln . Eine Schleife wird jedoch nicht optimiert for. Der Code in dieser Antwort erstellt am Ende insgesamt 201 Strings, 100 StringBuilder und (je nach Implementierung) 300 verschiedene char[]s in diesen StringBuilders sowie geschätzte 425.000 + Zeichen. Wenn Sie es ändern, um einen StringBuilder direkt zu verwenden, wird dies auf 1 String, 1 StringBuilder und 13-15 interne char[]s reduziert, wobei stattdessen nur ~ 8k Zeichen verwendet werden, wie es sollte.
CorsiKa