Vous êtes sur la page 1sur 30

Afin d'éviter la fuite de questions, ce rapport ne doit pas être partagé avec les candidats.

Montasser (ahmedmontasserrossafi@gmail.com)

Campagne : PHP, Node.js - Senior Langage(s) de programmation : Node.js, PHP Langage : Français Date : 25/02/2020

SCORE RANG DURÉE MEILLEUR QUE

36% 2 1H03 53%


495 / 1 360 pts /3 / 1H09 des développeurs

Node.js 54%
(300 / 560)

Connaissance du langage 54%


(300 / 560)

PHP 24%
(195 / 800)

Connaissance du langage 54%


(140 / 260)

Fiabilité 50%
(15 / 30)

Modélisation 100%
(40 / 40)

Résolution de problèmes 0%
(0 / 470)

1 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 1: Import de module Node
Node.js 00:07 / 00:40 20 / 20 pts

Question
Quelle syntaxe est valide si vous souhaitez utilisez le module fs dans votre application Node ?

Réponse
const fs = import('fs');
const fs = require('fs');
package fs;
import fs;

Résultat
Réponse correcte
Connaissance du langage +20pts

2 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 2: package.json
Node.js 00:08 / 00:40 20 / 20 pts

Question
Quelle est le nom du fichier qui contient la définition d'une application Node, y compris la liste de ses
dépendances ?

Réponse
package.json

Résultat
Réponse correcte
Connaissance du langage +20pts

Réponse(s) correcte(s)
package.json

3 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 3: [Express] Définition
Node.js 00:33 / 00:50 20 / 20 pts

Question
Qu'est-ce que Express ?

Réponse
Express est un framework qui fournit toutes les briques pour développer des
applications Desktop robustes
Express est un framework qui fournit une API pour construire des sites
webs, des applications webs et des backends REST.
Express est un framework qui permet de prototyper très rapidement tout
type d'applications, d'où son nom
Express est un package largement utilisé qui permet de manipuler des
expressions régulières très facilement et de manière performante

Résultat
Réponse correcte
Connaissance du langage +20pts

4 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 4: Arguments de la ligne de commande
Node.js 00:57 / 01:00 0 / 40 pts

Question
Vous souhaitez créer une application Node qui retourne la racine carrée du nombre passé en argument
:
 
console> node square.js 9
3
console>
 
 
Par quoi doit-on remplacer  ??? dans le code suivant pour que l'application fonctionne comme attendu ?

const math = require('mathjs')

const result = math.sqrt(???)

console.log(result)

Réponse
math.sqrt((a*a)+(b*b));

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
process.argv[2]

5 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 5: Version de package exacte
Node.js 00:27 / 00:40 40 / 40 pts

Question
Votre application Node a besoin du package express. Vous souhaitez utiliser exactement la version 4.16.3
.
 
Quelle syntaxe utiliseriez-vous pour déclarer cette dépendance dans votre package.json ?

Réponse
"express":  "4.16.3"
"express":  "&4.16.3"
"express":  "^4.16.3"
"express":  "~4.16.3"
"express":  "#4.16.3"

Résultat
Réponse correcte
Connaissance du langage +40pts

6 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 6: [Express] Paramètres d'une requête
Node.js 00:43 / 00:45 0 / 40 pts

Question
On considère le code suivant :
 

Par quoi remplaceriez-vous  ??? pour obtenir la valeur de  :id ?

Réponse
getUserById()

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
req.params.id

7 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 7: Événements
Node.js 00:26 / 00:30 40 / 40 pts

Question
Quelle méthode est utilisée pour enregistrer un listener d'événements ?

Réponse
eventEmitter.on(eventName, eventHandler)
eventEmitter.emit(eventName, eventHandler)
eventEmitter.bind(eventName, eventHandler)
eventEmitter.in(eventName, eventHandler)

Résultat
Réponse correcte
Connaissance du langage +40pts

8 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 8: [Express] route URL matching
Node.js 00:42 / 01:00 40 / 40 pts

Question
On considère le code suivant d'une application Node qui utilise le module Express.js :
 

const express = require('express')


const app = express()

app.get('/user/:id', function(req, res) {


res.send('Hello World');
})

app.listen(3000)

  Quelle URL déclenche la réponse "Hello World" ? Plusiseurs réponses attendues.

Réponse
/user
/user/10
/user/betty
/user/251/jack

Résultat
Réponse correcte
Connaissance du langage +40pts

9 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 9: Node package.json
Node.js 00:22 / 00:50 40 / 40 pts

Question
Qu'est-ce qui est vrai à propos de package.json?

Plusiseurs réponses attendues.

Réponse
package.json est présent à la racine de toutes les applications Node
La présence de package.json est obligatoire pour que le runtime Node puisse
s'exécuter
package.json peut être utilisé pour mettre à jour les dépendances d'une
application Node
package.json est géré par npm et ne devrait jamais être modifé
manuellement

Résultat
Réponse correcte
Connaissance du langage +40pts

10 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 10: Signature callbacks
Node.js 00:24 / 00:35 0 / 40 pts

Question
La plupart des fonctions de l'API Node prennent un callback en argument.
 
Quelle est la signature d'un tel callback?
 

Réponse
function (data, err) { ... }
function (err, data, res) { ... }
function (err, data) { ... }
function (data, res, err) { ... }

Résultat
Réponse incorrecte
Connaissance du langage +40pts

11 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 11: Argument de callback
Node.js 00:27 / 00:45 40 / 40 pts

Question
Vous souhaitez créer une fonction asynchrone qui suit la pattern callback de Node.
 
Quelle convention vous permet d'identifier la fonction de callback dans votre fonction ?

Réponse
La fonction de callback est le premier argument de votre fonction
La fonction de callback est le dernier argument de votre fonction
L'argument nommé callback quelle que soit sa position dans la liste de
arguments de votre fonction désigne la fonction de callback

Résultat
Réponse correcte
Connaissance du langage +40pts

12 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 12: Event loop
Node.js 00:41 / 00:45 0 / 40 pts

Question
Dans une application orientée événements, il existe généralement un boucle principale qui écoute les
événements et appelle les callbacks associés quand un événement est déclenché.
 
Comment s'appelle cette boucle ?

Réponse
Callback loop
Event loop
Middleware loop
Request-Response loop

Résultat
Réponse incorrecte
Connaissance du langage +40pts

13 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 13: Framework de test : mocha
Node.js 00:07 / 00:35 40 / 40 pts

Question
Quel framework de test est utilisé par le code suivant :

describe('Product', function() {
describe('#load()', function() {
it('should load the Pen product', function() {
new ProductService().load('Pen', function(err) {
if (err) {
done(err)
} else {
done()
}
})
})
})
})

Écrivez un seul mot.

Réponse
Mocha

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
mocha
jasmine
jest

14 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 14: Classe globale
Node.js 00:29 / 00:40 0 / 40 pts

Question
La classe  Buffer est une classe globale qui peut être utilisée sans devoir importer le module buffer.

Réponse
Oui, c'est toujours le cas
Non, l'import est obligatoire
Oui, mais seulement si Node a été lancé avec l'option --global

Résultat
Réponse incorrecte
Connaissance du langage +40pts

15 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 15: Node threading
Node.js 01:13 / 01:15 0 / 60 pts

Question
Qu'est-ce qui est vrai à propos de Node ?
 
Plusieurs réponses attendues.

Réponse
Node est mono-threadé mais des accès concurrents sont possibles grâce
au concept d'événements et de callbacks
Chaque API de Node est synchrone et elles utilisent en interne des fonctions
asynchrones pour rendre possible les accès concurrents
Un thread Node gère une boucle d'événements et dès qu'une tâche se
termine, Node lance l'événement correspondant qui déclenche l'exécution
des fonctions de callback associées
Une application Node devient multi-threadée dès lors qu'on utilise les mots
clés async/await

Résultat
Réponse incorrecte
Connaissance du langage +60pts

16 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 16: Tags courts
PHP 00:26 / 00:30 20 / 20 pts

Question
<?= $a ?> est un raccourci de :

Réponse
Cette syntaxe n'est pas valide
<?php echo $a; ?>
<?php if ($a == NULL) { .. } ?>
<?php if ($a) { .. } ?>

Résultat
Réponse correcte
Connaissance du langage +20pts

17 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 17: Héritage
PHP 00:12 / 01:00 20 / 20 pts

Question
Parmi ces deux propositions, laquelle préférez-vous ? 

Proposition #1 :
interface CapableDeVoler {
   public function vole();
}
abstract class Avion implements CapableDeVoler {}
abstract class Oiseau implements CapableDeVoler {}

Proposition #2 :
abstract class Avion {
    public abstract function vole();
}
abstract class Oiseau extends Avion {}

Réponse
Proposition #1
Proposition #2

Résultat
Réponse correcte
Modélisation +20pts

18 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 18: Dependency Inversion Principle (DIP)
PHP 00:43 / 00:45 20 / 20 pts

Question
Les abstractions ne doivent pas dépendre de détails. Les détails doivent dépendre d'abstractions.

Réponse
Vrai
Faux

Résultat
Réponse correcte
Modélisation +20pts

Question 19: Suppression de doublons


Cross 11:48 / 12:00 15 / 100 pts

Question
Implémenter la fonction filterDuplicates($data) qui prend un tableau data en entrée et retourne un
tableau contenant les valeurs de data sans les doublons de valeurs.
 
L'ordre initial des valeurs doit être conservé.
 
Exemple: [7 3 6 4 3 3 4 9] => [7 3 6 4 9]
 
Constraintes:
data n'est jamais NULL
 

19 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Réponse

1 <?php
2
3 function filterDuplicates(array $data) {
4 // Write your code here
5 // To debug (equivalent to var_dump): error_log(var_export($var, true));
6 if($data!=null)
7 {
8 $noduplicates_array = array_unique($data);
9 var_dump($noduplicates_array);
10 }
11 }
12
13 /* Ignore and do not change the code below */
14 //region
15 fscanf(STDIN, "%d", $n);
16 $data = array();
17 $inputs = explode(" ", fgets(STDIN));
18 for ($i = 0; $i < $n; $i++) {
19 $data[$i] = intval($inputs[$i]);
20 }
21 $oldStdout = fopen('php://stdout', 'wb');
22 eio_dup2(STDERR, STDOUT);
23 eio_event_loop();
24 $filtered = filterDuplicates($data);
25 eio_dup2($oldStdout, STDOUT);
26 eio_event_loop();
27 for ($i = 0; $i < count($filtered); $i++) {
28 echo $filtered[$i] . "\n";
29 }
30 //endregion
31 ?>

Résultat
Tableau simple
Résolution de problèmes +25pts

Grand tableau
Résolution de problèmes +25pts

Valeur unique
Fiabilité +15pts

Valeurs négatives
Résolution de problèmes +20pts

Tableau vide
Fiabilité +15pts

20 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 20: Evaluer une chaîne de caractères
PHP 00:23 / 00:30 40 / 40 pts

Question
Saisissez le nom de la fonction qui évalue une chaîne de caractères comme un script PHP.

Réponse
eval()

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
eval
eval()
eval ()

21 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 21: Opérateur sur les bits : >>
PHP 00:08 / 00:20 40 / 40 pts

Question
Quel est le résultat de l'opération 2 >> 1 ?

Réponse
0
1
2
3
4

Résultat
Réponse correcte
Connaissance du langage +40pts

22 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 22: Sous-chaîne
PHP 00:29 / 00:35 40 / 40 pts

Question
Saisissez le nom de la fonction qui sert à retourner une partie d'une chaîne de caractères à partir d'un
index de début et d'une longueur.

Réponse
substr()

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
substr
substr()
substr ()

Question 23: Recherche d'image


Cross 39:20 / 40:00 0 / 400 pts

Question
 
Objectif
Trouver un motif dans une image.

23 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
 
Règles
On vous donne 2 images : une image de base, et un motif qui peut être présent dans cette image.
Chaque image est représentée sous la forme d'[[anArray]] de chaînes de caractères, où chaque élément
représente une ligne de pixels de l'image, et chaque caractère représente un pixel. Il n'est pas
nécessaire de comprendre en détail cet encodage pour résoudre ce problème, mais pour information,
des explications sont fournies plus bas. Vous devez retourner la position x, y de ce motif dans l'image,
ou [-1, -1] si le motif n'est pas présent dans l'image. Si le motif apparaît plusieurs fois dans l'image,
retournez la position du plus haut (le y le plus petit), et en cas d'égalité, le plus à gauche (le x le plus
petit). La position du motif est déterminée par les coordonnées x, y de son coin en haut à gauche. x
représente la colonne, y représente la ligne, et les coordonnées [0, 0] représentent le coin en haut à
gauche.
 
Implémentation
Implément la [[functionLabel]] [[functionSimple]] où les paramètres sont : imageWidth: la largeur de
l'image imageHeight: la hauteur de l'image image: l'image, [[anArray]] de strings, où chaque caractère
représente un pixel patternWidth: la largeur du motif patternHeight: la hauteur du motif pattern: le
motif, [[anArray]] de strings, où chaque caractère représente un pixel et qui doit retourner : si le motif
est présent dans l'image : la position x, y, sous la forme d'[[anArray]] de 2 entiers, représentant le coin
en haut à gauche du 1er motif, en partant du haut vers le bas, et de gauche à droite. si le motif n'est pas
présent dans l'image : [-1, -1]
 
Conditions de Victoire
Le motif est effectivement situé aux coordonnées x, y. Si le motif apparaît plusieurs fois dans l'image,
retournez la position du plus haut (le y le plus petit), et en cas d'égalité, le plus à gauche (le x le plus
petit).
 
Conditions de Défaite
La sous-image qui commence aux coordonnées x, y ne correspond pas au motif. Vous prenez plus d'une
seconde à répondre. Il y a un autre motif qui correspond, plus haut ou plus à gauche que le votre.
Contraintes
1 ≤ imageWidth ≤ 400
1 ≤ imageHeight ≤ 400
1 ≤ patternWidth ≤ 400
1 ≤ patternHeight ≤ 400
Temps de réponse ≤ 1s

24 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Détails sur l'encodage
Initialement, une image est un tableau d'entiers à 2 dimensions, où chaque entier représente un pixel
(en utilisant la notation RGB). Toutes nos images possèdent au maximum 62 couleurs différentes, de
manière à ce que nous puissions encoder chaque entier en un caractère parmi
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ . Nous avons simplement
transformé l'image en un tableau de strings, où la 1ère string est la 1ère ligne de l'image, etc. Par
exemple, cette image 3x3 :

est représentée en tableau d'entiers à 2 dimensions comme :

[
[0xff0000, 0x00ff00, 0x0000ff],
[0xd3d3d3, 0x000000, 0xd3d3d3],
[0xff0000, 0x00ff00, 0x0000ff]
]

qui est ensuité encodée en un tableau de strings en :

[
"012",
"343",
"012"
]

25 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Réponse

1 <?php
2
3 function solve($imageWidth, $imageHeight, array $image, $patternWidth, $patternHeight,
array $pattern) {
4 // Write your code here
5 // To debug (equivalent to var_dump): error_log(var_export($var, true));
6 $x = -1;
7 $y = -1;
8 $positions = array();
9 for($y = 0; $y <= $patternHeight - $imageHeight; ++$y)
10 {
11 for($x = 0; $x <= $patternWidth - $imageWidth; ++$x)
12 {
13 array_push($positions, array("x" => $x, "y" => $y, "error" => $error));
14 }
15 }
16 return "Trouvé " .count($positions). "positions\n";
17 }
18
19 /* Ignore and do not change the code below */
20 //region
21 fscanf(STDIN, "%d %d", $imageWidth, $imageHeight);
22 $image = array();
23 for ($i = 0; $i < $imageHeight; $i++) {
24 $image[$i] = fgets(STDIN);
25 }
26 fscanf(STDIN, "%d %d", $patternWidth, $patternHeight);
27 $pattern = array();
28 for ($i = 0; $i < $patternHeight; $i++) {
29 $pattern[$i] = fgets(STDIN);
30 }
31 $oldStdout = fopen('php://stdout', 'wb');
32 eio_dup2(STDERR, STDOUT);
33 eio_event_loop();
34 $coordinates = solve($imageWidth, $imageHeight, $image, $patternWidth, $patternHeight,
$pattern);
35 eio_dup2($oldStdout, STDOUT);
36 eio_event_loop();
37 for ($i = 0; $i < 2; $i++) {
38 echo $coordinates[$i] . "\n";
39 }
40 //endregion
41 ?>

26 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Résultat
4 pixels
Résolution de problèmes +35pts

Flag
Résolution de problèmes +35pts

Mario
Résolution de problèmes +35pts

Not found
Résolution de problèmes +35pts

V pour Vendetta
Résolution de problèmes +35pts

Mario 2
Résolution de problèmes +35pts

4 pixels 2
Résolution de problèmes +35pts

Flag 2
Résolution de problèmes +35pts

Mario 3
Résolution de problèmes +30pts

Bender Not found


Résolution de problèmes +30pts

Jeton de poker
Résolution de problèmes +30pts

Bender
Résolution de problèmes +30pts

27 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 24: Variable "entrée-sortie"
PHP 00:27 / 01:00 0 / 60 pts

Question
$i = 0;
inc($i);
echo $i;

function inc($arg) {
        $arg++;
}

Dans la signature de la fonction inc, par quoi faudrait-il remplacer $arg pour que le programme affiche 1
?

Réponse
1

Résultat
Réponse correcte
Connaissance du langage +60pts

Réponse(s) correcte(s)
&$arg
inc(&$arg)
function inc(&$arg)
& $arg
inc(& $arg)
function inc(& $arg)

28 / 30
Montasser (ahmedmontasserrossafi@gmail.com)
Question 25: Convertir des caractères en HTML
PHP 00:34 / 00:40 0 / 60 pts

Question
Saisissez le nom de la fonction qui convertit tous les caractères éligibles en entités HTML (par exemple
pour transformer © en &copy;).

Réponse
html_entity_decode()

Résultat
Réponse correcte
Connaissance du langage +60pts

Réponse(s) correcte(s)
htmlentities
htmlentities()
htmlentities ()
htmlentities();

29 / 30
Montasser (ahmedmontasserrossafi@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).

30 / 30
Montasser (ahmedmontasserrossafi@gmail.com)

Vous aimerez peut-être aussi