Il y a deux ans j’ai participé en tant que speaker à Google DevFest W à Paris. Cela faisait 6 mois que j’étais freelance. Peu après, Google m’a contacté pour me proposer de passer des entretiens chez eux. J’ai décliné pour deux raisons : la première, je voulais continuer à être freelance. La deuxième, je ne voulais pas y aller en mode “touriste”. Je savais qu’il fallait un minimum de préparation pour leurs entretiens d’algorithmique et structures de données. Et je n’avais ni le temps ni la motivation (cf je voulais être freelance) pour me lancer.
Deux ans après, je venais de lire “Lean In” de Sheryl Sandberg et à ce moment là on m’écrit depuis Londres pour me proposer de passer des entretiens chez Facebook. Et en même temps Google me relance. Après presque 3 ans de freelancing et deux missions, je me suis dit : et pourquoi pas ?
Après un premier rendez-vous au téléphone avec les deux recruteurs, on m’explique en détail le process :
Le contenu : très dense. Des problèmes autour de la théorie des algorithmes (complexité de temps et d’espace), les structures de données (Stack, Queue, LinkedList, HashMap, PriorityQueue, Arbres, Arbres Binaires, Graphes … ), des algorithmes de tri (quicksort, merge sort, radix-sort, bucket sort…), de recherche (binary search, recherche texte), de parcours des arbres (pre-order, in-order …), graphes (BFS, DFS …), récursivité, programmation dynamique (ou la récursivité “intelligente”), Maths (probabilité, numéros primaires etc.), concurrence, manipulation de bits, de strings etc.
Bref.
Et puis, pas de pseudo-code ! Tu codes dans ton langage préféré. Le code que tu vas écrire avec ton crayon ou sur google doc tu le copies/colles dans ton IDE et doit fonctionner à merveille. Sans bugs. Et tu testes à la main, en parcourant ton code avec ton stylo. Ni compiler, ni exécuter, ni test unitaire et encore moins de debugger.
Je viens de finir ma mission chez mon client, donc au lieu d’enchaîner un nouveau contrat je me dis que c’est le moment de me donner les moyens. Je décide de me préparer pour passer les entretiens. Je me donne 5 semaines à plein temps pour cela. Je cherche à me préparer pour les entretiens “on site”, même si je peux me faire jeter lors des 45 minutes du premier round. Donc le risque d’un gros investissement pour “rien”. “Rien” car dans le process je compte au moins apprendre énormément. La plupart de choses je les ai apprisses il y a presque 15 ans (la partie math, les arbres binaires etc.), et d’autres je ne les ai jamais vraiment vus (Big O notation, manipulation binaire en Java etc.). Sans parler de la plupart des problèmes proposés que je n’ai jamais codé auparavant.
Je programme les deux interviews le même jour. Le matin ce sera Google et l’après midi Facebook. J’ai envie de réussir les deux, par fierté et challenge même si je sais que c’est très difficile.
Comment je me prépare ?
Après 5 semaines en « full time », j’arrive à coder et à trouver certaines solutions assez vite, j’apprends à la force des choses quelques algorithmes par coeur et à appliquer la récursivité avec beaucoup plus de fluidité qu’avant.
Bilan
Je me prépare comme si j’allais en entretien chez mon client. Je suis à la maison mais je me mets en chaussures, pas de pantoufles. J’ai lu que ça aide pour se sentir “sérieux”. J’ai même fait la pose « wonder-woman » pendant quelques minutes comme Amy Cuddy explique qu’il faut faire dans son TED Talk « Your body language shapes who you are ».
A 11h00, l’heure prévue, un ingénieur de Google m’appelle via hang-out depuis Zurich. Il m’explique qu’il va me poser 3 questions.
Première question : Trouve le médian parmi 3 numéros. Je ne cherche pas l’algo le plus sophistiqué du monde, mais le plus lisible.
Si a=1, b=2 et c=3 median 2
Mais a=1 b=1 et c=3 median 1
Je commence à réfléchir, je suis ultra stressée. Si if ceci si if cela… A la fin j’arrive à trouver deux solutions possibles.
2ème question : Concevoir une structure de données similaire à un arbre binaire mais avec 4 branches, et ça représente une bitmap en noir et blanc. Je dois écrire des méthodes, par exemple pour trouver tous les pixels d’une couleur donnée. Je fais ce que je peux, nous n’avons plus beaucoup de temps, j’ai perdu pas mal de temps lors de la première question.
3ème question : Donne moi des idées pour améliorer l’expérience utilisateur quand on utilise le navigateur depuis un smart-phone. Tu peux évoquer des solutions techniques « qui n’existent pas ». La seule contrainte : tu ne peux pas changer l’infrastructure de tes fournisseurs tiers.
J’arrive à donner plusieurs idées.
A la fin, j’ai quelques minutes pour lui poser des questions concernant Google, le poste etc… L’entretien dure 1h05. Ce que j’apprécie de sa part c’est qu’il a tenu à me poser les trois questions et à me donner l’opportunité de répondre à tout.
A 15h30 je teste ma connexion skype avec une Duchess pour assurer que je suis dans les bonnes conditions techniques. Je suis S U P E R stressée !! J’ai l’impression que j’ai tout oublié.
L’ingénieur de Facebook m’appelle par skype à 16h00. La connexion se coupe tout le temps des latences d’une minute, impossible de discuter. Il s’aperçoit qu’il y a des soucis avec son ordinateur, donc il reboot et il change de salle. Une demi heure après on commence à discuter, on a des petits coupures tout le temps, mais bon on arrive à se parler. Il me pose des questions du genre “sur quoi tu as travaillé récemment et tu es fière”, “un bug compliqué ?” ou “donne moi un trait de caractère que les autres pensent que tu as, mais tu ne te vois pas comme ça”.
On passe à la partie technique, et comme on était en retard ça allait être environ 20 minutes, pas plus. Je dois avouer qu’il regardait un peu trop sa montre et cela m’a stressé d’avantage. Il me pose la question suivante :
“Tu as un array énorme non trié d’integers. Je te donne un integer. Trouve moi si deux integers dans l’array font la somme de l’integer”
Dans ma tête, je me rappèle d’un coup un exercice similaire que j’ai fait où j’ai eu un souci. Il fallait trouver tous les numéros qui somment le numéro 24 en un grand array. Sachant que si je trouve 12 il faut que 12 soit présente deux fois, et non 1 seule fois ! (Le piège)
Je commence à faire une petite classe pour contenir le résultat de deux numéros. Et là il me dit : ah non, tu n’as pas besoin de trouver le numéro, juste si cela existe ! boolean hasSum(int[] arr, int num)
Donc je commence à lui dire que je peux utiliser un HashSet mais je vais partir d’abord sur une solution sans buffer. La solution serait O(N^2) temp et O(1) espace. Nous devons parcourir le tableau, pour chaque élément on cherche dans ce qui reste du tableau si rem existe (int rem = num – arr[i])
Une autre solution sans buffer mais avec mémoire O(log N) pour les appels récursifs peut être de trier les numéros en O(N log N) avec Quick Sort, parcourir ensuite le tableau une seule fois et pour chaque élément essayer de trouver le numéro « rem » en O(log N) avec la recherche binaire.
La solution O(N) temps et O(N) espace serait celle qui stocke les numéros du tableau dans un HashSet pour pouvoir checker si « rem » est un numéro qu’on a déjà vu auparavant.
Je me suis répété tout ça en boucle pendant des heures le lendemain et les jours qui ont suivi. Pourquoi je n’ai pas codé tout ça ? Pourquoi je n’ai pas dit ça ?
Ma tête a buggé. Je ne voyais pas le truc. J’ai été perturbée par le piège d’exercice du numéro 24 comme Jim Carrey dans le film 23. Je ne saurais expliquer exactement ce que je pensais. Je suis rentrée dans une spirale de confusion et de stress de laquelle je suis sortie dans la minute qui a suivie la fin de l’entretien. A ce moment là tout s’est remis en place dans mon esprit et j’ai tout vu d’un coup.
Ma tête a fonctionné aussi mal que la connexion réseau de la personne qui m’a fait passer l’entretien. Une véritable catastrophe.
Gros fail.
Je savais que c’était mort.
Je sentais que pour Google je n’avais pas été exceptionnelle, mais vu le stress du moment et les questions, honnêtement j’aurais pu être meilleure mais cela n’aurait pas fait une grosse différence. Je n’ai pas montré une grosse confiance en moi mais j’ai aucun regret, rien à me reprocher. Le résultat pourrait être positif ou négatif ; le dénouement allait dépendre de l’appréciation de la personne qui m’a fait passer l’entretien et de la performance d’autres candidats face aux mêmes questions.
Concernant l’entretien Facebook, comme dans une rupture, je suis passée par plusieurs étapes.
Facebook : “Unfortunately, we will not be moving forward with your candidacy for this role.”
Tu m’étonnes ! 🙂
Google : “Unfortunately we can not proceed further with your application at this time . The interviewer has made the decision that you are not currently ready for the onsite stage as your performance wasn’t strong enough.
Even though there were some positive signs, the engineer wanted to see a more confident performance in terms of coding and problem-solving”
Pas de soucis !!
Je me sens même encouragée par les “positive signs” ! Je n’ai pas de regrets et j’accepte çela. Ils ont raison : je ne suis pas assez sûre de moi, j’ai manquée de préparation malgré tout, sous le stress j’ai du mal à trouver les réponses vite et sereinement. Les entretiens on-site n’auraient été qu’une perte de temps pour tout le monde.
Les deux recruteurs m’encouragent à réessayer dans 1 an. Ils me rassurent en me disant que la plupart des candidats ne réussissent pas leurs entretiens du premier coup.
Je vois aujourd’hui ces entretiens un peu comme l’examen pratique du permis de conduire. Examen que d’ailleurs j’ai aussi raté la même semaine 😀
L’inconnu nous fait ressentir une grosse pression. Etant débutant, sans avoir assez conduit avec le stress on peut facilement perdre tous nos moyens. Pour tout vous dire, on m’a reproché pendant les cours de conduite, d’être “parfois trop prudente et rouler un peu lentement” et j’ai raté mon examen pour « excès de vitesse et conduite dangereuse ». BAM !!
Lors de l’examen de conduite, on est jugé par quelqu’un qu’on ne connaît pas du tout et qui va dire oui/non. C’est binaire. Et tu ne peux pas lui dire: « Attend, je recommence là. J’ai été stressé ! Pendant les cours je conduis très bien ! » L’examen dure 30 minutes, ils voient plein de candidats et n’ont pas de temps à perdre. Tu dois donner ton meilleur et tu dois montrer que tu maîtrises. Si tu te rates tu peux le repasser, oui, mais dans quelques mois après avoir conduit d’avantage.
Plus on conduit, plus on est confrontés aux nouvelles situations de la route, on maîtrise mieux la voiture, on gagne de l’expérience et on gagne en confiance. Plus on est sûr, plus on a les bons réflexes et les automatismes pour faire face au stress et avoir les bonnes réactions au volant de façon plutôt tranquille. Et puis passer une première fois l’examen enlève une partie de l’inconnue. Remplacez conduire par coder et examen par entretien dans tout ce que je viens de dire.
Je n’ai aucun regret d’avoir participé à ce process, au contraire. J’ai E N O R M E M E N T appris. Après des années à coder en entreprise avec des frameworks, j’ai redécouvert les bases et l’algorithme. Et c’est P A S S I O N A N T. J’ai envie de continuer à apprendre, à résoudre des problèmes et à m’entraîner, mais plutôt en tâche de fond pour éventuellement repasser dans 1 an.
Ce qui m’a manqué ?
Des personnes avec qui m’entraîner à passer des entretiens avant l’entretien final, le travail en équipe pour comprendre certains exercices et en discuter. J’ai été trop seule.
Un conseil ?
Tenter la chance en binôme pour réaliser et discuter des exercices, passer à tour de rôle des entretiens hang-out avec du timing, réaliser du code en white-board dans une salle pendant les pauses déjeuner, par exemple, et des entretiens de test sous ce format là.
Si vous avez l’occasion d’y passer, je profite cet article pour vous dire de ne pas hésiter à me contacter à ce sujet.
Je vais peut-être vous écrire un 2ème article l’année prochaine intitulé “j’ai re-testé pour vous : les entretiens de facebook et google. J’ai encore tout raté”. Ou peut-être “j’ai tout déchiré!!”
Qui sait ! 🙂
L’histoire nous le dira.
Tellement réaliste sur ce que c’est en réalité !
La préparation est tellement clé pour réussir ces tests. J’avais passé un test similaire chez Tuenti, le gros concurrent hispanophone de Facebook. Même situation, mêmes styles de questions, etc.
Et comme toi, à « l’échec », la phase la plus dure fut les larmes du « je suis pas fait pour être codeur ». Bon on revient vite à la réalité mais sur le moment, on se sent un peu humilié d’avoir échoué aussi « lamentablement ». C’est pas le meilleur exercice pour développer sa confiance en soi. Content de voir que je ne suis pas le seul à m’être remis en cause suite à ça.
Curieux de voir le « un an après, j’ai réessayé ». Sincèrement, ça serait vraiment intéressant. Je n’ai jamais eu le courage de recommencer.
Je me reconnais pas mal la dedans, j’ai tenté celui de Google deux fois, les deux fois, ils m’ont contacté, les deux fois, j’ai eu seulement deux semaines pour me préparer. (et raté les deux)
La première fois, mon employeur venait de mettre fin a ma période d’essai, pour des raisons de motivation, mais mon égo était en miette, j’ai très bien réussi la partie algo, mais raté celle sur les questions spécifique au langage. Je sortais d’un boulot chiant, et de six mois de stages dans un langage style prolog, bref, rouillée … l’interview a commencé de façon étrange, il n’arrivait pas a m’appeler (à cause de mon portable), ce qui m’a beaucoup perturbée.
La deuxième, je venais de me péter la jambe donc j’était pas au top niveau physique, mais au niveau langage et algo, j’étais prête, mais je n’ai pas bien compris ses questions, la connexion était horrible, et je devais toujours le faire répéter, mon stress a commencé a se faire ressentir. A la fin il m’a posé des questions de calcul mental, j’ai freezé, j’étais incapable de répondre, j’étais capable de faire l’algo pour répondre, mais impossible de calculer dans ma tête.
Oui, un an en travail de fond, c’est nécessaire, rien que pour changer de mentalité, et surtout, réussir a gérer les mauvaises conditions dans lesquels on passe l’entretien. L’humeur de la personne en face, sa façon de parler, les problèmes de connexions, les problèmes de la langue aussi.
Bref, un jour peut être.
Merci énormément Katia pour ce retour d’expérience qui n’est pas si courant que cela en français.
C’est important de rappeler que les jobs de Dev en France ne se résument pas à ceux des SSII et qu’il y a la possibilité tout en restant en France de travailler dans des entreprises où l’ingénierie logicielle fait partie de l’ADN de la boite et que donc les jobs de Dev qui sont à pourvoir sont faits pour des profils de passionnés ayant un savoir faire et une curiosité pointue.
Ce type d’article est une bonne source de motivation, pour les ingénieurs qui se demandent à quoi s’attendre quand on envisage d’intégrer une entreprise dont le niveau technique est de classe mondial à l’instar des GAFAM.
Je trouve que c’est une excellente philosophie de se laisser le temps de se préparer sereinement pour gagner en confiance et retenter l’expérience dans un an. Tous mes encouragements.
Bravo, belle synthèse, et il vaut mieux un refus qu’un regret!
Je crois avoir vécu la même ~ xp (chez google), très personnellement j’avais été surpris par le format, éditeur partagé … où il fallait se concentrer sur le pseudo code, plutôt que d’essayer d’équilibrer ces #@! de paranthèses 😉 #bigfail
Je recrute de temps en temps, et je me poste la question de la pertinence de ce genre d’entretien.
Je trouve l’algorithmique passionnante, mais pour autant, 99% de notre boulot n’en contient pas. Je ne sais pas pour les postes proposés chez Google et Facebook. Est-ce que vraiment tous les gens qu’ils emploient ont besoin d’être bons là-dedans ? Quid des autres qualités comme le soucis du détail, la qualité, la communication à l’intérieure d’une équipe ?
Il y a aussi les conditions de l’entretien : le format très court et très stressant. Dans la vraie vie, lorsqu’on est confronté à un problème compliqué de développement, on est seul devant son écran et on a au moins quelques heures devant soit pour le résoudre. Il est plus important d’être capable de trouver une solution robuste en quelques heures, en se documentant sur le sujet, plutôt que de faire de faire de la magie en 30 minutes.
Je suis d’accord que ça fait rêver ce type de problème, mais pour autant est-ce que c’est vraiment utile de fonctionner comme ça ? Est-ce qu’on ne risque pas de sélectionner uniquement des gros cerveaux très sûrs d’eux et se priver de personnes avec d’autres qualités tout aussi utiles ?
Au sujet de « Cracking the Coding Interview: 150 Programming Questions and Solutions » : ce (genre de) bouquin est utile seulement pour ce genre d’entretien ou apporte-t-il quelque chose à notre « quotidien de développeur » ? Ai-je un intérêt à le lire même si je ne cherche pas à me faire embaucher chez Google ou Facebook ?
Bravo, l’article est passionnant, plein d’énergie , bon courage pour l’année prochaine 🙂
J’ai eu la même réaction que toi, j’ai fait Google, et je me suis dit c’est exactement comme le permis de conduire… Tu le passes plusieurs fois jusqu’à l’obtenir… Mettre en avant l’algo alors que 99% du temps on en fait pas, c’est vraiment des entretiens orientés jeunes diplomés.
cf le tweet de l’auteur de homebrew, qui s’est fait recalé, alors que les mecs de Google eux-même utilisent son logiciel:
https://twitter.com/mxcl/status/608682016205344768
Déjà ils ont genre des millions de candidatures, il ont pas besoin de rattraper les gens mais de les éliminer.
Ensuite même si ça sert à rien ensuite, cela montre une motivation, force de caractère et ténacité. On élimine d’office les branleurs, les démotivés, les stressés, les dilettante…
Enfin est-ce que ça sert vraiment à rien ? Est-ce que celui qui peut écrire en gros tous les algos courant qui couvrent 99% de l’informatique classique mais aussi sait désigner 99% des archis distribuées et sait faire avec brio 99% des design logiciel sans effort par habitude n’offre aucun avantage pratique ? Est-ce qu’il sera pas meilleur plus rapide, plus productif ?
Bravo pour faire partager ce genre d’expérience.
J’ai moi-même eu à passer un certains nombre d’interviews similaire très récemment (exactement 7 en moins de 10 jours…). La meilleure préparation reste les coding dojos que j’ai faits dans le passé. Et il faut s’assurer d’être capable de coder les bases des structures de données et des algos en partant d’une feuille blanche. Cela dit, le process reste très aléatoire, donc la chance reste non négligeable pour le succès…
Merci pour cet article. Pour information même l’expérience n’empêche pas le stress, d’autant plus quand on commence à franchir quelques étapes, on va vite en besogne et on commence à se dire « et tient pourquoi pas, ca va peut-être matcher ? ».
Sinon pour s’entraîner (tout en s’amusant), je conseille aussi codingame (https://www.codingame.com/)
Merci pour cet article. J’aimerais savoir s’il faut obligatoirement être actif dans la communauté Google pour obtenir ce genre d’entretien
Bonjour,
Il y a-t-il une version française de “cracking the code interview” ?
Merci.
Waouw! Quelle motivation !
En tout cas, merci pour ton retour, et notamment la liste des bouquins, et exos que tu as potassé,
ça me donne une bonne base pour continuer de progresser
Tres utile comme article,Merci! As tu attendu bcp de tps pour savoir leur retour?
tu as trouvé des bons livres ou articles pout te préparer?
tu peux nous conseiller?
Très TRES bien écrit ton article !.. Bravo, tu résumes parfaitement les sentiments par lesquels on passe en préparant ce genre d’interviews. C’est vrai que ça ressemble plus à un exam (style permis de conduire ou colle pour ceux qui ont connu les classes prépa) avec une liste de choses à connaître, etc. Faire des entretiens blancs avec des amis est une super idée pour se mettre en situation (si on a la chance d’avoir sous le coudes des amis dévoués et compétents sur ces sujets). Qq’un connait-il des sortes de « communautés » d’entre-aide entre candidats pour se faire passer mutuellement des interviews ? Sinon, plus d’un an après la parution de ton article tout le monde se pose 2 questions :
-1. as-tu retenté 1 an après ?
-2. as-tu eu ton permis de conduire ?;-)
C’est vraiment super d’avoir communiqué ton ressentie ! Je te souhaite bonne chance et une bonne réussite pour tes futurs entretiens ! J’ai nulle doute à savoir que tu vas win car tu dispose de la mentalité d’une battante !
En continuant à utiliser le site, vous acceptez l’utilisation des cookies. Plus d’informations
Les paramètres des cookies sur ce site sont définis sur « accepter les cookies » pour vous offrir la meilleure expérience de navigation possible. Si vous continuez à utiliser ce site sans changer vos paramètres de cookies ou si vous cliquez sur "Accepter" ci-dessous, vous consentez à cela.