Je passe surtout des entretiens téléphoniques chez Google ces jours-ci, car mon laboratoire est suffisamment éloigné du campus principal pour que ce soit trop compliqué d'y aller en voiture pour les entretiens sur place. Voici les choses que la plupart des candidats pourraient mieux faire :
- Pratiquer des problèmes algorithmiques. La plupart des personnes que j'interroge ne savent essentiellement qu'écrire des for-loops et appeler des API. Google n'a pas besoin de personnes qui ne font qu'écrire des for-loops et appeler des API. Il veut des personnes capables de résoudre des problèmes réels, et non de pondre du code standard. Lorsque j'ai passé mon entretien chez Google, j'ai passé un mois à résoudre les problèmes du livre de Gayle Laakmann, Cracking the Coding Interview. Et puis mon entretien chez Google a été amusant et facile.
- Apprenez les idiomes de votre langage choisi. Quand je vois quelqu'un écrire du C++ ou du Python comme s'il s'agissait de simple C ou de pseudo code, je pense que c'est quelqu'un qui n'a pas passé assez de temps à programmer pour vraiment connaître le langage et son fonctionnement.
- Réfléchissez vraiment à la façon dont votre algorithme garde la trace de l'endroit où il se trouve dans le problème. Souvent, vous n'avez besoin que d'un int ou d'une liste pour vous souvenir de ce que vous avez accompli jusqu'à présent. Mais beaucoup de gens ne comprennent pas ce qu'ils font et utilisent la récursion ou des threads multiples. Ou ils s'embrouillent en essayant d'itérer sur deux structures de données en même temps, parce qu'ils veulent stocker leur contexte dans une variable de boucle au lieu d'un itérateur.
- Posez des questions pour vous assurer que vous et l'interviewer êtes sur la même page. Il est tout à fait normal de poser des questions de clarification.
- J'aime vraiment quand le candidat s'intéresse au problème sur lequel nous travaillons, comme un puzzle, et parle des difficultés ou mentionne quelque chose de similaire sur lequel il a travaillé. Cela montre que vous êtes passionné par ce travail. Je déteste vraiment l'attitude selon laquelle ce n'est qu'un test aléatoire stupide qu'ils doivent effectuer pour obtenir un emploi.
- Pratiquez plus de problèmes algorithmiques ! Ce n'est pas pour voir si vous avez mémorisé des futilités stupides, comme la mise en œuvre de l'arbre rouge-noir. Il s'agit de développer votre compétence à reconnaître la structure sous-jacente du problème et à utiliser les outils que vous connaissez déjà pour le résoudre.
- Comprendre la complexité temporelle et spatiale. Des trucs de notation Big-O. Google travaille à une échelle massive. La différence entre une solution O(NlogN) et une solution O(N^2) peut représenter des millions de dollars, lorsque vous parlez de pétaoctets de données.
- Détendez-vous et amusez-vous. L'entretien n'est vraiment pas si difficile. Traitez-le comme si vous travailliez déjà chez Google et que vous essayiez de résoudre un puzzle avec votre ami.
Voici la question que j'ai reçue sur l'écran de mon téléphone : Vous avez un escalier avec N marches, et vous pouvez prendre n'importe quel mélange de marches simples et doubles pour atteindre le sommet. De combien de façons différentes pouvez-vous monter l'escalier ? [C'est une question interdite maintenant.]
S'il y a quatre marches dans l'escalier, vous pouvez faire 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2.
C'est un puzzle vraiment amusant. Il y a de nombreuses façons différentes de le résoudre. Il y a des solutions récursives. Il y a des solutions combinatoires. Il y a des solutions algébriques. Il y a O(2^N) solutions. Il y a O(N^2) solutions. Il y a O(N) solutions. Je connais même une solution O(logN) et une solution O(1).
J'ai vécu une expérience vraiment amusante et rapide avec l'écran de mon téléphone. Nous avons plaisanté et parlé de la raison pour laquelle le problème était compliqué. Après avoir été embauché, j'ai même parlé à mon intervieweur quelques fois de plus au sujet de nouvelles solutions que j'avais trouvées.
La question est de savoir si le problème a été résolu de façon satisfaisante.