Ik heb dit oorspronkelijk gemaakt als een korte takenlijst met studieonderwerpen om een software-ingenieur te worden, maar het groeide uit tot de grote lijst die je vandaag ziet. Nadat ik dit studieplan had doorlopen, werd ik aangenomen als Software Development Engineer bij Amazon! Je hoeft waarschijnlijk niet zo veel te studeren als ik. Hoe dan ook, alles wat je nodig hebt is hier.
Ik studeerde ongeveer 8-12 uur per dag, gedurende enkele maanden. Dit is mijn verhaal: Waarom ik 8 maanden fulltime heb gestudeerd voor een Google-interview
Let op: Je hoeft niet zoveel te studeren als ik. Ik verspilde veel tijd aan dingen die ik niet hoefde te weten. Hieronder meer info daarover. Ik help je daar te komen zonder je kostbare tijd te verspillen.
De items die hier worden vermeld, zullen je goed voorbereiden op een technisch interview bij zowat elk softwarebedrijf, inclusief de reuzen: Amazon, Facebook, Google en Microsoft.
Veel succes voor jou!
Word een sponsor en steun Coding Interview University!
Speciale dank aan:
Dit is mijn meermaandelijkse studieplan om software-engineer te worden voor een groot bedrijf.
Verplicht:
Let op: dit is een studieplan voor software-engineering, niet voor webontwikkeling. Grote softwarebedrijven zoals Google, Amazon, Facebook en Microsoft zien software-engineering als iets anders dan webontwikkeling. Amazon heeft bijvoorbeeld: Frontend Engineers (FEE) en Software Development Engineers (SDE). Dit zijn 2 aparte rollen en de interviews voor ze zullen niet hetzelfde zijn, omdat ze elk hun eigen competenties hebben. Deze bedrijven hebben informaticakennis nodig voor: softwareontwikkeling / engineering rollen.
-het)
---------------- Alles onder dit punt is optioneel ----------------
Als je als software engineer voor een groot bedrijf wilt werken, is de
dit zijn de dingen die je moet weten.
Als je een graad in computerwetenschappen hebt gemist, zoals ik, zal dit je inhalen en vier jaar van je leven redden.
Toen ik aan dit project begon, kende ik geen stapel van een hoop, ik wist niets van Big-O of iets over bomen, of hoe ik een grafiek doorkruisen. Als ik een sorteeralgoritme moest coderen, kan ik je vertellen dat het verschrikkelijk zou zijn geweest. Elke gegevensstructuur die ik ooit had gebruikt, was in de taal ingebouwd en ik wist niet hoe ze werkten helemaal onder de motorkap. Ik hoefde nooit het geheugen te beheren, tenzij een proces dat ik aan het uitvoeren was een "out of" zou geven memory"-fout, en dan zou ik een tijdelijke oplossing moeten vinden. Ik gebruikte een paar multidimensionale arrays in mijn leven en duizenden associatieve arrays, maar ik heb nooit helemaal opnieuw gegevensstructuren gemaakt.
Het is een lang plan. Het kan maanden duren. Als je hier al veel van kent, kost het je veel minder tijd.
Alles hieronder is een overzicht en je moet de items van boven naar beneden in volgorde aanpakken.
Ik gebruik de speciale markdown-smaak van GitHub, inclusief takenlijsten om de voortgang bij te houden.
Klik op deze pagina op de codeknop bovenaan en klik vervolgens op "Download ZIP". Pak het bestand uit en u kunt met de tekstbestanden werken.
Als je open bent in een code-editor die markdown begrijpt, zie je alles netjes opgemaakt.
Maak een nieuwe branch zodat je dit soort items kunt aanvinken, zet gewoon een x tussen de haakjes: [x]
Fork de GitHub-repo: https://github.com/jwasham/coding-interview-university
door op de Fork-knop te klikken.
Kloon naar uw lokale repo:
git clone git@github.com:<your_github_username>/coding-interview-university.git
cd codering-interview-universiteit
git checkout -b voortgang
git remote jwasham toevoegen https://github.com/jwasham/coding-interview-university
git fetch --all
Markeer alle vakjes met X nadat u uw wijzigingen hebt voltooid:
git toevoegen.
git commit -m "Gemarkeerd met x"
git rebase jwasham/main
git push --set-upstream origin progress
git push --force
Sommige video's zijn alleen beschikbaar door je in te schrijven voor een Coursera- of EdX-les. Dit worden MOOC's genoemd. Soms zijn de lessen niet in sessie, dus je moet een paar maanden wachten, dus je hebt geen toegang.
Het zou geweldig zijn om de online cursusbronnen te vervangen door gratis en altijd beschikbare openbare bronnen, zoals YouTube-video's (bij voorkeur universitaire colleges), zodat jullie deze op elk moment kunnen bestuderen, niet alleen wanneer een specifieke online cursus in sessie is.
Je moet een programmeertaal kiezen voor de coderingsinterviews die je doet, maar je zult ook een taal moeten vinden die je kunt gebruiken om computerwetenschappelijke concepten te bestuderen.
Bij voorkeur is de taal hetzelfde, zodat je er maar één machtig hoeft te zijn.
Toen ik het studieplan maakte, gebruikte ik voor het grootste deel 2 talen: C en Python
Dit heeft mijn voorkeur. Je doet wat je leuk vindt, of co
Ik herinnerde het me niet. Ik heb 3 dagen doorgebracht door mijn aantekeningen en het maken van flashcards, zodat ik kon beoordelen. Ik had al die kennis niet nodig.
Lees alsjeblieft zodat je mijn fouten niet maakt:
Om het probleem op te lossen, heb ik een kleine flashcards-site gemaakt waar ik flashcards van 2 soorten kon toevoegen: algemeen en code. Elke kaart heeft een andere opmaak. Ik heb een mobile-first website gemaakt, zodat ik op mijn telefoon of tablet kan reviewen, waar ik ook ben.
Maak je eigen gratis:
IK RAAD NIET AAN om mijn flashcards te gebruiken. Er zijn er teveel en de meeste zijn trivia die je niet nodig hebt.
Maar als je niet naar me wilt luisteren, hier ga je:
Houd in gedachten dat ik overboord ging en kaarten heb die alles omvatten, van assembler en Python-trivia tot machine learning en statistieken. Het is veel te veel voor wat nodig is.
Opmerking over flashcards: De eerste keer dat u herkent dat u het antwoord weet, markeer het dan niet als bekend. Je moet de zien dezelfde kaart en beantwoord deze meerdere keren goed voordat je het echt weet. Herhaling zal die kennis dieper in je brein.
Een alternatief voor het gebruik van mijn flashcard-site is Anki, dat mij al meerdere keren is aanbevolen. Het gebruikt een herhalingssysteem om u te helpen herinneren. Het is gebruiksvriendelijk, beschikbaar op alle platforms en heeft een cloudsynchronisatiesysteem. Het kost $ 25 op iOS, maar is gratis op andere platforms.
Mijn flashcard-database in Anki-formaat: https://ankiweb.net/shared/info/25173560 (bedankt @xiewenya).
Sommige studenten hebben opmaakproblemen met witruimte genoemd die kunnen worden opgelost door het volgende te doen: open dek, bewerk kaart, klik op kaarten, selecteer het keuzerondje "styling", voeg het lid "witruimte: pre;" toe naar de kaartklas.
DIT IS ERG BELANGRIJK.
Begin met het coderen van interviewvragen terwijl je datastructuren en algoritmen leert.
Je moet wat je leert toepassen om problemen op te lossen, anders vergeet je het. Ik heb deze fout gemaakt.
Als je eenmaal een onderwerp hebt geleerd en je er enigszins op je gemak bij voelt, bijvoorbeeld gekoppelde lijsten:
Blijf problemen doen terwijl je al deze dingen leert, niet daarna.
Je wordt niet aangenomen voor kennis, maar hoe je de kennis toepast.
Hier zijn veel bronnen voor, hieronder opgesomd. Ga zo door.
Er zijn veel afleidingen die kostbare tijd in beslag kunnen nemen. Focus en concentratie zijn moeilijk. Zet wat muziek aan zonder tekst en je kunt je goed concentreren.
Dit zijn veelvoorkomende technologieën, maar maken geen deel uit van dit studieplan:
-SQL
Deze cursus gaat over veel onderwerpen. Elk zal je waarschijnlijk een paar dagen kosten, of misschien zelfs een week of langer. Het hangt af van je schema.
Neem elke dag het volgende onderwerp in de lijst, bekijk enkele video's over dat onderwerp en schrijf vervolgens een implementatie van die datastructuur of dat algoritme in de taal die je voor deze cursus hebt gekozen.
Je kunt mijn code hier zien:
U hoeft niet elk algoritme te onthouden. Je moet het alleen voldoende kunnen begrijpen om je eigen implementatie te kunnen schrijven.
Waarom is dit hier? Ik ben niet klaar om te interviewen.
Waarom je moet oefenen met programmeerproblemen:
Er is een geweldige introductie voor methodische, communicatieve probleemoplossing in een interview. Dit haal je uit de programmering interviewboeken ook, maar ik vond dit opmerkelijk: Algoritme ontwerp canvas
Schrijf code op een whiteboard of papier, niet op een computer. Test met een steekproef
e ingangen. Typ het vervolgens en test het op een computer.
Als je thuis geen whiteboard hebt, pak dan een groot tekenblok bij een kunstwinkel. Je kunt op de bank zitten en oefenen. Dit is mijn "bank whiteboard". Ik heb de pen op de foto toegevoegd alleen voor schaal. Als je een pen gebruikt, zou je willen dat je kon wissen. Wordt snel rommelig. Ik gebruik een potlood en gum.
Het oefenen van codeervragen gaat niet over het onthouden van antwoorden op programmeerproblemen.
Vergeet uw belangrijkste coderingsinterviewboeken niet hier.
Problemen oplossen:
Video's met sollicitatievragen over coderen:
Uitdagingssites:
Oké, genoeg gepraat, laten we leren!
Maar vergeet niet om codeerproblemen van bovenaf op te lossen terwijl je leert!
Nou, dat is ongeveer genoeg van dat.
Als je "Cracking the Coding Interview" doorloopt, is er een hoofdstuk hierover en aan het einde is er een quiz om te zien als u de runtime-complexiteit van verschillende algoritmen kunt identificeren. Het is een super review en test.
[ ] Implementeer een vector (veranderlijke array met automatisch formaat wijzigen):
stralen en aanwijzers, en aanwijzer wiskunde om naar een index te springen in plaats van indexering te gebruiken.
[ ] Tijd
[ ] Ruimte
[ ] Implementeer met array van vaste grootte:
()
[ ] Kosten:
[ ] Videos:
[ ] Online cursussen:
[ ] Implementeren met array met lineair tasten
[ ] Oefeningen
[ ] Absolute waarde:
html)
p6V_F-5jb5L2iHb)
[ ] Opmerkingen:
Voor heapsort, zie Heap-gegevensstructuur hierboven. Heap sort is geweldig, maar niet stabiel
[ ] UC Berkeley:
[ ] Sorteercode samenvoegen:
[ ] Snelle sorteercode:
[ ] Implementeren:
[ ] Samenvoegen: O(n log n) gemiddelde en slechtste geval
[ ] Niet verplicht, maar ik heb ze aanbevolen:
Als samenvatting is hier een visuele weergave van 15 sorteeralgoritmen. Als u meer details over dit onderwerp nodig hebt, raadpleegt u het gedeelte "Sorteren" in Aanvullende details over sommige onderwerpen
Grafieken kunnen worden gebruikt om veel problemen in de informatica weer te geven, dus deze sectie is lang, net als bomen en sorteren.
Opmerkingen:
[ ] MIT (video's):
[ ] Skiena Lezingen - geweldige intro:
[ ] Grafieken (review en meer):
dsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
Volledige Coursera-cursus:
Ik zal implementeren:
Backtracking-blauwdruk: Java Python
[ ] Yale Aantekeningen bij de lezing:
ng](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
[ ] Coursera:
P6317WaSNfmCvGym2ucw3oGp&index=24)
-
[ ] Sedgewick - Suffix Arrays (video)
Als je meer details over dit onderwerp nodig hebt, raadpleeg dan de sectie "String Matching" in Extra details over sommige onderwerpen.
PnPYQui46QqT0j)
Dit gedeelte bevat kortere video's die je vrij snel kunt bekijken om de meeste belangrijke concepten te bekijken.
Het is fijn als je vaak een opfrisbeurt wilt.
Mock-interviews:
anonieme meningen met senior engineers van FAANG
Bedenk ongeveer 20 sollicitatievragen die u zult krijgen, samen met de regels van de onderstaande items. Zorg voor ten minste één antwoord voor elk. Heb een verhaal, niet alleen gegevens, over iets dat je hebt bereikt.
Wat zou je beter hebben gedaan bij [baan x / project y]?
Als u het moeilijk vindt om goede antwoorden te vinden op dit soort interviewvragen, volgen hier enkele ideeën:
Sommigen van mij (misschien weet ik de antwoorden al, maar wil hun mening of teamperspectief):
Gefeliciteerd!
Blijf leren.
Je bent nooit echt klaar.
************************************************** ************************************************** *
************************************************** ************************************************** *
Alles onder dit punt is optioneel. Het is NIET nodig voor een instapgesprek.
Door deze te bestuderen, krijgt u echter meer kennis van meer CS-concepten en bent u beter voorbereid op
elke software-engineering baan. Je zult een veel completere software-engineer zijn.
************************************************** ************************************************** *
************************************************** ************************************************** *
Deze zijn hier zodat u zich kunt verdiepen in een onderwerp dat u interessant vindt.
Write Great Code: Volume 1: Understanding the Machine
ented HLA, dus neem vermeldingen en voorbeelden in HLA met een korreltje zout. Niet veel gebruikt, maar goede voorbeelden van hoe montage eruit ziet
Computerarchitectuur, zesde editie: een kwantitatieve benadering
Je kunt systeemontwerpvragen verwachten als je meer dan 4 jaar ervaring hebt.
[ ] Schaalbaarheid:
s van Distributed Computing uitgelegd](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
[ ] Het systeemontwerpproces oefenen: hier zijn enkele ideeën om op papier uit te werken, elk met wat documentatie over hoe het in de echte wereld werd behandeld:
m-ontwerp/)
Ik heb ze toegevoegd om je te helpen een goed afgeronde software-engineer te worden, en om je bewust te zijn van bepaalde
technologieën en algoritmen, zodat je een grotere gereedschapskist hebt.
De absolute beginnershandleiding voor Emacs (video door David Wilson)
De absolute beginnersgids voor Emacs (aantekeningen door David Wilson)
Meer over Markov-processen:
www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
Zie hieronder meer in de MIT 6.050J Informatie- en Entropy-serie:
kijken?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
AVL-bomen
Splay bomen
Rood/zwarte bomen
2-3 zoekbomen
2-3-4 bomen (ook bekend als 2-4 bomen)
N-ary (K-ary, M-ary) bomen
B-bomen
data_structures/b-trees.html)
Ik heb deze toegevoegd om enkele ideeën die hierboven al zijn gepresenteerd te versterken, maar wilde ze niet opnemen
hierboven omdat het gewoon te veel is. Het is gemakkelijk om het over een onderwerp te overdrijven.
Je wilt toch aangenomen worden in deze eeuw?
STEVIG
rinciple.html) | Basisklasse en afgeleide klasse volgen het 'IS A'-principe
- [meer smaak](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5hl=en)
Union-Find
Meer dynamische programmering (video's)
Geavanceerde grafiekverwerking (video's)
MIT Waarschijnlijkheid (wiskunde, en ga langzaam, wat goed is voor wiskundige dingen) (video's):
String Matching
Rabin-Karp (video's):
bin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
Knuth-Morris-Pratt (KMP):
Boyer-Moore string zoekalgoritme
Coursera: Algorithms on Strings
Sorteren
Leun achterover en geniet.
Lijst met individuele problemen met dynamisch programmeren (elk is kort)
Uitstekend - MIT Calculus Revisited: Single Variable Calculus
Skiena-lezingen uit Algorithm Design Manual - CSE373 2020 - Analyse van algoritmen (26 video's)
UC Berkeley 61B (najaar 2006): gegevensstructuren (39 video's)
Carnegie Mellon - Lezingen over computerarchitectuur (39 video's)
MIT 6.034 kunstmatige intelligentie, herfst 2010 (30 video's)
MIT 6.042J: Mathematics for Computer Science, herfst 2010 (25 video's)
MIT 6.824: gedistribueerde systemen, lente 2020 (20 video's)
[Int
roductie naar cryptografie door Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
- [Cursuswebsite samen met dia's en probleemsets](http://www.crypto-textbook.com/)