[PYTHON] Mesures des entretiens de codage détenus par des étrangers à l'ère du leetcode

Laissez une note sur les mesures d'entretien des ingénieurs logiciels pour des entreprises telles que GAFAM et FAANG, ou des tendances similaires (probablement Idead et PFN à Tokyo).

Entretien de codage et letcode

Les entreprises informatiques étrangères attachent une grande importance au codage des entretiens lors de l'embauche d'ingénieurs logiciels. Il s'agit plus d'une question de concours de programmation plus simple que de codage d'entreprise, et il semble courant pour les étudiants et ingénieurs américains de prendre quelques mois de mesures proactives lorsqu'ils se tournent vers une entreprise informatique. Pour le processus d'entretien général, consultez le livre Book to Train Your Programming Ability to Fight in the World, mais c'est généralement avant de recevoir une offre en tant qu'ingénieur logiciel. , Il faudra environ 3 à 5 séances pour une entrevue de codage d'environ 45 à 60 minutes.

Au cours des dernières années, un ancien site d'interview de codage appelé leetcode.com est devenu largement utilisé par les candidats. Selon une histoire que j'ai entendue d'étudiants de l'Université Columbia vers 2018, presque tous les étudiants en informatique ont des comptes et la moitié sont facturés. Au moment de l'entretien, il est normal de faire promettre au candidat de ne pas divulguer le problème qui s'est posé, mais leetcode est moralement gris car il recueille le problème qui semble avoir été effectivement soulevé dans une grande entreprise et a une activité de facturation. .. Puisque le problème de la fuite devient difficile à utiliser, il semble qu'il y ait une prétention de "déformer le problème -> une fuite", et l'interview de codage elle-même semble être devenue un peu difficile ces dernières années.

Malgré ces préoccupations, la préparation des entretiens à l'aide de letcode est très utile pour les ingénieurs qui ne sont pas des démons informatiques professionnels ou des programmeurs de génie. Parmi les compétences requises pour les entretiens, il y a des aspects qui sont difficiles à former même si vous le laissez coder sans discernement, donc je pense que vous pouvez procéder à l'entretien avantageusement en vous préparant dans cet esprit.

Ci-dessous, nous discuterons du type de préparation à effectuer en calculant à partir de l'intention de l'embauche.

L'intention du recruteur

Les entretiens de codage ressemblent formellement à un procon, mais ils ne sont pas un «test» qui ne concourt que pour la bonne réponse à la question. Les enquêteurs tentent de déterminer si le candidat peut travailler avec eux en tant qu'ingénieur, principalement pour voir si le candidat possède les capacités suivantes:

  1. Capacité à produire des résultats par soi-même ―― 1a. Comprendre la logique complexe et le code avec précision et assez rapidement ―― 1b. Connaître en détail la nature des principaux algorithmes et structures de données et faire le meilleur choix lors de la mise en œuvre ―― 1c. Conception logicielle appropriée

  2. Capacité à bien se développer au sein de l'organisation ―― 2a. Vous pouvez écrire un code facile à lire et à maintenir. ―― 2b. L'échange d'informations bidirectionnel peut être effectué avec précision et à une vitesse suffisante. ―― 2c. Adoptez une attitude positive et solidaire et consultez les autres pour trouver de meilleures solutions

Sur cette base, nous décrirons des mesures spécifiques.

Pré-formation avec leetcode

Le code de facturation déverrouille certaines fonctionnalités supplémentaires. En particulier, la fréquence des questions par secteur et par entreprise est élevée, et il est avantageux de facturer si vous passez du temps à vous préparer à l'entretien (chaque personne prend une décision morale de payer le leetcode).

Les problèmes classiques à haute fréquence ont tendance à être évités par les questionneurs, mais il est préférable de les résoudre par ordre de fréquence car il y a de fortes chances que des problèmes similaires apparaissent et beaucoup d'entre eux valent la peine d'être appris avec de bonnes questions. Si l'entreprise réceptrice est choisie, il est préférable de procéder à la fois à l'ordre de fréquence de l'entreprise et à l'ordre de fréquence global (les deux se chevauchent dans une certaine mesure). Si le temps le permet, il semble préférable de poser environ 200 questions lors de la réception d'une grande entreprise.

Un entretien dure environ 45 à 60 minutes et 2 questions (facile ou moyen) + (moyen ou difficile) sont standard. Puisque nous aurons une discussion après avoir résolu le problème, il semble que le temps qui peut être utilisé pour résoudre réellement le problème soit de 15 à 20 minutes pour le moyen et d'environ 30 minutes pour le difficile. La vitesse de résolution des problèmes est importante, alors essayez de vous habituer à écrire rapidement du code d'algorithme.

Certains problèmes difficiles sont assez difficiles à résoudre pour les gens ordinaires à première vue (https://leetcode.com/problems/cat-and-mouse/). L'idée dépend de l'enquêteur, mais lorsqu'un problème extrêmement difficile survient, il semble qu'il essaie de voir la capacité de discuter sur la prémisse des indices (2b, 2c) plutôt que sur la netteté de la tête (1a) qui résout sans aucun indice. Ainsi, lors de la pratique, vous n'avez pas à penser longtemps à des problèmes insolubles, et si vous ne pouvez pas les résoudre en une heure au plus, vous devriez regarder les explications et les codes des autres.

Même si vous pouvez le résoudre, vous devriez toujours regarder l'explication et le code des autres. Dans l'entretien, après avoir résolu le problème, la quantité de calcul spatial et le temps de calcul sont demandés, et le compromis avec les solutions alternatives possibles est discuté (1b), il est donc utile de toucher à plusieurs solutions. Le code des autres est souvent utile pour une écriture compacte et efficace.

Contrairement à la fonction de jugement en ligne de letcode, vous ne pouvez pas exécuter de code dans une interview, donc une fois que vous écrivez le code, prenez l'habitude d'exécuter le cas de test à la main tout en prenant des notes de la valeur de la variable et en déboguant sans utiliser d'ordinateur. Quand je remarque moi-même le cas de pointe, l'impression à l'entrevue est très bonne.

De nombreux intervieweurs disent que "la grammaire fine n'a pas d'importance", mais il vaut mieux être capable d'écrire un code précis sans stagnation. Puisque l'intervieweur est aussi un être humain, il peut être influencé sans le savoir par des impressions autres que les points qu'il entend évaluer. Tout d'abord, de la pratique facile pour devenir Accepté d'un seul coup après avoir écrit le code. Par conséquent, il est préférable de se souvenir le plus précisément possible de la grammaire de la langue que vous utilisez et de la bibliothèque standard liée aux algorithmes (décrite plus loin).

Puisque vous devez écrire du code facile à lire dans l'interview (2a), résolvez le problème tout en sachant que la logique commune est généralement difficile à faire fonctionner et que l'imbrication de for et if n'est pas trop profonde.

Afin de garder la solution à l'esprit, il est préférable de résoudre le problème non résolu à plusieurs reprises à des intervalles de 1 à 3 mois. Je pense que cela dépend de la personne, mais même si vous vous concentrez dessus pendant 2-3 mois (I), vos compétences ne s'amélioreront pas soudainement, il est donc recommandé de pratiquer petit à petit sur une longue période de temps.

Pré-formation autre que le code leet

Langage de programmation

Python est recommandé comme langage utilisé pour le codage des interviews. C'est avantageux car la quantité de frappe est faible, les algorithmes fréquemment utilisés sont presque complets dans la bibliothèque standard et l'intervieweur peut souvent la lire. En fait, la grande majorité des candidats utilisent Python. Si vous êtes familier avec d'autres langages, c'est très bien, mais les langages avec des bibliothèques standard algorithmiques faibles et les langages avec un grand nombre de types (C ++ / Java) sont un peu désavantageux.

Familiarisez-vous avec la bibliothèque standard de grammaire et d'algorithmes pour votre langue afin de pouvoir écrire un code précis et idiomatique. Pour Python, rappelez-vous defaultdict, OrderedDict, Counter, deque, bisect, heap, map / Reduce, notation de compréhension, expression lambda (utile pour écrire des clés de tri), avec notation, etc. aussi fermement que possible. .. Gardez à l'esprit que la lecture et l'écriture de fichiers, la concurrence (threading et verrouillage) et la génération de nombres aléatoires, qui sont rarement écrits sur l'interface avec leetcode, peuvent être soudainement demandées pendant l'entretien. Si vous pouvez vous le permettre, vous pouvez écrire le code de manière concise en vous rappelant que les outils s'accumulent, enchaînent, produit, permutations, combinaisons, etc.

algorithme

Apprenez l'algorithme de base et sa quantité de calcul. Le premier volume du manuel Algorithm Design Manual est recommandé (le deuxième volume est inutile car il s'agit d'une encyclopédie d'algorithmes avancés).

Algorithmes de base que vous devriez pouvoir implémenter à partir de zéro et expliquer la quantité de calcul:

Les algorithmes récursifs tels que la recherche binaire, le tri rapide, DFS / BFS, etc. feront des erreurs dès que vous les écrivez, ce qui entraînera une boucle infinie, alors répétez-vous et habituez-vous à cela. La question de savoir si la récurrence peut être écrite correctement est importante comme point de contrôle pour les compétences de codage.

Un algorithme qui n'a pas à être implémenté tout de suite, mais qui devrait être capable de décrire et de répondre à la quantité de calcul:

Entretien de conception de système

Dans les grandes entreprises, un cadre a généralement un entretien de conception de système. Plus le niveau de travail est élevé, plus le système et le paramètre de tâche abstraite sont volumineux, ainsi que la capacité de découvrir les problèmes et la capacité de conception sont nécessaires.

Les entretiens de conception de système ne sont pas aussi systématiques que les entretiens de codage, et il est plus difficile de prendre des mesures proactives car il est subjectif que l'enquêteur décide de ce qui est bon ou mauvais. Il est conseillé de simuler à l'avance les problèmes que l'on peut attendre de votre parcours professionnel et du poste pour lequel vous postulez. Ce matériel est payé par le milieu mais très utile: https://www.educative.io/courses/grokking-the-system-design-interview

Autres bases de CS

Si vous n'êtes pas du domaine de l'informatique, il est préférable d'avoir le plus de formation possible. C'est mauvais si vous ne connaissez pas du tout les bases, mais il y a beaucoup d'ingénieurs qui ne sont pas de CS, donc vous ne devez pas abandonner.

Si vous voulez faire appel au contenu de développement, il vaut mieux dire honnêtement que vous ne savez pas si vous ne le connaissez pas car cela peut être contre-productif si vous parlez avec une lame de cuisson (2b / 2c).

Obligatoire

nice to have

--L'architecture des ordinateurs

Anglais

En général, le niveau requis n'est pas élevé. Une communication de base suffit, mais si vous ne comprenez pas du tout ce que vous dites, vous êtes plus susceptible de tomber.

Si vous regardez votre contenu préféré avec des sous-titres anglais sur netflix pendant environ 200 heures, vous pourrez parler de l'atmosphère.

Préparation de dernière minute

Vérifiez autant que possible l'environnement de description au moment de l'entretien. Si un tableau blanc, un éditeur ou une machine à taper est loué pour une entrevue sur place, la disposition du clavier est-elle familière?

Si la production est un codage de tableau blanc, assurez-vous de vous entraîner à écrire du code sur le tableau blanc. Même si vous pouvez utiliser l'éditeur, entraînez-vous sans la fonction d'indentation automatique dans letcode.

Production d'entrevues

Entretien de codage

Notez que si vous commencez à écrire du code en silence pour un problème, même si la solution est correcte, vous perdrez beaucoup de points. Gardez à l'esprit que la raison pour laquelle les gens interrogent plutôt que les juges en ligne est une communication large (2a, 2b, 2c).

Posez d'abord des questions sur le calendrier et le nombre de questions que vous comptez poser, et gérez le temps vous-même autant que possible.

Les problèmes sont souvent délibérément ambigus, alors quand vous entendez un problème, posez quelques questions pour vérifier les spécifications. Questions fréquemment posées telles que les formats d'entrée / sortie, les hypothèses de taille des données, les hypothèses de plage de valeurs, les cas extrêmes (conteneurs vides, division zéro, auto-boucle de graphe, etc.), les possibilités de solutions multiples, etc. Notez que dans leetcode, toutes les conditions accessoires sont écrites dans le texte de la question, mais vous devez vous poser la question lors de l'entretien proprement dit. Même si vous ignorez la possibilité d'un dépassement numérique à la fin et que vous le codez, il est bon de le mentionner une fois.

Lorsque vous réfléchissez à une approche, dites autant que possible vos pensées à voix haute. Si l'entretien se déroule en anglais et que le candidat n'est pas familier avec l'anglais, ce sera assez difficile, mais s'il est strict, pratiquez un peu à l'avance. Utilisez autant que possible dans un environnement où un tableau blanc peut être utilisé. L'entretien n'est pas un test d'anglais, donc tous les moyens peuvent être utilisés tant que vous pouvez communiquer. Pour les entretiens téléphoniques en visioconférence, il est judicieux d'avoir une feuille de papier vierge et un stylo épais et de l'écrire sur une grande feuille de papier pour l'explication.

Si vous restez coincé dans vos pensées, dites-leur comment vous êtes resté coincé et parlez à l'intervieweur. Surtout lorsque le problème est difficile, il est fort probable qu'il soit nécessaire de trouver une solution tout en consultant plutôt que de la résoudre sans aucun indice. C'est une mauvaise impression de lancer le tout à l'intervieweur comme «donne-moi un indice», mais le style de consultation comme «que pensez-vous de xx?» Et des questions spécifiques peuvent être plutôt positives. Si vous avez des connaissances dont vous ne vous souvenez pas, il vaut mieux poser une question rapide que de se taire.

Expliquez brièvement (de préférence plusieurs) les approches que vous pouvez adopter avant de commencer à écrire du code et expliquez le compromis entre l'effort de calcul et la complexité de la mise en œuvre. Vérifiez auprès de l'intervieweur avant de commencer à écrire sur l'approche que vous avez choisie.

Notez que le code est facile à lire. Il est normal de supposer des fonctionnalités qui ne sont pas dans la bibliothèque standard, mais assurez-vous de communiquer leurs spécifications.

Après l'écriture, testez manuellement à l'aide d'un exemple. À ce stade, un indice peut être obtenu à partir de la réaction de l'intervieweur. Même si l'enquêteur est conscient du bogue, il ne veut pas le signaler directement, car cela élimine la possibilité que le candidat le remarque et le corrige. Il peut y avoir une erreur dans le code lorsqu'il y a un silence subtil ou lorsque vous êtes invité à «tester» ou «expliquer le comportement».

Entretien comportemental

Les grandes entreprises peuvent poser des questions sur le leadership et les relations interpersonnelles, en citant des expériences passées et des situations virtuelles. Même si elle obtient une très bonne évaluation technique, il faut noter qu'elle tombe fondamentalement lorsqu'elle est considérée comme un drapeau rouge en termes de comportement.

Le côté recruteur pense essentiellement: "Je veux quelqu'un qui puisse porter des jugements de valeur corrects, agir volontairement et prendre un leadership actif, mais je ne veux pas de personnes qui perturbent le travail d'équipe ou découragent les autres." Il y a. En fonction de la culture d'entreprise, les personnes agressives vis-à-vis de leur environnement se méfient fortement des capitaux étrangers (brillant jerks) Par conséquent, dans l'entrevue, équilibrez l'attrait du leadership et l'attrait de la coopération.

Lorsqu'on vous pose des questions sur vos motivations pour changer d'emploi, vous devez éviter de dire du mal à propos de votre emploi précédent et donner des raisons positives. Il est dangereux d'être considéré comme une personne qui blâme l'environnement pour la cause de l'échec. Veuillez noter que ce domaine est le même que celui des entreprises japonaises même à capitaux étrangers.

Addenda

Dans l'entretien, des éléments de chance tels que la compatibilité avec l'intervieweur (interview anti-loop) sont inévitables. .. Il y a toujours des choses qui semblent déraisonnables, et c'est très douloureux de se préparer beaucoup et de tomber, mais échouer n'est pas nécessairement dû à un manque de capacité.

Si vous n'avez pas d'expérience d'entretiens avec des entreprises similaires, il vaut mieux éviter de recevoir le premier choix en premier et acquérir de l'expérience en accueillant autant d'entreprises que possible.

Recommended Posts

Mesures des entretiens de codage détenus par des étrangers à l'ère du leetcode
Technologie de gestion des mots de passe à l'ère GitHub