Anri Lombard a16355ffd1 Whitespace fix 2 년 전
..
README-af.md a16355ffd1 Whitespace fix 2 년 전
README-ar.md b367068c54 Removes dead links. 3 년 전
README-bg.md b367068c54 Removes dead links. 3 년 전
README-bn.md 3ca0eba3db link proper way written 2 년 전
README-cn.md b367068c54 Removes dead links. 3 년 전
README-de.md b367068c54 Removes dead links. 3 년 전
README-el.md 1b106173a1 Untill linkedlists 8 년 전
README-es.md 937b109c0b Fix anchor link to Big-O content 2 년 전
README-fa.md b367068c54 Removes dead links. 3 년 전
README-fr.md ad48957d7e Fix "Chois" typo to "Choisis" 2 년 전
README-he.md b367068c54 Removes dead links. 3 년 전
README-hi.md 1bd63ab08c Fixed it 3 년 전
README-id.md 06f06289f1 Removes dead links. 3 년 전
README-ja.md b367068c54 Removes dead links. 3 년 전
README-kh.md b367068c54 Removes dead links. 3 년 전
README-ko.md b367068c54 Removes dead links. 3 년 전
README-pl.md b367068c54 Removes dead links. 3 년 전
README-ptbr.md b367068c54 Removes dead links. 3 년 전
README-ru.md b367068c54 Removes dead links. 3 년 전
README-th.md b367068c54 Removes dead links. 3 년 전
README-tr.md b367068c54 Removes dead links. 3 년 전
README-tw.md 06f06289f1 Removes dead links. 3 년 전
README-uk.md b367068c54 Removes dead links. 3 년 전
README-ur.md b367068c54 Removes dead links. 3 년 전
README-uz.md b367068c54 Removes dead links. 3 년 전
README-vi.md b367068c54 Removes dead links. 3 년 전
how-to.md 24fe5be8bd Added new directory for translated README files. 8 년 전

README-af.md

Kodering Onderhoud Universiteit

Ek het oorspronklik dié as 'n kort om-te-doen lys van studie onderwerpe om 'n sagteware ingenieur te word gemaak, maar did 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!

Vertalings: - [中文版本](translations/README-cn.md) - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) - [Polish](translations/README-pl.md) - [繁體中文](translations/README-tw.md) - [Japanese (日本語)](translations/README-ja.md) - [Russian](translations/README-ru.md) - [German](translations/README-de.md) - [Bahasa Indonesia](translations/README-id.md) - [ខ្មែរ - Khmer](translations/README-kh.md) - [Uzbek](translations/README-uz.md) - [Bulgarian](translations/README-bg.md) - [বাংলা - Bangla](translations/README-bn.md)
Vertalings aan die gang: - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) - [French](https://github.com/jwasham/coding-interview-university/issues/89) - [Українська](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) - [Urdu](https://github.com/jwasham/coding-interview-university/issues/519) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) - [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) - [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186) - [Afrikaans](https://github.com/jwasham/coding-interview-university/issues/1164)

Wat is dit?

Kodering op die witbord - van HBO se Silicon Valley

Dié is my multi-maand studie plan om 'n sagteware ingeneur te word vir 'n groot maatskappy.

Benodighede:

  • 'n Bietjie ondervinding met kodrering (veranderlikes, lusse, metodes/funksies, ens)
  • Geduld
  • Tyd

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.


Inhoudsopgawe

Die Studie Plan

Onderwerpe om te Studeer

Kry die Werk

---------------- Alles hieronder is opsioneel ----------------

Opsionele Ekstra Onderwerpe & Hulpbronne


Hoekom gebruik dit?

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.

Hoe om dit te gebruik?

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.

As jy nie git wil gebruik nie

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.

Hoe om die repo af te laai as 'n zip lêer

As jy gemaklik met git is

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

Moenie voel asof jy nie slim genoeg is nie

'n Nota Oor Video Hulpbronne

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.

Kies 'n Programmeeringstaal

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.

Vir die Studie Plan

Toe ek die studie plan gedoen het, het ek 2 tale gebruik vir meeste van dit: C en Python

  • C: Baie lae vlak. Laat jou toe om met pointers en geheue allocation/deallocation te werk, sodat jy die datastrukture en algoritmes voel in jou bene. In hoër vlak tale soos Python en Java word die weggesteek van jou af. In daaglikse werk is dit wonderlik, maar wanneer jy leer hoe die lae-vlak datastrukture gebou is, voel dit lekker om naby die metaal te wees.
    • C is orals. Jy sal voorbeelde in boeke, lesings, vidoes, en oral sien wanner jy studeer.
    • The C Programming Language, Vol 2
      • Dié is 'n kort boek, maar dit sal jou 'n goeie vat gee oor die C taal en as jy dit 'n bikie oefen sal jy vinnig vaardigheid bou. Deur om C te verstaan help dit jou om te verstaan hoe programme en geheue werk.
      • Jy hoef nie super diep in die boek te gaan nie (of eens dit klaar te maak nie). Gaan net tot die punt waar jy C gemaklik kan lees en skryf.
      • Antwoorde vir vrae in die boek
  • Python: Modern en baie duur, ek het dit geleer want dis super nuttig en laat my toe om minder kode te skruf in 'n onderhoud.

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:

Vir jou Kodering Onderhoud

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:

  • C++
  • Java
  • Python

Jy kan ook dié gebruik, maar lees eers rond. Daar is baie caveats:

  • JavaScript
  • Ruby

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

Boeke vir Datastrukture en Algoritmes

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.

C

Python

Java

Jou besluit:

C++

Jou besluit:

Onderhoud Voorbereïngsboeke

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.

As jy tonne ekstra tyd het:

Kies een:

Moenie My Foute Maak Nie

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.

1. Jy Sal Nie Alles Onthou Nie

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.

2. Gebruik flitskaarte

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.

3. Doen Kodering Onderhoud Vrae Terwyl Jy Leer

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:

  1. Maak een van die Onderhoud Voorbereïngsboeke (of kodering probleem webwerve, onder gelys) oop
  2. Doen 2 of 3 vrae met betrekking tot linked lists.
  3. Beweeg aan na die volgende onderwerp.
  4. Later, gaan terug en doen nog 2 of 3 linked list probleme.
  5. Doen hierdie met elke nuwe onderwerp wat jy leer.

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.

4. Fokus

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.

Wat Jy Nie Sal Sien Gedek Word Nie

Hierdie is algemene tegnologie maar is nie deel van hierdie studie plan nie:

  • SQL
  • Javascript
  • HTML, CSS, en ander front-end tegnologie.

Die Daaglikse Plan

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.

Kodering Vrae Beoefening

Hoekom is dié hier? Ek's nie gereed vir onderhoude nie.

Dan gaan terug en lees die.

Hoekom jy oplossings na programeringprobleme moet oefen:

  • Probleem erkenning, en waar die regte datastrukture en algoritmes inpas
  • Versameling van vereistes vir die probleem
  • Praat oor hoe jy die probleem oplos soos jy sal in die onderhoud
  • Kodering op 'n wit bord of papier, nie 'n rekenaar nie
  • Om te formuleer wat die tyd-en-spasie-kompleksiteit vir jou oplossing is (sien Big-O onder)
  • Toets jou oplossing

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.

my sofa whiteboard

Kodering vrae oefening is nie oor oplossings van programmering probleme memoriseer nie.

Kodering Problem

Moenie jou sleutel kodering onderhoud boeke vergeet hier nie.

Probleme Oplos:

Kodering Onderhoud Vrae Videos:

Uitdaging webwerwe:

Begin Solank

Oraait, genoeg praat, kom ons leer!

Maar moet nie vergeet om kode probleme op te los terwyl jy leer nie!

Algoritmiese kompleksiteit / Big-O / Asimptotiese analiese

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.

Datastrukture

  • Skikkings

    • Oor Skikkings:
    • Implement 'n vektor (mutable skikking met outomatiese grootte verandering)
      • Oefen kodering met skikkings en wysers, en wysers wiskunde om te spring na 'n indeks in pleks van indeksering te gebruik.
      • Nuwe rou data skikking met gelokeerde geheue
        • kan int skikking alokeer onder die kap, maar net nie die kenmerke gebruik nie
        • begin met 16, of as begin nommer groter is, gebruik bevoegdhede van 2 - 16, 32, 64, 128
      • size() - hoeveelheid items
      • capacity() - hoeveelheid items dit kan hou
      • is_empty()
      • at(indeks) - lewer item by gegewende indeks, omplof as indeks buite grens is
      • push(item)
      • insert(indeks, item) - voeg item by indeks, skuif daardie indeks se waarde en rank elemente regs
      • prepend(item) - kan insert hierbo gebruik by indeks 0
      • pop() - verwyder van die einde, lewer waarde
      • delete(indeks) - skrap item by indeks, skuif al rank elemente links
      • remove(item) - kyk vir waarde en verwyder indeks wat dit hou (al is dit in verskeie plekke)
      • find(item) - kyk vir waarde en lewer eerste indeks met daardie waarde, -1 as dit nie bestaan nie
      • resize(new_capacity) // privaat funksie
        • wanner jy kapasiteit bereik, verander om die grootte te dubbel
        • wanneer 'n item pop, as grootte 1/4 van kapasiteit is, verander na half
      • Tyd
        • O(1) om te add/verwyder aan die einde (geamoriënteer vir toekening van meer spasie), indekx, of updateer
        • O(n) om te voeg/skrap elders
      • Spasie
        • aaneenlopend in geheue, so nabyheid help prestasie
        • spasie nodig - (skikking kapasiteit, wat >= n is) * item grootte, maar tot as dit 2n is, is dit steeds O(n)
  • Linked Lists

    • Beskrywing:
    • C Code (video) - nie die hele video nie, net gedeeltes oor Node struct en geheue toekening
    • Linked List vs Skikkings:
    • why you suld avoid linked lists (video)
    • Gotcha: Jy nodig wyser tot wyser kennis: (vir wanneer jy 'n wyser paas na 'n funksie wat die address na waar die wyser wys verander) Die blad is net om 'n houvas te kry op wyser na wyser. Ek beveel nie aan om hierdie lys transversale styl te lees nie. Leesbaarheid en onderhoudbaarheid ly van slimheid.
    • Implement (Ek het dit gedoen met stert wyser en sonder):
      • size() - lewer hoeveelheid data elemente in lys
      • empty() - bool lewer waar as leeg
      • value_at(indeks) - lewer die waarde van die nth item (begin by 0 vir eerste)
      • push_front(waarde) - voeg 'n item aan die begin van die lys
      • pop_front() - verwyder voorste item en lewer die waarde
      • push_back(value) - voeg 'n item aan die einde
      • pop_back() - verwyder laaste item en lewer die waarde
      • front() - kry waarde van voorste item
      • back() - kry waarde van laaste item
      • insert(indeks, waarde) - voeg waarde by indeks, so huidige item by daardie indeks word gewys na deur nuwe item by daardie indeks
      • erase(indeks) - verwyder node by gegewe indeks
      • value_n_from_end(n) - lewer die waarde van die node by nth posisie van die einde van die lys af
      • reverse() - keer die lys om
      • remove_value(waarde) - verwyder die eerste item in die lys met dié waarde
    • Doubly-linked List
  • Stapel

    • Stacks (video)
    • Sal nie implementeer nie. Implementering met skikking is maklik
  • Queue

    • Queue (video)
    • Circular buffer/FIFO
    • Implementeer met linked-list, met stert wyser:
      • enqueue(waarde) - voeg waarde by posisie by stert
      • dequeue() - lewer waarde en verwyder die minste onlangse gevoegde element (voorkant)
      • empty()
    • Implementeer met vaste-grootte skikking:
      • enqueue(value) - voeg item aan einde van beskikbare
      • dequeue() - lewer waarde en verwyder minste onlangse gevoegde element
      • empty()
      • full()
    • Cost:
      • 'n Slegte implementering met linked list waar jy enqueue by die hoof en dequeue by die stert sal wees O(n) want you sal die alement langs die laaste nodig hê, wat 'n volle transversal elke dequeue veroorsaak
      • enqueue: O(1) (amortized, linked list en array [probing])
      • dequeue: O(1) (linked list en array)
      • empty: O(1) (linked list en array)
  • Hash table

Meer Kennis

Bome

Sorteer

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

Grafieke kan gebruik word om baie problmeme in rekenaar wetenskap te verteenwoordig, so die seksie is lank, soos bome en sortering was.

Nog Meer Kennis