Excellente interview de conception système
A complex system has many parts working together. Image by Timelab Pro from Unsplash

Excellente interview de conception système

Cet article a été traduit automatiquement à partir de l’anglais et peut contenir des inexactitudes. En savoir plus
Voir l’original

Cela fait un moment que je n’ai pas écrit, mais cette dernière année, j’ai passé beaucoup d’entretiens en conception de systèmes. J’aime beaucoup ces entretiens, même s’ils pourraient être améliorés, car ils ressemblent beaucoup à ce que je fais vraiment et sont suffisamment ouverts pour permettre aux candidats de jouer sur leurs points forts.

En ayant interviewé de nombreux candidats, j’ai rassemblé quelques conseils importants pour m’assurer que vous donnez aux recruteurs exactement les signaux dont ils ont besoin pour évaluer vos points forts. La conception système est une compétence qui demande de l’expérience, mais pour ceux qui ont de l’expérience, cette compétence devrait être quelque chose qu’ils utilisent dans leur travail quotidien de toute façon. Ce qui suit est une liste de contrôle pour combattre les nerfs lors des entretiens et mettre en avant votre expérience durant cette heure.

Rassembler les exigences fonctionnelles et non fonctionnelles

J’ai déjà parlé de la collecte des exigences , mais c’est particulièrement important pour les entretiens de conception système. Contrairement à un algorithme contraint, un grand système comporte beaucoup plus de domaines où vous pouvez prendre différentes décisions selon vos besoins. Il y a deux types d’exigences que vous devriez clarifier :

  • Exigences fonctionnelles: que devrait réellement faire le système faire? Par exemple, lors de la conception d’un raccourcisseur d’URL, une question importante à se poser est de savoir si nous voulons supporter les recherches inversées (d’une URL longue vers une URL courte existante), ou si vous pouvez tolérer que la même URL longue soit raccourcie de deux manières différentes. C’est là que vous comprenez comment les utilisateurs vont réellement interagir avec le système.
  • Exigences non fonctionnelles: comment le système se comporte techniquement. Vous voudrez comprendre l’échelle du système (nombre d’utilisateurs, requêtes simultanées, quantité de données traitées ou stockées). Un autre facteur courant à clarifier est la latence attendue, en particulier la latence de bout en bout pour l’ensemble du système, qui peut inclure des exigences de cohérence en lecture après écriture.

Il est acceptable de plonger dans certaines de ces exigences lors de la conception de votre système, pour déterminer quels compromis vous êtes obligé de faire. Cependant, plus vous avez d’expérience, plus vous pouvez reconnaître ces exigences dès le départ et donc votre niveau d’expérience ressort dans cette partie de l’entretien.

Mais quoi que vous fassiez, ne vous plongez pas directement dans un design. Déterminez d’abord ce que vous concevez.

Présenter une solution de bout en bout

Le plus gros problème que je vois, c’est lorsque les candidats entrent dans trop de détails sur certaines parties de leur architecture, et qu’à la fin de l’entretien, ils n’ont pas de solution de bout en bout. Peut-être qu’ils se sont trop concentrés sur le stockage des données et ont minimisé la façon dont les données sont traitées. Ou ils n’ont jamais parlé de la façon dont les données, ou même quelles données, se retrouvent réellement dans leur système.

Au minimum, assurez-vous d’avoir un schéma bloc de haut niveau qui présente clairement tous les différents composants de votre système proposé. La plupart des solutions consisteront en ces éléments courants :

  • Sources de données : serveurs d’applications, appareils clients, etc.
  • Magasins de données : bases de données relationnelles, séries temporelles et clé-valeur, caches en mémoire, etc.
  • Transport de données : files d’attente de messages, API REST, etc.
  • Traitement des données : où le traitement a lieu, quelles données sont nécessaires et ce que le traitement fait.
  • Des services auxiliaires si cela a du sens : pare-feux, équilibreurs de charge, etc. Dans les problèmes que je propose, ceux-ci sont généralement acquis et pas nécessaires, mais ils peuvent être centraux dans d’autres applications.

Remarquez l’accent marqué sur Données. C’est parce que dans la plupart des systèmes à grande échelle, du moins selon mon expérience, les données sont au cœur du système. Tout dans le système, les différentes pièces et leur lien existent pour s’assurer que les données peuvent circuler dans le système et être traitées de manière précieuse pour vos utilisateurs.

Utiliser une terminologie standard de l’industrie

Les technologies et la terminologie spécifiques utilisées par votre entreprise sont parfois uniques, souvent motivées par les besoins spécifiques de son histoire. Mais sous cette singularité se cache un ensemble commun de schémas que votre entreprise applique, et ce sont ces schémas que vous partagez avec l’intervieweur. Faites référence à ces schémas.

Par exemple, n’hésitez pas à citer Kafka ou Amazon SQS si c’est ce qui vous convient, mais mentionnez que vous souhaitez une file de messages configurée comme un système pub/sub. Cette approche présente de nombreux avantages :

  • Si l’intervieweur ne connaît pas les mêmes technologies que vous (Même s’ils devraient connaître les gros), vous avez un langage commun.
  • Vous montrez que vous comprenez exactement les fonctionnalités dont votre système proposé a besoin, puisque la même technologie peut souvent être utilisée pour plusieurs raisons.
  • Enfin, cela montre que, quel que soit votre parcours, vous avez suffisamment de connaissances générales pour transposer votre expérience à votre nouveau poste, où vous pouvez utiliser différentes technologies.

Nommer une technologie spécifique est excellent pour montrer que vous avez de l’expérience concrète, mais assurez-vous quand même de faire référence aux schémas sous-jacents.

Il en va de même pour la terminologie spécifique à chaque entreprise. Si vous et l’intervieweur interprétez les mêmes mots comme des concepts différents, vous aurez beaucoup de malentendus. (Fait intéressant, tout cela peut s’appliquer lorsqu’on travaille avec d’autres équipes dans une grande entreprise !)

Expliquez quels problèmes vous résolvez avec vos choix

J’ai toujours pensé que cela faisait des compromis, mais j’ai constaté que les candidats passent souvent trop de temps à détailler des solutions alternatives au lieu de s’engager sur une proposition précise. Cependant, les compromis sont une part importante de la conception de grands systèmes, il est donc important d’expliquer quels problèmes chacun de vos choix résout.

Par exemple, si vous décidez d’intégrer une file d’attente de messages dans votre design, vous pouvez dire que vous êtes prêt à accepter le coup de temps de traitement (Le traitement n’est plus à la demande, mais lorsque le consommateur de la file d’attente accède à cette donnée) afin de garantir que chaque donnée soit traitée de manière fiable, sans se soucier des conditions de course entre les traitements des données associées. Ou si vous intégrez un magasin clé-valeur, vous pouvez dire que vous souhaitez des lectures à faible latence pour chaque article, sans avoir à faire d’autres requêtes basées sur les exigences fonctionnelles que vous avez recueillies plus tôt.

Dire cela et passer à autre chose montre que vous avez fait vos choix délibérément et avec une compréhension claire à la fois des espaces problème et solution, tout en restant fidèle à un récit unifié sur votre système proposé.

Préparez-vous à plonger en profondeur dans vos domaines d’expertise

Il devrait être acceptable de ne pas avoir une expertise approfondie dans tous les domaines du système (même si je sais que tous les recruteurs ne sont pas aussi accommodants), mais si l’intervieweur a choisi le problème en fonction de ton parcours, il devrait y avoir des domaines dans lesquels tu as de l’expérience. En particulier, vous devez vous assurer de pouvoir parler intelligemment de tout aspect du système qui correspond à vos travaux précédents, surtout si cet aspect est mentionné de façon importante sur votre CV.

Avez-vous dit que vous avez travaillé sur une architecture de streaming pour le traitement des données ? Vous devriez pouvoir parler des files d’attente de messages, mentionner des technologies comme Apache Spark ou Samza (Ou les technologies que vous utilisiez auparavant), les compromis entre le traitement en flux et le traitement des données en ligne ou hors ligne, etc. Si vous avez beaucoup travaillé avec le stockage de données, vous devriez pouvoir parler de sharding, de choix de bases de données, de mise en cache persistante basée sur disque vs. en mémoire, etc.

C’est un autre domaine où vos connaissances devraient être plus larges à mesure que vous êtes expérimenté. Si tu es assez expérimenté, tu devrais pouvoir parler des différents domaines que j’ai mentionnés ci-dessus, au moins à un niveau élevé. Ce sont des concepts assez standards en ingénierie logicielle qui apparaissent dans de nombreux systèmes à grande échelle.

Parlons de la productionisation du système

Enfin – et c’est la partie sur laquelle les inexpérimentés s’embêtent – parlez de la production du système. J’espère que votre intervieweur a clairement demandé cela en présentant le problème, mais sinon, assurez-vous de clarifier si c’est un sujet dont vous devez parler.

C’est là que vous parlez de la surveillance et de la journalisation, de la gestion des erreurs (Bien que certains de ces éléments soient peut-être venus plus tôt), des déploiements progressifs pour répondre à des problèmes tels que les périodes de réchauffement du cache, une dégradation progressive en cas de pics de trafic inattendus, etc. Plus précisément, la surveillance et la gestion des erreurs sont deux domaines chaque le système traite, donc je commencerais par ceux-là.

Cette partie de l’entretien est celle où vous montrez non seulement que vous pouvez concevoir un système théorique, mais que vous avez aussi l’expérience concrète nécessaire pour savoir quels problèmes un tel système rencontrera en production. Si je devais vous nommer chef technique, aurais-je la confiance que vous réfléchirez à ces préoccupations Avant On lance ? C’est aussi une raison pour laquelle il faut être plus clair dans la conception globale du système, afin d’avoir le temps d’aborder cette section.

Le dernier conseil que j’ai est mineur, mais il vaut la peine d’être mentionné rapidement : soyez prêt à montrer votre design au fur et à mesure que vous le construisez. Si vous faites l’entretien en personne, préparez-vous à dessiner des schémas blocs sur le tableau blanc. Si l’entretien est virtuel, choisissez un outil de dessin et entraînez-vous avec. Cela pourrait même signifier vous procurer votre propre tableau blanc ! Assurez-vous simplement qu’il soit visible depuis votre caméra.

Lorsqu’elle est bien réalisée, la conception des systèmes vous offre, à vous, ingénieur expérimenté, l’occasion de vous présenter (au moins un sous-ensemble de) Vos compétences en tant que responsable technique d’un projet. Cependant, puisque vous essayez de condenser votre expérience en une seule heure, avoir un script pour l’entretien vous permet de démontrer exactement les compétences qui inspirent confiance en vos capacités.

Cet article a été initialement publié sur le site Hiring For Tech. Si vous souhaitez lire plus de contenus de ma part, veuillez vous abonner soit par email, soit sur LinkedIn. Si vous avez des avis sur mon contenu, commentez ci-dessous. Et n’oublie pas de le faire Suivez-moi Pour plus de contenu !

Well written! Keep up the good work 👏👏

Super interesting read. Thanks for sharing!

Thank you for publishing this blog! Great tips!

Identifiez-vous pour afficher ou ajouter un commentaire

Plus d’articles de Avik Das

  • Formation formelle à l’entretien

    Un thème récurrent dans cette newsletter est l’idée que les bons ingénieurs logiciels ne font pas automatiquement de…

    1 commentaire
  • Entretien d’apprentissage

    Les ingénieurs logiciels sont bien placés pour évaluer les capacités techniques d’un candidat, mais mener un entretien…

    6 commentaires

Autres pages consultées