Traductions:
C'est un plan d'études de plusieurs mois pour aller d'un développeur web (Autodidacte, sans diplôme en informatique) à ingénieur logiciel google.
Cette longue liste a été extraite et étendue de Google's coaching notes, ce sont donc des choses que vous devez savoir. En bas, j'ai rajouté des unités supplémentaires qui peuvent être soulevées pendant l'entretien, ou qui peuvent être utiles pour résoudre des problèmes. Plusieurs unités proviennent de "Get that job at Google" par Steve Yegge, et sont parfois reflétées mot pour mot dans les notes de coaching de google.
J'ai épuré ce que vous devez savoir de ce qui est recommandé par Yegge. J'ai modifié les prérequis de Yegge. D'après les informations reçues de la part des contacts travaillant à Google. Ceci est destiné aux new software engineers ou aux développeurs logiciel/web qui souhaitent devenir des ingénieurs en génie logiciel (où la science de l'informatique est requise). Si vous avez plusieurs années d'expérience et vous déclarez plusieurs années d'expérience en génie logiciel attendez vous à un entretien plus dur. Read more here.
Si vous avez plusieurs années d'expérience en développement web/logiciel, notez que google font une distinction entre le développement logiciel et l'ingénierie en génie civil.
---------------- Everything below this point is optional ----------------
Je suis ce plan pour préparer mon entretien chez Google. J'ai construit le web, construit des services, et lancé des startups depuis 1997. J'ai un diplôme en économie, non pas d'informatique. J'ai eu beaucoup de succès dans ma carrière , mais je veux travailler chez Google. Je veux progresser sur de larges systèmes, et avec une réelle compréhension des systèmes informatiques, de l'efficacité algorithmique, de la performance des structures de données, de langages bas-niveau, et de comment ça marche. Et si vous ne connaissez rien de tout cela, Google ne vous engagera pas.
Quand j'ai commencé ce projet, je ne savais pas distinguer une pile d'un tas, ne connaissais rien sur le Grand O, rien sur les arbres, ou comment traverser un graphe. Si je devais coder un algorithme, je peux vous dire que ça n'aurait pas été très bon. Chaque structure de données que j'ai utilisée était construite dans le langage, et je ne savais pas du tout comment elles fonctionnaient sous le capot. Je n'avais jamais eu à gérer de mémoire sauf si un processus que j'exécutais donnais une erreur "Out of memory", et je devais alors trouver une parade. J'ai utilisé quelques tableaux multidimensionnels dans ma vie et des milliers de tableaux associatifs, mais je n'ai jamais créé de structures de données de zéro.
Mais après avoir suivi ce plan d'études, je suis confiant que je serai embauché. C'est un long plan. cela me prendra des mois. Si vous êtes déjà familier avec beaucoup de points, cela vous prendra beaucoup moins de temps.
Tout ce qui suit est très important et vous devriez attaquer ces points dans l'ordre de haut en bas.
J'utilise la typologie Markdown de GitHub, incluant les listes de tâches pour suivre les progrès.
[x] Créez une nouvelle branche afin de vérifier les éléments comme ceci, mettez juste un "x" entre crochets : [x]
Effectuez un fork d'une branche et suivez les commandes suivantes
git checkout -b progress
git remote add jwasham https://github.com/jwasham/coding-interview-university
git fetch --all
Mark all boxes with X after you completed your changes
git add .
git commit -m "Marked x"
git rebase jwasham/main
git push --force
Plus sur Markdown à la sauce Github
Print out a "future Googler" sign (or two) and keep your eyes on the prize.
I'm in the queue right now. Hope to interview soon.
Thanks for the referral, JP.
My story: Why I Studied Full-Time for 8 Months for a Google Interview
I'm on the journey, too. Follow along:
Certaines vidéos sont disponibles uniquement en s'inscrivant à une classe Coursera, EdX ou Lynda.com. Ce sont des MOOC. Parfois, les cours ne sont pas en session, alors vous devez attendre quelques mois, donc vous n'y avez pas accès. Les cours sur Lynda.com ne sont pas gratuits.
J'apprécierais votre aide pour ajouter des sources publiques gratuites et toujours disponibles, telles que des vidéos YouTube pour accompagner les vidéos de cours en ligne.
J'aime utiliser les cours universitaires.
[ ] Vidéos:
[ ] Articles:
[ ] Cours pour préparer:
[ ] Supplémentaires (ne sont pas suggéré par Google, mais je l'ai ajouté):
Je l'ai écrit cet article à propos de cela : Important: Choisis une langue pour l'entrevue Google
Tu peux choisir une langue avec laquelle vous êtes confortable pour faire la partie de codage, mais pour Google, celles-ci sont les bons choix:
Tu pourrais aussi faire celles-ci, mais fait de la recherche avant. Il y aurait peut-être des problèmes:
Tu dois être très comfortable avec la langue et tu dois aussi savoir beaucoup à propos la langue.
Lis à propos vos choix:
Regarde les ressources pour chaque langue ici
Vous voyez C, C++ et Python en dessous, parce que j'apprends. Il y a quelques livres qui vont t'aider, regarde en dessous.
Voici une liste que j'ai réduite afin de vous faire gagner du temps.
Si vous avez beaucoup de temps libre:
Si vous n'avez pas beaucoup de temps :
Si vous avez plus de temps (Je veux ce livre):
Vous avez besoin de choisir un langage pour l'entretien (voir au-dessus). Voici mes recommandations sur les différents langages. Je n'ai pas de ressources pour tous les langages alors n'hésitez pas à en rajouter.
Si vous lisez un d'eux, vous devez d'abord avoir toutes les connaissances sur les structures de données et les algorithmes pour pouvoir résoudre des problèmes de codage. Vous pouvez passer toutes les vidéos de cours de ce projet, à moins que vous voulez un avis.
Additional language-specific resources here.
Je n'ai pas lu ces deux-là mais ils sont bien notées et écrit par Sedgewick. Il est incroyable.
Si vous avez une meilleure recommandation pour le C++, dites le moi. Je recherche des ressources plus compréhensives.
OU:
Plusieurs personnes les recommandes, cependant je pense qu'ils vont trop loin, à moins que vous ayez plusieurs années dans le développement logiciel and que vous vous attendez à un entretien bien plus difficile
[ ] Algorithm Design Manual (Skiena)
[ ] Introduction to Algorithms
"Algorithms and Programming: Problems and Solutions" by Shen
This list grew over many months, and yes, it kind of got out of hand.
Here are some mistakes I made so you'll have a better experience.
I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going through my notes and making flashcards so I could review.
Read please so you won't make my mistakes:
Retaining Computer Science Knowledge
To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. Each card has different formatting.
I made a mobile-first website so I could review on my phone and tablet, wherever I am.
Make your own for free:
Note on flashcards: The first time you recognize you know the answer, don't mark it as known. You have to see the same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in your brain.
An alternative to using my flashcard site is Anki, which has been recommended to me numerous times. It uses a repetition system to help you remember. It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.
My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks @xiewenya)
I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time.
Take a break from programming problems for a half hour and go through your flashcards.
There are a lot of distractions that can take up valuable time. Focus and concentration are hard.
This big list all started as a personal to-do list made from Google interview coaching notes. These are prevalent technologies but were not mentioned in those notes:
Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
You don't need all these. You need only one language for the interview.
Why code in all of these?
I may not have time to do all of these for every subject, but I'll try.
You can see my code here:
You don't need to memorize the guts of every algorithm.
Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer.
[ ] Learn C
[ ] How computers process a program:
[ ] [Review] Analyzing Algorithms (playlist) in 18 minutes (video)
If some of the lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge.
[ ] Videos:
[ ] Online Courses:
[ ] implement with array using linear probing
[ ] Notes:
For heapsort, see Heap data structure above. Heap sort is great, but not stable.
[ ] Merge sort code:
[ ] Quick sort code:
[ ] Implement:
[ ] Not required, but I recommended them:
If you need more detail on this subject, see "Sorting" section in Additional Detail on Some Subjects
Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
Notes from Yegge:
[ ] Skiena Lectures - great intro:
[ ] Graphs (review and more):
Full Coursera Course:
Yegge: If you get a chance, try to study up on fancier algorithms:
I'll implement:
You'll get more graph practice in Skiena's book (see Books section below) and the interview books
If you need more detail on this subject, see "String Matching" section in Additional Detail on Some Subjects
This section will have shorter videos that can you watch pretty quickly to review most of the important concepts.
It's nice if you want a refresher often.
Now that you know all the computer science topics above, it's time to practice answering coding problems.
Coding question practice is not about memorizing answers to programming problems.
Why you need to practice doing programming problems:
There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: Algorithm design canvas
My Process for Coding Interview (Book) Exercises
No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick.
Supplemental:
Read and Do Programming Problems (in this order):
See Book List above
Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can.
Challenge sites:
Maybe:
Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. Have a story, not just data, about something you accomplished.
Some of mine (I already may know answer to but want their opinion or team perspective):
Congratulations!
Keep learning.
You're never really done.
*****************************************************************************************************
*****************************************************************************************************
Everything below this point is optional. These are my recommendations, not Google's.
By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for
any software engineering job. You'll be a much more well-rounded software engineer.
*****************************************************************************************************
*****************************************************************************************************
[ ] AVL trees
[ ] Splay trees
[ ] Red/black trees
[ ] 2-3 search trees
[ ] 2-3-4 Trees (aka 2-4 trees)
[ ] N-ary (K-ary, M-ary) trees
[ ] B-Trees
--
I added these to reinforce some ideas already presented above, but didn't want to include them
above because it's just too much. It's easy to overdo it on a subject.
You want to get hired in this century, right?
[ ] Union-Find
[ ] More Dynamic Programming (videos)
[ ] Advanced Graph Processing (videos)
[ ] MIT Probability (mathy, and go slowly, which is good for mathy things) (videos):
[ ] String Matching
[ ] Sorting
Sit back and enjoy. "Netflix and skill" :P
[ ] List of individual Dynamic Programming problems (each is short)
[ ] Excellent - MIT Calculus Revisited: Single Variable Calculus
[ ] Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory
[ ] CSE373 - Analysis of Algorithms (25 videos)
[ ] UC Berkeley 61B (Spring 2014): Data Structures (25 videos)
[ ] UC Berkeley 61B (Fall 2006): Data Structures (39 videos)
[ ] UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)
[ ] Carnegie Mellon - Computer Architecture Lectures (39 videos)
[ ] MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)
[ ] MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)
[ ] MIT 6.046: Design and Analysis of Algorithms (34 videos)
[ ] MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)
[ ] Mining Massive Datasets - Stanford University (94 videos)