Salut! J’ai récemment suivi le processus de stage chez Microsoft pour le rôle de stagiaire SDE. A travers ce blog, je souhaite partager mon expérience de l’ensemble du processus d’entretien. Il s’agissait d’une opportunité sur le campus, pour laquelle j’ai postulé via le portail Microsoft Careers pour le poste correspondant (https://careers.microsoft.com/us/en/job/1081612/Software-Engineering-Intern).
Se faire rejeter d’Oracle après un entretien presque parfait a définitivement été une expérience dévastatrice. L’interview d’Oracle était importante pour moi, car j’ai passé pas mal de temps à m’y préparer. Le premier rejet est toujours difficile à gérer. Au fur et à mesure que la saison des stages/placements avance, on finit par s’y habituer. Mais le premier rejet détruit l’harmonie mentale, surtout quand on s’attend à un résultat positif. La cerise sur le gâteau était la présélection de Microsoft, qui a été publiée le même jour. Mon nom n’y était pas. C’était déchirant. J’ai bien réussi le test Microsoft et j’ai répondu aux deux questions en moins de 15 minutes. Eh bien, il s’est avéré que les questions étaient trop faciles, et presque tout le monde avait terminé le test assez rapidement.
Je fais partie de l’équipe de base du comité de placement. Pour me distraire de la réflexion excessive, j’ai pris le devoir du matin pour le processus d’entretien de Microsoft Intern.
Je me suis réveillé le lendemain matin pour faire mon devoir. Mon ami Dev m’a informé qu’une nouvelle liste nous avait été envoyée par le comité de placement pour Microsoft Intern, et heureusement mon nom était là. Je n’avais aucune attente de cette interview, car je ne pouvais toujours pas digérer qu’Oracle m’ait rejeté. Eh bien, cette attitude m’a en fait aidé à me calmer. Aujourd’hui, je n’avais pas du tout peur du rejet. J’avais l’impression d’avoir de rares chances de m’en sortir. Pourtant, je me suis promis de faire de mon mieux.
1er tour (entretien technique) : Mon premier entretien a commencé à l’heure. Comme il s’agissait d’un entretien en ligne, j’ai dû rejoindre un lien de réunion Microsoft Teams.
- L’intervieweur m’a demandé de me présenter. L’intervieweur s’est assuré que je sois à l’aise en posant quelques questions pour établir des relations. J’avais déjà passé plusieurs entretiens la veille, donc j’étais assez à l’aise. Après cela, l’intervieweur m’a posé une question de codage.
- Question 1 : Convertir un nombre donné en mots (plage 999 crores)
- La question était assez simple. Je n’ai jamais fait ce problème auparavant, mais cela me semblait assez simple. J’ai donné une approche rapide pour résoudre ce problème. J’étais assez confiant dans mon approche et j’ai vu une lueur d’espoir pour m’en sortir.
- Conseil: Eh bien, peu importe la simplicité de la question, ne soyez jamais trop confiant. Veuillez prendre le temps de réfléchir à la façon dont vous allez l’implémenter avant de commencer à coder la solution.
- Eh bien, cette question semble assez simple. Mais malheureusement, il s’avère que la mise en œuvre n’est pas si simple. Vous devez vous occuper de beaucoup de cas particuliers. Je suis devenu trop confiant et je n’ai pas pensé aux cas particuliers. Parce que je n’avais pas assez de temps pour réfléchir à l’implémentation, j’avais du mal à le coder à la volée. Cependant, j’ai terminé mon code assez rapidement.
- Maintenant est venu le temps d’exécuter le code. Cela donnait une mauvaise sortie. Je savais que j’étais proche, mais j’étais vraiment gêné de ne pas pouvoir résoudre cette simple question. Beaucoup de pensées me sont venues à l’esprit et j’ai paniqué. Ici, j’apprécierais vraiment les efforts de mon intervieweur. Il était convaincu que mon approche et mon code étaient corrects et a commencé à m’aider à déboguer le code. Après avoir passé un certain temps, il a souligné que j’avais manqué « dix-sept » dans l’un des tableaux de chaînes, qui était utilisé pour produire la réponse finale. Ainsi, il donnait une sortie inattendue. C’était une erreur stupide mais difficile à déboguer dans l’environnement avec un million de pensées qui me traversaient l’esprit.
- Mon code a finalement parfaitement fonctionné. L’enquêteur m’a dit que j’avais dépassé les délais de 10 minutes. Je m’en suis excusé. Il a apprécié mes efforts. Lorsque j’ai demandé des commentaires, il a dit qu’il fallait penser à l’implémentation avant de commencer à coder. Cela ferait gagner beaucoup de temps. J’ai réalisé mon erreur et l’ai remercié pour ses commentaires avant de partir.
Tour 2 (entretien technique) : Je ne m’attendais pas du tout à un appel pour le second tour. Cependant, il s’est avéré qu’ils appelaient tout le monde pour le deuxième tour. J’étais probablement en train de regarder un stream d’échecs quand j’ai reçu un appel pour le 2e tour. C’était une occasion parfaite de dissimuler mes erreurs du premier tour. J’avais l’impression d’avoir une 2e chance.
- Le 2e entretien a été assez retardé. L’intervalle entre deux entretiens successifs est rempli de beaucoup d’émotions. Il est facile de perdre sa concentration pendant cette période.
- Astuce : Dans l’intervalle entre deux entretiens successifs, accordez-vous du temps libre. Faites quelque chose que vous aimez et essayez de vous distraire des entretiens.
- Si vous avez confiance en vous, vous regardez quelques notes ou vous vous entraînez à poser des questions avant le prochain entretien. Sinon, essayez de vous distraire des entretiens.
- Le deuxième intervieweur a rejoint la réunion après un certain temps et s’est excusé pour le retard. Cette fois, nous n’avons pas eu le temps de nouer des relations. Il se présente et passe à la première question.
- Question 1 : Définir des zéros matriciels (https://leetcode.com/problems/set-matrix-zeroes/)
- La question était assez simple. Je connaissais la question. J’étais convaincu que je serais en mesure de résoudre cette question. Cette fois, je n’ai pas perdu mon sang-froid. J’ai commencé par l’approche naïve, puis je lui ai expliqué le problème. J’ai alors avancé vers une solution correcte, ce qui n’était pas l’approche optimale. Il était convaincu de la justesse de mon approche. Ensuite, il m’a demandé de le résoudre dans un espace constant. J’ai pris le temps d’y réfléchir. Il a donné un indice pour réutiliser l’espace. J’ai tout de suite eu l’idée, j’en étais déjà proche. Cependant, il me manquait encore une valise d’angle. L’intervieweur m’a demandé de vérifier mon approche une fois. J’ai immédiatement réalisé mon erreur et proposé une solution pour la corriger. Il était convaincu de mon idée.
- Comme j’étais déjà confiant dans mon approche, j’ai pris du temps et écrit un code soigné avec un nom de variable approprié.
- Astuce : utilisez un nom de variable approprié. Suivez strictement l’indentation. Rendez votre code aussi lisible que possible.
- Microsoft s’est beaucoup concentré sur la qualité du code. Je me suis assuré de suivre toutes les bonnes pratiques d’écriture de code. J’ai pu le coder très rapidement.
- Comme il restait suffisamment de temps, l’intervieweur m’a posé une autre question de codage. Il m’a demandé d’expliquer la démarche uniquement et de ne pas coder cette fois.
- Question 2 : Implémentez le cache LRU en utilisant des structures de données appropriées (https://krishankantsinghal.medium.com/my-first-blog-on-medium-583159139237)
- J’étais assez confiant quant à la théorie sur le fonctionnement du cache LRU. Je lui ai expliqué l’idée derrière le cache LRU. J’ai pu trouver une solution assez rapidement. Cependant, en raison d’une idée fausse, j’ai supposé que je ne pouvais pas utiliser de mémoire dynamique. J’ai donc suggéré d’utiliser une implémentation de file d’attente basée sur un tableau et une table de hachage. L’idée était correcte, mais ici je fixais la taille maximale du cache. À toutes fins utiles, la taille de la mémoire cache est fixe. Mais il voulait une solution plus flexible. Il a suggéré d’utiliser une implémentation basée sur des listes chaînées. J’ai amélioré ma solution et lui ai expliqué le fonctionnement complet de mon modèle de solution. L’intervieweur a été très impressionné. En conclusion, il m’a demandé si j’avais des doutes. J’en ai profité pour lui demander comment les équipes seraient affectées aux stagiaires. Il a répondu que nous serions répartis entre des équipes aléatoires en fonction des besoins des équipes. À la fin, je l’ai remercié et j’ai quitté la pièce.
Round 3 (Discussion sur les projets + Entretien technique) : J’ai été appelé pour le tour AA (selon le cas). C’est le tour où il est décidé d’étendre ou non une offre au candidat. Mon premier entretien a eu lieu à 10h et le dernier a commencé vers 17h. J’étais complètement épuisé.
- L’intervieweur s’est présenté comme le « chef d’équipe de la visionneuse PDF d’Edge ». L’entretien a commencé par une introduction formelle. Il m’a posé des questions sur mes loisirs. Je lui ai raconté mon parcours sportif. Ensuite, il m’a posé des questions sur mes cours préférés. Je lui ai parlé de tous les cours difficiles que j’ai suivis. Après cela a commencé la discussion sur le projet. J’étais très confiant dans mes projets. Je lui ai expliqué mon projet GSoC, Independent Project with MIDAS, et Color Switch Game project. Il a été impressionné et n’a pas posé d’autres questions sur mes projets.
- Questions 1 : Compte tenu du calendrier pour N personnes, organisez une réunion d’une durée d entre les heures de travail, disons s – t
- Le problème dans le lien ci-dessus est un problème similaire que j’ai trouvé en ligne. Je lui ai expliqué une démarche qui m’est tout de suite venue à l’esprit. Bien sûr, il voulait une meilleure façon de le faire. Il a laissé tomber quelques indices et j’ai trouvé une solution très optimisée pour ce problème. Il a signalé une erreur dans mon approche, qui doit être traitée séparément. Je n’ai pas pu l’obtenir, alors je lui ai demandé de le répéter. Il m’a expliqué à nouveau le problème, mais je n’ai pas réussi à le comprendre. Après quelques instants de silence, je lui ai dit que je ne pouvais pas comprendre ce qu’il disait.
- L’intervieweur a conclu l’entretien et m’a demandé si j’avais des questions. Je l’ai remercié et j’ai quitté la pièce.
- Je n’étais pas confiant dans ma sélection. Mais, plus tard, j’ai réalisé qu’il ne m’avait donné que 10 à 15 minutes pour résoudre ce problème. Dans d’autres entretiens, j’ai eu beaucoup plus de temps pour résoudre les problèmes de codage. Peut-être qu’il avait l’intention d’obtenir le code complet pour ce problème.
- Les résultats n’ont été annoncés que le lendemain matin. J’étais incapable de dormir. J’ai demandé à mes autres amis, qui ont comparu pour l’interview ce jour-là. Tous ont eu une réaction similaire.
- Le lendemain matin, j’avais prévu un entretien pour un stagiaire Qualcomm. J’espérais ne pas avoir à m’asseoir pour ça. J’ai envoyé un texto à ma coordonnatrice des stages pour lui dire que je devais me présenter à un entretien dès maintenant. Si elle peut me dire le résultat pour Microsoft, ce serait bénéfique pour moi. Elle a répondu par un message de félicitations ! Je n’arrivais pas à en croire mes yeux ! Au bout de quelques minutes, j’ai reçu…