Je viens de décrocher un poste de développeur chez Facebook. Voici comment je me suis préparé pour mes interviews.

Je viens de terminer sept entretiens sur place dans des entreprises technologiques de la Silicon Valley. J'ai finalement accepté une offre d'emploi en génie logiciel de Facebook.

Voici comment je me suis préparé pour ces entretiens et ce que j'ai appris en cours de route.

Mon voyage de plusieurs années vers la Silicon Valley

Lorsque j'étudiais l'informatique dans mon université en Australie, j'ai toujours envisagé mon avenir en tant qu'ingénieur logiciel dans la Silicon Valley.

J'ai adoré l'idée d'être au cœur de toutes les innovations de l'industrie technologique - ainsi que de ses erreurs. Cet objectif m'a motivé. Cela m'a permis de rester concentré.

J'ai quitté mon poste d'ingénieur principal iOS dans une entreprise incroyable à Melbourne et je suis retourné dans ma ville natale de Perth pour étudier. Là, je me préparais pour le processus d'entrevue devant moi dans la Silicon Valley. Je savais que ce serait incroyablement difficile et ardu.

Si vous parlez du processus d'entretien technique à une salle d'ingénieurs en logiciel, beaucoup dénonceront les pratiques d'entrevue courantes. Une grande partie de l'argument vient du raisonnement selon lequel la résolution d'algorithmes sur un tableau blanc ne représente ni ne se traduit réellement par les tâches quotidiennes d'un ingénieur logiciel.

Pour le bien de cet article, je n'entrerai pas dans cette conversation. Au lieu de cela, j'explorerai ces différents types de pratiques d'entrevue du point de vue d'un candidat, je me concentrerai également sur ce que j'ai appris du processus.

L'entretien est une compétence

Pendant ma préparation, j'ai toujours su que les entretiens seraient difficiles. Mais honnêtement, je n'avais aucune idée à quel point ce serait difficile jusqu'à ce que je sois aux genoux dans ma première interview.

Avant les entretiens, j'avais utilisé à la fois des services payants et gratuits, qui simulaient des entretiens de codage et de tableau blanc par téléphone avec des personnes qui avaient de l'expérience dans l'industrie pour interviewer des candidats. Ces entretiens de pratique ont été essentiels pour me préparer à la pression impliquée. Mais comme je me suis rendu compte plus tard, ils ne représentaient qu'une fraction de ce en quoi consiste une véritable interview.

Je vous déconseille de vous entretenir pour l'emploi de vos rêves sans avoir quelques entretiens simulés ou réels à votre actif. La nervosité peut être incroyablement écrasante, et elle ne peut être atténuée que par la pratique.

Comme pour beaucoup d'autres choses dans la vie, la pratique améliorera votre confiance.

Les différents types d'entretiens que j'ai rencontrés

Si vous vous préparez et jouez suffisamment bien dans les écrans préliminaires du téléphone, vous aurez la possibilité de venir sur place et de mener des journées complètes d'entretiens. Ces entretiens dureront généralement de quatre à six heures selon l'entreprise pour laquelle vous interviewez.

Lors de mon voyage dans la Silicon Valley, j'ai réussi à aligner sept entretiens sur place au total. Cela m'a donné une perspective unique du paysage actuel des interviews.

En règle générale, un sur site couvrira trois sujets principaux: l'algorithme, la conception de l'architecture et le comportement, ce pour quoi j'avais étudié et préparé. Cependant, certaines entreprises semblent contrer cette tendance et élargir leurs entretiens pour couvrir des compétences plus pratiques.

Je vais brièvement passer en revue chacun des sujets que j'ai rencontrés.

Entretiens d'algorithme

Le type d'interview le plus courant que vous rencontrerez. L'enquêteur vous demandera de résoudre un problème sur un tableau blanc qui évaluera votre connaissance des structures de données, des algorithmes de tri, de la récursivité, de l'analyse de la complexité temps / espace ainsi que de la reconnaissance des formes et des cas de pointe. Dans cet entretien, vous trouverez le plus souvent une solution de force brute, puis vous essaierez d'améliorer cette solution et de discuter des compromis, s'il y en a, avec les différentes solutions que vous proposez.

C'était le pain et le beurre de ma préparation, tous les jours pendant six semaines, j'ai résolu des algorithmes sur un tableau blanc de raccrochage bon marché, analysé leur complexité temps / espace et essayé vraiment de comprendre ce qui se passe à chaque ligne de code.

Personnellement, j'aime beaucoup les algorithmes de tableau blanc car je n'ai pas forcément à me soucier d'écrire une syntaxe compilable (la plupart du temps), ce qui me permet de me concentrer uniquement sur le problème à résoudre. D'autres personnes peuvent ne pas aimer le tableau blanc, mais je leur dirais de le pratiquer de manière cohérente et cela peut changer d'avis.

Entretiens de conception d'architecture

C'est une interview intéressante et que j'ai cruellement sous-estimée. L'enquêteur vous demandera de concevoir un système (sur un tableau blanc bien sûr) tel qu'un système de billetterie de parking, un chat messenger, un fil Twitter, entre autres systèmes courants.

Ce sur quoi vous êtes évalué, c'est comment vous adoptez un concept large et concevez un système qui répond à toutes les exigences et contraintes. Mais c'est au candidat de se poser les bonnes questions, qui définissent les exigences et les contraintes. Cette interview est davantage une conversation mêlée à des schémas de dessin et peut-être même à une structuration de classe. Tout est de très haut niveau, vous n'écrirez donc pas de code d'implémentation réel.

Naturellement, vous devez orienter la conversation pour couvrir vos connaissances sur le fonctionnement des systèmes. Si vous êtes un ingénieur backend, vous n'entreriez pas vraiment dans la mécanique des détails de l'application client à moins d'avoir une expertise préalable dans ce domaine. Je suis un ingénieur iOS, j'ai donc parlé des modèles d'architecture, de la modularisation des fonctionnalités, des modèles de conception au lieu de la façon de faire évoluer les points de terminaison de l'API, d'ajouter des travailleurs, d'AWS, etc.

Entretiens comportementaux

L'enquêteur vous posera des questions sur vous-même et sur la manière dont vous gérez certains types de situations. La préparation de celui-ci n'est pas aussi difficile que les autres mais nécessite beaucoup d'introspection de votre part.

Les questions sont généralement du type:

Comment gérez-vous l'échec?

Quelle est votre plus grande faiblesse?

Comment résolvez-vous les conflits?

Que feriez-vous différemment?

Je pense que ce serait assez difficile de foutre en l'air celui-ci, mais j'ai entendu beaucoup de gens le faire. Ils essaient de déguiser leurs forces en faiblesses, de concevoir leur réponse à quelque chose qu'ils pensent que l'intervieweur voudrait entendre ou même de simplement rejeter le blâme des projets échoués sur d'autres personnes.

«Ma faiblesse est que je suis trop concentré»

«Tout était de la faute de Jerry, il était malade pendant la majeure partie du projet»

Ces enquêteurs sont formés et calibrés pour identifier les gens de merde et ont une attention particulière aux conneries. C'est un moyen rapide de faire rejeter votre candidature par la fenêtre. Soyez juste sincère, montrez de la passion pour votre travail, soyez conscient de vos défauts, faites preuve d'initiative pour vous améliorer et tout ira bien.

Culture Fit

Ceci est généralement associé à l'entretien comportemental et vise à déterminer si vous êtes aligné sur les valeurs de l'entreprise. Par exemple, Facebook suit la culture du hacker qui consiste à être audacieux et à livrer de nouvelles idées, essai par expérimentation, sans avoir peur de casser les choses. Alors qu'Airbnb veut créer un monde où les gens se sentent à leur place partout où ils vont, ils recherchent donc des personnes possédant de grandes compétences en matière d'hospitalité.

Beaucoup de grandes entreprises technologiques mettent beaucoup l'accent sur la culture et embauchent des personnes en fonction de l'alignement de cette personne avec leurs valeurs. Si vous interviewez dans l'une de ces entreprises, il est important que vous recherchiez leurs valeurs et que vous trouviez des expériences passées que vous êtes en mesure de raconter et de communiquer à votre intervieweur.

Programmation en binôme

Une catégorie intéressante pour laquelle vous serez jumelé avec un autre ingénieur devant un ordinateur qui a été mis en place avec un environnement de développement, un peu comme ce que vous utiliseriez dans le monde réel. On vous donne une tâche de base avec une liste d'exigences que vous devez remplir, à mesure que vous terminez chaque tâche, l'intervieweur vous demandera de mettre en œuvre plus de fonctionnalités jusqu'à ce que la limite de temps soit atteinte. Vous êtes libre d'utiliser les ressources de votre choix, telles que Stack Overflow ou la documentation en ligne.

Je pense qu'une grande partie du succès d'un candidat dans cet entretien serait déterminé par l'exposition à des expériences du monde réel. Contrairement au tableau blanc, l'écriture d'un code syntaxiquement correct est nécessaire, vous devez donc connaître votre langage et votre environnement à l'intérieur et à l'extérieur, car vous ne voulez pas passer trop de temps sur Internet ou de documentation à rechercher des réponses.

Au cours de mon rôle précédent, j'écrivais du code propre pendant que je travaillais sur une tâche, suivi d'une optimisation une fois que je sentais que la tâche était terminée. Ce type de flux de travail n'a pas été bénéfique pour ce type d'entrevue. J'ai réussi à nettoyer moi-même le code dans un coin en optimisant trop tôt, ce qui a rendu la récupération plus difficile. J'ai trouvé qu'écrire du code scrappy et mentionner à l'intervieweur que je le ferais différemment en production était considéré comme suffisant que d'écrire propre et optimisé.

Recherche et correction de bogues

Une grande partie de ce que nous faisons en tant qu'ingénieurs est centrée sur la recherche et la correction de bogues qui nous sont signalés à partir de diverses sources. Dans cette interview, vous recevrez une liste de bogues à trouver et à corriger, ainsi que l'identification d'autres codes potentiellement problématiques en cours de route.

Je n'ai vu qu'un seul exemple de ce type d'entrevue et je pense qu'il serait assez difficile pour quelqu'un de vraiment se préparer, surtout s'il s'agit d'un junior. Chaque environnement de codage a ses propres petites bizarreries et nuances, une grande partie du patchwork que j'ai fait provenait d'expériences précédentes avec l'IDE (environnement de développement intégré) et les frameworks associés que j'avais accumulés au fil des ans.

Tester la connaissance du domaine

La programmation est fondamentalement la même dans la plupart des langages courants que nous voyons aujourd'hui. Il est fort probable que si vous connaissez la programmation orientée objet dans un langage, ces compétences seront principalement transférées dans un autre.

Cependant, cet entretien se concentre sur les aspects qui ne peuvent pas être transférés entre les langues ou les cadres. Vous serez interrogé sur les spécificités de l'environnement relatives à l'API, à la gestion de la mémoire, aux capacités, aux contraintes, à l'historique, etc.

La pratique peut être difficile pour ce sujet particulier. Semblable à l'interview de recherche de bogues et de correction, je pense que beaucoup de réponses proviendraient d'expériences antérieures. Selon le niveau du poste auquel vous postulez, les réponses que vous fournissez peuvent être pondérées différemment. Par exemple, si une personne postulant pour un rôle junior ne connaît pas l'historique des raisons pour lesquelles une API est structurée d'une manière particulière, elle peut recevoir une concession. Cependant, si un candidat postulant pour un poste senior ne le sait pas, il peut être critiqué plus sévèrement.

Comprendre les systèmes d'exploitation

Selon le rôle ou l'équipe pour laquelle vous interviewez, vous pouvez avoir un entretien qui se concentre uniquement sur les systèmes d'exploitation. Dans cet entretien, on vous posera des questions qui évalueront votre compréhension des mécanismes de niveau inférieur du système d'exploitation d'un ordinateur.

Certes, cette interview m'a pris au dépourvu. Les systèmes d'exploitation étaient quelque chose que j'avais appris au cours des premières années à l'université, mais mes connaissances sont depuis devenues floues sur le sujet qui se reflétait dans mes performances.

Comment vous devez vous préparer

Comme je l'ai écrit plus tôt, interviewer est une compétence en soi. Même si vous êtes déjà un excellent programmeur dans votre travail quotidien ou si vous obtenez de bonnes notes dans vos études, ces compétences ne seront pas exactement transférées 1: 1 lorsque vous êtes dans une petite salle d'entrevue. La persévérance, la répétition et la cohérence avec la préparation et la pratique des entretiens seront les principaux facteurs déterminants de votre résultat.

Connaissances minimales

Si quelqu'un me demandait ce que je pensais être des domaines sur lesquels se concentrer, je suggérerais ce qui suit:

  • Apprenez à écrire du code à la main sur du papier et un tableau blanc d'abord, puis jetez-le dans un IDE pour la coloration syntaxique, cela devrait devenir une seconde nature pour vous.
  • Développez une connaissance approfondie des structures de données , de leurs forces et faiblesses les unes par rapport aux autres. J'ai découvert que la mise en œuvre de structures de données et de leurs comportements à partir de zéro m'a appris beaucoup plus que ce que je savais de leurs concepts abstraits.
  • Comprenez parfaitement la notation Big O pour les complexités temporelles et spatiales, cela s'associera parfaitement avec votre algorithme et vos questions de tri.
  • Comprenez tous les principaux algorithmes de tri, car la différence de complexité temps / espace peut faire dérailler votre solution optimale pour un algorithme que vous essayez de résoudre.

Quand commencer

Selon votre chronologie, vous voudrez peut-être commencer plus tôt que plus tard. De nombreuses entreprises avec lesquelles j'ai interviewé ont eu une période de réflexion de 12 mois avant qu'un candidat échoué puisse présenter une nouvelle demande. D'un autre côté, si vous savez que vous ne serez pas prêt d'ici un an, vous pouvez aussi bien commencer le processus maintenant et avoir un petit aperçu de ce que c'est que de passer par le processus d'entrevue, alors quand vous êtes prêt, c'est gagné '' t être presque aussi effrayant.

Ne t'inquiète pas

Vous avez ceci.

Ressources

Entrevues simulées

  • interviewing.io (beta), gratuit
  • Préamp, gratuit
  • CareerCup, Payé

Algorithmes

  • Cracking the Code Interview, Livre
  • octet par octet, site Web et YouTube
  • CS50, YouTube
  • Interview Cake, Site Web
  • HackerRank, site Web
  • LeetCode, site Web

Systèmes d'exploitation

  • Concepts du système d'exploitation, livre

Conception d'architecture

  • Introduction à l'architecture et aux systèmes, YouTube

Comportementale

  • Introduction aux entretiens comportementaux, YouTube

Si vous aimez ce que vous avez lu aujourd'hui, vous pouvez consulter nos autres articles sur le développement iOS et Swift, ou si vous souhaitez entrer en contact, envoyez-moi un tweet ou suivez-moi sur Twitter @andyyhope , cela fait vraiment ma journée.

Andyy Hope (@AndyyHope) | Twitter

Ingénieur iOS. Blogger / Conférencier de Swift et iOS twitter.com