|
5 сар өмнө | |
---|---|---|
.. | ||
README-af.md | 5 сар өмнө | |
README-ar.md | 5 сар өмнө | |
README-bg.md | 5 сар өмнө | |
README-bn.md | 5 сар өмнө | |
README-cn.md | 5 сар өмнө | |
README-de.md | 5 сар өмнө | |
README-el.md | 1 жил өмнө | |
README-es.md | 5 сар өмнө | |
README-fa.md | 5 сар өмнө | |
README-fr.md | 5 сар өмнө | |
README-he.md | 5 сар өмнө | |
README-hi.md | 5 сар өмнө | |
README-id.md | 5 сар өмнө | |
README-it.md | 5 сар өмнө | |
README-ja.md | 5 сар өмнө | |
README-kh.md | 5 сар өмнө | |
README-kk.md | 5 сар өмнө | |
README-ko.md | 5 сар өмнө | |
README-mr.md | 5 сар өмнө | |
README-nl.md | 5 сар өмнө | |
README-pl.md | 5 сар өмнө | |
README-ptbr.md | 5 сар өмнө | |
README-ru.md | 5 сар өмнө | |
README-th.md | 5 сар өмнө | |
README-tr.md | 5 сар өмнө | |
README-tw.md | 5 сар өмнө | |
README-uk.md | 5 сар өмнө | |
README-ur.md | 5 сар өмнө | |
README-uz.md | 5 сар өмнө | |
README-vi.md | 5 сар өмнө | |
how-to.md | 8 жил өмнө |
Ek het oorspronklik dié as 'n kort om-te-doen lys van studie onderwerpe om 'n sagteware ingenieur te word gemaak, maar dit het gegroei tot die groot lys wat jy vandag sien. Nadat ek dié studieplan gevolg het, het Amazon my aangestel! Jy hoef heel waarskynlik nie soveel soos ek te studeer nie. Maar alles wat jy nodig het is hier.
Ek het ongeveer 8-12 gestudeer elke dag, vir maande. Hier is my storie: Hoekom ek vol-tyd gestudeer het, vir 8 maande, vir 'n Google onderhoud
Let asseblief op: Jy sal nie soveel soos ek hoef te studeer nie. Ek het baie tyd gemors op goed wat ek nie benodig het nie. Meer inligting daaroor onder. Ek sal jou help leer sonder om jou kosbare tyd te mors.
Die items wat hier gelys is sal jou goed voorberei vir tegniese onderhoude by omtrent enige sagteware maatskappy, insluitend die reuse: Amazon, Facebook, Google, en Microsoft.
Sterkte!
Dié is my multi-maand studie plan om 'n sagteware ingeneur te word vir 'n groot maatskappy.
Benodighede:
Let wel dat die 'n studieplan vir 'n sagteware ingeneur pos is, nie 'n webontwikkeling pos nie. Groot maatskappeie soos Google, Amazon, Facebook en Microsoft sien sagteware ingeneurs as verskilled van webontwikkeling ingeneurs. Byvoorbeeld, Amazon het Frontend Ingeneurs (FEE) en Sagteware Ontwikkeling Ingeneurs (SDE). Die is 2 verskeie rolle en die onderhoude verskil, omdat elkeen sy eie bevoegdhede het. Dié maatskappeie benodig rekenaar wetenskap kennis vir sagteware ontwikkeling/ingeneur rolle.
---------------- Alles hieronder is opsioneel ----------------
As jy wil werk as 'n sagteware ingeneur vir 'n groot maatskappy, hierdie is die goed wat jy moet ken.
As jy uitgemis het op 'n rekenaar wetenskap graad, soos ek het, sal hierdie jou laat opvang en vier jaar van jou lewe spaar.
Toe ek hierdie projek begin het, kon ek nie verskil tussen 'n stapel en 'n hoop nie, het niks van Big-O geweet nie, of enige iets van bome nie, of hoe om 'n grafiek te dwars nie. As ek 'n sorteer algoritme moes kode, kan ek jou verseker dit was verskriklik. Elke datastruktuur wat ek ooit moes gebruik was ingebou in die taal, end ek het nie geweet hoe hulle werk onder die kap nie. Ek het nooit nodig gehaad of geheue te bestuur nie, tensy 'n proses vir my 'n "te min beskikbare geheue" fout gegee het, en dan moes ek 'n ander oplossing kry. Ek het 'n paar multidimensionele skikkings in my lewe gebruik en duisende assosiatiewe skikkings, maar ek hoef nooit 'n datastruktuur van nuut af gebou het nie.
Dis 'n lang plan. Dit gaan maande vat. As jy klaar gemaklik met baie van dié is gaan dit jou baie minder tyd vat.
Alles hieronder is 'n uitlyn, en jy moet elke item aan pak in orde van bo tot onder.
Ek gebruik Github se spisiale markdown flavor, insluitend taaklyste om vordering te volg.
Op dié blad, kliek die Code knop naby die bookant, dan kliek "Download ZIP". Unzip die lêer en jy kan werk met die teks lêers.
As jy in 'n kode redakteur is wat markdown verstaan, sal jy sien alles is mooi geformateer.
Skep 'n nuwe tak sodat jy items soos dié kan merk, sit net 'n x in die hakies: [x]
Virk 'n tak en vold die bevele hieronder
Virk die Github repo https://github.com/jwasham/coding-interview-university deur om die Fork knop to druk.
Kloon na jou plaaslike repo:
git clone git@github.com:<your_github_username>/coding-interview-university.git
git checkout -b progress
git remote add jwasham https://github.com/jwasham/coding-interview-university
git fetch --all
Merk al die bokse met X nadat jy jou veranderinge voltooi het:
git add .
git commit -m "Marked x"
git rebase jwasham/main
git push --set-upstream origin progress
git push --force
Sekere videos is net beskikbaar as jy skryf vir 'n kurses in 'n Coursera of EdX klas. Dié is genoem MOOCs. Soms is die klasse nie in sessie nie end jy sal moet wag vir 'n paar maande, so jy het nie toegang nie.
Dit sal wonderlik wees om die aanlyn klasse te vervang met gratis en altyd-beskikbare openbare bronne, soos YouTube videos (verkieslik universiteitslesings), sodat julle daarvanaf enige tyd kan leer, nie net wanneer 'n spesifieke aanlyn kursus in sessie is nie.
Jy sal 'n programmeringstaal moet kies vir die kodering onderhoude wat jy gaan doen, maar jy sal dan ook 'n taal moet kies waarmee jy rekenaar wetenskap konsepte kan leer.
Verkieslik is die taal dieselfde, sodat jy net vaardigheid in een hoef te bou.
Toe ek die studie plan gedoen het, het ek 2 tale gebruik vir meeste van dit: C en Python
Die is my voorkeur. Doen jy wat vir jou pas, natuurlik.
Jy mag dit dalk nie nodig kry nie, maar hier is 'n paar webwerwe om jou nuwe taal te leer:
Jy kan 'n taal gebruik waarmee jy gemaklik in is om die kodeering deel van die onderhoud te doen, maar vir groot maatskappye is die goeie besluite:
Jy kan ook dié gebruik, maar lees eers rond. Daar is baie caveats:
Hier is 'n artikel wat ek geskryf het oor hoe om 'n taal te kies vir die onderhoud: Pick One Language for the Coding Interview. Hierdie is die oorspronklike artikel wat my pos op basseer was: Choosing a Programming Language for Interviews
Jy moet baie gemaklik in die taal wees en kundig.
Lees meer oor besluite:
Sien taal-spesifieke hulpbronne hier
Die boek sal jou fondasie vir rekenaar wetenskap vorm.
Kies net een, in die taal waarin jy gemaklik sal wees. Jy sal baie lees en kodeering doen.
Jou besluit:
Jou besluit:
Jy hoef nie 'n klomp van die te koop nie. Eerlikwaar is "Craking the Coding Interview" heelwaarskynlik genoeg, maar ek het meer gekoop om myself meer oefening te gee. Maar ek doen altyd te veel.
Ek het beide van die gekoop. Hulle het vir my genoeg oefening gegee.
Kies een:
Hierdie lys het gegroei oor baie maande, en ja, dit het uit die hand geruk.
Hierdie is 'n paar foute wat ek gemaak het sodat jy 'n beter ervaaring het. En jy sal maande se tyd spaar.
Ek het ure lank videos gekyk en deeglike notas gevat, en maande later was daar baie wat ek nie meer onthou het nie. Ek het 3 dae spandeer om deur my notas te gaan en flitskaarte te maak, sodat ek kon revisie. Ek het nie al daardie kennis nodig gehaad nie.
Asseblief, lees sodat jy nie my foute maak nie:
Retaining Computer Science Knowledge.
Om die probleem op te los, het ek a klein flitskaart webwerf gemaak waar ek 2 tipe flitskaarte kon byvoeg: algemeen en kode. Elke kaart se formatering was verskillend. Ek het 'n mobiele-eerste webwerf gemaak, so ek kon revisie op my foon en tablet, waarookal ek is.
Maak jou eie verniet:
Ek BEVEEL NIE AAN dat jy my flitskaarte gebruik nie. Daar is te veel onnodige kaarte wat jy nie nodig het nie.
Maar as jy nie na my wil luister nie, hier is hulle:
Hou in gedagte dat ek oorboord gegaan het en het kaarte wat alles van assembly taal en Python trivia na masjien leer en statistiek dek. Dit te veel vir wat nodig is.
Nota op flitskaarte: Die eerste keer wat jy erken dat jy die anwoord ken, moenie dit as ken merk nie. Jy moet dieselfde kaart sien en dit vele kere reg beantwoord voordat jy regtig dit ken. Herhaling sal die kennis diepier in jou brein berê.
As 'n alternatief na my flitskaart webwerf is Anki, wat vir my voorgestel is talle kere. Dit gebruik 'n herhalingssisteem om te help onthou. Dit gebruikers-vriendelik, beskikbaar op alle platforms en het 'n wolk sync sisteem. Dit kos $25 op iOS maar is verniet op ander platforms.
My flitskaart databasis in Anki formaat: https://ankiweb.net/shared/info/25173560 (dankie @xiewenya).
Sommige studente het 'n kwessie na vore gebring dat daar wit spasie is in die formatering wat reg gemaak kan word met die volgende stappe: open deck, edit card, kliek cards, kies die "styling" radio knop, verg by die member "white-space: pre;" aan die einde van die card class.
HIERDIE IS BAIE BELANGRIK.
Begin met die kodering onderhoud vrae terwyl jy datastrukture en algoritmes leer.
Jy moet toepas wat jy leer om probleme op te los, of jy sal vergeet. Ek het die fout gemaak.
Sodra jy 'n onderwerp geleer het, en voel sowat gemaklik met dit, byvoorbeeld, linked lists:
Hou aan probleme doen terwyl jy al hierdie goed leer, nie na die tyd nie.
Jy word nie aangestel vir kennis nie, maar hoe jy die kennis toepas.
Daar is baie hulpbronne vir dié glys onder. Gaan voort.
Daar is 'n klomp afleidings wat jou kosbare tyd kan opvat. Fokus en konsentreer is moelik. Sit musiek aan sonder lirieke en jy sal in staat wees of goed te fokus.
Hierdie is algemene tegnologie maar is nie deel van hierdie studie plan nie:
Die kursus gaan oor baie onderwerpe. Elkeen sal heerwaarskynlik jou 'n paar dae vat, of dalk tog 'n week of meer. Dit hang af van jou skedule.
Elke dag, vat die volgende onderwerp op die lys, kyk 'n paar videos oor daardie onderwerp, en dan skryf 'n implimentering van daardie datastruktuur of algoritme in die taal wat jy gekies het vir hierdie kursus.
Jy kan my kode hier sien:
Jy hoef nie elke algoritme the memoriseer nie. Jy moet net dit genoeg verstaan om jou eie implimenteering te skryf.
Hoekom is dié hier? Ek's nie gereed vir onderhoude nie.
Hoekom jy oplossings na programeringprobleme moet oefen:
Daar is 'n wonderlike inleiding vir metodiese, kommunikatiewe probleem oplossing in 'n onderhoud. Jy sal dié ook van die programmeering boeke kry, maar ek het die uitstekend gevind: Algorithm design canvas
Skryf kode op 'n wit bord of papier, nie 'n rekenaar nie. Toets met sommige insette. Dan tik en toets dit op 'n rekenaar.
As jy nie 'n wit bord by die huis het nie, tel 'n groot skryfblad op by die kuns winkel. Jy kan sit op die bank en oefen. Dié is my "sofa whiteboard". Ek het die pen in die foto gesit vir skaal. As jy 'n pen gebruik gaan jy wens jy kon dit uitvee. Word baie morsig. Ek gebruik 'n potlood en uitveër.
Kodering vrae oefening is nie oor oplossings van programmering probleme memoriseer nie.
Moenie jou sleutel kodering onderhoud boeke vergeet hier nie.
Probleme Oplos:
Kodering Onderhoud Vrae Videos:
Uitdaging webwerwe:
Oraait, genoeg praat, kom ons leer!
Maar moet nie vergeet om kode probleme op te los terwyl jy leer nie!
Well, dis genoeg van daardie.
Wanneer jy deur "Cracking the Coding Interview" gaan, is daar 'n hoofstuk oor hierdie, en by die einde is daar 'n quiz om te sien of jy kan identifiseer wat die runtime kompleksiteit van verskeie algoritmes is. Dis 'n super revisie en toets.
[ ] Videos:
[ ] Online Courses:
[ ] Implement met 'n skikking en gebruik linear probing
[ ] Notas:
Vir heapsort, sien Heap datastruktuur bo. Heap sort is fantasties, maar nie stabiel
[ ] UC Berkeley:
[ ] Merge sort kode:
[ ] Quick sort kode:
[ ] Implementeer:
[ ] Nie nodig nie, maar ek beveel hulle aan:
As 'n opsomming, hier is 'n visuele verteenwoordiging van 15 sorting algorithms. As jy nog detail nodig het op hierdie onderwer, sien "Sorteer" seksie in Bykomende Detail op Sommige Vakke
Grafieke kan gebruik word om baie problmeme in rekenaar wetenskap te verteenwoordig, so die seksie is lank, soos bome en sortering was.
Notas:
[ ] MIT(videos):
[ ] Skiena Lectures - great intro:
[ ] Graphs (revisie en meer):
Full Coursera Kursus:
Ek sou implimenteer:
As jy meer detail op hierde onderwerp doek, sien die "String Matching" seksie in Bykomende Detail op Sommige Vakke
Die seksie sal korter videos hê wat jy kan kyk redelik vinnig vir revisie van die mees belangrike konsepte.
Dis goed om die geheue tydelik te vervris.
[ ] Cracking the Facebook Coding Interview:
Prep Courses:
Spot Onderhoude:
Dink oor sowat 20 onderhoud vrae wat jy sal kry, in die rigting van dié hieronder. Hê ten minste een antwoord vir elkeen. Hê ook 'n storie, nie net data, oor iets wat jy bereik het.
Wat sou jy beter gedoen het by [werk x / projek y]?
As jy dit moelik vind om met goeie antwoorde op te kom vir hierdie vrae is hier 'n paar idees:
'n Paar van meine (Ek ken moontlik al klaar die antwoorde, maar wil hulle opinie of span perspektief hé):
Geluk!
Hou aan leer.
Jy is nooit regtig klaar nie.
*****************************************************************************************************
*****************************************************************************************************
Alles hieronder is opsioneel. Dit is NIE nodig vir 'n intreevlak ingeneur nie.
Alhowel, deur om dit te studeer sal jy meer blootstelling kry met CS konsepte, en sal beter voorbereid wees vir
enige sagteware ingeneur werk. Jy sal 'n veel meer afgeronde sagteware ingeneur wees.
*****************************************************************************************************
*****************************************************************************************************
Hierdie is hier sodat jy kan delf in 'n onderwerp wat jy interessant vind.
Jy kan 'n paar ondtwerp vrae verwag as jy 4+ jare ondervinding het.
Ek het hulle by gevoeg om jou te help 'n afgeronde sagteware ingeneur te word en bewus van sekere
tegnologies en algoritmes is, sodat jy 'n groter toolbox het.
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
Ek het die by gevoeg om sommige idees wat al klaar bo aagebied was, maar nie ingesluit was nie
omdat dit te veel is, te versterk. Dis maklik om 'n onderwerp te oordoen
Jy wil in hierdie eeu aangestel word, nê?
SOLIED
Union-Find
Meer Dinamiese Programering (videos)
Advanced Graph Processing (videos)
MIT Probability (wiskundig, en gaan stadig, wat goed is vir wiskundige goed) (videos):
String Matching
Sorting
Sit terug en geniet.
List of individual Dynamic Programming problems (each is short)
Excellent - MIT Calculus Revisited: Single Variable Calculus
Skiena lectures from Algorithm Design Manual - CSE373 2020 - Analysis of Algorithms (26 videos)
Carnegie Mellon - Computer Architecture Lectures (39 videos)
MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)