Processus de recrutement chez Facebook
Il y a quelques années, en novembre 2017 pour être précis, j'ai été approché par Facebook et j'ai pu entamer leur processus de recrutement. Voici mon retour d'expérience.
Android Opportunities @ Facebook
Tout a commencé par un message reçu sur LinkedIn intitulé Android Opportunities @ Facebook
D'un côté, je n'avais pas vraiment envie de quitter Playmoweb, Angers et de m'imposer des contraintes à moi et ma famille pour rejoindre un autre pays, loin de ma famille et de mes amis. Quelques années auparavant, l'aventure m'aurait davantage attirée.
D'un autre côté, je me devais d'au moins répondre et avancer dans leur processus de recrutement. Ce n'est, en effet, pas tous les jours qu'on a la chance d'entamer un parcours de recrutement dans une des entreprises les plus influentes au monde.
Le site Glassdoor permet aux employés d'évaluer leur environnement de travail de manière anonyme. Si Facebook n'a plus vraiment la côte en 2020, à l'époque, le réseau social était régulièrement classé parmi les premières places sur Glassdoor (2nd en 2017, 1ere en 2018, elle est 23ème en 2020)
Je voulais aussi voir ce que je valais pour une structure de cette dimension et j'ai donc fait une réponse rapide en la remerciant de cette opportunité sur laquelle j'aimerais en savoir davantage.
Le lendemain, je devais répondre à un premier mini questionnaire par écrit :
Premier entretien Skype
Quelques jours plus tard, j'avais mon premier entretien avec cette personne sur Skype. Cet entretien (entièrement en Anglais) s'est découpé en deux parties.
La première partie a consisté à expliquer ce que j'avais fait et faisais actuellement, quels étaient mes rôles, qu'est-ce qui me plaisait etc...
La seconde était un mini questionnaire à choix multiples.
Comme j'avais enregistré l'audio de cet échange (ils l'ont peut-être fait aussi, c'est Facebook après tout), j'ai pu retranscrire ce questionnaire à posteriori :
1 - Your photos sharing app displays a system notification when a user receives a photo. Your app should display the photo when the user taps the notification. Which of the following do you need to attach to the notification object do you pass to your notification manager.
- a - Activity reference
- b - Pending intent
- c - Broadcast receiver
- d - Fragment transaction
2 - If you nest a relative layout inside a linear layout, what type of layout parameters will the relative layout accept
- a - RelativeLayout.LayoutParams
- b - ViewGroup.MarginLayoutParams
- c - ViewGroup.LayoutParams
- d - LinearLayout.LayoutParams
3 - You’re writing a monitoring app that periodically checks if a website is up. On those listed, what is the best when you need to schedule this periodic checks.
- a - Register a wake up with Power Manager
- b - Call set an exact repeating on Alarm Manager
- c - Post to a handler with a post delay
- d - Call set pediodic timer on timer service
4 - You want your messaging app to appear as an option in the intent chooser when an user shares content in an other application. To do this you must do which of the following
- a - Create an Intent Service in your Application object to listen to the sent message intent
- b - Register a broadcast receiver in your manifest to receive broadcast SMS
- c - Register a content observer to listen to write to TELEPHONY.SMS.INBOX
- d - Register an intent filter for ACTION_SEND in your manifest
5 - Which of the following is not a good way to improve scrolling performance in a ListView
- a - Adding HARDWARE_ACCELERATED = true to the listview decoration in your manifest
- b - Reducing findViewById calls with the ViewHolder pattern
- c - Reducing cell layout complexity
- d - Reusing views passed to adapter.getView
Je me souviens avoir hésité sur certaines questions, je ne pense pas avoir eu 5/5 mais mon score était apparemment suffisant puisqu'elle m'a indiqué que j'aurais un entretien plus technique avec un ingénieur de chez Facebook.
Elle m'a ensuite partagé quelques ressources afin que je puisse me préparer à ce futur test technique :
Hi Steve,
Thanks again for chatting with me today. As mentioned, the preparation material on what to expect from your initial interview is below.
- Practice questions by HackerRank: https://www.hackerrank.com/
- Practice questions by LeetCode: https://leetcode.com/
- Cracking the Facebook Coding Interview - The Approach: https://vimeo.com/157480836
- Cracking the Facebook Coding Interview - Problem Walk- Through: https://vimeo.com/158532188
- Password: FB_IPS
Je vous partage même le mot de passe, si j'ai des problèmes, ça viendra peut-être de ça 😅
HackerRank et LeetCode sont deux sites qui proposent des exercices d'algorithmie pour tester vos connaissances et capacités dans ce domaine (connaissance en structures de données, récursivité, etc...) Certains de ces exercices sont directement tirés des tests techniques des boîtes comme Google, Microsoft, Facebook, etc...
J'avais deux semaines pour me préparer. Entre mon travail et la vie de famille, je savais que ça faisait court et j'ai donc demandé à avoir une semaine de plus, ce que j'ai obtenu.
Je passais donc plusieurs pauses de midi à tenter de résoudre ces exercices, sandwich à la main. Je mesurais déjà à quel point j'avais perdu certaines notions d'algorithmie que j'avais acquise en Licence et Master. Plus ces pauses défilaient, moins je le sentais.
Test technique
Le jour J, j'oublie tout simplement l'entretien 😆 recevant des mails me demandant pourquoi je ne suis pas en ligne... Je finis par répondre en m'excusant autant que possible et l'entretien a pu être replanifié deux jours plus tard.
Ce test technique se déroule sur le site Coderpad, c'est un environnement de développement en ligne qui vous permet d'écrire, compiler et tester votre code, dans le langage de votre choix.
Les échanges avec l'interlocuteur se font en visio par Skype afin qu'il voit vos réactions. Mais vous, vous ne le voyez pas. Je l'entendais d'ailleurs tapoter sur son clavier tout en m'expliquant l'exercice.
Mon exercice consistait à résoudre une opération mathématique simple décrite dans une chaine de caractères, du type :
String operation = "2+3*6-6/31"
Les multiplications et divisions devant être effectuées avant les additions et soustractions, j'explique donc qu'il va falloir découper cette opération sur les caractères +
et -
puis *
et /
, de transformer les chaines de type 735
en entier, que j'allais devoir faire plusieurs fonctions récursives, etc...
J'avais encore gardé pas mal de bases d'algorithmie, et même si ce n'est pas le genre de code qu'on écrit tous les jours dans la vraie vie (il y a surement une librairie qui fait cet exercice à votre place 😀), j'avais quand même une idée assez précise de comment m'y prendre.
Bref, cet exercice est en fait un ensemble de minis exercices qui seront chacun résolu par une fonction simple, dont l'une d'elles est tout simplement de transformer le caractère "2"
en un entier 2
Et là, je sèche. Je sais que c'est simple mais rien ne me vient. Mon interlocuteur est surpris, ce qui me met encore plus mal à l'aise.
Durant cette entrevue, je codais en Java donc je sais qu'un petit Integer.parseInt()
m'aurait sorti de ce pétrin rapidement, mais inutile de préciser qu'ici, c'est à vous de coder ce type de fonction.
Le temps défile, je bégaie, c'est terminé pour moi, je le sais à ce moment là.
Et pourtant, c'était simple :
char character = '2';
int ascii = (int) character; //Ca fait 2 😢
À la fin de ce test, j'avais la possibilité de lui poser n'importe quelle question sur la vie en entreprise au sein de Facebook. Mais j'étais assez déçu de moi et je n'ai pas eu le goût de lui demander quoi que ce soit.
Mon interlocuteur a terminé cette entrevue en m'indiquant que la suite se passerait dans leur bureau à Amsterdam.
Mais, comme je le pressentais, il n'y a pas eu de suite pour moi.
Epilogue
J'ai reçu d'autres offres du même genre les années suivantes, dont une d'Amazon pour un poste à Vancouver et Facebook, une nouvelle fois, pour un poste à Londres.
Je n'ai pas donné suite à ces sollicitations pour les mêmes raisons qu'en 2017 : j'aime ma vie de famille sur Angers, j'aime mon poste chez Playmoweb et j'ai déjà expérimenté un entretien dans ce type de structure (même si j'aurais aimé aller jusqu'aux tests sur place).
Si vous avez des questions, si vous voulez en savoir plus, n'hésitez pas à laisser un commentaire.