JavaRush /Java-Blog /Random-DE /Analyse von Fragen und Antworten aus Interviews für Java-...

Analyse von Fragen und Antworten aus Interviews für Java-Entwickler. Teil 8

Veröffentlicht in der Gruppe Random-DE
Praxis oder Theorie? Was ist wichtiger? Viele werden sagen, dass Übung natürlich wichtiger ist. Übe so hart du kannst und du wirst glücklich sein. Ich wage es, dem nicht zuzustimmen. Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 1Bei Vorstellungsgesprächen erfährt niemand, wie gut Sie in der Praxis sind. Sie werden in voller Länge genau nach Theorie gefragt. Und erst dann, wenn Sie alle Interviewrunden durchlaufen und in das Projekt einsteigen, können Sie Ihre praktischen Fähigkeiten einsetzen. Sie mögen einwenden: Manchmal gibt man einem eine Testaufgabe und Übung ist noch nötig. Ich widerspreche nicht, sie werden manchmal gegeben, aber Tatsache ist, dass MANCHMAL, aber IMMER ein theoretisches Interview stattfindet. Spüren Sie den Unterschied? Daher müssen Sie über ein solides theoretisches Fundament verfügen, das wir heute weiter stärken werden. Wir werden nämlich weiterhin Fragen analysieren , die in Vorstellungsgesprächen häufig gestellt werden.

71. Was passiert, wenn wir die toString()-Methode für Enum nicht überschreiben?

Nehmen wir an, wir haben die folgende Aufzählung :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
Lassen Sie uns den Schüler in der Konsole anzeigen, indem wir toString() für ihn aufrufen :
System.out.println(Role.STUDENT.toString());
Ergebnis in der Konsole:
STUDENT
Das heißt, standardmäßig ist toString() für enum der Name der Konstante selbst.

72. Ist es möglich, einen Konstruktor innerhalb einer Enum anzugeben?

Ja natürlich. Über den Konstruktor werden die Werte der internen Enum-Variablen festgelegt. Als Beispiel fügen wir der vorherigen Enumeration zwei Felder hinzu – ageFrom und ageTo –, um den Altersbereich für jede Rolle anzugeben:
public enum Role {
   STUDENT(5,18),
   TEACHER(20,60),
   DIRECTOR(40,70),
   SECURITY_GUARD(18,50);

   int ageFrom;
   int ageTo;

   Role(int ageFrom, int ageTo) {
       this.ageFrom = ageFrom;
       this.ageTo = ageTo;
   }
}

73. Was ist der Unterschied zwischen == und equal()?

Dies ist eine der häufigsten Fragen in Vorstellungsgesprächen für Java-Entwickler. Beginnen wir mit der Tatsache, dass wir beim Vergleich einfacher Werte ( int , char , double ...) dies mit == tun , da Variablen bestimmte Werte enthalten und wir diese vergleichen können. Und primitive Variablen sind keine vollwertigen Objekte – sie erben nicht von Object und haben keine equal()- Methode . Wenn wir über den Vergleich von Variablen sprechen, die auf Objekte verweisen, vergleicht == nur den Wert der Referenzen – unabhängig davon, ob sie sich auf dasselbe Objekt beziehen oder nicht. Und selbst wenn ein Objekt mit einem anderen identisch ist, liefert der Vergleich über == ein negatives Ergebnis ( false ), da es sich um ein anderes Objekt handelt. Wie Sie wissen, wird die Methode equal() zum Vergleichen von Referenzvariablen verwendet . Dies ist eine der Standardmethoden der Object- Klasse , die für einen vollständigen Vergleich von Objekten benötigt wird. Aber es lohnt sich gleich klarzustellen: Damit diese Methode richtig funktioniert, muss sie neu definiert werden, indem genau geschrieben wird, wie Objekte dieser Klasse verglichen werden sollen. Sofern Sie die Methode nicht überschreiben, werden Objekte standardmäßig nach == verglichen . In IntelliJ IDEA können Sie es automatisch überschreiben (mit IDEA-Tools) -> Alt + Einfügen , im angezeigten Fenster equal() und hashCode() auswählen -> auswählen, welche Klassenfelder teilnehmen sollen -> und voilà, automatische Implementierung von Die Methoden sind abgeschlossen. Hier ist ein Beispiel dafür, wie eine automatisch generierte equal- Methode für eine einfache Cat- Klasse mit zwei Feldern aussehen würde – int age und String name :
@Override
public boolean equals(final Object o) {
   if (this == o) return true;
   if (o == null || this.getClass() != o.getClass()) return false;
   final Cat cat = (Cat) o;
   return this.age == cat.age &&
           Objects.equals(this.name, cat.name);
}
Wenn wir über den Unterschied zwischen == und equal für Aufzählungen sprechen , gibt es nicht viel davon. Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 2Schließlich speichert enum Konstanten, und selbst wenn wir ähnliche Werte mit == vergleichen , erhalten wir true , da sich die Referenzen immer auf dieselben Objekte beziehen. Nun ja, bei der Verwendung von equal werden wir auch die Funktionalität richtig herausarbeiten, vor allem wenn man sich den Body der equal- Methode für eine enum anschaut , sieht man, dass in der Enum- Klasse die Implementierung der Methode wie folgt aussieht: Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 3Das heißt, inside - der gute alte Referenzvergleich! Zusammenfassend lässt sich sagen: Für enum ist der Vergleich sowohl durch == als auch equal korrekt.Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 4

74. Was macht die ordinal()-Methode in Enum?

Wenn wir die Methode int ordinal() für ein Aufzählungselement aufrufen , erhalten wir die Ordnungszahl ab Null dieses Werts in der allgemeinen Reihe von Aufzählungen. Lassen Sie uns diese Methode auf ein Element aus der zuvor besprochenen Aufzählung anwenden – Rolle :
System.out.println(Role.DIRECTOR.ordinal());
Dementsprechend zeigt die Konsole Folgendes an:
2

75. Ist es möglich, Enum mit TreeSet oder TreeMap in Java zu verwenden?

Die Verwendung von Enum- Typen in TreeSet und TreeMap ist akzeptabel. Und wir können schreiben:
TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
Und die Konsole zeigt Folgendes an:
STUDENT LEHRER DIREKTOR SECURITY_GUARD
Wir haben die Ausgabe nicht in alphabetischer Reihenfolge erhalten. Der Punkt ist, dass, wenn wir Enum- Elemente für TreeSet- Werte oder als Schlüssel für TreeMap verwenden , die Elemente in ihrer natürlichen Reihenfolge sortiert werden (der Reihenfolge, in der sie im Enum angegeben sind ). Das Verständnis dieser Funktionen hilft uns, besseren Code zu schreiben.Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 5

76. Wie hängen die Methoden ordinal() und CompareTo() in Enum zusammen?

Wie bereits erwähnt, gibt ordinal() die Ordnungszahl eines Werts in einer allgemeinen Aufzählungsliste zurück. Außerdem haben Sie bei der Analyse der vorherigen Frage gesehen, dass die Elemente von Aufzählungen, beispielsweise in einem TreeSet (sortierte Menge), die Reihenfolge annehmen, in der sie in enum deklariert sind . Und wie wir wissen, sortieren TreeSet und TreeMap Elemente, indem sie ihre CompareTo()- Methode der Comparable- Schnittstelle aufrufen . Daraus können wir annehmen, dass die Enum- Klasse die Schnittstelle Comparable implementiert und sie in der Methode CompareTo() implementiert , in der ordinal() zum Festlegen der Sortierreihenfolge verwendet wird. Nachdem wir die Enum- Klasse betreten haben , sehen wir eine Bestätigung dafür: Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 6Und den Hauptteil der Methode selbst: Die Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 7Methode ordinal() wird hier nicht aufgerufen. Stattdessen wird die Ordinalvariable verwendet – die Ordinalzahl des Elements in der Aufzählung. Die ordinal()- Methode selbst ist Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 8nichts anderes als ein Getter für die Ordinalvariable .

77. Schreiben Sie ein Beispiel für EnumM

In den oben besprochenen Fragen habe ich bereits Beispiele für Aufzählungen angegeben und sehe keinen Sinn darin, den Code zu duplizieren (z. B. Frage Nr. 72 zum Konstruktor in Aufzählungen).

78. Ist es möglich, Enum in einem Switch-Fall zu verwenden?

Es ist möglich und notwendig! Wenn ich auf meine Praxis zurückblicke, stelle ich fest, dass logische Konstrukte wie switch einer der häufigsten Einsatzorte für enum sind . In diesem Fall können Sie alle möglichen Variationen von case bereitstellen , und nachdem Sie die Logik für alle Enumerationswerte geschrieben haben , ist die Verwendung des Standardoperators möglicherweise nicht einmal erforderlich! Wenn Sie schließlich einen String oder einen numerischen Wert verwenden, beispielsweise vom Typ int , erhalten Sie möglicherweise einen unerwarteten Wert, der wiederum mit einem enum nicht möglich ist . Wie würde ein Schalter für das zuvor besprochene Beispiel aussehen:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // некая логика для STUDENT
           break;
       case TEACHER:
           // некая логика для TEACHER
           break;
       case DIRECTOR:
           // некая логика для DIRECTOR
           break;
       case SECURITY_GUARD:
           // некая логика для SECURITY_GUARD
           break;
   }
}

79. Wie erhalte ich alle verfügbaren Werte in einer Enum-Instanz?

Wenn Sie alle Instanzen einer Aufzählung abrufen müssen, gibt es eine Methode „values()“ , die ein Array aller verfügbaren Werte einer bestimmten Aufzählung in natürlicher Reihenfolge zurückgibt (in der Reihenfolge, in der sie in der Aufzählung angegeben wurden ). Beispiel:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
Die Konsole zeigt die folgende Ausgabe an:
STUDENT LEHRER DIREKTOR SECURITY_GUARD

Stream-API

80.Was ist Stream in Java?

Java Stream ist eine relativ neue Art der Interaktion mit einem Datenstrom, die es Ihnen wiederum ermöglicht, große Datenmengen bequemer und kompakter zu verarbeiten sowie die Datenverarbeitung zwischen einer bestimmten Anzahl von Threads zu parallelisieren, was zu einer Leistungssteigerung bei der Verwendung führen kann Funktionalität. Dieses Thema kann nicht ausführlicher auf den Punkt gebracht werden, daher hinterlasse ich hier einen Link zu einem Artikel, der Ihnen dabei helfen kann, in dieses Thema einzutauchen.Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 9

81. Was sind die wesentlichen Eigenschaften von Transaktionen?

Das Thema heißt Stream API, aber die Frage dreht sich um die Transaktion. Hmm... Zuerst wollen wir herausfinden, was eine Transaktion ist. Eine Transaktion ist eine Gruppe aufeinanderfolgender Datenbankoperationen, die eine logische Einheit für die Arbeit mit Daten darstellt. Eine Transaktion kann entweder vollständig und erfolgreich unter Wahrung der Datenintegrität und unabhängig von anderen parallel laufenden Transaktionen abgeschlossen werden, oder sie kann überhaupt nicht abgeschlossen werden, in diesem Fall hat sie keine Wirkung. Transaktionen haben also vier Haupteigenschaften, die kurz ACID genannt werden . Schauen wir uns an, wie jeder Buchstabe dieser Abkürzung steht: A – Atomizität – Atomizität – diese Eigenschaft garantiert, dass keine Transaktion teilweise im System aufgezeichnet wird. Entweder werden alle Unteroperationen ausgeführt oder keine ( alles oder nichts ). C – Konsistenz – Konsistenz ist eine Eigenschaft, die sicherstellt, dass jede erfolgreiche Transaktion nur gültige Ergebnisse aufzeichnet. Das heißt, dies ist eine Garantie dafür, dass im Falle einer erfolgreichen Transaktion alle Regeln und Einschränkungen, die das System für bestimmte Daten auferlegt, eingehalten werden, andernfalls wird die Transaktion nicht abgeschlossen und die Daten im System kehren zu ihrem vorherigen Zustand zurück Zustand. I – Isolation – Isolation ist eine Eigenschaft, die besagt, dass während der Ausführung einer Transaktion parallele Transaktionen deren Ergebnis nicht beeinflussen sollten. Diese Eigenschaft ist ressourcenintensiv und wird daher typischerweise teilweise dadurch umgesetzt, dass bestimmte Isolationsgrade zugelassen werden, die bestimmte Isolationsprobleme lösen. Darauf gehen wir in der nächsten Frage genauer ein. Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 10D – Haltbarkeit – diese Eigenschaft stellt sicher, dass der Benutzer, wenn er vom System eine Bestätigung über den Abschluss der Transaktion erhalten hat, sicher sein kann, dass die von ihm vorgenommenen Änderungen nicht aufgrund eines Fehlers abgebrochen werden. Das heißt, Sie können sicher sein, dass ein Betriebssystemausfall nichts mit Ihren Daten zu tun hat, wenn Sie bereits eine Bestätigung über den erfolgreichen Abschluss Ihrer Transaktion erhalten haben.

82. Welche Transaktionsisolationsstufen gibt es?

Wie ich bereits sagte, ist die Bereitstellung der ACID-Isolation ein ressourcenintensiver Prozess. Daher ist diese Eigenschaft teilweise erfüllt. Es gibt verschiedene Isolationsstufen, und je höher die Stufe, desto größer die Auswirkung auf die Produktivität. Bevor wir zu den Transaktionsisolationsstufen übergehen, müssen wir uns die verschiedenen Probleme unzureichender Transaktionsisolation ansehen :
  • Phantomlesung – wenn dieselbe Probe (dieselbe Abfrage) innerhalb derselben Transaktion wiederholt aufgerufen wird, unterscheiden sich die empfangenen Daten, was auf Dateneinfügungen durch eine andere Transaktion zurückzuführen ist;

  • sich nicht wiederholendes Lesen – wenn dieselbe Probe (dieselbe Abfrage) innerhalb derselben Transaktion wiederholt aufgerufen wird, unterscheiden sich die empfangenen Daten, was auf Änderungen (Aktualisierung) und Löschungen von Daten durch eine andere Transaktion zurückzuführen ist;

  • Dirty Read – der Prozess des Lesens von Daten, die durch eine Transaktion hinzugefügt oder geändert wurden, die anschließend nicht bestätigt (zurückgesetzt) ​​wird, d. h. Lesen ungültiger Daten;

  • Verlorene Aktualisierung – wenn verschiedene Transaktionen gleichzeitig dieselben Daten ändern, gehen alle Änderungen außer der letzten verloren (erinnert an das „Race Condition“-Problem in einer Multithread-Umgebung).

Transaktionsisolationsstufen werden dadurch charakterisiert, vor welchen Isolationsproblemen sie schützen. Betrachten wir in Form einer Tabelle den Grad der Isolierung und vor welchen Problemen sie schützen:
Isolationsstufe Phantomlesung Sich nicht wiederholendes Lesen Schmutzige Lektüre Update verloren
SERIALISIERBAR + + + +
WIEDERHOLBARES LESEN - + + +
LESEN SIE ENGAGIERT - - + +
LESEN SIE UNVERPFLICHTET - - - +
KEINER - - - -
Und vergessen Sie nicht die Kehrseite der Medaille: Je höher die Isolationsstufe, desto länger dauert die Verarbeitung von Transaktionen (wenn mehrere Transaktionen parallel ausgeführt werden). Wenn Sie tiefer in dieses Thema eintauchen möchten, finden Sie hier einen tollen Artikel, der Ihnen den Einstieg erleichtert.

83. Was ist der Unterschied zwischen Statement und PreparedStatement?

Und hier gibt es keinen sehr reibungslosen Übergang zu den Funktionen der JDBC- Technologie . Lassen Sie uns zunächst herausfinden, was Statement eigentlich ist . Dies ist ein Objekt, das zum Generieren von SQL-Abfragen verwendet wird. JDBC verwendet drei Typen : Statement , PreparedStatement und CallableStatement . Wir werden uns CallableStatement heute nicht ansehen : Lassen Sie uns über den Unterschied zwischen Statement und PreparedStatement sprechen .
  1. Die Anweisung wird verwendet, um einfache SQL-Abfragen ohne eingehende, dynamisch eingefügte Parameter auszuführen. PrepareStatement wird mit der Möglichkeit verwendet, Eingabeparameter dynamisch einzufügen.

  2. Um Parameter in PreparedStatement zu setzen, werden Eingabeparameter in der Anfrage als Fragezeichen geschrieben, sodass dann stattdessen ein Wert mithilfe verschiedener Setter wie setDouble() , setFloat() , setInt() , setTime() ... eingefügt werden kann. . Dadurch fügen Sie nicht den falschen Datentyp in Ihre Abfrage ein.

  3. PreparedStatement ist „vorkompiliert“ und verwendet Caching, sodass seine Ausführung etwas schneller sein kann als die Abfrage von Statement- Objekten . Daher werden SQL-Abfragen, die häufig ausgeführt werden, als PreparedStatement- Objekte geschrieben, um die Leistung zu verbessern .

  4. Statement ist anfällig für SQL-Injections, während PreparedStatement sie verhindert. Lesen Sie in diesem Artikel mehr über die Beseitigung von SQL-Injections und andere Best Practices für die Java-Sicherheit .

Wenn Sie beginnen, sich mit der Technologie zum Verbinden einer Java-Anwendung mit einer Datenbank (JDBC) zu befassen, empfehle ich Ihnen, mit diesem Artikel zu beginnen . Nun, an diesem Punkt werden wir heute aufhören.Analyse von Fragen und Antworten aus Interviews für Java-Entwickler.  Teil 8 - 11
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION