Ich habe Fragen, die jeder gute .Net-Entwickler beantworten sollte durchlaufen und war sehr beeindruckt vom Inhalt und der Herangehensweise dieser Frage. Aus dem gleichen Grund stelle ich diese Frage für Java/Java EE Entwickler.
Welche Fragen sollte ein guter Java/Java EE-Programmierer Ihrer Meinung nach beantworten können?
Ich bezeichne diese Frage als Community-Wiki, da sie nicht benutzerspezifisch ist und der Programmier-Community insgesamt dienen soll.
Ich freue mich auf einige erstaunliche Antworten.
[~ # ~] edit [~ # ~] : Bitte beantworte auch Fragen, wie in den Kommentaren vorgeschlagen, damit die Leute etwas Neues über das lernen können sprache auch.
Welche Beziehung besteht zwischen hashCode () und equals ()? Welche Bedeutung haben diese Methoden? Was sind die Voraussetzungen für deren Umsetzung?
Was ist der Unterschied zwischen Set, Map und List?
Ich bin immer noch erstaunt, wie viele Leute diesen in einem Telefoninterview nicht kennen.
Kann eine Schnittstelle mehrere Schnittstellen erweitern?
Die meisten Leute antworten mit "nein", weil sie Java hat keine Mehrfachvererbung. Eine Schnittstelle kann jedoch immer noch mehrere Schnittstellen erweitern (eine Klasse kann jedoch nicht mehrere Klassen erweitern). t führt zum Diamantproblem.
Wenn die Antwort "nein" ist, sollte der Interviewer fragen "warum würde ist es verboten?". Dann fängst du an darüber nachzudenken und solltest erkennen, dass es kein Problem damit gibt.
Sie haben also im Interview (selbst) etwas gelernt und dem Interviewer gezeigt, dass Sie in der Lage sind, über Klassen, Objekte, Vererbung, Polymorphismus usw. zu urteilen. Es ist tatsächlich viel besser als ein Kandidat, der die Antwort auswendig kann, aber nicht verstehen warum
Benutzung von finale Schlüsselwort in Methodenaufrufen. Zum Beispiel warum funktioniert die Methode prüfung Im folgenden Code wird trotz der Verwendung kein Kompilierungsfehler angezeigt finale Qualifizierer für den 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");
}
</ code>
Ein sicherer ist der Vergleich der Zeichenfolge. Unterschied zwischen
String helloWorld = "Hallo Welt";
helloWorld == "Hallo Welt";
"Hello World" .equals (helloWorld);
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 erstmal :)
Trickfrage: Welche Arten von Parametern werden in Java als Referenz übergeben?
Es ist erstaunlich, wie viele Menschen immer noch das Mantra "Primitive werden als Wert, Objekte als Referenz übergeben" nachahmen.
Was ist der Unterschied zwischen String, StringBuffer und StringBuilder?
"Was ist ein Implementierungsdeskriptor?"
Wenn der Kandidat unwillkürlich zittert, hat er Erfahrung mit EJBs vor 3.0.
Viele Fragen und Interviews finden Sie unter http://www.techinterviews.com/interview-questions/Java und ich sehe keinen Wert darin, eine Auswahl davon zu kopieren/einzufügen.
Nein, es liegt an Ihnen, eine 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 von bekannt Fragen Sie zu einem guten oder schlechten unbekannt Problemlöser macht. Also bitte ich lieber die Leute, ein bestimmtes Problem zu lösen, ihnen einige Anforderungen zu geben 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, wie sie programmiert haben, wie sie die vorgeschlagenen APIs verwendet haben usw.
Abgesehen davon ist meine Lieblingsfrage "Was magst du nicht an Java?" (im Geiste von dieses ). Es ist wirklich eine ausgezeichnete Frage, es gibt Ihnen ein sofortiges Feedback, wie viel ein Kandidat verwendet hat Java und erkundet seine API 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 lauten: "Was möchten Sie am liebsten in Java ändern?". Und in der Tat bevorzuge ich diesen Weg.
Was ist "System", "out", "println" in "System.out.println"? Was passiert, wenn Sie "put" auf HashMap aufrufen?
Wenn Sie Absolventen mit Java einstellen, "erleben" Sie "eine einfache Frage wie Schreiben Sie einen Code, durch den eine NullPointerException ausgelöst wird kann unterscheiden, welche Kandidaten Javaverwendet haben. _ vor kurzem und hörte nicht nur auf, als sie ihre Einheit/ihren Kurs beendet hatten.
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
Einfache Fragen wie
Obwohl dies sehr einfach ist, kennen viele Entwickler die Antworten nicht. Ich schlage vor, diese vor den Code-bezogenen Abfragen zu stellen.
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 auf meinem Informatikkurs an der Universität gefragt und die große Mehrheit konnte es nicht beantworten.
Die Liste der Fragen zu J2EE/JEE-Middleware, mit denen ich konfrontiert bin, ist außergewöhnlich lang. Hier sind jedoch die Top 5, die mir gestellt wurden und zu guten Diskussionen geführt haben:
javax.naming.Context
Fragen.Eine andere knifflige Frage, die ich beunruhigend finde, die ich 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.
Set
, List
, Map
und die Bedeutung von Object.equals()
und Object.hashCode()
in jeder Implementierung dieser Schnittstellen kennen .Was magst du am meisten/am wenigsten an Java und warum?
Unterschied zwischen einem Webserver und einem Webcontainer
warum würden Sie die toString () -Methode überschreiben?
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?
Dies ist die Frage, vor der ich in meinem Interview stand.
Warum wird die Methode main in Java als public static void main (String [] args) bezeichnet?
Antworten:
1 .main () muss als public deklariert werden weil es von JVM aufgerufen wird, wenn die Programmausführung beginnt. JVM gehört nicht zu unserem Programmpaket.
Um auf main außerhalb des Pakets zugreifen zu können, müssen wir es als public deklarieren. Wenn wir es als etwas anderes als public deklarieren, wird ein Laufzeitfehler angezeigt aber nicht Übersetzungszeitfehler
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 Test-Klasse, sucht nach den Kommandozeilenargumenten 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, d. H. NoSuchMethodFoundError.
4 .main () muss String-Argumente als Arrays haben, da JVM die main-Methode durch Übergabe eines Befehlszeilen-Arguments aufruft. Da sie im String-Array-Objekt gespeichert sind, wird sie als Argument an main () übergeben.
Was ist der Unterschied zwischen J2SE und J2EE (oder JSE und JEE)?
Ein Entwickler sollte darauf hinweisen können, dass es sich bei der Enterprise Edition im Grunde genommen um eine Schnittstellendefinition (d. H. Eine Spezifikation) handelt, die von Anbietern implementiert werden kann. Während die Standardausgabe eine eigenständige Implementierung ist
Wie wirkt sich volatile
auf die Codeoptimierung durch den Compiler aus?
Schreiben Sie ein Programm, das zwei Ganzzahlen akzeptiert, und geben Sie die größte von zwei Zahlen in eine Datei an einem Ort Ihrer Wahl aus. Beschreiben Sie nun, was die einzelnen Anweisungen bewirken.
Es ist möglich, von der Bedeutung der Importanweisung bis hin zur abnormalen Beendigung einen Drilldown durchzuführen
Wie wäre es mit einer Session-Bean und beschreiben Sie einige Unterschiede zwischen statuslosen und statusbehafteten Session-Beans.
Kern: 1. Was sind geprüfte und nicht geprüfte Ausnahmen? 2. Beim Hinzufügen einer neuen Ausnahme im Code, welcher Typ (aktiviert/deaktiviert) wann verwendet werden soll?
Servlet: 1. Was ist der Unterschied zwischen response.sendRedirect () und request.forward ()?
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";
}
Wie funktioniert threads
? Was ist synchronized
? Wenn eine Klasse zwei synchronized
Methoden enthält, können diese gleichzeitig von zwei Threads ausgeführt werden. Sie werden überrascht sein, wie viele Leute antworten ja. Dann werden alle Thread-bezogenen Fragen, z.B. Deadlock, Hunger usw.
Wann würden Sie Session Beans oder Message Driven Beans verwenden?
Wie werden Transaktionen in Session Beans behandelt?
Was ist der Unterschied zwischen lokalen und Remote-Session-Beans? Bei dieser Frage geht es eher darum zu wissen, ob sich RPCs im Bild befinden oder nicht, da eine Methode, die sowohl als lokal als auch als remote verfügbar gemacht wird, möglicherweise immer noch anders funktioniert (Nebenwirkungen auf Parameter sind bei lokalen Geräten möglich, bei Remotes jedoch nicht).
Ein guter Test ist: Stellen Sie die Fragen niemals in derselben Reihenfolge. Wir hatten die Erfahrung mit Offshoring, dass sie die Antwort manchmal tatsächlich in der falschen Reihenfolge gaben :-). Als Ergebnis sollten Sie sicherstellen, dass Sie die Person, die Sie befragen, tatsächlich sehen können.
F. Nennen Sie ein Beispielszenario aus der Praxis, in dem Sie GenericServlet und nicht HttpServlet verwenden.
Beschreiben Sie die Unterschiede zwischen den "vier" (nicht drei;)) Typen der inneren Klasse.
Gute Fragen und gute Antworten von allen. Es ist schön, solche Fragen zu sehen. Ich möchte noch etwas hinzufügen, was dieses Antwort-Repository bereichern kann.
Für Core Java Ist main das Schlüsselwort in Java? More info
Java ist plattformunabhängig. Was ist mit JVM?
Können wir private Konstruktoren in der Klasse haben, wenn ja was die Verwendung davon ist?.
Warum brauchen wir Konstruktoren in der abstrakten Klasse, obwohl wir sie nicht instanziieren können? Mehr Info
Anstelle von vor allem gibt es viel mehr Fragen, die sich auf das Kern-Java beziehen. Mehr Info
Vor- und Nachteile von thread-sicheren Klassen und explizit synchronisiertem Code sowie Beispiele für gute Anwendungen von beiden. Es ist oft nicht richtig, auf thread-sichere Klassen zu vertrauen, um die Datenkonsistenz in Multithread-Anwendungen zu gewährleisten.