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.
java
jakarta-ee
Rachel
quelle
quelle
Antworten:
Welche Beziehung besteht zwischen hashCode () und equals ()? Welche Bedeutung haben diese Methoden? Was sind die Voraussetzungen für deren Umsetzung?
quelle
Was ist der Unterschied zwischen Set, Map und List?
Ich bin immer noch erstaunt, wie viele Leute diesen in einem Telefoninterview nicht kennen.
quelle
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
quelle
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.
quelle
final
Schlüsselwort auf dasName
Objekt angewendet wird, nicht auf dasname
Feld der KlasseName
n
wird als final deklariert, was bedeutet, dass er imtest
Methodenkörper nicht neu zugewiesen werden kann . Es verursacht keinen Fehler, da die Methodetest
nicht versucht, den Parameter neun = new Name("test");
Ein sicherer ist der Vergleich der Zeichenfolge. Unterschied zwischen
quelle
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.
quelle
Sie sagten "Gut", "Entwickler". Hier sind auch meine 2 Cent .. :)
Für J2EE:
Ich kann viele, viele, viele mehr von ihnen denken, aber das reicht fürs Erste :)
quelle
Was ist der Unterschied zwischen String, StringBuffer und StringBuilder?
quelle
"Was ist ein Bereitstellungsdeskriptor?"
Wenn der Kandidat unwillkürlich schaudert, hat er Erfahrung in der Arbeit mit EJBs vor 3.0.
quelle
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.
quelle
Was ist "System", "out", "println" in System.out.println? Was passiert, wenn Sie "put" auf HashMap aufrufen?
quelle
quelle
new
oder^
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,unsigned
integrale Typen hinzuzufügen .quelle
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.
quelle
Was wird gedruckt?
Antwort : CoolReturn + 1
Etwas schwieriger:
Antwort : CoolReturn
quelle
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.
quelle
Einfache Fragen wie:
Obwohl diese sehr einfach sind, kennen viele Entwickler die Antworten nicht. Ich schlage vor, diese vor den Code-bezogenen Abfragen zu stellen.
quelle
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:
Diese Frage führt normalerweise zu verschiedenen interessanten Diskussionen über Giftmeldungen, Fehlerwarteschlangen usw.
Mit dieser Frage kann ich normalerweise diskutieren, wann dauerhafte Abonnenten zu verwenden sind, wann Warteschlangen zu verwenden sind usw.
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.
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.
Diese Frage wird auf viele Arten gestellt, angefangen vom Service Locator- Muster bis hin zu
javax.naming.Context
Fragen.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:
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 BedeutungObject.equals()
undObject.hashCode()
in jeder Implementierung dieser Schnittstellen.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."
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.
Immer wieder wurde ich gebeten, auf ein GoF-Muster in der Java-API hinzuweisen. Sei besser darauf vorbereitet.
quelle
Unterschied zwischen und Webserver und einem Webcontainer
quelle
Was magst du am meisten / am wenigsten an Java und warum?
quelle
Warum sollten Sie die toString () -Methode überschreiben?
quelle
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?
quelle
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.
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.
quelle
public static void main(String... args)
wenn Sie so geneigt sind :-) Es hat die gleiche Signatur wie[]
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
quelle
Wie wirkt sich das
volatile
auf die Codeoptimierung durch den Compiler aus?quelle
Wie wäre es mit einer Session-Bean und beschreiben Sie einige Unterschiede zwischen zustandslosen und statusbehafteten Session-Beans.
quelle
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
quelle
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 ()?
quelle
Wie
threads
funktioniert das? Was istsynchronized
? Wennsynchronized
eine 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.quelle
thread
die Methode ausführt, kann kein andererthread
die Sperre erhalten.Eine Sache, die viele Java-Programmierer nicht wissen, ist, dass Strings unveränderlich sind. Verwenden Sie also StringBuilder oder StringBuffer!
quelle
s += "a" + "b" + "c"
in einStringbuilder.append(...)
Szenario verwandeln . Eine Schleife wird jedoch nicht optimiertfor
. Der Code in dieser Antwort erstellt am Ende insgesamt 201 Strings, 100 StringBuilder und (je nach Implementierung) 300 verschiedenechar[]
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 internechar[]
s reduziert, wobei stattdessen nur ~ 8k Zeichen verwendet werden, wie es sollte.