Plan
README
Plan
| Data Structures | Algorithms | Concepts |
|---|---|---|
| Linked Lists | Breadth-First-Search | Bit Manipulation |
| Trees, Tries, Graphs | Depth-First Search | Memory (Stack vs. Heap) |
| Stacks & Queues | Binary Search | Recursion |
| Heaps | Merge Sort | Dynammic Programming |
| Vectors/ArrayLists | Quick Sort | Big O Time&Space |
| Hash Tables |
1. Documentation
2 x 45min sur un Google doc
Exercice simple pour commencer. Ensuite ils posent des questions genre : comment tu ferais pour accĂ©lĂ©rer lâexĂ©cution du programme ? quâest-ce que tu ferais si les donnĂ©es Ă©taient distribuĂ©es sur plusieurs machines ? Ils augmentent progressivement la difficultĂ©
VidĂ©o dâexemple : https://www.youtube.com/watch?v=wwIysnVmAUg&t=526s
Le problĂšme :
- ECOUTER : la moindre prĂ©cision sur le problĂšme est lĂ pour une raison. âgiven two arrays that are sorted, findâŠâ. Sorted not unsorted. Les prĂ©cisions affectent la solution.
- NOTER ces précisions pour ne pas oublier 10min plus tard.
- CLARIFICATIONS demander des clarifications obligatoirement !!! Anticiper tous les cas chelous (est-ce que ça peut ĂȘtre des chiffres nĂ©gatifs? est-ce que câest des integer? Est-ce quâil y a des exigences de complexitĂ© de temps ou dâespace ?)
DESSINER UN EXEMPLE
La solution :
- PENSER Ă HAUTE VOIX penser Ă haute voix tout le process de rĂ©flexion que jâai dans ma tĂȘte : doivent comprendre comment jâarrive Ă une solution.
- BRUTE FORCE : expliquer la premiĂšre solution. Dire pourquoi ça nâest pas la meilleure solution : space and time complexity
- AMĂLIORER AVEC LE RECRUTEUR quand jâai trouvĂ© une solution, essayer de lâamĂ©liorer avec lâinterviewer, prendre tous ses tips, faire comme si câĂ©tait une discussion technique et pas un entretien
- SAVOIR CLAIREMENT CE QUE JE VAIS CODER : prends quoi en entrée ? quoi en sortie ?
- CODER code facile Ă lire et robuste
- RELIRE CHAQUE LIGNE : il ne semble pas y avoir dâerreur ?
- TESTER ses solutions : cas classiques, cas extrĂȘmes, cas particuliers
- FIXER LES PROBLĂMES prendre son temps pour voir pourquoi on a fait cette erreur et si on fix de la bonne maniĂšre
- JâADORE RĂSOUDRE DES PROBLĂMES DIFFICILES : ne pas give up mĂȘme si je galĂšre : montrer que je suis excitĂ©e de rĂ©soudre des problĂšmes difficiles
2. Data Structures
2.1 Hash Tables
hash tables : particuliĂšrement important. les tables de hashage : connaitre les dĂ©tails sur 'l'utilisation de ces tables (ou maps ou dictionnaires) comment les consturire, comment les appliquer. y a une lĂ©gende que y aurait une question lors de lâentretien ou la rĂ©ponse est table de hashage : y aura forcĂ©ment un moment oĂč y en aura beosin dans lâentretien. maps et dictionnaires
2.2 Trees
ParticuliĂšrement important. ConnaĂźtre les arbres, comment les construire, traverser des arbres. Algos de parcours des arbres, de manipulation. Se familisariser avec :
- les abres binaires
- n-aryes
- tie-triees
2.3 Min/Max Heaps
Comprendre comment les utiliser, identifier les problemes ou les heaps peuvent ĂȘtre utiles
2.4 Graphs
linked lists
2.5 Stacks, Queues, Sets
2.6 Linked Lists
3. Algorithms
- savoir discuter de la space and time complexity. Savoir discuter de la complexité big O de mes solutions + penser à la complexité de la mémoire
- savoir discuter du sourcing et du hashage
- on peut etre invitĂ© Ă gĂ©rer des quantitĂ©s de donnĂ©es obscenes : si on arrive faire tel truc avec 10 ou 100 articles, quâest-ce qui pourrait changer si je fais ça avec un million ou un milliard dâarticles ?
- connaĂźtre les dĂ©tails dâau moins un algorithme de tri n*(log)n. IdĂ©alement deux, donc quicksort et mergesort. mergesort peut parfois ĂȘtre pratique lĂ ou quicksort lâest pas. Savoir quelles sont les fonctions de tri courantes.
- sorting, searching, binary search
- divide-on-conquer
- dynamic programming and memorization
- greedy algorithms
- recursion
- graph traversal, breadth, and depth-first
- on devrait connaĂźtre NP-complete problems, like the traveling salesman and the knapsack + essayer de comprendre ce que signifie NP- complete
si on a le temps dâĂ©tudier le Djikstra ou A*, cela vous aidera probablement
4. Concepts
- algorithmes space and time complexity : Big O, savoir a quel point mon algorithme est complexe : en terme de temps et dâespace. Et savoir comment lâamĂ©liorer ou le modifier. the runtime. Think about the best conceivable runtime (discussed on page 72)
- programmation orientée objet
- questions de System Design and Scalability
- bit, comprendre l'allocation des ressources (ressources dont un processus ou un thread peut avoir besoin)context switching : il est initiĂ© dans lâOS, et le matĂ©riel sous-jacent. Voir powers of 2 table
- certains problĂšmes impliquent de penser de maniĂšre rĂ©cursive. Pratiquer des problĂšmes qui peuvent ĂȘtre rĂ©solus de maniĂšre itĂ©rative, mais une solution plus Ă©lĂ©gante est la rĂ©cursivitĂ©
- SystĂšmes dâexploitation : avoir une bonne comprĂ©hension des processus, les threads, les problĂšmes de concurrence et tout ce qui sây rapporte (sĂ©maphores, mutex, les verrous etc), toutes les construction du systĂšme dâexploitation standard, de leur fonctionnement, de la façon dont ils cassent, donc des impasses, des blocages etc. Comprendre comment fonctionne le changement de contexte dâun processus Ă lautre, comment lâOS le pilote
- on attend de vous que vous connaissiez les API
- load performances, security tests
- maths : certains itw poseront des problĂšmes de mathĂ©matiques discrets de base : prb de comptage, de probabilitĂ©, des choses qui arrivent dans la vie de tous les jours. Revoir lâessentiel de la thĂ©orie des probabilitĂ©s et de la combinatoire
ĂȘtre familier avec les n k problĂšmes
5. Training
Be sure to check out Google code jam archives, GeeksforGeeks, HackerRank or CodeForces, where you can train your skills and get into the problem-solving mindset.
clash of code de codingame
- Faire des tests avec des mauvais inputs pour voir si câest solide
- try to solve problems on your own, sans chercher la solution sur internet : sâhabituer Ă rĂ©soudre des problĂšmes
- write the code on a paper
- tester son code sur papier : cas gĂ©nĂ©raux, cas basiques, cas dâerreur :sâattendre Ă des questions telles que : comment vous testeriez le code que vous venez dâĂ©crire ? A quelles entrĂ©es ou cas de tests intĂ©ressants pouvez-vous penser ?
- tapper son code tel qu'on l'a fait sur papier dans un oridnateur : voir ses erreurs et retenir les erreurs quâon fait
- construire / parcourir des datas structures
- implement system routines
- prendre des ensemble de donnĂ©es volumineux et de les rĂ©duire dâune maniĂšre ou dâune autre
- faire une transformation sur un ensemble de données
Du code clean :
- le bon nom des variables. i et j câest que pour des situations dâincrĂ©mentation pas pr autre chose
- au lieu de perdre du temps Ă initialiser une matrice, imaginer que y a une fonction qui le fait : initIncrementalMatrix(int size)
- Si je dois retourner deux listes, je peux renvoyer un tableau mais câest prĂ©fĂ©rable de renvoyer une liste dâobjets
my working environment
-
Install brew
xcode-select -r /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" -
Install iTerm2, zsh, Oh My Zsh!
brew install iterm2 brew install zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" upgrade_oh_my_zsh #to upgrade it ~/.zshrc #location zshrc -
Configure vim
vim ~/.vimrc
