Haastattelujen koodaus kulissien takana - hyviä ja huonoja

Haastattelu on itsessään taito. Voit olla paras kehittäjä maailmassa, mutta saatat silti haistaa haastattelun.

Google: 90% insinööreistämme käyttää kirjoittamaasi ohjelmistoa (Homebrew), mutta binääripuuta ei voi kääntää taululle niin vittu.

- Max Howell (@mxcl) 10. kesäkuuta 2015

Kuinka monta kertaa olet tullut haastattelusta ja miettinyt, mitä tein väärin? Miksi he hylkäsivät minut?

Ehdokkaana se auttaa paljon ymmärtämään haastattelun odotukset.

Tässä artikkelissa haluan näyttää jokaiselle hakijalle eron hyvän ja huonon haastattelun välillä ja siitä, miten haastattelija näkee sen.

Vertaamme ja vertaamme kahta erilaista haastattelua ja opimme jokaisesta, jotta voit säätää tekojasi vastaamaan odotuksia.

Ensimmäinen haastattelu

Haluan ottaa saman kysymyksen edellä "Binaaripuun kääntäminen".

Haastattelija (I) : Hei, Tervetuloa yhtiöömme. Olen xxx tekemässä yyy. Niin kerro itsestäsi.

Ehdokas (C) : Olen xxx. Minulla on noin 5 vuoden kokemus Backend-kehityksestä. Rakastan ratkaista teknisiä ongelmia ...

I : Se on hienoa. Joten siirrymmekö ongelmanratkaisuosaan?

C : Toki!

I : Joten sinulle annetaan binääripuu. Haluan sinun kääntävän binääripuun ja tulostamaan tuloksena olevan puun.

C : (Ajattelee päähän) Hmmm Ok. Binaaripuussa on kaksi lasta. Joten oletan, että käänteinen tarkoittaa tulostamista lehdeltä juurelle. Joten helpoin tapa tehdä se on kuljettaa puu loppuun asti ja löytää lehdet ...

I : (5 minuutin täydellisen hiljaisuuden jälkeen)  Ymmärrätkö kysymyksen? Tarvitsetko selvennystä?

C : Olen selvä . Nyt ajattelen vain tapaa tulostaa solmut lehdestä alkaen.

I : Mitä tarkoitat tulostaa solmut lehdestä alkaen?

C : Joten minun pitäisi pohjimmiltaan tulostaa lehdestä juureen? Se on helppo kuljettaa lehteen asti. Mutta kova osa kulkee takaisin?

I : Hmmm. Oletko varma, että ymmärrät kysymyksen oikein? Puun kääntäminen tarkoittaa, että sinun on vaihdettava vasen ja oikea lapsi .

C : Anteeksi, en ole selvä. Kun sanoit käänteisen, oletin, että tarkoitit tulostamista lehdestä juureen.

I : Se on kunnossa (tässä menetit työpaikan) . Nyt kun olet selvä, jatketaan.

C : Kyllä, olen selvä. Joten nyt minun on vaihdettava vasen ja oikea solmu. Se on helppoa.

(Kirjoittaa koodin hiljaa)

def invert(node) t = node.left node.left = node.right node.right = t return node end 

C : Olen valmis koodin kanssa.

I : Siistiä. Joten mitä olet tehnyt täällä?

C : Olen kääntänyt puun vaihtamalla vasenta ja oikeaa solmua. Joten pidän lämpötilamuuttujaa saavuttaakseni saman.

I : (Yritetään siirtyä kohti oikeaa ratkaisua) Mutta tämä vaihtaa vain juurisolmun oikein?

C : (Hämmentynyt) Hmm kyllä, joten vasen ja oikea lapsi käännetään ylösalaisin. Onko kysymys oikea?

I : (Still ei ole selvyyttä kyseessä) Joten kysymys on täydellinen puu tulee käännellä. Ei vain juuri.

C : Voi helvetti. Joten se ei ole vain juuri, vaan koko puu. Olenko oikeassa?

I : Kyllä, se on oikein.

C : Okei. Anna minun ajatella sitä.

(2 minuutin kuluttua)

C : Luulen, että sain sen. Joten minun on periaatteessa tehtävä sama algoritmi, jonka kirjoitin koko puulle. Olenko oikeassa?

I : Kyllä, mutta miten teet sen?

C : (Aloittaa koodin kirjoittamisen)

def invert(node) n = Node.new(node.val) invert(node.left) invert(node.right) n.left = node.right n.right = node.left return n end

Joten olen arvaamaan tämän pitäisi toimia.

I : Hmmm, anna minun nähdä. (Löytää ongelman. Voitteko?) En ole varma, toimiiko se. Voitteko ajaa minut läpi sen?

C : Toki. Ensin käännän vasemman alipuun, sitten oikean alipuun ja sitten vaihdan ne siten, että juuri on käänteinen.

I : Hmmm. Mutta vasen ja oikea solmu palauttavat uusia solmuja vaihdon jälkeen oikealle? Vaihdat edelleen vanhoja solmuja.

C : En ole varma, mitä tarkoitat tällä. Uskon, että tämä tulee toimi kaikissa tapauksissa.

I : Suuri mies! Aika on loppunut. Kiitos ajastasi, oli mukavaa puhua kanssasi. HR palaa sinuun.

Palaute

Mikä oli mielestäsi lopullinen päätös ja mikä oli haastattelijan palaute? Hypoteettinen palaute olisi jotain näistä linjoista:

  • Ehdokas oletti paljon asioita eikä selvittänyt ongelmaa.
  • Ehdokas esitti lähestymistavan tyhjästä, eikä lähestymistavan takana ollut asianmukaista perustelua. (Muistatko haastattelun hiljaisuuden?)
  • Ehdokas ei ollut selvillä vaatimuksista edes toteutusvaiheessa.
  • Ehdokas kamppaili toteutuksen kanssa, eikä hän kyennyt hakemaan ratkaisuun viittaavia vihjeitä.
  • Ehdokas ei tunnistanut koodivirheitä, vaikka hänellä olisi ollut riittävästi aikaa ja tutkittu, onko ratkaisu oikea.

Jos tämä olisi todellinen haastattelu, ehdokas olisi hylätty. Kuinka ihanteellisen haastattelun pitäisi mennä?

Toinen haastattelu

Haastattelija (I) : Hei, Tervetuloa yhtiöömme. Olen xxx tekemässä yyy. Niin kerro itsestäsi.

Ehdokas (C) : Olen xxx. Minulla on noin 5 vuoden kokemus Backend-kehityksestä. Rakastan ratkaista teknisiä ongelmia ...

I : Se on hienoa. Joten siirrymmekö ongelmanratkaisuosaan?

C : Toki!

I : Joten sinulle annetaan binääripuu. Haluan sinun kääntävän binääripuun ja tulostamaan tuloksena olevan puun.

C : (Ajattelu ääneen) Viileä. Binaaripuussa on siis kaksi solmua. Joten mikä on käänteinen? onko se vasemman ja oikean vaihtaminen?

I : Aivan. Joten vasemman solmun tulisi olla oikealla ja päinvastoin.

C : Okei. Joten tässä tapauksessa mitä tapahtuu?

Tarjoaa esimerkin ja selventää tuloa ja lähtöä

I : Olet jossain määrin oikeassa. Mutta tämän pitäisi tapahtua koko puulle, ei vain juurelle yksin. (Huomaa, kuinka aikaisin vaatimukset vahvistettiin)

C : Voi ymmärtää! Joten ajattelen, että minun on tehtävä se rekursiivisesti. Mies, se on kova! Annas kun katson. Mutta ennen sitä tarkistan vain ymmärrykseni käymällä läpi yhden muun esimerkin.

Tarjoaa yhden muun esimerkiksi puuttuvien kappaleiden selvittämiseksi

I : Kyllä, olet oikeassa. Se on tuotos. Luulen, että sinulla on ongelma kokonaan. Joten miten lähestyt sitä?

C : Anna minun nähdä. Joten voin vaihtaa vasemmalle ja oikealle, voin vain käyttää lämpötilaa. Mutta miten sitten teen sen jäljellä olevan? Voi, voisin vain toistaa muita ja tehdä samoin.

I : Siistiä. Onko tässä lähestymistavassa ongelmia?

C : Hmmm. Kyllä, jos vaihdan vain vasemmalle ja oikealle rekursiivisesti, miten aion seurata vanhaa ja uutta puuta?

I : En ole varma, että seuraan sinua. Mikä on vanha ja uusi?

C : Tarkoitin, että päivitettyjä lapsia on, minun täytyy vaihtaa heidät enkä vanhoja lapsia.

I : Kyllä, oikein.

C : Kyllä, voin vain kutsua tätä funktiota rekursiivisesti vasemmalle ja oikealle ja tallentaa nämä arvot muuttujaan. Voisin sitten päivittää puun näillä muuttujilla. Näin voin varmistaa, että koko puu on ylösalaisin.

I : Siistiä. Mitä muuta sinulta puuttuu?

C : Ei luulen. Joten se vie O (n) aikaa ja O (1) tilaa, koska en käytä ylimääräistä tilaa. (Huomaa, kuinka ennakoivasti ehdokas keskustelee ajasta ja paikasta)

I : Olen kunnossa. Voit aloittaa koodauksen.

C : Toki. (Puhuu koodin läpi koodaamisen aikana)

def invert(node) invert(node.left) invert(node.right) node.left,node.right = node.right, node.left return node end 

C : Joten olen valmis. Anna minun käydä läpi koodini. Joten puulle, kuten ... (Selittää ja kuivaa ajetaan esimerkillä)

I : Luulen, että olet oikeassa. Toimiiko se kaikissa tapauksissa?

C : Hmmm. Luulen saan tyhjän puun Null-osoittimen poikkeuksen. Haluan korjata asian lisäämällä tyhjä tarkistus.

I : Nyt se näyttää hyvältä. Kaikki muu mitä kaipaat.

C : Ei, luulen muita asioita, että olen käsitellyt kuin mikään lehtiä, yksi lehti, jne (Huomaa, kuinka hän huutaa kussakin tapauksessa hän piti)

I : Siistiä. Olen hyvä. Kysymyksiä? :)

Palaute

Joten mitä mieltä olet tästä haastattelusta?

  • Ehdokas selvitti vaatimukset ennen täytäntöönpanon aloittamista.
  • Ehdokas myös jäädytti vaatimukset käymällä läpi muutamia esimerkkejä ja selventämällä ymmärrystään.
  • Ehdokas esitti toimivan ratkaisun ilman mitään koetta.
  • Ehdokas keskusteli ennakoivasti ajan ja avaruuden monimutkaisuudesta.
  • Koodaamisen aikana ehdokkaalla oli selkeä näkemys siitä, mitä hän teki ja minne hän oli menossa.
  • Ehdokkaan koodissa oli virhe, ja kun häntä pyydettiin tarkistamaan virheet, hän löysi virheen ja korjasi sen itse.

Johtopäätös

Haastattelu on täysin erilainen taito kuin koodaus. Vaikka osaat ongelmanratkaisussa, haastattelu yrittää päättää, palkkaako sinut vai ei. Joten koodaamisen lisäksi sinun on myös ymmärrettävä haastattelijan näkökulma, jotta hänen on helppo palkata sinut. Tässä artikkelissa halusin verrata ja vertailla hyvää haastattelua keskinkertaiseen. Yritä harjoittaa haastattelutaitoja erikseen, koska mitä enemmän harjoittelet, sitä paremmin saat siihen aikaan. Voit ottaa yhteyttä minuun, jos tarvitset apua haastattelujen tekemisessä.

Tämä artikkeli julkaistiin ensimmäisen kerran osoitteessa //kaizencoder.com. Jos pidit tästä artikkelista, käy lukemassa lisää tältä tai oppia lisää minusta!