Dieses Mal habe ich den Java SE 8 Programmer II (Gold) an einem bestimmten Tag im November genommen und erfolgreich bestanden.
In diesem Qiita gibt es verschiedene vorübergehende Erfahrungen, und ich selbst habe darüber nachgedacht, die Goldprüfung im Mai abzulegen, daher glaube ich nicht, dass ich als Kompliment effizient lernen konnte.
Ich habe jedoch das Gefühl, dass ich mich im Laufe der Zeit eingehender mit dem Prozess und den Ideen der Operation befassen konnte. Eigentlich war es keine perfekte Punktzahl, aber ich konnte den Prozess verfolgen und das Problem beim Kauen lösen.
Es war eine gute Erfahrung, die Problemstellung als mein eigenes Wissen aufnehmen zu können, ohne sich auf die dunklen Wolken verlassen zu müssen.
In diesem Artikel werde ich verfolgen, was ich unabhängig von der Häufigkeit interessant fand.
Stream Pipeline
Die Stream-API ist unvermeidlich, wenn Sie die Gold-Prüfung ablegen, verfügt jedoch über einen Mechanismus, der den Ablauf der Operation scheinbar irreführend erscheinen lässt. Sobald Sie es jedoch verstanden haben, denke ich, dass es für Stream-bezogene Probleme nützlich sein wird.
Ein Beispiel ist unten gezeigt.
example.java
public class example{
public static void main(String[] args){
Stream<String> fruit = Stream.of("banana", "grape", "orange","apple");
.filter(s -> s.length() > 5)
.peek(System.out::print)
.map(String::toUpperCase)
.peek(System.out::print);
long l = fruit.count();
}
}
Da die Anzahl der Beendigungsoperationen angezeigt wird, wird die in Frucht definierte Zwischenoperation mit einer Verzögerung ausgeführt. Wie werden die einzelnen Elemente des Streams verarbeitet?
Zu Beginn des Lernens stellte ich mir den folgenden Ablauf vor.
Das heißt, ich dachte, dass alle Elemente für jede Zwischenoperation überprüft würden. Wenn dies korrekt ist, sollte die Ausgabe "bananaorangeBANANA ORANGE" sein. Auf den ersten Blick scheint es richtig.
In Wirklichkeit war es jedoch anders: ** Die in Stream.of definierten Elemente wurden einzeln bis zum Ende bearbeitet, und dann wurde das nächste Element nach ** verschoben. Mit anderen Worten, die Ausführungsreihenfolge von Peek ist ② → ④ → ⑦ → ⑨, daher lautet die Ausgabe "bananaBANANA orange ORANGE".
Möglicherweise müssen Sie sich dessen nicht bewusst sein, wenn Sie Stream tatsächlich verwenden. Wenn Sie jedoch den Ablauf der Operationsreihenfolge verstanden haben, können Sie ihn entwirren, ohne sich zu bewegen, selbst wenn sich das Erscheinungsbild geringfügig ändert. Es ist zu beachten, dass nichts ausgegeben wird, wenn keine Anzahl von Beendigungsoperationen vorhanden ist, da Stream nur eine Zwischenoperation ist. Es wird häufig gefragt, ob der Beendigungsvorgang korrekt beschrieben wird. (Ich habe das Gefühl, dass es viele optionale Verwicklungen gab)
Es gibt einige Fragen in den Bereichen Ausnahmen und Behauptungen, aber ich möchte sie nicht verpassen, da sie leichter zu merken sind als die anderen Punkte. Es ist ein Ort (glaube ich), der auch in der Praxis nicht zu vermeiden ist. Ich denke, es ist ein Bereich, in dem Lernen definitiv genutzt werden kann.
Erstens der in SE7 eingeführte Mehrfachfang. Dies ist eine Syntax, mit der Sie die Ausnahmebehandlung gemeinsam beschreiben können, indem Sie sie durch "|" trennen. Hier sind zwei Punkte zu beachten.
** 1. Ausnahmen in der Vererbungsbeziehung (polymorph) können nicht zusammen aufgelistet werden ** Wenn Sie beispielsweise "IOException" und "Exception" zusammen schreiben, wird ein Kompilierungsfehler angezeigt.
** 2. Eine Variable ** Selbst wenn viele Ausnahmen zusammen aufgelistet werden müssen, steht am Ende nur eine Variable. Wenn Sie mehr als eine schreiben, tritt ein Kompilierungsfehler auf.
catch(IOException e1 | InterruptedException e2){} //Kompilierungsfehler
Wenn es mehrere catch-Klauseln gibt, ist es auch nicht möglich, eine Unterklassenausnahme nach einer Oberklassenausnahme zu schreiben (da sie vorne abgefangen wird und nicht überprüft werden kann).
Als nächstes ist dies auch eine in SE7 eingeführte Try-with-Resource-Anweisung. Dies ist eine Syntax, die einen Mechanismus bereitstellt, mit dem automatisch geschlossen werden kann, was in der finally-Klausel (z. B. "FileReader") vor SE 6 beschrieben wurde.
Der Mechanismus wird angewendet, indem die Ressource in der hinteren Klammer von try wie unten gezeigt definiert wird.
try(FileReader fr = new FileReader("sample1.txt");
FileWriter fw = new FileWriter("sample2.txt")){
//Lese- und Schreibressourcen
}catch(IOException e){
//Ausnahmebehandlung
}
Hier ist ** die Reihenfolge des Abschlusses die Umkehrung der definierten Reihenfolge **. Wenn die Ressource "AutoClosable" oder "Closable" nicht implementiert, z. B. wenn die Ressource unabhängig definiert wird, tritt ein Kompilierungsfehler auf. In E / A häufig verwendete Klassen können problemlos ausgeführt werden, da sie "AutoClosable" implementieren.
ForkJoinPool
ForkJoinPool definiert drei Arten von Ausführungsmethoden. Von diesen synchronisiert nur Aufruf die Verarbeitung.
Bei asynchroner Methode ändert sich die Ausführungsmethode abhängig vom Rückgabewert. Es ist unten zusammengefasst.
Methodenname | Rückgabewert | Synchronisieren/非Synchronisieren | Vererbungsklasse |
---|---|---|---|
execute | void | asynchron | RecursiveAction |
invoke | T | Synchronisieren | RecursiveAction/RecursiveTask<V> |
submit | ForkJoinTask<T> | asynchron | RecursiveTask<V> |
Wenn Sie sich die von Ihnen verwendete Methode ansehen, wird das Ergebnis beim Aufrufen eindeutig, andernfalls ist es undefiniert.
Scrollable ResultSet
Mit ResultSet in JDBC können Sie einen Mechanismus definieren, mit dem Sie den Cursor frei bewegen können.
//Anweisungsdefinition für die Verwendung eines scrollbaren ResultSet
Statement createStatement(int resultType, int resultSetConcurrency) throws SQLException
Die Konstanten, die für das erste und zweite Argument definiert werden können, werden in der ResultSet-Schnittstelle definiert.
Wenn Sie Argumente verwenden, sind zwei erforderlich. Wenn Sie also nur eines schreiben, wird ein Kompilierungsfehler angezeigt.
Wenn bei einem aktualisierbaren ResultSet der Primärschlüssel in der Zieltabelle festgelegt ist, ist jede Operation von Einfügen, Aktualisieren und Löschen möglich, aber die Methode ** insertRow
/ updateRow
/ deleteRow
muss aufgerufen werden. Wenn es nicht tatsächlich in der DB reflektiert wird **.
Im Vergleich zu Silber bin ich der Meinung, dass Gold ein beträchtliches Maß an Auswendiglernen und Verständnis haben musste. Es war oft zu viel und deprimierend. Da es jedoch in meinem eigenen Tempo gut ist, denke ich, dass es eine Qualifikation ist, die ausreichend erworben werden kann, wenn Sie sich die Zeit nehmen, daran zu arbeiten. Die Prüfungsgebühr ist ein Engpass ... </ font>
Ich konnte die Studie von Kuromoto in den Referenzen bestehen. Wenn Sie nur an die Prüfung denken, reichen dieses Buch und die offizielle API-Prüfung aus. Wenn Sie ein tieferes Verständnis und eine vollständige richtige Antwort wünschen, können Sie die Verwendung lila Bücher in Betracht ziehen.
Ich denke, es gibt keinen Verlust, die Herausforderung anzunehmen. Wenn Sie Java lernen möchten, wollen wir Silber und Gold erwerben!
[Gründliche Erfassung der Java SE 8 Gold-Problemsammlung [1Z0-809] Korrespondenz](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7% 95% A5-Java-Gold-% E5% 95% 8F% E9% A1% 8C% E9% 9B% 86-1Z0-809 / dp / 4295000035)
Recommended Posts