Das Folgende sind relativ fortgeschrittene Fragen, und sie werden in der Regel während der Interviews selten gestellt, da sie den Interviewer ausschalten können. Aber Sie können etwas Zeit finden, um es selbst zu üben.
1. System.exit (0) überspringt die Ausführung von endlich Block
System.SetSecurityManager (new SecurityManager () {@Override public void Checkexit (int Status) {threadDeath ();}}); try {System.exit (0); } endlich {system.out.println ("im endlich block"); } Warum gibt dieser Code im endgültigen Block aus? Warum werden die Stapel -Trace -Informationen nicht gedruckt?
2. String str = "Hallo"; wobei STR ein String -Objekt ist
Im Gegensatz zu C ++ sind Variablen in Java entweder Grundtypen oder Referenzen. Eine Variable kann kein Objekt sein. Dies bedeutet einen solchen Ausdruck:
String str = "Hallo"; String text = "bye"; STR == Text; // Vergleichen Sie zwei Referenzen anstelle von Inhalten Str = Text; // Die Referenz des Textes zu Streu zuweisen
In den meisten Fällen gibt es tatsächlich keinen großen Unterschied, aber das Schreiben solcher kann leicht Verwirrung verursachen.
Final StringBuilder sb = new StringBuilder (); SB.Append ("Hallo"); // Diese Referenz ist abschließend, nicht diese Instanz. Methode (SB); // Diese Instanz kann durch Methoden geändert werden, diese Variable kann jedoch nicht geändert werden 3. Java -Speicherleck ist das gleiche, wie C ++ - Programmierer verstehen
Die Definition des Speicherlecks auf Wikipedia lautet: "In der Informatik, wenn ein Programm keine Speicherzuweisung korrekt verwaltet, werden Speicherlecks auftreten. In objektorientierter Programmierung, wenn auf ein Objekt im Speicher nicht in Code zugegriffen werden kann, ist dies ein Speicherleck." In Java sind jedoch immer die Objekte erreichbar, und diejenigen ohne starke Referenzen werden gelöscht. Der Begriff Speicherleck bedeutet in Java: Es gibt Objekte, die im Speicher nicht vorhanden sind, und in der Regel werden einige Ressourcen, die nicht mehr verwendet werden, noch in der Sammlung gespeichert.
4. Multithread -Programmierung ist schwierig
Wenn Sie keine Erfahrung haben, ist die Programmierung von Multi-Threading in der Tat schwierig. Wenn Sie nur eine Reihe von Code in eine Reihe von Threads werfen und ihn ausführen, kann das Problem überhaupt nicht gelöst werden, es wird ein Chaos sein. Wenn Sie jedoch Thread -Allokation bei Bedarf durchführen, die Interaktionen zwischen Threads steuern und einfache Muster verwenden können, die einige Mitglieder des Teams auch verstehen können, wird das Problem viel einfacher. Natürlich gibt es eine weitere Herausforderung, die Sie im Team dazu bringen müssen, Ihren Regeln zu folgen
5. kümmert sich nicht um die unterschiedlichen Leistungen zwischen verschiedenen Operationen
Ich habe kürzlich gehört, dass es ein Problem gibt, das die Zugabe von Ganzzahlen, Speicherzugriff, Modul und Ausgabe an die Konsole beinhaltet. Obwohl jeder dieser Operationen eine Größenordnung ist, die langsamer ist als der vorherige, möchte dieser Typ nur den schnellsten Betrieb und die schnellste Ergänzung optimieren und durch einige teurere Vorgänge ersetzen. Wenn Sie die Leistung wirklich optimieren möchten, sollten Sie diese teuren Vorgänge durch einen billigen Betrieb besser ersetzen. Wenn sich Ihr Engpass in der Hardware befindet, müssen Sie beispielsweise eine große Anzahl von Dateien von der Festplatte lesen, wodurch das Ändern des Code der Software nutzlos ist, da das Problem überhaupt nicht liegt.
6. Zufällige Zahlen sind zufällig
Ein bestimmter Satz von Zufallszahlen ist wie Zahlen eines Musters. Ich habe bereits in diesem Artikel über dieses Problem gesprochen. Viele Menschen glauben nicht, dass die Zahlen, die von zufälligen Zahlengeneratoren generiert werden, tatsächlich nicht zufällig sind.
7. Schwimmpunkte sollten vermieden werden, da sie zufällige Fehler erzeugen
Bei derselben Operation erzeugen die schwimmenden Punktzahlen jedes Mal den gleichen Fehler. Fehler sind vorhersehbar und daher kontrollierbar. Wenn Sie wissen, was Sie tun und sich an einige einfache Regeln halten, z. B. die Ergebnisse der Ergebnisse, machen die schwimmenden Punktzahlen nicht mehr Fehler als BigDecimal. Darüber hinaus ist es lesbarer und mehr als hundertmal schneller (und es werden gleichzeitig weniger Müllobjekte erzeugt).
8. Zeitzone ist ewig
Der Grund für dieses Missverständnis ist, dass sich die Zeitzone mit der Zeitzone ändert. Dies bedeutet, dass Europa/London 1970/1/1 01:00 anstelle von 00:00 war. Warum? Weil London in den zwei Jahren von 1968 bis 1971 bei Tageslicht spart.
In den letzten Jahren haben sich auch viele Zeitzonen verändert. Früher war Moskau der East Third District (GMT+3), aber jetzt ist es der East Fourth District (GMT+4) (ab dem 27. März 2011). Wenn Sie sich die Zeit des Jahres 2010 ansehen, werden Sie feststellen, dass es East 3 und East 4 ist.
Es gibt einige Dinge, die Sie vielleicht überrascht klingen:
Februar von Schweden im Jahr 1721 hat 30 Tage.
Der erste Tag in England im Jahr 1751 war der 25. März, der 11 Tage hinter Frankreich lag.
Nachdem die Vereinigten Staaten den gregorianischen Kalender übernommen haben, zeichnet er Hunderte von Jahren zurück, so dass die ursprünglich aufgezeichneten Daten in zwei Kalendern ausgedrückt werden können (normalerweise werden zwei Daten zur gleichen Zeit für genauere Präzision bereitgestellt). Zum Beispiel änderte sich der Geburtstag von George Washington vom 11. Februar 1731 bis 22. Februar 1732.
9. Wenn Sie eine nichtflüchtige Variable in einem Thread lesen, können Sie endlich den von ihm aktualisierten Wert lesen.
Dieses Problem trat vor ein paar Tagen zweimal auf Stackoverflow auf. Wenn der JIT-Compiler den Code optimiert, wird im Allgemeinen Felder nichtflüchtiger Typen, die nicht an diesem Thread geändert wurden, inline. Sobald dieser Code kompiliert wurde (Sie können ihn mit -xx:+printCompilation sehen), ist es wahrscheinlich, dass er niemals sichtbar ist, wenn Sie dieses Feld in einem anderen Thread ändern. Das Hinzufügen von zufälligen Synchronisationsblöcken oder Druckanweisungen kann die Ausführung dieser Optimierung verzögern oder den JIT -Compiler stören, sodass er diese Optimierung nicht durchführt.
10.Java -Interviewfragen sind korrekt
Es gibt viele Fragen des Java -Interviews, die entweder veraltet sind (seit mehr als 10 Jahren nicht aktualisiert und mit der aktuellen Java -Version nicht in Kontakt stehen), oder sie sind irreführend oder sie können sogar falsch liegen. Leider wurde keine dieser Antworten herumgegeben, ohne sie zu überprüfen.
Ich werde mich oben auf die oben genannten Antworten von Stackoverflow beziehen, da die Peer -Bewertung hier besser die Antworten überprüft. Gehen Sie im Allgemeinen nicht auf Websites wie Rose India, die obigen Antworten sind lächerlich. Wenn Sie auf den Grund gehen möchten, können Sie überprüfen, wie viele Rechtschreibfehler (Klassennamen und professionelle Begriffe) oder falsche Bemerkungen im obigen Artikel gefunden werden. Ein Grund für diese Probleme ist, dass es keinen wirksamen Rückkopplungsmechanismus gibt, um diese Fehler zu korrigieren.
Ich möchte einige Java -Interviewfragen empfehlen:
Die 50 wertvollsten Java -Interviewfragen eignen sich für die Zulassung zu Java -Programmierern
10 klassische Java Main -Methode -Interviewfragen
Besprechen Sie die zehn häufigsten Interviewfragen in Java (Super Classic)
10 XML -Interviewfragen für Java -Programmierer werden veröffentlicht
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.