Oikea opas koodaushaastatteluun

Päivitys:

Tämä on kattava opas, joka sisältää kaiken tarvittavan tiedon koodaushaastattelusta. Siinä kerrotaan perusteellisesti, mitä pitää oppia, miten oppia ja ennen kaikkea miten esittää ratkaisu haastattelussa.

Jos haluat läpäistä koodaushaastattelun, löysit oikean artikkelin. Tämän luettuasi sinulla saattaa olla houkutus etsiä muita artikkeleita samasta aiheesta, koska ”Ehkä löydän lisää vinkkejä ja temppuja, jotka auttavat minua”.

Lopeta vinkkien ja temppujen etsiminen, ne pitävät sinut kaukana unelmatyöstäsi.

Ei ole olemassa vinkkejä eikä temppuja työpaikan saamiseksi. Se on vain kovaa työtä, piste. Joten jos todella haluat murskata sen haastattelun, mene harjoittelemaan tämän artikkelin lukemisen jälkeen.

Artikkeli koostuu kolmesta osasta & kolmesta videosta, ja sen lukemiseen kuluu noin 30 minuuttia.

  1. Mikä on koodaushaastattelu?
  2. Miten valmistautua koodaushaastatteluun?
  3. Miten antaa parhaansa koodaushaastattelussa?

Aluksi esittelen, jotta tiedät, että olen varma siitä, mistä puhun.

Suurin ohjelmointikilpailu Pohjois-Länsi-Euroopassa

Nimeni on Andrei ja olen ollut kilpaillut ohjelmointikilpailussa viimeiset viisi vuotta. Olen osallistunut Googlen järjestämän suurimman algoritmikilpailun, Google HashCoden, maailmanfinaaliin, ja sitä ennen olen voittanut kolme kultamitalia Romanian tietojenkäsittelyolympialaisissa. Tämän kokemuksen perusteella olen julkaissut verkkokurssin ”Johdatus algoritmeihin ja tietorakenteisiin C++:lla”, joka on auttanut yli 8000 opiskelijaa 135 maasta ottamaan ensiaskeleitaan alalla.

Nyt opiskelen tietotekniikkaa Lontoon University Collegessa, ja sillä välin luon kurssia, jolla autan opiskelijoita ja nuoria ammatinharjoittajia valmistautumaan suurten teknologiayritysten koodaushaastatteluihin. Siksi haluan tässä artikkelissa jakaa kokemukseni koodaushaastattelusta ja kertoa suorimman tavan läpäistä se. Voit tavoittaa minut täältä.

Kysymys: Oletko koskaan haaveillut työskenteleväsi suuressa teknologiayrityksessä, kuten Microsoftissa? Jos olet, voit olla varma, että suurin osa meistä on myös haaveillut. Ja koska muutamalle kymmenelle työpaikalle on niin suuri kysyntä, he tarvitsevat keinon nähdä, ketkä hakijoista ovat paremmin valmistautuneita.

Ennen kuin saat kutsun koodaushaastatteluun, sinun on haettava paikkaa, ja sinulla on oltava ansioluettelo, joka erottuu muista. Tässä artikkelissa puhun varsinaisesta koodaushaastattelusta ja siitä, miten voit valmistautua siihen, enkä työn hakuprosessista.

Useimmissa teknologiayrityksissä koodaushaastattelu koostuu Algoritmit & Tietorakenteet -ongelmista. Ajattele näitä ongelmanratkaisukysymyksinä, joissa haastattelija pyrkii arvioimaan kykysi ratkaista ongelma, jota et ole ennen nähnyt. Yksi haastattelu kestää noin 45 minuuttia, ja sinulle annetaan yksi tai kaksi koodausongelmaa. Haastattelija odottaa sinun löytävän optimaalisimman ratkaisun, koodaavan sen ja selittävän, mitä juuri koodasit.

Viimeiseksi sinulla on mahdollisuus esittää hänelle kysymyksiä yrityksestä tai muusta sinua kiinnostavasta asiasta. Käsittelemme kattavasti kaikkia näitä vaiheita tämän artikkelin viimeisessä osassa.

Miten valmistautua koodaushaastatteluun?

Tahdon tehdä heti alkuun selväksi: haastattelun läpäisemiseen ei ole olemassa mitään oikotietä tai kikkaa. Ainoa tapa löytää optimaaliset ratkaisut algoritmisiin ongelmiin on harjoittelu, mahdollisimman monen ongelman ratkaiseminen.

Kahdella sanalla sanottuna se on kovaa työtä.

Voi olla, ettet pidä siitä ja alat etsiä jostain muualta kikkaa, jolla ymmärtäisit, miten haastattelukysymykset ratkaistaan, mutta sellaista ei ole olemassa. Mieti hetki: jos sellainen kikka olisi olemassa, miksi kaikki eivät käyttäisi sitä ja läpäisisi haastattelua?

Sinun on siis ymmärrettävä, että haastattelun läpäisemisen ainoa muuttuja on se, kuinka paljon harjoittelet sitä ennen. Kokemuksesi, älykkyytesi ja kaikki muu on jo valmiina. Näin ollen harjoitteluun käytetty aika tekee eron läpäisevien ja läpäisemättömien hakijoiden välillä.

Koodaushaastattelu on taistelu itseäsi vastaan, ja ainoa tapa voittaa se on harjoitella paljon.

Ensimmäisenä askeleena on tuntea olonsa mukavaksi jollakin valtavirran koodauskielellä, kuten C/C++:lla, Javalla tai Pythonilla. Jotkut yritykset hyväksyvät myös muita kieliä, ja selvä enemmistö pitää kiinni näistä kolmesta. Valitse se, josta pidät eniten, ja pysy siinä. Älä päätä valmistautumisen puolivälissä, että haluat vaihtaa kieltä! Artikkelin loppuosassa oletan, että olet valinnut kielen ja osaat sen syntaksin hyvin.

Tyypillisesti koodaushaastattelussa on kyse algoritmeista ja tietorakenteista. Ne sisältävät joitakin perustavanlaatuisia aiheita, jotka sinun on ymmärrettävä perusteellisesti, äläkä edes harkitse haastatteluun menemistä tuntematta itseäsi hyvin niiden kanssa.

Alhaalla on lista algoritmeista ja datalähtöisistä rakenteista, jotka sinun on tunnettava. Olen kirjoittanut ne tärkeysjärjestyksessä, ja se on paras oppimispolku.

1) Big O -kompleksisuus: Se on pakollinen ja muodostaa algoritmisen ajattelusi perustan. Ymmärrä, mitä se tarkoittaa, ja saavuta piste, jossa voit sanoa perusalgoritmin monimutkaisuuden vain katsomalla sitä.

2) Arrat: Sinun pitäisi tuntea jo tässä vaiheessa matriisien käsite. Tämä aihe viittaa ongelmiin, joissa matriisia käytetään vain säilytykseen ja ratkaisu sisältää perustekniikoita, kuten iterointia kahdella osoittimella. Klassinen ongelma on tarkistaa, onko annettu joukko permutaatio.

3) Merkkijonot: Osaa käsitellä merkkijonoa omalla kielelläsi ja tunne ongelmat, joissa pyydetään ketjuttamaan tai kiertämään niitä.

4) Linkitetyt listat: On tavallista, että haastattelussa törmää linkitettyjen listojen ongelmaan. Tässä sinun on kiinnitettävä erityistä huomiota kulmatapauksiin. Mieti, mitä tapahtuu, jos linkitetty lista on tyhjä? Tai siinä on vain yksi elementti? Tai haluat iteroida viimeiseen elementtiin asti? Kun ratkaiset ongelmaa linkitetyillä listoilla, mieti kulmatapauksia kahdesti.

5) Hash-taulukot: Perusdatarakenne, joka esiintyy useimmissa haastatteluissa. Jos menet syvemmälle yhteen aiheeseen, valitse hash-taulukot. Hallitse sujuvasti kielesi hash-taulukkokirjasto ja harjoittele vähintään viisi ongelmaa. Ota lopuksi vastaan tämä haaste: Miten löytäisit pisimmän alaruudun, jossa on erillisiä merkintöjä?

6) Pinot: Tutustu ajatukseen, että voit manipuloida vain pinon toista päätä. Ratkaise tämä haaste: Toteuta pino, jossa on MAX API, eli voit joka hetki kysyä, mikä on pinon suurin elementti.

7) Jonot: Älä sekoita niitä pinoihin, koska niillä on kaksi päätä. Toteuta klassinen ongelma jonon simuloinnista käyttämällä kahta pinoa.

8) Ahne: Tämä tekniikka on melko yksinkertainen ja käytät sitä luultavasti joka päivä. Sillä tarkoitetaan periaatteessa parhaan mahdollisen päätöksen tekemistä tietyllä hetkellä ottamatta huomioon tulevia seurauksia. Harjoittele muutamaa ongelmaa, äläkä ajattele, että mikä tahansa ongelma voidaan ratkaista Greedyllä.

9) Primitiiviset tyypit: Kyse on lähinnä bittikäsittelystä ja perusoperaatioista luvuilla. Joistakin ongelmista voi kuitenkin tulla varsin hankalia. Miten voit laskea ykkösten määrän binääriesityksessä?

10) Binääripuut: Keskity läpikäynteihin, yhteisiin esivanhempiin ja rekursiiviseen iterointiin puiden läpi.

11) Kasat: Niitä käytetään laajasti reaalimaailman sovelluksissa, joten tutustu kasoihin! Harjoittele, kunnes voit olla varma, milloin käyttää min- ja milloin max-kuoppaa. Miten tulostaisit viisi suurinta elementtiä lukujonosta? Käytätkö min-kuoppaa vai max-kuoppaa?

12) Haku: Haku on keskeinen aihe, joka kaikkien pitäisi osata. Harjoittele siis vähintään kolmea ongelmaa käyttäen binäärihakua.

13) Lajittelu: Varmista, että osaat toteuttaa mergesortin ja quicksortin. Tiedä hyvin niiden paras, keskimääräinen ja pahin mahdollinen monimutkaisuus. Jos sinulla on aikaa, opettele myös Heapsort.

14) Binäärihakupuut: Niitä kysytään laajasti koodaushaastattelussa, ja sinun on kyettävä toteuttamaan kaikki niiden perusoperaatiot, mukaan lukien elementin poistaminen!

15) Backtracking: Se tarkoittaa periaatteessa kaikkien mahdollisten ratkaisujen luomista ja niiden valitsemista, jotka täyttävät vaatimuksesi. Toteuta joukon potenssijoukon generaattori ja n-kuningattaren ongelma.

16) Graafit: Ne ovat luultavasti eniten käytetty tietorakenne tietojenkäsittelytieteessä. Tiesitkö, että jokainen sosiaalinen verkosto on vain valtava graafi? Harjoitellaan graafin kopion tekemistä muistiin ja syklien havaitsemista graafeissa.

17) Dynaaminen ohjelmointi: Useimmat pitävät dynaamista ohjelmointia pelottavimpana aiheena. Mutta se on kaunein, jos ymmärtää ajattelun sen takana. Harjoittele siis viittä yleisintä kysymystä ja pysy niiden parissa, kunnes ymmärrät, mistä toistuvuus johtuu.

Kurssilla, jota olen nyt luomassa, selitän jokaisen aiheen tässä järjestyksessä. Työstän kurssia vielä, mutta voit päästä tutustumaan joihinkin oppitunteihin etuajassa ja myös auttaa minua palautteellasi liittymällä kurssin Facebook-ryhmään.

Jos monet aiheet eivät ole sinulle tuttuja, se tarkoittaa, että sinun on aloitettava harjoittelu heti tämän artikkelin jälkeen. Älä enää etsi netistä muita oppaita, mene vain harjoittelemaan. Muista, että haastattelu on taistelu itseäsi vastaan, mitä enemmän harjoittelet, sitä suuremmat mahdollisuudet sinulla on voittaa. On sinusta itsestäsi kiinni, että kasvatat ongelmien mukavuusaluettasi.

Miten annat parhaasi koodaushaastattelussa?

Haastattelussa on viisi osaa, joita käsittelemme perusteellisesti. Katso selittävistä videoista oikeita esimerkkejä.

1) Esittely

Tämä osa aloittaa haastattelun, ja sen kesto on noin kolmesta viiteen minuuttia. Haastattelija haluaa tietää sinusta enemmän ja antaa sinulle mahdollisuuden esitellä itseäsi. Tyypillisesti häntä kiinnostaa, minkälaisten projektien parissa olet työskennellyt aiemmin ja mikä niistä oli vaikuttavin. Tämä on tilaisuutesi loistaa, joten älä tuhlaa sitä!

Älä yritä olla imarteleva. On helppo huomata valepersoona, joka yrittää huijata sinua. Minä ja kaikki muut vihaamme tällaisia ihmisiä, joten varmista, että näytät todellisen persoonallisuutesi.

Tiedä etukäteen, mitä aiot sanoa lempiprojektistasi, joten valmistaudu siihen ennen haastattelua. Nyt useimmat ihmiset sanovat vain kaksi lyhyttä lausetta, mikä on huono asia. Kummasta vastauksesta pidät enemmän?

1) ”Työskentelin verkkosovelluksen parempaan hallintaan sairaaloissa. Kirjoitin backendin Node.js:llä.”

Tavalla, jolla esität itsesi, on todella väliä

2) ”Eräässä projektissa, josta pidin todella paljon, oli kyse web-sovelluksen luomisesta Ison-Britannian kansalliselle terveydenhuoltopalvelulle, joka auttoi heitä hallitsemaan potilaita sairaalassa paremmin. Se oli osa yliopiston opetussuunnitelmaa, se kesti kaksi kuukautta, ja olen ollut kolmen hengen tiimin johtajana.”

Voimme projektin perusideasta ja teimme siitä todellisen sovelluksen. Olin vastuussa backendin koodaamisesta Node.js:ssä ja tietokannan koodaamisesta MongoDB:ssä. Se oli ensimmäinen sovellus, jonka olen koskaan luonut asiakkaalle, enkä tuntenut web-teknologioita. Kehitysprosessi oli iteratiivinen, ja teimme matkan varrella joitakin virheitä.

Loppujen lopuksi onnistuimme ylivoimaisesti monien ominaisuuksien kanssa, ja suosikkini on se, että käyttäjät voivat päivittää sairaalan huoneita sen sijaan, että ne olisivat kovakoodattuja.

Oppi monia asioita tästä projektista, erityisesti tiimityöskentelyä. Oli hetkiä, jolloin ilmeni teknisiä tai tiimiongelmia, mutta lopulta kaikki meni hyvin ja saimme vuoden korkeimman arvosanan!”

Käännä tämä esitys eduksesi! Haastattelija on todella kiinnostunut saamaan sinusta lisää tietoa, joten aloita esittelemällä projekti lyhyesti ja selittämällä, mistä siinä on kyse. Kerro sitten, mikä oli panoksesi (jos autoit tiimiä jollakin fiksulla idealla, kerro se!) ja mitä opit kehittämisprosessista. Voit myös mainita, mitä eroa sait aikaan käyttäjien kannalta.

Pitäisi puhua yksi-kaksi minuuttia projektistasi.

2) Ymmärrä ongelma

Haastattelija kertoo sinulle lyhyesti ongelmanasettelun, joka sinun pitää ratkaista. Sanoin ’lyhyesti’, koska hän ei kerro sinulle monia yksityiskohtia rajoituksista, kulmatapauksista tai siitä, miten saat tiedot. On osa työtäsi kysyä kaikkea, mitä tarvitset ongelman ratkaisemiseksi. Toista lausunto ääneen varmistaaksesi, että ymmärsit sen oikein.

Jätä kommentti