Académique Documents
Professionnel Documents
Culture Documents
Aymen (bouhlelaymen91@gmail.com)
Liliya R
Campagne : Java, Spring Framework, Angular 2+, Git, Docker - Senior Domaine(s) : Angular 2+, Docker, Git, Java, Spring Framework
MEILLEUR QUE
RANG 1/1
Modélisation 20 / 80pts
1 / 45
Aymen (bouhlelaymen91@gmail.com)
Java 390 / 780pts (50%) MEILLEUR QUE 78% des professionnels
Fiabilité 43 / 93pts
Modélisation 40 / 40pts
Spring Framework
100 / 100pts (100%) MEILLEUR QUE >99% des professionnels
2 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 1: [Web] @ControllerAdvice
Spring Framework 01:18 / 01:30 20 / 20 pts
Question
Quel est le rôle de la classe ci-dessous dans une application web Spring ?
@ControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler({UserNotFoundException.class})
public final ResponseEntity<String> handleException(UserNotFoundException ex, WebRequest
request) {
return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.NOT_FOUND);
}
}
Réponse
Résultat
Réponse correcte
Spring Web +20pts
3 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 2: [AOP] Logging aspect
Spring Framework 00:51 / 01:15 20 / 20 pts
Question
Vous souhaitez créer un aspect qui permet de logguer le temps d'exécution d'une méthode de votre
module métier. Vous n'avez pas besoin de vous occuper des exceptions.
Réponse
@Around
@Before
@After
@AfterReturning
Résultat
Réponse correcte
Connaissance du langage +20pts
4 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 3: [Core] Constructeurs Autowired
Spring Framework 00:48 / 00:50 40 / 40 pts
Question
Quel énoncé est correct concernant l'annotation @Autowired(required=true) sur les constructeurs
d'une classe ?
Réponse
@Autowired n'est utilisable que sur les champs et les méthodes setter
Résultat
Réponse correcte
Connaissance du langage +40pts
5 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 4: [Web] STOMP
Spring Framework 00:50 / 00:50 3x (19 sec) 20 / 20 pts
Question
Quel est le nom du protocole, basé sur du texte, utilisé par Spring pour envoyer des messages par
Websockets ?
Réponse
STOMP
Résultat
Réponse correcte
Connaissance du langage +20pts
Réponse(s) correcte(s)
STOMP
Streaming Text Oriented Messaging Protocol
6 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 5: git bisect
Git 00:42 / 01:00 1x (18 sec) 20 / 20 pts
Question
Quel est l'usage typique de la commande git bisect ?
Réponse
Pour diviser l'historique de commit d'un projet afin de filtrer les logs
Résultat
Réponse correcte
Connaissance du langage +20pts
7 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 6: Option -m
Git 00:09 / 00:30 20 / 20 pts
Question
Quelle option de la ligne de commande permet de spécifier un commentaire de commit à l'exécution de
git commit ?
Réponse
-m
-i
-l
-a
Résultat
Réponse correcte
Connaissance du langage +20pts
8 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 7: git diff
Git 00:40 / 00:40 40 / 40 pts
Question
Vous avez modifié localement le code du fichier index.html .
Quelle commande exécuter pour voir quels changements de code seront ajoutés quand vous passerez
le fichier dans la "staging area" ?
Réponse
Résultat
Réponse correcte
Connaissance du langage +40pts
9 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 8: git clone files
Git 00:26 / 01:00 40 / 40 pts
Question
On suppose que la branche par défaut est la branche master.
À l'exécution de git clone <remote repository> , quels fichiers sont ajoutés au répertoire local ?
Réponse
Résultat
Réponse correcte
Connaissance du langage +40pts
10 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 9: git reflog
Git 01:00 / 01:00 2x (28 sec) 0 / 60 pts
Question
Un utilisateur tiers a accidentellement rebasé de manière incorrecte et a fait un "force push" de son
rebase. Vous faites un pull de ces changements dans votre dépôt local et vous perdez tout l'historique
des commits.
Quelle commande pouvez-vous exécuter pour lister tous les changements du dépôt afin que vous
puissiez revenir à un état antérieur correspondant à une référence donnée ?
Réponse
git log
Résultat
Réponse correcte
Connaissance du langage +60pts
Réponse(s) correcte(s)
git reflog
reflog
11 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 10: Dockerfile : EXPOSE
Docker 00:45 / 00:45 20 / 20 pts
Question
Quel est le rôle de l'instruction EXPOSE dans un Dockerfile ?
Réponse
Elle indique au démon Docker que le container sera à l'écoute d'un port
donné
Elle indique au démon Docker qu'il devra se mettre à l'écoute de tous les
ports du container
Résultat
Réponse correcte
Connaissance du langage +20pts
12 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 11: Dockerfile : choix entre CMD et ENTRYPOINT
Docker 01:00 / 01:00 20 / 20 pts
Question
Y-a-t-il des différences entre les instructions CMD et ENTRYPOINT d'un Dockerfile ?
Réponse
Oui, CMD permet de spécifier une commande par défaut qui sera exécutée
seulement si aucune commande n'est spécifiée au lancement d'un
container alors que les arguments de ENTRYPOINT seront toujours
exécutés
Oui, ENTRYPOINT doit toujours être utilisé en conjonction avec CMD alors
que CMD peut être utilisé seul
Résultat
Réponse correcte
Modélisation +20pts
13 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 12: Docker troubleshooting : inspection du réseau
Docker
Docker 00:45 / 00:45 2x (21 sec) 0 / 40 pts
Question
Pour investiguer un problème, vous avez besoin de lister les ports publiés par un container.
Réponse
docker port
docker ps
docker network
Résultat
Réponse incorrecte
Résolution de problèmes +40pts
14 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 13: Docker network : utilisation d'un serveur DNS
custom
Docker 00:39 / 00:40 1x (16 sec) 40 / 40 pts
Question
Quelle commande permet de créer un container avec pour serveur DNS personnalisé 8.8.8.8 ?
Réponse
Résultat
Réponse correcte
Connaissance du langage +40pts
15 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 14: Docker swarm : incident sur cluster
Docker 01:08 / 01:30 0 / 60 pts
Question
On considère le cluster Docker swarm suivant :
16 / 45
Aymen (bouhlelaymen91@gmail.com)
Réponse
Toutes les fonctionnalités du cluster sont opérantes parce qu'il reste des
masters en cours d'exécution mais les performances de scheduling sont
dégradées
Résultat
Réponse incorrecte
Modélisation +60pts
17 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 15: Test Driven Development (TDD)
Java 00:22 / 01:00 20 / 20 pts
Question
Parmi ces deux procédures de développement, laquelle préconisez-vous ?
Procédure #1 :
Ecrire des tests pour la nouvelle fonctionnalité "F" Tester que "F" ne fonctionne pas Implémenter "F"
Tester que "F" fonctionne correctement
Procédure #2 :
Implémenter la nouvelle fonctionnalité "F" Ecrire des tests pour "F" Tester que "F"
fonctionne correctement
Réponse
Procédure #1
Procédure #2
Résultat
Réponse correcte
Modélisation +20pts
18 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 16: Dependency Inversion Principle (DIP)
Java 00:13 / 00:45 20 / 20 pts
Question
Les abstractions (ex : interfaces) ne doivent pas dépendre des détails (implémentations concrètes). Les
détails doivent dépendre des abstractions.
Réponse
Vrai
Faux
Résultat
Réponse correcte
Modélisation +20pts
19 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 17: Opérateur sur les bits : >>
Java 00:20 / 00:20 1x (7 sec) 40 / 40 pts
Question
Quel est le résultat de l'opération 2 >> 1 ?
Réponse
Résultat
Réponse correcte
Connaissance du langage +40pts
20 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 18: Création d'une chaîne de caractères
Java 01:00 / 01:00 0 / 40 pts
Question
Voici deux manières de créer une chaîne de caractères : String s = "Test" String s = new
String("Test")
Quelle affirmation est correcte concernant les différences entre ces deux méthodes ?
Réponse
Résultat
Réponse incorrecte
Connaissance du langage +40pts
21 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 19: HashMap avec objet variable en tant que clef
Java 01:00 / 01:00 60 / 60 pts
Question
Dans une HashMap, une classe variable (mutable) est utilisée comme clef.
Réponse
Une HashMap peut être peu fiable lorsque l'on utilise des clefs variables
car leurs valeurs hash peut dépendre de l'état de l'objet clef
Résultat
Réponse correcte
Connaissance du langage +60pts
22 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 20: Duodigits
Java 03:27 / 12:00 3x (28 sec) 100 / 100 pts
Question
On appelle "duodigit" un nombre entier dont la représentation décimale n'utilise pas plus de deux
chiffres différents. Par exemple 12 , 110 , -33333 sont des duodigits, mais 102 ne l'est pas.
EXEMPLE :
Number
1
Number
2020
Number
-2021
Result
y
Result
y
Result
n
23 / 45
Aymen (bouhlelaymen91@gmail.com)
Réponse
1 import java.util.*;
2 import java.io.*;
3 import java.math.*;
4
5 class Solution {
6
7 public static String isDuoDigit(int number) {
8 // Write your code here
9 // To debug: System.err.println("Debug messages...");
10 boolean result=Integer.toString(Math.abs(number)).chars().distinct().count()<=2;
11 return result?"y":"n";
12 }
13
14 /* Ignore and do not change the code below */
15 // #region main
16 public static void main(String args[]) {
17 Scanner in = new Scanner(System.in);
18 int number = in.nextInt();
19 PrintStream outStream = System.out;
20 System.setOut(System.err);
21 String result = isDuoDigit(number);
22 System.setOut(outStream);
23 System.out.println(result);
24 }
25 // #endregion
26 }
24 / 45
Aymen (bouhlelaymen91@gmail.com)
Résultat
42
Résolution de problèmes +15pts
111000
Résolution de problèmes +15pts
456
Résolution de problèmes +15pts
2
Résolution de problèmes +15pts
-79
Résolution de problèmes +10pts
0
Fiabilité +10pts
113300
Résolution de problèmes +10pts
-99001
Résolution de problèmes +10pts
25 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 21: Correction simple
Java 00:46 / 02:00 50 / 100 pts
Question
La méthode sumRange devrait retourner la somme des entiers compris entre 10 et 100 inclusifs
contenus dans le tableau passé en paramètre.
Réponse
Résultat
La solution fonctionne avec { 1, 4, 9, 12, 98, -10, 10 }
Résolution de problèmes +50pts
26 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 22: Expression booléenne simple
Java 01:25 / 02:00 100 / 100 pts
Question
A.a(int i, int j) devrait retourner true si un des arguments est égal à 1 ou si leur somme est
égale à 1.
Par exemple :
A.a(1, 5) retourne true
A.a(2, 3) retourne false
A.a(-3, 4) retourne true
Réponse
Résultat
Retourne true si i ou j est égal à 1, sinon false
Connaissance du langage +67pts
27 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 23: Reconstitution de message
Java 20:00 / 20:00 10x (8 min) 0 / 300 pts
28 / 45
Aymen (bouhlelaymen91@gmail.com)
Question
On vous demande de reconstituer un message qui a été coupé en morceaux.
Chaque élément de parts a été découpé à partir d'un seul et même message. Vous devez reconstituer
le message original, à partir des règles suivantes :
le message original commence toujours par le caractère A et finit par le caractère Z deux parties
peuvent être rattachées lorsque le dernier caractère de la première partie est égal au premier caractère
de la deuxième partie. lors de la combinaison de deux parties, on ne conserve qu'un exemplaire du
caractère de liaison (par exemple " A---b " + " b---Z " donne " A---b---Z et non " A---bb---Z ")
Contraintes :
chaque premier caractère est unique parmi parts chaque partie contient au moins 2 caractères et au
plus 1000 caractères la solution existe forcément et est unique parts n'est jamais null , contient au
moins un élément et au plus 100 éléments
EXEMPLES:
Parties
Ab
bcZ
Message
AbcZ
Parties
*====#
X-+-+-+-+-+-Z
#______X
A.........*
Message
A.........*====#______X-+-+-+-+-+-Z
29 / 45
Aymen (bouhlelaymen91@gmail.com)
Réponse
1 import java.util.*;
2 import java.io.*;
3 import java.math.*;
4
5 class Solution {
6
7 public static String rebuildMessage(String[] parts) {
8 // Write your code here
9 // To debug: System.err.println("Debug messages...");
10 StringBuilder result= new StringBuilder();
11 String debut="";
12 String fin="";
13 List <String> list = Arrays.asList(parts);
14 for(int i=0;i<parts.length;i++)
15
16 {
17 if(parts[i].startsWith("A"))
18 {
19 debut =parts[i];
20
21 }
22 if(parts[i].endsWith("Z"))
23 {
24 fin=parts[i];
25
26 }
27 list.remove(i);
28
29 }
30
31 Collections.sort(list);
32 return list.toArray() ;
33 }
34
35 /* Ignore and do not change the code below */
36 // #region main
37 public static void main(String args[]) {
38 Scanner in = new Scanner(System.in);
39 int partsCount = in.nextInt();
40 if (in.hasNextLine()) {
41 in.nextLine();
42 }
43 String[] parts = new String[partsCount];
44 for (int i = 0; i < partsCount; i++) {
45 parts[i] = in.nextLine();
46 }
47 PrintStream outStream = System.out;
48 System.setOut(System.err);
49 String message = rebuildMessage(parts);
50 System.setOut(outStream);
51 System.out.println(message);
52 }
53 // #endregion
54 }
30 / 45
Aymen (bouhlelaymen91@gmail.com)
Résultat
AbbbbccccZZZZ
Résolution de problèmes +45pts
A------0==1-+-+-+-+-+-+-+-+-+-+-:_____Z
Résolution de problèmes +45pts
Seulement 2 parties
Résolution de problèmes +45pts
Beaucoup de parties
Résolution de problèmes +40pts
31 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 24: Directive structurelle
Angular 2+ 00:14 / 00:30 20 / 20 pts
Question
Parmi les propositions suivantes, laquelle n'est pas un directive structurelle d'Angular ?
Réponse
ngIf
ngFor
ngSwitch
ngUnless
Résultat
Réponse correcte
Connaissance du langage +20pts
32 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 25: Nouvelle application Angular
Angular 2+ 00:10 / 00:30 20 / 20 pts
Question
Quelle ligne de commande permet de créer une nouvelle application Angular ?
Réponse
ng new appName
ng start appName
Résultat
Réponse correcte
Connaissance du langage +20pts
33 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 26: Route avec accès non-autorisé
Angular 2+ 00:10 / 00:30 40 / 40 pts
Question
Comment pouvez-vous protéger une certaine route contre les accès non-autorisés ?
Réponse
en utilisant un UrlMatcher
Résultat
Réponse correcte
Connaissance du langage +40pts
34 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 27: Passage de données d'enfant vers parent
Angular 2+ 00:13 / 00:30 40 / 40 pts
Question
Quelle syntaxe utiliseriez-vous pour passer une donnée d'un fils vers son composant parent ?
Réponse
Output
Input
@Output()
@Input()
Résultat
Réponse correcte
Connaissance du langage +40pts
35 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 28: Écouter les événements de l'hôte
Angular 2+ 00:15 / 00:45 40 / 40 pts
Question
Quel décorateur peut-on utiliser pour écouter les événements de l'élément hôte depuis une directive
fille?
Réponse
@HostListener
@Listener
@Target
@Event
Résultat
Réponse correcte
Connaissance du langage +40pts
36 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 29: Détection de modifications d'un composant
Angular 2+ 00:30 / 00:30 0 / 60 pts
Question
Quelle est la stratégie de détection de modifications par défaut pour un composant ?
Réponse
ChangeDetection
OnPush
Default
Résultat
Réponse incorrecte
Connaissance du langage +60pts
37 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 30: Directive ngClass
Angular 2+ 00:54 / 01:30 1x (16 sec) 0 / 60 pts
Question
Quelle directive built-in Angular peut-on utiliser pour remplacer ???? à la ligne 6 pour d'appliquer la
classe blue de manière conditionnelle ?
Réponse
[ngStyle]
Résultat
Réponse correcte
Connaissance du langage +60pts
38 / 45
Aymen (bouhlelaymen91@gmail.com)
Réponse(s) correcte(s)
[ngClass]
[ ngClass ]
Question
On vous demande de créer un composant Angular nommé DisplayComponent et ayant display-
component pour sélecteur.
Il doit utiliser le composant VoterComponent (sélecteur = voter-component ) dont le code est fourni.
DisplayComponent doit utiliser VoterComponent en tant qu'enfant et doit lui passer question ,
yesAnswer et noAnswer en entrée.
Quand l'utilisateur vote, VoterComponent créé un événement de type boolean vers un @Output
nommé output .
Vous devez afficher le résultat du vote dans DisplayComponent dans un <div> avec id=lastVote :
si output est vrai, alors on affiche la valeur de yesAnswer , sinon on affiche la valeur de noAnswer .
Notes : Un bloc de "Preview" est disponible pour vous permettre de débugguer votre code. Il affiche
votre composant ci-dessous. Vous pouvez l'ouvrir et le modifier à votre guise. Ce bloc de "Preview" n'est
pas pris en compte dans le calcul du score de votre code.
Réponse
39 / 45
Aymen (bouhlelaymen91@gmail.com)
7 <voter-component
8 [question]="question"
9 [yesAnswer]="yesAnswer"
10 [noAnswer]="noAnswer"
11 (outuput)="setVote($event)">
12
13 </voter-component>
14 `
15 })
16 export class DisplayComponent {
17 public question = "Too easy?"
18 public yesAnswer = "Yes";
19 public noAnswer = "No";
20 public answer="Yes";
21 setVote(event:boolean){
22 return (this.answer=event?this.yesAnswer:this.noAnswer);
23 }
24 }
25
26 // VoterComponent: do not change
27 @Component({
28 selector:'voter-component',
29 template: `
30 {{question}}
31 <button (click)="vote(true)">{{yesAnswer}}</button>
32 <button (click)="vote(false)">{{noAnswer}}</button>
33 `
34 })
35 export class VoterComponent {
36 @Input()
37 public question: string;
38
39 @Input()
40 public yesAnswer: string;
41
42 @Input()
43 public noAnswer: string;
44
45 @Output()
46 public output = new EventEmitter<boolean>();
47
48 public vote(vote: boolean): void{
49 this.output.emit(vote);
50 }
51 }
52
53
54
55 // #region Preview
56
57 @Component({
58 template: `<display-component></display-component>`
59 })
60 export class PreviewComponent { }
61 // #endregion Preview
62
63 // #region Module declaration - Do not Change
64 @NgModule({
65 declarations: [PreviewComponent, DisplayComponent, VoterComponent],
66 entryComponents: [PreviewComponent]
67 })
68 export class PreviewModule { }
69 // #endregion Module declaration
40 / 45
Aymen (bouhlelaymen91@gmail.com)
Résultat
Compile
Connaissance du langage +0pts
Gère l'événement
Connaissance du langage +75pts
41 / 45
Aymen (bouhlelaymen91@gmail.com)
Question 32: Utilisation des pipes (percent, currency, date)
Angular 2+ 17:04 / 20:00 5x (4 min) 180 / 300 pts
Question
On vous demande de terminer le composant TransactionDetailsComponent . Vous devez
uniquement modifier la partie template du composant.
L'objectif de ce composant est d'afficher la date, le montant, la devise et les frais associés à une
transaction, chacun dans un format spécifique.
Notes : Un bloc de "Preview" est disponible pour vous permettre de débugguer votre code. Il affiche
votre composant ci-dessous. Vous pouvez ouvrir ce bloc et le modifier à votre guise. Le bloc de "Preview"
n'est pas pris en compte dans le calcul du score de votre code.
42 / 45
Aymen (bouhlelaymen91@gmail.com)
Réponse
43 / 45
Aymen (bouhlelaymen91@gmail.com)
Résultat
Compile
Connaissance du langage +0pts
Affichage pourcentage
Connaissance du langage +60pts
Affichage de date
Connaissance du langage +60pts
Affichage EUR
Connaissance du langage +60pts
Affichage JPY
Connaissance du langage +60pts
44 / 45
Aymen (bouhlelaymen91@gmail.com)
Glossaire
Connaissance du langage
La mesure de cette compétence permet de déterminer l'expérience du candidat dans la pratique d'un langage de
programmation. Privilégiez cette compétence si, par exemple, vous recherchez un développeur qui devra être
rapidement opérationnel.
Modélisation
Cette mesure fournit une indication sur la capacité du candidat à appliquer des solutions standard pour résoudre des
problèmes récurrents. Un développeur ayant un bon niveau dans cette compétence augmentera la qualité
(maintenabilité, évolutivité) de vos applications. Cette compétence ne dépend pas spécifiquement d'une technologie.
Privilégiez cette compétence si, par exemple, vous recherchez un développeur qui sera amené à travailler sur les
briques qui structurent vos applications, à anticiper les besoins de demain pour développer des solutions pérennes.
Résolution de problèmes
Cette compétence correspond aux aptitudes du candidat à comprendre et à structurer son raisonnement pour trouver
des solutions à des problèmes complexes. Cette compétence ne dépend pas spécifiquement d'une technologie.
Privilégiez cette compétence si, par exemple, vos applications ont une composante technique importante (R&D,
innovation).
Fiabilité
La fiabilité caractérise la capacité du candidat à réaliser des solutions qui prennent en compte les cas particuliers. Plus
cette compétence est élevée, plus vos applications sont robustes (moins de bugs).
45 / 45
Aymen (bouhlelaymen91@gmail.com)