Comment se préparer à un poste d’ingénieur firmware ou embarqué chez Google ? Dois-je m’attendre à des questions sur les algorithmes et la complexité Big Oh pour un poste de firmware


Je viens de terminer une série d'entretiens avec Google. Donc, ma mémoire de ce qu'ils ont réellement fait est encore fraîche 😉

Sans rien dire qui viole le NDA, je peux vous dire ceci : vous devriez vous préparer sur plusieurs sujets, même s'ils ne seront pas en mesure de vous interroger sur tous. Vous devez connaître les algorithmes de base : tri sélectif, tri par échange, quicksort, heapsort ou mergesort, utilisation de listes, de piles, de files d'attente (prioritaires), d'arbres et d'essais ; mais les graphes sont encore plus importants : depth first traversal, breadth first, Kruskal, Prim. Vous devriez certainement savoir comment faire tout cela en utilisant les bibliothèques standard de votre langage, mais plus vous pouvez faire sans bibliothèques, mieux c'est.


Ils pourraient ne pas demander explicitement l'un de ces éléments, mais ils demanderont certainement une analyse Big O qui sera facile pour vous si vous l'avez suivie sur tous les algorithmes ci-dessus. Attendez-vous à devoir le faire sur tout code que vous écrivez sur le tableau blanc comme solution à un défi de codage.

Il existe des livres sur le marché libre qui mentionnent tout cela, ainsi que d'autres choses que vous devriez savoir. "Cracking the Coding Interview" est un livre particulièrement bon écrit par quelqu'un qui faisait ces entretiens chez Google et qui suit toujours à peu près le même style à CareerCup. Même si je n'ai pas suivi toutes ses recommandations, je me suis senti beaucoup mieux préparé pour les défis qui m'ont été donnés parce que j'avais passé au moins un temps substantiel à suivre certaines de ses recommandations.

Maintenant, puisque vous avez dit que c'était un poste de firmware/embedded que vous recherchez, je m'attendrais à ce que les graphes ne soient pas aussi importants que pour de nombreux autres postes chez Google, dont beaucoup impliquent des problèmes logiciels dominés par une sorte de traversée de graphe. Mais les algorithmes de base seront toujours importants pour les microprogrammes, et l'analyse Big-O particulièrement importante.

Cependant, je m'attendrais à un changement d'orientation parmi les algorithmes : pour les microprogrammes/code intégré, les défis de bit-twiddling sont plus pertinents, alors attendez-vous à ce que les fascicules 0 et 1 du Vol 4 de "The Art of Computer Programming" de Knuth couvrent les types d'algorithmes sur lesquels vous êtes plus susceptibles d'être interrogé.

Il y a beaucoup de bons posts de Stack Overflow sur la préparation d'un entretien avec Google aussi. Même sur reddit : How to Crack the Toughest Coding Interviews, par Gayle McDowell, ex-ingénieur de Google et membre du comité d'embauche.

Enfin, voici une source étonnamment bonne sur tous les algorithmes : Dictionnaire des algorithmes et des structures de données, maintenu par le NIST, anciennement connu sous le nom de NBS.

Les algorithmes et les structures de données.