Interview SWE
Le processus commence généralement par le recruteur dressant une liste de candidats potentiels. Le candidat passe ensuite par une première sélection ou des projections au cours desquelles il est déterminé s'il est apte à l'emploi. Une fois que cela est clair, un entretien SWE typique est mené, comprenant les étapes suivantes:
- Programmation - de 3 à 5 tours;
- Conception des systèmes - 1 tour;
- Principes de leadership - Premier tour.
Je me concentrerai sur la préparation du cycle de codage car il occupe la majeure partie de l'entrevue. Mais nous examinerons rapidement la conception de systèmes et les compétences en leadership dans les sections suivantes.
A. Programmation
Les ingénieurs en logiciel se retrouvent souvent dans des situations difficiles, par exemple, travailler avec l'ambiguïté, des exigences peu claires, diviser des tâches complexes en sous-tâches, gérer des cas extrêmes, terminer le travail sur un compromis avec des compromis, etc. La programmation des entretiens est un moyen de se faire une idée de ces compétences.
Par souci de simplicité, les étapes de programmation se concentrent sur la résolution de problèmes à l'aide de structures de données et d'algorithmes. Ces questions sont généralement complexes et fournissent des informations précieuses sur la capacité analytique d'un candidat.
Apprenez à résoudre des problèmes à l'aide d'algorithmes et de structures de données. Cette compétence s'acquiert avec le temps, il n'y a pas de raccourci vers elle; la seule vraie formule est la cohérence. Pratiquez, pratiquez et pratiquez jusqu'à ce que vous développiez votre capacité naturelle à résoudre des problèmes.
Stratégie de préparation
1. Estimation du temps de préparation
L'estimation du temps est souvent ignorée et n'est pas considérée comme nécessaire. Je suggère de calibrer votre capacité à résoudre des problèmes avec des algorithmes et des structures de données. J'ai examiné mes forces et mes faiblesses et j'ai fait une estimation approximative du temps de préparation. Cette évaluation m'a aidé à préparer mon esprit pour un objectif à long terme (et à court terme) et m'a gardé motivé.
«Donnez-vous suffisamment de temps pour vous préparer. Toujours. Il vaut mieux être trop préparé que pas suffisamment préparé **.
Le temps total de préparation peut varier en fonction de votre expérience. En général, j'ai divisé les niveaux de formation comme suit:
- Un débutant peut facilement écrire du code dans au moins un langage de programmation. Il manque de connaissances de base en DS et en algorithmes. Difficulté à résoudre des problèmes faciles ou prendre du temps.
- Moyenne. La personne connaît bien les structures de données et les algorithmes. Aucun problème avec une difficulté facile. Peut résoudre la plupart des problèmes de complexité moyenne. Se bat dur.
- Avancée. Aucun problème avec une difficulté moyenne. Capable de résoudre les problèmes les plus complexes.
Avant l'entretien, je me mets au niveau intermédiaire.
Estimation du temps de préparation
2. Plateformes où vous apprenez à programmer
J'ai principalement pratiqué la programmation avec LeetCode , InterviewBit et GFG . Avant l'entretien, j'ai résolu environ 320 problèmes LeetCode, 80 InterviewBit et 30 questions GFG.
Comment les tâches ont été réparties
Les tâches de difficulté moyenne sont très importantes: la plupart des questions d'entrevue sont de difficulté moyenne. Résoudre des problèmes de difficulté moyenne vous rendra plus rapide et augmentera vos compétences en résolution de problèmes.
Dès le début, il est important de commencer par des questions simples à moyennes. Commencez par des tâches difficiles dès que vous vous sentez suffisamment en confiance. Restez motivé si vous ne pouvez pas résoudre des problèmes difficiles. Cela peut prendre plus de temps que prévu pour travailler et améliorer leur solution. Chaque fois que je me sentais dépassé, pour augmenter ma motivation, je retournais à des tâches faciles.
Gardez un esprit de croissance. Chaque problème que vous ne pouvez pas résoudre est l'occasion d'apprendre quelque chose de nouveau.
- LeetCode: , . LeetCode — . . , LeetCode Premium; .
- InterviewBit: . . , ( ). InterviewBit .
- GFG: J'ai utilisé cette plateforme pour trouver des problèmes et des articles sur les bases des algorithmes et des structures de données. Les explications des sujets et les implémentations y sont vraiment bonnes. Le GFG a également un ensemble de tâches liées à des entreprises et des sujets spécifiques.
Je ne comptais entièrement sur aucune ressource. Tout le monde m'a donné de nouvelles idées. J'ai tenu un journal, élargissant constamment mes connaissances.
- Spécialisation en algorithmes sur Coursera : Cette piste Coursera est géniale! Il y a 4 cours au total, couvrant tous les sujets de base et plusieurs sujets avancés des structures de données et des algorithmes. Idéal pour les débutants.
- Youtube: . . ( , , THNLGf019nRo) — ! BackToBack SWE.
- CTCI EPI: . . , . .
- CLRS: , . , .
Enfin, les articles sur BaseCS de Vaidehi Joshi . Elle écrit des explications intuitives et simples sur plusieurs sujets d'algorithmes et de structures de données.
3. Démarrez le chronomètre
Comme la durée des entretiens diminue, il est très important de travailler sur la façon dont vous résolvez les problèmes. En règle générale, une entrevue de programmation dure de 45 à 50 minutes et le candidat doit résoudre deux problèmes intermédiaires, un difficile ou un problème facile et un difficile.
Même si vous auriez pu résoudre la question d'origine, mais passé plus de temps, cela signifie que vous n'avez pas assez de temps pour résoudre la deuxième.
J'ai réglé une minuterie pour décompter le temps qu'il a fallu pour résoudre les problèmes:
- Tâche moyenne: 20 minutes.
- Tâche difficile: 40 à 45 minutes.
Les débutants peuvent ignorer le temps: pour eux, trouver la bonne solution est évidemment plus important.
4. Entretien simulé
Avant l'entretien proprement dit, j'ai fait beaucoup de simulation. Une simulation d'entrevue peut être très utile. Un échec précoce dans un environnement de test vous donne des informations utiles. Cela vous aidera à repérer les lacunes dans votre processus de réflexion. Essayez de corriger chaque erreur et de vous améliorer avec chaque fausse interview.
"Si vous réussissez les simulations plusieurs fois, prenez cela comme un bon signe."
Libre:
- Imitation sur LeetCode .
- [Schéma peer-to-peer gratuit ] Pramp .
- [Peer-to-peer gratuit] InterviewBit .
Les entretiens simulés rémunérés sont bénéfiques. Par exemple, les commentaires post-entretien donnent beaucoup de détails sur ce que le recruteur attendait.
- [Payé] ExpertMitra .
- [Payé] Mocki .
- [Payé] Entretien technique d'essai .
5. Préparez un plan de promotion
Jusqu'à présent, nous avons beaucoup parlé des différents éléments de préparation. Essayons maintenant de tout rassembler et de créer un plan de promotion! Regardez une capture d'écran de mon calendrier un mois avant l'entrevue.
Calendrier de préparation
J'ai décomposé toute la préparation en tâches. Fixez-vous des objectifs pour chaque jour dans les semaines (et même les mois) précédant l'entretien. Cela m'a aidé à éviter le chaos et à ne pas me perdre sur le chemin du but.
- En semaine, je pouvais allouer quelques heures, car je faisais du travail de bureau. J'ai prévu la solution des problèmes pour cette fois.
- Je lis la théorie le week-end, quand je pouvais y consacrer beaucoup de temps.
- Plus près de l'entretien, j'ai prévu des imitations. Ces dernières semaines, j'ai réduit le nombre de sessions de programmation et me suis concentré sur la lecture du CTCI et du PEV.
Allocation de temps hebdomadaire
Je sais que nous sommes nombreux à avoir des responsabilités familiales et des emplois à temps plein. Pas tout et ne se déroule pas toujours comme prévu. Mais l'idée est de former une habitude. Suivez vos progrès et ce qui n'est pas terminé. Ajustez l'horaire jusqu'à ce que vous en trouviez un convenable.
B. Conception des systèmes
Cette ronde teste les compétences en conception technique. Il peut être divisé en conception de bas niveau (LLD) et conception de haut niveau (HLD). Les connaissances dans ce domaine s'accroissent avec l'expérience de l'industrie.
Essayez d'acquérir des connaissances sur des concepts tels que les systèmes distribués, l'équilibrage de charge, les protocoles réseau, le hachage cohérent, le théorème CAP, la réplication, le partitionnement, etc.
- Chaînes Youtube - Gaurav Sen et Narendra de L .
- [Payé] Grokking l'entrevue de conception de système (l'une des meilleures ressources de conception de système. Hautement recommandé).
- [Payant] Réalisation d'entretiens sur la conception orientée objet .
- [Payant] Bases de la conception du système AlgoExpert .
C. Principes du leadership. Comportement
Contrairement aux tours précédents, cette section n'est pas technique. L'entreprise espère en savoir plus sur le candidat avec ses paroles. L'entreprise peut être intéressée par:
- Personnalité du candidat.
- Projets antérieurs et expérience de travail.
- Qu'avez-vous fait dans des situations difficiles.
- Comment avez-vous réagi aux bonnes et aux mauvaises critiques?
L'essentiel est de rester transparent et d'être vous-même.
Je soulignerai la section mentionnée dans le CTCI sur le modèle SAR (situation, action, résultat). L'idée est d'identifier les discussions importantes importantes en distribuant des histoires de l'emploi précédent. Voici une carte des compétences de la communauté (également appelées compétences générales) afin que vous puissiez en savoir plus à leur sujet.
SAR
- LeetCode Codeforces. , , .
- «Shuffle» LeetCode. . .
- IDE, Google Docs, CollabEdit, .
- . , .
- , . , , . , .
Q1. Sur quels sujets des structures de données et des algorithmes devriez-vous vous concentrer? À quelles ressources avez-vous établi un lien?
Les ressources d'apprentissage mentionnées précédemment seront utiles. Je n'ai pas ajouté de ressource distincte pour chaque sujet, cela rendra le message trop volumineux.
Sujets sans ordre particulier:
listes liées, manipulations de bits, piles et files d'attente, recherche binaire, tas, algorithmes gourmands, programmation dynamique, vecteurs / ArrayList, notation Big O, temps et espace, tris, pointeurs, fenêtres TCP / IP, systèmes disjoints ensembles, opérations de chaînes, graphiques et arborescences, maintien de la stabilité du système, recherche en largeur et en profondeur d'abord, récursivité, retour arrière, hachage, arborescence de syntaxe, arbres d'élagage et arbres binaires indexés.
Q2. Quels langages de programmation avez-vous étudié?
Apprenez une langue à l'intérieur et à l'extérieur; à mon avis, cela suffit. Je préfère Java.
Q3. Comment savez-vous quelles tâches sont appropriées à pratiquer pour résoudre tous les problèmes?
Il est presque impossible de résoudre tous les problèmes. Cependant, il existe un maximum de 12 à 15 sujets dans le domaine des structures de données et des algorithmes. Essayez de mieux maîtriser chaque sujet en résolvant des problèmes thématiques. Avec de la pratique, vous serez en mesure de déterminer la structure de données et l'algorithme souhaités. Concentrez-vous sur la qualité plutôt que sur la quantité.
Q4. Ai-je une chance si je ne programme pas de concours?
Oui absolument. La programmation des compétitions dans ce contexte est facultative.
- La programmation de compétition est un sport et son éventail de tâches est plus large que la programmation de production. Des plates-formes telles que CodeChef et Codeforces sont plus enclines à ce type de programmation.
- Bien sûr, il existe des domaines où la programmation compétitive chevauche la programmation de la production et peut être utile: par exemple, elle permet d'attirer l'attention d'un recruteur sur votre profil, vos compétences en résolution de problèmes, etc.
Cependant, les cycles de codage représentent une étape très différente et ont des priorités différentes.
Q5. Comment recevoir une invitation à un entretien? Comment avez-vous postulé?
Le recruteur m'a contacté directement via LinkedIn. Je ne sais pas comment les candidats sont sélectionnés. Mais j'ai quelques suggestions.
- Pendant que vous êtes étudiant, concentrez-vous sur vos études. Participez à des concours, hackathons, travaillez sur des projets intéressants et innovants. Essayez de contribuer à un projet open source. Il existe de nombreuses façons de faire ressortir votre profil.
Surtout, profitez de votre voyage. Soyez diligent dans votre travail. Faites preuve de patience, de respect et efforcez-vous toujours d'être meilleur aujourd'hui qu'hier, et n'oubliez pas le code promotionnel spécial HABR, qui ajoutera 10% à la réduction sur la bannière. Le reste suivra.
Autres professions et cours