Comment se préparer à un entretien sur Google et ne pas le passer. Deux fois



Le titre de l'article sonne comme un échec épique, mais en fait, tout n'est pas si clair. Et en général, cette histoire s'est terminée très positivement, mais pas sur Google. Mais c'est un sujet pour un autre article. Dans le même article, je parlerai de trois choses: comment s'est déroulé mon processus de préparation, comment se sont déroulées les interviews sur Google, et pourquoi, à mon avis, tout n'est pas aussi clair qu'il y paraît.

Comment tout a commencé


Par une froide soirée d'hiver chypriote, j'ai soudain eu l'idée que ma connaissance de l'informatique classique est très loin d'être même moyenne, et quelque chose doit être fait avec cela. Si au fait, quelqu'un d'autre n'a pas lu pourquoi la soirée est chypriote et froide, alors vous pouvez le découvrir ici . Après réflexion, il a été décidé de commencer à suivre un cours en ligne sur les algorithmes et les structures de données. J'ai entendu un ancien collègue parler du cours de Robert Sedgewick sur Coursera. Le cours se compose de deux parties ( partie 1 et partie 2 ). Si les liens changent soudainement, vous pouvez toujours google par le nom de l'auteur. Chaque partie prend 6 semaines. Des conférences sont données au début de la semaine et des exercices sont encore nécessaires pendant la semaine. La première partie du cours couvre les structures de données de base, les principaux types de tri et la complexité des algorithmes. La deuxième partie est déjà plus avancée, commençant par des graphiques et se terminant par des choses comme la programmation linéaire et l'intractabilité. Après avoir pensé à tout ce qui précède, je suis arrivé à la conclusion que c'est exactement ce dont j'ai besoin. Ici, au fait, un lecteur curieux peut demander ce que Google a à voir avec cela. Et en effet, jusqu'à ce moment, il n'y était pour rien. Mais j’avais besoin d’un but, car c’est un peu difficile de faire 12 semaines le soir sans but. Et quel pourrait être le but d'acquérir de nouvelles connaissances? Bien sûr, leur application dans la pratique. Dans la vie de tous les jours, c'est assez problématique, mais lors d'un entretien dans une grande entreprise facilement. Un rapide google a montré que Google (excusez-moi pour la tautologie) est l'une des plus grandes entreprises d'Europe (et j'ai considéré l'Europe), dans laquelle de telles interviews sont menées. À savoir, leur bureau est à Zurich, en Suisse. C'est donc décidé - nous étudions et nous nous rendons pour une interview sur Google.

Préparation du premier run


12 semaines se sont passées inaperçues et j'ai terminé les deux cours. Mes impressions sur les cours sont plus que positives et je peux les recommander à tous ceux qui sont intéressés. J'ai aimé les cours pour les raisons suivantes:

  • Le conférencier parle un anglais assez clair
  • Le matériau est bien structuré.
  • Magnifiques présentations montrant l'intérieur de chaque algorithme
  • Sélection compétente du matériel
  • Exercices intéressants
  • Les exercices sont vérifiés automatiquement sur le site, après quoi un rapport est créé

Mon travail sur les cours s'est généralement déroulé comme suit. Pendant 1-2 jours, j'ai écouté des conférences. Passé ensuite un test rapide de connaissance du matériel. Le reste de la semaine a fait l'exercice en plusieurs itérations. Après le premier, j'ai obtenu mes 30-70%, les suivants ont porté le résultat à 97-100%. L'exercice consistait généralement à implémenter un algorithme, par exemple, Seam carving ou bzip .

Après avoir terminé le cours, j'ai réalisé que beaucoup de connaissances sont beaucoup de tristesse. Si auparavant je savais simplement que je ne savais rien, maintenant je commençais à réaliser que c'était moi qui ne le savais pas.

Comme ce n'était encore que le mois de mai et que j'avais prévu une entrevue pour l'automne, j'ai décidé de poursuivre mes études. Après avoir pris connaissance des exigences du poste vacant, il a été décidé d'aller en parallèle dans deux directions: continuer à étudier les algorithmes et suivre un cours de base sur l'apprentissage automatique. Pour le premier objectif, j'ai décidé de passer des cours à un livre et j'ai choisi l'œuvre monumentale de Steven Skiena «Algorithms. Guide de développement »(The Algorithm Design Manual). Pas aussi monumental que celui de Knut, mais quand même. Pour le deuxième objectif, je suis à nouveau allé à Coursera et je me suis inscrit au cours Andrew Ng Machine Learning .

Encore 3 mois se sont écoulés et j'ai terminé le cours et le livre.

Commençons par le livre. La lecture s'est avérée assez intéressante, mais pas facile. En principe, je recommanderais le livre, mais pas comme ça tout de suite. En général, le livre donne une analyse plus approfondie de ce que j'ai appris au cours. De plus, j'ai découvert (d'un point de vue formel) des choses comme l'heuristique et la programmation dynamique. Naturellement, je les utilisais auparavant, mais je ne savais pas comment ils s'appelaient. Le livre contient également un certain nombre d'histoires de la vie de l'auteur (War Story), qui diluent quelque peu la présentation académique. La seconde moitié du livre peut être omise d'ailleurs, il y a plutôt une description des problèmes existants et des méthodes pour les résoudre. Il est utile s'il est appliqué régulièrement dans la pratique, sinon il sera immédiatement oublié.

Le cours m'a plus que ravi. L'auteur connaît clairement son travail et raconte des histoires intéressantes. De plus, une bonne quantité, à savoir l'algèbre linéaire et les bases des réseaux de neurones, je me souviens de l'université, donc je n'ai pas rencontré de difficultés particulières. La structure du cours est assez standard. Le cours est divisé en semaines. Chaque semaine, les cours sont d'abord mélangés à de courts tests. Après les cours, la tâche est donnée, ce qui doit être fait, envoyé et il sera automatiquement vérifié. En bref, la liste des cours est la suivante:
- fonction de coût
- régression linéaire
- descente en pente
- mise à l'échelle des fonctionnalités
- équation normale
- régression logistique
- classification multiclasse (une contre toutes)
- réseaux de neurones
- rétropropagation
- régularisation
- biais / variance
- courbes d'apprentissage
- métriques d'erreur (précision, rappel, F1)
- Prise en charge des machines à vecteurs (classification à grande marge)
- K-signifie
- Analyse des principaux composants
- détection d'anomalies
- filtrage collaboratif (système recommeder)
- descentes stochastiques, mini-batch, gradient gradient
- apprentissage en ligne
- carte réduire
- analyse du plafond
Après avoir terminé le cours, une compréhension de tous ces sujets était présente. Après 2 ans, presque tout était naturellement oublié. Je le recommande à ceux qui ne sont pas familiers avec l'apprentissage automatique et qui souhaitent avoir une bonne compréhension des éléments de base pour passer à autre chose.

Première course


C'était déjà septembre et il était temps de penser à une interview. Étant donné que la soumission via le site est assez désastreuse, j'ai commencé à chercher des amis qui travaillent chez Google. Le choix s'est porté sur datacompboy , car c'était le seul que je connaissais directement (mais pas personnellement). Il a accepté de transférer mon curriculum vitae, et bientôt j'ai reçu une lettre du recruteur me proposant de réserver une place sur son calendrier pour la première conversation. Après quelques jours, l'appel a eu lieu. Nous avons essayé de communiquer via Hangouts, mais la qualité était horrible, nous avons donc changé de téléphone. Tout d'abord, ils ont rapidement discuté de la norme comment, pourquoi et pourquoi, puis sont passés au dépistage technique. Il comprenait une douzaine de questions dans l'esprit de "quelle est la complexité de l'insertion dans une carte de hachage", "quels arbres équilibrés connaissez-vous." Ce n'est pas difficile s'il y a une connaissance de base de ces choses. Le dépistage s'est bien passé et, selon les résultats, a décidé d'organiser le premier entretien en une semaine.

L'entrevue a également été réalisée via Hangouts. D'abord, ils ont parlé de moi pendant environ 5 minutes, puis ont continué le puzzle. La tâche était sur les graphiques. J'ai rapidement réalisé quoi faire, mais j'ai choisi le mauvais algorithme. Quand j'ai commencé à écrire du code, je l'ai réalisé et je suis passé à une autre option, que j'ai ajoutée. L'intervieweur a posé plusieurs questions sur la complexité de l'algorithme, a demandé s'il pouvait être plus rapide. J'ai en quelque sorte émoussé et je n'ai pas pu. À ce moment, c'est arrivé et nous avons dit au revoir. Puis, après environ 10 minutes, il m'est apparu qu'au lieu de l'algorithme Dijkstra que j'utilisais, il serait possible d'utiliser la recherche en largeur d'abord spécifiquement dans cette tâche, et ce serait plus rapide. Après un certain temps, le recruteur a appelé et a dit que l'entretien dans son ensemble s'était bien passé et qu'un autre devait être organisé. Convenu une autre semaine plus tard.

Les choses ont empiré cette fois. Si pour la première fois l'intervieweur était amical et sociable, cette fois c'est plutôt sombre. Je ne pouvais pas immédiatement comprendre le problème, bien que les idées que j'ai données, en principe, puissent conduire à sa solution. En conséquence, après quelques conseils de l'intervieweur, j'ai pris une décision. Cette fois-ci, il s'est avéré être une recherche en premier lieu, avec seulement quelques points. J'ai écrit les décisions, dans le délai imparti, mais j'ai oublié les cas limites. Après un certain temps, le recruteur a appelé et a déclaré que cette fois l'intervieweur n'était pas satisfait, car à son avis j'avais besoin de trop d'indices (3 ou 4 pièces) et je changeais constamment le code pendant l'écriture. Sur la base des résultats de deux entretiens, il a été décidé de ne pas aller plus loin, mais de reporter le prochain entretien d'un an, si j'ai un tel désir. Pour sim et dit au revoir.

Et j'ai fait plusieurs conclusions sur cette histoire:

  • La théorie est bonne, mais vous devez la naviguer rapidement
  • Une théorie sans pratique n'aidera pas. Il est nécessaire de résoudre des problèmes et d'amener l'écriture de code à l'automatisme.
  • Cela dépend beaucoup de l'intervieweur. Et il n'y a rien à faire.

Préparation à la deuxième approche


Après avoir réfléchi à la situation, j'ai décidé de réessayer dans un an. Et légèrement modifié la cible. Si auparavant, l'objectif principal était d'étudier, et l'interview sur Google était comme une carotte lointaine, maintenant passer l'interview était le but, et étudier était un moyen.
Ainsi, un nouveau plan a été élaboré, qui comprenait les éléments suivants:

  • Continuez à étudier la théorie en lisant des livres et des articles.
  • Résolvez des problèmes algorithmiques de 500 à 1 000 pièces.
  • Continuez à étudier la théorie en regardant une vidéo.
  • Continuez à étudier la théorie à travers des cours.
  • Découvrez l'expérience des autres personnes interrogeant Google.

Le plan a été achevé par moi en un an. Ensuite, je vais décrire ce que j'ai fait exactement pour chacun des points.

Livres et articles


Je ne me souviens même pas du nombre d'articles que j'ai lus, je les ai lus en russe et en anglais. Celui-ci s'est probablement avéré être le site le plus utile. Voici une description d'un grand nombre d'algorithmes intéressants avec des exemples de code.

J'ai lu 5 livres: Algorithms, 4th edition (Sedgewick, Wayne), Introduction to Algorithms 3rd Edition (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4th edition (Gayle Laakmann), Programming Interviews Exposed 2nd edition (Mongan, Suojanen , Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Ils peuvent être divisés en 2 catégories. Le premier livre comprend Sedgwick et Cormen. Ceci est une théorie. Le reste est la préparation de l'entretien. Sedgwick dans le livre raconte la même chose que dans ses cours. Juste par écrit. Il est peu logique de lire attentivement si vous avez suivi le cours, mais vous devez quand même le négliger. Si vous n'avez pas regardé le cours, il est logique de lire. Korman me semblait trop ennuyeux. Il maîtrisait honnêtement avec difficulté. Il n'a retiré que le théorème maître , et certaines structures de données rarement utilisées (tas de Fibonacci, arbre van Emde Boas, tas de radix).

Un livre pour se préparer à une entrevue mérite d'être lu au moins un. Ils sont tous construits à peu près sur le même principe. Ils décrivent le processus d'entrevue dans les grandes entreprises technologiques, donnent des éléments de base de l'informatique, des tâches pour ces éléments de base, résolvent des problèmes et analysent des solutions. Des trois, je recommanderais probablement Cracking the Coding Interview comme principal, et le reste comme vous le souhaitez.

Tâches algorithmiques


C'était probablement le point d'entraînement le plus intéressant. Vous pouvez bien sûr vous asseoir et résoudre stupidement des problèmes. Il existe de nombreux sites différents pour cela. J'en ai principalement utilisé trois: Hackerrank , CodeChef et LeetCode . Chez CodeChef, les tâches sont réparties par complexité, mais pas par sujet. Sur Hackerrank, à la fois en complexité et en sujet.

Mais comme je l'ai tout de suite découvert par moi-même, il existe un moyen plus intéressant. Et ce sont des compétitions (défis de programmation ou concours de programmation). Les trois sites les fournissent. Certes, il y a un problème avec LeetCode - un fuseau horaire inconfortable. Par conséquent, je n'ai pas participé sur ce site. Hackerrank et CodeChef proposent un assez grand nombre de compétitions différentes, d'une durée de 1 heure à 10 jours. Différents formats ont des règles différentes, eh bien, oui, cela peut être discuté pendant longtemps. La raison principale pour laquelle la concurrence est bonne est l'introduction d'un élément compétitif (et encore une fois tautologique) dans le processus d'apprentissage.

Au total, j'ai participé à 37 compétitions au Hackerrank. De ce nombre, 32 ont été notés et 5 ont été parrainés (j'ai même reçu 25 $ dans l'un d'eux) ou par des fans. Dans le classement, je suis entré 10% dans le top 4, 11 fois le top 12% et 5 fois le top 25%. Les meilleurs résultats ont été 27/1459 en 3 heures et 22/9721 en hebdomadaire.

Je suis passé à CodeChef lorsque les compétitions étaient moins fréquentes à Hackerrank. Au total, j'ai réussi à participer à 5 compétitions. Le meilleur résultat a été 426/5019 dans une compétition de dix jours.

Au total, lors des compétitions et juste comme ça, j'ai résolu un peu plus de 1000 problèmes, qui s'inscrivent dans le plan. Maintenant, malheureusement, il n'y a pas de temps libre pour poursuivre l'activité concurrentielle, ni d'objectif auquel nous pouvons attribuer du temps non libre. Mais c'était amusant. Je recommande à ceux qui souhaitent trouver des personnes partageant les mêmes idées. Ensemble ou en groupe est beaucoup plus intéressant. Je me suis amusé avec cet ami, alors ça s'est peut-être si bien passé.

Regardez la vidéo


Après avoir lu le livre de Skien, en principe, je me suis intéressé à ce qu'il faisait. Comme Sedgwick, il est professeur à l'université. À cet égard, dans le réseau, vous pouvez trouver des vidéos de ses cours. J'ai décidé de suivre un cours COMP300E - Défis de programmation - 2009 HKUST . Je ne dirai pas que j'ai vraiment aimé ça. Premièrement, la qualité vidéo n'est pas très bonne. Deuxièmement, je n'ai pas essayé de résoudre moi-même les problèmes traités dans le cours. L'implication n'était donc pas très élevée.
Aussi, dans le processus de résolution de problèmes, en essayant de trouver le bon algorithme, je suis tombé sur une vidéo de Tushar Roy. Il a travaillé chez Amazon et travaille maintenant chez Apple. Comme je l'ai découvert plus tard par moi-même, il a une chaîne YouTube où il publie des analyses de divers algorithmes. Au moment de la rédaction, la chaîne contient 103 vidéos. Et je dois dire que l'analyse dans son exécution est très bien faite. J'ai essayé de regarder d'autres auteurs, mais ça n'a pas fonctionné. Je recommande donc définitivement cette chaîne pour la visualisation.

Cours de réussite


Ensuite, je n'ai rien fait de spécial. J'ai regardé une vidéo du développeur Android Nanodegree de Google et suivi un cours de l'ITMO How to Win Coding Competitions: Secrets of Champions . Nanodegree est complètement imaginé, même si je n'ai naturellement rien appris de nouveau à partir de là. Le cours de l'ITMO en termes de théorie est un peu froissé, mais les tâches étaient intéressantes. Je ne recommanderais pas de commencer par cela, mais en principe, le temps a été consacré à cela pour une bonne raison.

Explorez les expériences des autres


Bien sûr, de nombreuses personnes ont essayé d'accéder à Google. Quelqu'un a frappé, quelqu'un non. Certains ont écrit des articles à ce sujet. Parmi les choses intéressantes, je mentionnerai probablement celui-ci et celui-ci . Dans le premier cas, une personne a préparé pour elle-même une liste de ce qu'elle doit apprendre pour devenir ingénieur logiciel et accéder à Google. Il s'est retrouvé en Amazonie, mais ce n'est pas si important. Le deuxième manuel a été rédigé par une ingénieure de Google, Larisa Agarkova ( Larrr ). En plus de ce document, vous pouvez également lire son blog .

Il est logique de lire les commentaires sur les entretiens sur Glassdoor. Ils sont tous plus ou moins similaires, mais certaines informations utiles peuvent être trouvées.

Je ne fournirai pas de liens vers d'autres petits articles, vous pouvez vous-même les trouver très bien dans Google.

Deuxième manche


Et maintenant, l'année est passée. Il s'est avéré très saturé en termes d'études. Mais à la nouvelle chute, j'ai trouvé des connaissances théoriques et des compétences pratiques beaucoup plus approfondies. Il me restait encore quelques semaines avant la date limite fixée pour l'année , lorsqu'une lettre d'un recruteur de Google est tombée dans l'e-mail me demandant si j'avais toujours envie de travailler pour Google et si je devais lui parler. Naturellement, je n'étais pas opposé. J'ai accepté de téléphoner dans une semaine. On m'a également demandé un curriculum vitae mis à jour, auquel j'ai ajouté une brève description de ce que j'ai fait pendant l'année au travail et en principe.

Après avoir parlé pour la vie, ils ont décidé que dans une semaine, il y aurait une interview Hangouts, tout comme l'année dernière. Une semaine s'est écoulée, le moment est venu pour une entrevue, mais l'intervieweur ne s'est pas présenté. 10 minutes se sont écoulées, je commençais déjà à devenir nerveux, quand soudain quelqu'un a fait irruption dans le chat. Comme il s'est avéré un peu plus tard, mon intervieweur n'a pas pu apparaître pour une raison quelconque et il a été trouvé d'urgence un remplaçant. L'homme n'était pas du tout préparé en termes de configuration de l'ordinateur et de conduite des entretiens. Mais alors tout s'est bien passé. J'ai rapidement résolu le problème, décrit où il y a des astuces, comment les contourner. Nous avons discuté de plusieurs options différentes pour le problème, la complexité de l'algorithme. Puis ils ont parlé pendant encore 5 minutes, l'ingénieur a raconté ses impressions sur son travail à Munich (ils n'ont pas vu de remplaçant urgent à Zurich), et ils se sont séparés.

Le même jour, un recruteur m'a contacté et m'a dit que l'entretien était excellent et qu'ils sont prêts à m'inviter pour un entretien au bureau. Le lendemain, ils ont appelé via Hangouts et ont discuté des détails. Comme j'avais besoin de faire un visa, nous avons décidé de planifier un entretien dans un mois.

En préparant les documents, en cours de route, j'ai discuté avec le recruteur de la prochaine entrevue. Un entretien Google standard comprend 4 algorithmes et un système. Mais, depuis que j'ai obtenu un emploi en tant que développeur Android, on m'a dit qu'une partie de l'interview sera consacrée aux spécificités d'Android. Quelles sont exactement et quelles seront les spécificités du recruteur que je n'ai pas pu secouer. Si je comprends bien, il a été introduit relativement récemment et lui-même n'était pas très à jour. J'ai également été inscrit à deux sessions de formation: comment passer une interview algorithmique et comment passer une interview System Design. Les séances étaient d'une utilité moyenne. Là aussi, personne ne pouvait me dire ce que les développeurs Android demandent. Par conséquent, ma préparation ce mois-ci se résumait à ce qui suit:

  • L'achat d'un tableau blanc et l'écriture de mémoire de 2 à 3 dizaines d'algorithmes les plus populaires. 3-5 pièces chaque jour. Total a été écrit plusieurs fois.
  • Actualisation de diverses informations Android que je n'utilise pas tous les jours
  • Regarder quelques vidéos sur Big Scale et tout ça

Comme je l'ai dit, en parallèle je faisais des documents pour le voyage. Pour commencer, on m'a demandé des données pour faire une lettre d'invitation. Ensuite, j'ai longtemps cherché à savoir qui, à Chypre, faisait des visas pour la Suisse, car l'ambassade de Suisse ne le faisait pas. Il s'est avéré que c'est le consulat d'Autriche. J'ai appelé et pris rendez-vous. Ils ont demandé un paquet de documents, mais rien de particulièrement intéressant. Une photo, un passeport, un permis de séjour, un tas de certificats différents et bien sûr une lettre d'invitation. La lettre, quant à elle, n'est pas venue. En conséquence, j'ai opté pour l'impression habituelle et cela a vraiment fonctionné. 3, FedEx . FedEx'e , , , (5 , ). , , . , . , . , , .

, . . — . . , , . ( ) Google. Google . . - , «» Google. . - , , . 3 , 2 .


Android. . , . , . UI . , . RxJava, , . , , Android . . , Activity, . . 30-50 , Android , «, , ». - 3 . C'est-à-dire - , .


. . , (shadow interviewer). . . , . - . - , , .


System Design, Android. . , , . , . Job Scheduler . , , , . . , , . . . , . Android . .


, . Google . , . . , , , .


- . , , ( ) . . , . , 5-10 . .


Android . , ?
. . , , . . « », « », « Z». - , , , , . , . . .

, . , , , . . . Google . , . , . .

, . , «a bit below the bar». . , 2 , 2 , System Design . 3 , , . .

, , , . Google .

Conclusion


. , Google. C'est triste. , . , .

  • , .
  • , .
  • . ?
  • IT .

, , . . ( ), 8 . Mais c'est une histoire complètement différente. , , Google , , 2 .

. IT, Google (Amazon, Microsoft, Apple ..). , - . , , . , , ( ) , , . , , . :)

Source: https://habr.com/ru/post/fr419945/


All Articles