Début octobre, Oracle a facilité l'obtention de la certification Java - au lieu de deux examens, vous devez maintenant en réussir un, bien que le prix de l'examen n'ait pas changé. Qui s'intéresse au niveau des tâches et à plus de détails sur l'examen, je demande sous la coupe - je vais décrire pourquoi j'ai décidé de le passer, comment je me suis préparé, quelles questions j'avais et quelles conclusions j'ai tirées.
En octobre, j'ai vu la nouvelle qu'Oracle lance un nouvel examen, 1z0-819, pour remplacer les anciens 1z0-815 et 1z0-816. Auparavant, pour devenir un professionnel certifié Oracle, vous deviez passer deux examens et dépenser un total de 300 $. Maintenant, le montant a été réduit de moitié. De plus, le nombre de questions a changé, si au début de chaque examen il y avait 80 questions et 150 minutes étaient allouées pour cela, maintenant l'examen dure 90 minutes et contient 50 questions couvrant tous les sujets des examens précédents. La plupart des questions peuvent avoir plusieurs réponses correctes.
Commençons par les objectifs que j'ai poursuivis: puisque j'ai une formation en physique et que j'ai moi-même étudié java, à mon avis, cette certification pourrait aider à structurer ma connaissance de java, et aussi avoir un document confirmant que je peux faire de la programmation. ...
Comment s'inscrire? Inscrivez-vous auprès d'un partenaire Oracle pearsonvue.com, associez un compte Oracle, choisissez comment le prendre - au centre ou à domicile. Si l'option de la maison est choisie, ils vous suivront à travers la caméra et le microphone tout au long de l'examen, il ne devrait y avoir personne dans la pièce, vous ne pouvez parler à personne et ne regarder que l'écran, Internet doit être stable, sans interruption, sinon, le résultat est annulé. J'ai choisi de louer dans un centre spécialisé, donc c'est plus calme.
Quels matériaux peuvent aider à la préparation? Si vous avez une expérience en programmation, je vous recommande d'utiliser le guide d'étude OCP Oracle Certified Professional Java SE 11 Programmer II: examen 1Z0-816 et examen 1Z0-817 par Scott Selikoff, Jeanne BoyarskyCe livre est écrit pour l'examen 1z0-816 et couvre la majeure partie de l'examen. Ces auteurs ont aussi un livre pour préparer la première partie du dernier examen 1z0-815, mais il est conçu pour les débutants absolus et est franchement ennuyeux à lire. De plus, vous pouvez trouver des simulations d'examen sur le net pour vérifier les connaissances que vous avez acquises après avoir lu le livre.
Quelles questions? Seulement 50 questions, qui durent 90 minutes, soit moins de 2 minutes par question. Il y en a des difficiles, c'est-à-dire qu'il faut parfois réfléchir plus de 2 minutes. Dans certaines questions, plusieurs réponses correctes sont possibles. Il peut y avoir jusqu'à 7 réponses au total. Il faut répondre correctement à 68% des questions.
Ce sur quoi je voudrais attirer votre attention. Il y a beaucoup de questions sur les flux, les lambdas et les interfaces fonctionnelles.
Vous pouvez avoir ce genre de problème:
vous devez trouver l'erreur dans quelle ligne, le cas échéant:
IntStream is = IntStream.of(1, 3, 5);
int x = is.filter(i->i%2 == 0).average(); //1
System.out.println(x);
int y = is.filter( i->i%2 != 0 ).sum();//2
System.out.println(y);
is = IntStream.of(1, 3, 5, 9);
int z = is.filter( i->i%3 != 0 ).count();//3
System.out.println(z);
De même les tâches utilisant des collectionneurs. Ce qui sera affiché:
class Student {
public static enum Grade {A, B, C, D, F}
private String name;
private Grade grade;
public Student(String name, Grade grade) {
this.name = name;
this.grade = grade;
}
public String toString() {
return name + ":" + grade;
}
}
class TestClass {
public static void main(String[] args) {
var ls = Arrays.asList(new Student("S1", Student.Grade.A),
new Student("S2", Student.Grade.A),
new Student("S3", Student.Grade.B),
new Student("S4", Student.Grade.C),
new Student("S5", Student.Grade.F));
var group = ls.stream()
.filter(student -> student.getGrade() != Student.Grade.F)
.collect(Collectors.groupingBy(Student::getGrade,
Collectors.mapping(Student::getName, Collectors.toList())));
System.out.println(group);
}
}
En fait, ces questions sont liées à des questions sur les collections. Par exemple, vous devez répondre à ce que le code suivant affichera à l'écran, s'il se compile du tout:
var collection = new HashSet<>();
collection.add(1);
var list1 = List.of(collection);
collection.add(2);
var list2 = List.copyOf(collection);
System.out.println(list1);
System.out.println(list2);
Et comment le résultat changera si au lieu de la première ligne nous écrivons
var collection = Arrays.asList(1,2,3);
var peut être utilisé spécifiquement pour confondre l'examinateur:
class X {
public void print(List<Integer> lst) {
System.out.println("X list " + lst);
}
}
class Y extends X {
public void print(List<Integer> lst) {
System.out.println("Y list " + lst);
}
}
public class TestClass {
public static void main(String[] args) {
X x = new Y();
Y y = new Y();
var list = new ArrayList<>();
list.add(1);
x.print(list);
y.print(list);
}
}
Vous devez spécifier ce qui sera affiché, ou indiquer que le programme ne sera pas compilé ou qu'une exception sera levée pendant l'opération.
Vous devez comprendre ce qui se passe pendant l'héritage.
Supposons qu'une méthode soit donnée dans une classe avec la signature suivante:
public List<Integer> getCollection() {
return new ArrayList<Integer>();
}
Quelles méthodes ci-dessous peuvent être dans la classe héritée?
public List<? super Integer> getCollection() {
return new ArrayList<Integer>();
}
public List<? extends Integer> getCollection() {
return new ArrayList<Integer>();
}
public ArrayList<Integer> getCollection() {
return new ArrayList<Integer>();
}
Il y a quelques questions sur les interfaces de ce type:
interface Bird {
default String fly() {
return "fly";
}
}
interface Parrot extends Bird {
public String fly();
}
public class RainbowParrot implements Parrot {
public static void main(String[] args) {
Bird b = new RainbowParrot();
System.out.println(b.fly());
}
}
Comment le programme fonctionnera-t-il dans ce cas?
Ces sujets représentent l'essentiel des questions, probablement plus de 25. Les sujets du multithreading, du travail avec des fichiers, des annotations, des modules sont présentés avec seulement deux ou trois questions chacun. D'autres sujets comme l'utilisation de jdbc, la localisation, etc. principalement sur une question.
Une liste complète des sujets pouvant faire l'objet de l'examen est disponible ici .
Par ailleurs, je tiens à mentionner, puisque c'était une découverte pour moi - je suis tombé sur deux questions entières sur l'utilisation de l'API doPrivileged, je n'avais jamais rencontré cela au travail auparavant. Cela vaut donc la peine de travailler sur ce sujet séparément, vous pouvez le voir ici .
Encore une fois, je tiens à attirer votre attention sur le fait que le temps est sérieusement limité, malgré le fait que j'ai sauté deux questions sur le thème de doPrivileged, j'ai à peine respecté le temps imparti.
Dans l'application de livraison, vous pouvez cocher les questions qui vous ont paru difficiles et y revenir à la fin. Je recommande de regarder le minuteur, si une question vous prend plus de deux minutes, sautez-la et, si le temps le permet, revenez-y plus tard.
Combien préparer?
Si vous n'êtes pas un enseignant de cours pour développeurs Java et que vous allez travailler, je vous recommande de réserver un mois pour la préparation - en lui donnant une heure ou deux après le travail. Mais bien sûr, tout dépend de votre niveau.
Quelles conclusions peut-on tirer?
La préparation aux examens vous aide à structurer vos connaissances et à élargir vos horizons API. En particulier, j'ai découvert quelques aspects intéressants du travail avec des fichiers.
La certification peut être utile pour ceux qui travaillent à distance avec des clients étrangers - pour confirmer leur niveau, et ce sera également un plus dans les entretiens, au moins cela vous permettra de sauter des questions sur java.