Deuxième partie d'une série d'articles sur mon expérience pour la réalisation d'entretien d'embauche.
- Premier article : l'entretien.
- Deuxième article : le questionnaire.
- Troisième article : les réponses.
Après l'entretien, on passait donc au questionnaire.
Il faut d'abord que je le contextualise : je recherchais des développeurs PHP stagiaires pour une application Zend (donc en MVC) utilisant Doctrine. L'application fait déjà plus d'un million de lignes.
Je l'avais fait faire à quelques collègues, qui avaient mis une dizaine de minutes à le réaliser et m'avaient conseillé quelques éclaircissements dans les questions.
Le formulaire contient une vingtaine de questions basiques, décomposées en deux parties : code, et connaissances informatiques.
Soyons franc : pour moi, un score inférieur à 12 indiquait des lacunes critiques pour le poste et pour la programmation en général. J'allais être surpris : 12 est probablement la meilleure note que j'ai eu… les stagiaires ne sont plus ce qu'ils étaient, et trouver des passionés est difficile !
La deuxième question était : fallait-il corriger devant la personne ? C'était l'avantage d'avoir réalisé le formulaire moi-même : je pouvais expliquer aux gens leurs erreurs… oui, mais étaient-ils intéressés ? Mettez-vous à leur place : un entretien d'embauche pendant lequel le recruteur vous mettrait le nez dans vos erreurs… pas très agréable. Finalement, j'ai décidé de laisser le choix : « Voulez-vous faire la correction maintenant ? » De façon intéressante, la plupart des gens disent « oui », au point que je compris rapidement que « non » signifiait « je n'ai pas été capable de répondre à une seule question et je ne sais pas ce que je fous là, j'ai essayé de te gruger à l'oral mais ce questionnaire me démasque ».
Enfin, assez parlé. Je vous mets uniquement les questions ici, et les réponses dans un prochain article. Si vous avez 15 minutes devant vous et un minimum d'expérience en Web, n'hésitez pas à le faire ; vous me direz ce que vous en pensez.
Questionnaire
Ces questions permettent de vous situer vis-à-vis de la programmation et de l'informatique en général. Il est normal de ne pas tout connaître ;).
Écriture et lecture de code
Que fait la requête SQL suivante :
SELECT Marque, AVG(Prix) FROM Produits GROUP BY Marque
Réponse :
En javascript (ou un framework JS que vous préciserez), comment peut-on récupérer un objet par son identifiant (attribut id en HTML) ?
/** * Récupère un objet par son identifiant * * @param string id l'identifiant recherché * @return DOMElement l'élément d'identifiant correspondant */ function getById(id) { return }
Que fait l'expression CSS suivante ? Pouvez-vous donner un fragment de code HTML sur lequel elle s'appliquerait ?
#space .space_list a:hover{ background:#777777; }
Réponse :
Pouvez-vous rédiger en PHP (ou autre si inconnu) une fonction prenant un tableau en paramètre et renvoyant la somme des éléments de tableau ?
<?php /** * Calcule la somme des valeurs du tableau. * * @param array $tableau le tableau sur lequel effectuer la somme * * @return int la somme */ function somme_tableau(array $tableau) { }
Pouvez-vous rédiger en PHP (ou autre si inconnu) une classe modélisant un utilisateur (propriétés et fonctions à votre discrétion) ?
<?php
Pouvez-vous rédiger en PHP (ou autre si inconnu) un programme affichant tous les nombres de 1 à 50, en remplaçant les multiples de 3 par ping, les multiples de 5 par pong et les multiples de 3 et 5 par pingpong ?
<?php
Écrivez une expression régulière basique permettant de valider une date de naissance (au format JJ/MM/AAAA)
Regexp :
Que pensez-vous du code suivant ?
<?php $v = $_GET["prenom"]; echo "Bonjour $v !"; include('sql_connect.php'); $reply = mysql_query("INSERT INTO Visiteurs VALUES('" . $v . "')"); include('../../pages/' . $v . '.html'); die();
Réponse :
Écrivez en pseudo-algorithme un code calculant de façon récursive la factorielle d'un nombre n.
Pour rappel, factorielle(5) = 5 * 4 * 3 * 2 * 1.
fonction factorielle(n)
Connaissances informatiques
En programmation orientée objet, quelle est la particularité d'une classe abstraite ?
Réponse :
Rapidement, comment représenter des données hiérarchiques dans une base de données ?
Par exemple, un arbre de catégories : une catégorie principale qui peut avoir un ou plusieurs enfants, qui peuvent eux-même avoir un ou plusieurs enfants, etc.
Réponse :
Quand peut-on dire d'un graphe qu'il admet un parcours hamiltonien ?
Réponse :
Comment quitte-t-on l'éditeur de texte vi ?
Réponse :
Comment ouvrir une console sous Windows et afficher son adresse IP (sur Internet et/ou sur la box) ?
Réponse :
Quelle est la complexité (en notation grand O) d'un algorithme affichant tous les nombres de 1 à n, en remplaçant les multiples de 3 par ping, les multiples de 5 par pong et les multiples de 3 et 5 par pingpong ? (cf. questions code)
Réponse :
Quelle entreprise possède Youtube ?
Réponse :
En MVC, qui effectue les requêtes SQL permettant de récupérer un objet dont une des propriétés devra être affichée ?
Réponse :
Quel nombre suit F en hexadécimal ?
Réponse :
$\sum_{i=0}^{\infty} \frac{1}{i^2} = ?$
Réponse :
Bonus
You're the captain of a pirate ship and your crew gets to vote on how the gold is divided up. If fewer than half of the pirates agree with you, you die. How do you recommend apportioning the gold in such a way that you get a good share of the booty, but still survive ?