Dans notre blog, nous écrivons beaucoup sur la construction d'une carrière dans l'informatique dans différents pays, la recherche d'un emploi , les différences dans le processus d'entretien des grandes entreprises. Dans l'article d'aujourd'hui, nous irons plus loin et couvrirons le sujet des soi-disant entretiens de conception de système - c'est l'une des étapes des entretiens avec des entreprises technologiques bien connues, où de nombreux candidats sont éliminés.
Alors, qu'est-ce que la conception du système et comment passer ce type d'entretien?
Ce que c'est
Dans le monde d'aujourd'hui, les systèmes informatiques sont devenus extrêmement complexes. Chaque nouvelle «fonctionnalité» du produit doit répondre à de nombreuses exigences, il y a toujours des contraintes entre lesquelles les ingénieurs doivent équilibrer. Ce qui semble super facile à l'utilisateur moyen - comme soumettre une requête de recherche via Google ou Yandex - comporte en fait un niveau de complexité énorme.
La différence entre les entretiens de conception de système et les entretiens techniques réguliers est qu'ils s'attendent à ce que le candidat réponde à des questions ambiguës sur les structures de données et les algorithmes. En règle générale, les tâches à ce stade sont telles que pour elles, il n'y a pas de solution sans ambiguïté correcte ou incorrecte, elles provoquent le processus de réflexion - c'est en elle que le candidat se révèle.
En gros, un entretien de conception de système est quelque chose comme une session de brainstorming, où une personne réfléchit à voix haute, examine les solutions possibles et analyse les défauts de chacune d'elles en temps réel. C'est la difficulté, mais aussi le principal avantage - le processus de réflexion est ici plus important que le résultat. En règle générale, ces entretiens sont menés par de grandes entreprises développant des systèmes à grande échelle ( FAANG et autres).
Comment passez-vous un entretien de conception de système? Voici quelques conseils pratiques.
, , @g-jobbot. , Telegram , – , .
–
Étant donné que dans un entretien de conception de système, le plus important est de savoir comment vous résolvez un problème, il est extrêmement important dès la première étape de le comprendre clairement par vous-même. L'ancien ingénieur Microsoft et Facebook montre dans son article l'importance de ce fait avec un exemple pratique.
En règle générale, la tâche est quelque chose comme "Comment concevez-vous Netflix en 45 minutes?" À première vue, de telles questions sont complètement absurdes. Ces systèmes à grande échelle ont été conçus et mis en œuvre par des centaines et des milliers d'ingénieurs au fil des ans. Quarante-cinq minutes ne suffiront même pas pour commencer à discuter d'au moins un des composants d'un tel produit!
C'est là que la compréhension de la tâche est très importante. Vous devez comprendre ce que veut l'intervieweur. Et il veut évidemment qu'il:
- a donné une réponse au format "vue hélicoptère" de l'ensemble du système,
- puis l'a décomposé en composants
- décrit pourquoi chacun d'eux est nécessaire (centre de données, stockage de données, frontend, backend, mise en cache, travail avec les files d'attente, mise en réseau et équilibrage de charge, etc.)
Image: system-design-primer
Vous pouvez vous attarder sur certains de ces composants plus en détail - ils vous indiqueront ceci, ou vous devrez demander. Habituellement, vous n'avez même pas besoin d'écrire du code dans une interview sur la conception du système, et si vous plongez immédiatement dans la jungle technique, sans d'abord discuter de l'ensemble du système dans son ensemble, ce sera un inconvénient.
Poser des questions de clarification
Le principal objectif de l'entretien de conception de systèmes est de donner au candidat la possibilité de démontrer ses connaissances et son expérience. Comme indiqué ci-dessus, il n'y a pas de bonnes ou de mauvaises réponses. Il est bien plus important de ne pas résoudre le problème en tant que tel - d'autant plus que cela peut simplement être impossible dans le temps imparti - mais de montrer votre processus de pensée dans toute sa splendeur.
Par conséquent, il est extrêmement important de poser des questions, même s'il s'est avéré soudain que vous connaissez clairement la réponse à la question posée. Dans une telle situation, vous n'avez pas seulement besoin d'écrire une solution au problème, c'est contraire au but de l'entretien. Vous devez oublier la solution connue et commencer à en chercher une nouvelle, en posant des questions en cours de route.
Cela permettra à l'intervieweur de comprendre plusieurs choses à la fois:
- comment le candidat aborde-t-il l'évaluation du problème?
- Evalue-t-il immédiatement les limites et les goulots d'étranglement possibles du système?
- Pense-t-il immédiatement à l'optimisation des solutions et au contournement des restrictions?
Dans cet article, un ingénieur Twitter a partagé son expérience d'interview. En particulier, il a donné une bonne description de la façon de poser des questions. Imaginez que lors d'une entrevue, on vous ait confié la tâche de concevoir une boîte. Aucune autre information n'est donnée purement et simplement.
Les questions peuvent être:
- Que doit être capable de faire exactement le système (combien d'articles entrent dans la boîte, quelles sont leurs tailles)?
- Quel est le public cible du produit?
- Quelles sont les attentes des utilisateurs du produit?
Les réponses à celles-ci vous permettront de comprendre que vous devez créer une boîte jaune avec une émoticône dessinée dessus, qui conviendra à au moins une balle de tennis. Cependant, la balle n'est pas tout à fait ordinaire - son rayon est d'un demi-mètre et son poids est d'environ 1 kg. La boîte sera facile à transporter en tenant le fond, donc aucune poignée n'est nécessaire.
Il y a beaucoup plus d'informations, maintenant vous pouvez penser à résoudre un problème aussi raffiné.
Image: freecodecamp.com
N'essaye pas d'impressionner
Une erreur courante dans les entretiens sur la conception de systèmes - de nombreux candidats pensent que, puisqu'à ce stade, vous devez travailler au niveau de l'abstraction, il suffira de lancer des termes sympas et des noms de technologies à la mode pendant la conversation pour passer pour un expert. Cela ne fonctionne pas de cette façon.
Premièrement, l'entretien sur la conception de systèmes ne sera probablement pas qu'un simple recruteur, mais un ingénieur qui recherche une personne pour rejoindre son équipe. Il ne suffit pas qu'une telle personne entende des mots comme No-SQL, Mongo DB et Hadoop. Il commencera évidemment à poser des questions de clarification, et si vous n'avez pas vraiment beaucoup d'expérience avec les technologies mentionnées, cela deviendra clair très rapidement.
Être honnête
Un entretien de conception de systèmes est l'un de ces moments où il est normal de ne pas en être sûr. Par conséquent, des réponses telles que «Je n'ai jamais travaillé avec cette technologie particulière, mais je sais qu'elle est souvent utilisée pour résoudre des problèmes similaires» est une bonne option. En plus de l'honnêteté, ici le candidat a montré certaines connaissances et a précisé à l'intervieweur où il va commencer à résoudre le problème (il essaiera une solution connue, si cela ne fonctionne pas, il «creusera» plus loin).
De plus, vous ne devez pas faire passer votre solution comme idéale et ne contenant aucun inconvénient. Il y a toujours des limites, et un ingénieur-intervieweur expérimenté comprend cela mieux que quiconque. Par conséquent, lors de l'entretien, il vaut la peine de dire honnêtement qu'il y a tel ou tel goulot d'étranglement dans la solution, mais vous pouvez essayer de les contourner de telle ou telle manière, utiliser des outils supplémentaires ou mener encore plus de recherches.
Cela montrera clairement que le candidat ne se contente pas de proposer une solution et ensuite d'essayer de la faire passer, mais qu'il peut être flexible, faire des ajustements et généralement adéquat et comprendre qu'il est toujours possible de faire mieux.
Voici un joli dialogue fictif dans une interview de conception de systèmes qui vous montre comment NE PAS faire:
: Twitter. ?
: NoSQL- MongoDB.
: MySQL?
: . MongoDB BigTable.
: Twitter MySQL, .
: , , , . - Facebook NO-SQL.
: Facebook MySQL.
: , , , . , MySQL , BigTable.
Interviewer : Cela n'a pas d'importance. Où allons-nous stocker les données analytiques?
Candidat : évidemment dans MySQL.
Interviewer : Mais n'y en a-t-il pas trop pour MySQL? Maintenant, nous avons HDFS pour cela.
Candidat : Il semble que vous ayez commencé à développer Twitter avant même que MongoDB ne se développe suffisamment. MongoDB peut facilement accueillir à la fois les tweets et les données analytiques.
Interviewer : Super, merci pour votre temps. C'était agréable de discuter.
Comment se préparer à une entrevue: liens utiles
Bien que la conception de systèmes soit l'une des parties les plus floues d'un entretien, vous pouvez vous y préparer. Pour aider les candidats, nous avons compilé une liste de matériaux utiles: