Cette fois, j'ai pris le Java SE 8 Programmer II (Gold) un certain jour de novembre et je l'ai réussi.
Il y a diverses expériences de réussite dans ce Qiita, et j'ai moi-même pensé à passer l'examen d'or vers le mois de mai, donc je ne pense pas que j'ai pu étudier efficacement en guise de compliment.
Cependant, je sens que j'ai pu approfondir le processus et les idées de l'opération au fil du temps. En fait, ce n'était pas un score parfait, mais j'ai pu suivre le processus et résoudre le problème en mâchant.
Ce fut une bonne expérience de pouvoir assimiler la collection de problèmes comme mes propres connaissances sans compter sur les nuages sombres lors de l'obtention de la qualification.
Dans cet article, je vais suivre ce que j'ai trouvé intéressant quelle que soit la fréquence.
Stream Pipeline
L'API Stream est inévitable lors de l'examen Gold, mais elle dispose d'un mécanisme qui rend le déroulement des opérations apparemment trompeur. Cependant, une fois que vous l'aurez compris, je pense que ce sera utile pour les problèmes liés à Stream.
Un exemple est présenté ci-dessous.
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();
}
}
Etant donné que le décompte des opérations de terminaison est montré, l'opération intermédiaire définie dans fruit est exécutée avec un retard. Alors, comment chaque élément du Stream est-il traité?
Au début de l'apprentissage, j'ai imaginé le flux suivant.
Autrement dit, je pensais que tous les éléments seraient vérifiés pour chaque opération intermédiaire. Si cela est correct, la sortie doit être «bananaorangeBANANA ORANGE». À première vue, cela semble correct.
Cependant, en réalité, c'était différent, ** les éléments définis dans Stream.of ont été manipulés un par un jusqu'à la fin, puis l'élément suivant a été déplacé vers **.
En d'autres termes, l'ordre d'exécution de peek est ② → ④ → ⑦ → ⑨, donc la sortie est bananaBANANA orange ORANGE
.
Vous n'avez peut-être pas besoin d'en être conscient lorsque vous utilisez réellement Stream, mais une fois que vous comprenez le déroulement de l'ordre d'opération, vous pouvez le démêler sans bouger même si l'apparence change un peu. Il convient de noter que s'il n'y a pas de décompte d'opérations de fin, rien n'est sorti car Stream n'est qu'une opération intermédiaire. Il est souvent demandé que l'opération de terminaison soit correctement décrite. (Je pense qu'il y avait beaucoup d'enchevêtrements facultatifs)
Il y a quelques questions dans les domaines des exceptions et des assertions, mais je ne veux pas les manquer car elles sont plus faciles à retenir que les autres éléments. C'est un endroit (je pense) qui ne peut être évité même dans la pratique, donc je pense que c'est un domaine où l'apprentissage peut certainement être utilisé.
Premièrement, la multi-capture introduite dans SE7. Il s'agit d'une syntaxe qui vous permet de décrire collectivement le traitement des exceptions en le séparant par "|". Il y a deux points à noter ici.
** 1. Les exceptions dans la relation d'héritage (polymorphe) ne peuvent pas être répertoriées ensemble **
Par exemple, écrire ʻIOException et ʻException
ensemble entraînera une erreur de compilation.
** 2. Une variable ** Même s'il existe de nombreuses exceptions à répertorier ensemble, il n'y a qu'une seule variable à la fin. Si vous en écrivez plusieurs, une erreur de compilation se produira.
catch(IOException e1 | InterruptedException e2){} //Erreur de compilation
De plus, s'il existe plusieurs clauses catch, il n'est pas possible d'écrire une exception de sous-classe après une exception de superclasse (car elle est interceptée au début et ne peut pas être inspectée).
Ensuite, il s'agit également d'une instruction try-with-resource introduite dans SE7. Il s'agit d'une syntaxe qui fournit un mécanisme qui peut fermer automatiquement ce qui était décrit dans la clause finally (par exemple, FileReader
) avant SE 6.
Le mécanisme est appliqué en définissant la ressource dans la parenthèse arrière de try, comme indiqué ci-dessous.
try(FileReader fr = new FileReader("sample1.txt");
FileWriter fw = new FileWriter("sample2.txt")){
//Ressources de lecture et d'écriture
}catch(IOException e){
//Gestion des exceptions
}
Ici, ** l'ordre de fermeture est l'inverse de l'ordre défini **. De plus, si la ressource n'implémente pas ʻAutoClosable ou
Closable, comme lorsque la ressource est définie indépendamment, une erreur de compilation se produira. Les classes couramment utilisées dans les E / S peuvent être exécutées sans problème car elles implémentent ʻAutoClosable
.
ForkJoinPool
ForkJoinPool définit trois types de méthodes d'exécution. Parmi ceux-ci, uniquement invoquer synchronise le traitement.
De plus, dans le cas de l'asynchrone, la méthode d'exécution change en fonction de la valeur de retour. Il est résumé ci-dessous.
Nom de la méthode | Valeur de retour | Synchroniser/非Synchroniser | Classe d'héritage |
---|---|---|---|
execute | void | asynchrone | RecursiveAction |
invoke | T | Synchroniser | RecursiveAction/RecursiveTask<V> |
submit | ForkJoinTask<T> | asynchrone | RecursiveTask<V> |
En regardant la méthode que vous utilisez, si elle est invoquée, le résultat sera unique, sinon il ne sera pas défini.
Scrollable ResultSet
ResultSet dans JDBC vous permet de définir un mécanisme qui vous permet de déplacer le curseur librement.
//Définition de l'instruction pour l'utilisation d'un ResultSet déroulant
Statement createStatement(int resultType, int resultSetConcurrency) throws SQLException
Les constantes qui peuvent être définies pour les premier et deuxième arguments sont définies dans l'interface ResultSet.
--Premier argument --TYPE_FORWARD_ONLY: avancer uniquement --TYPE_SCROLL_INSENSITIVE: Défilement, DB non reflété --TYPE_SCROLL_SENSITIVE: Scrollable, DB reflétée --Deuxième argument --CONCUR_READ_ONLY: ne peut pas être mis à jour ResultSet --CONCUR_UPDATABLE: ensemble de résultats pouvant être mis à jour
Deux sont nécessaires lors de la prise d'arguments, donc en écrire un seul entraînera une erreur de compilation.
Dans le cas d'un ResultSet modifiable, si la clé primaire est définie dans la table cible, chaque opération d'insertion, de mise à jour et de suppression est possible, mais la méthode ** ʻinsertRow / ʻupdateRow
/ deleteRow
doit être appelée. S'il n'est pas réellement reflété dans le DB **.
Comparé à Silver, je pense que Gold devait avoir une mémorisation et une compréhension approfondies. C'était souvent trop et déprimant. Cependant, comme c'est bon à mon rythme, je pense que c'est une qualification qui peut être suffisamment acquise si on prend le temps de travailler dessus. Les frais d'examen sont un goulot d'étranglement ... </ font>
J'ai réussi l'étude avec Kuromoto dans les références. Si vous ne pensez qu'à l'examen, ce livre et la vérification officielle de l'API suffisent. Si vous voulez avoir une compréhension plus profonde et une réponse correcte complète, vous pouvez envisager d'utiliser des livres violets.
Je pense qu'il n'y a aucune perte à relever le défi. Si vous envisagez d'apprendre Java, essayons d'acquérir de l'argent et de l'or!
[Capture approfondie de la collecte des problèmes Java SE 8 Gold [1Z0-809] correspondance](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7% 95% A5-Java-Or-% E5% 95% 8F% E9% A1% 8C% E9% 9B% 86-1Z0-809 / dp / 4295000035)
Recommended Posts