Interviu užkulisių kodavimas - geras ir blogas

Interviu yra savaiminis įgūdis. Galite būti geriausias kūrėjas pasaulyje, bet vis tiek galite sugadinti interviu.

„Google“: 90% mūsų inžinierių naudoja jūsų parašytą programinę įrangą („Homebrew“), tačiau jūs negalite apversti dvejetainio medžio ant lentos taip, kad nusiramintumėte.

- Maxas Howellas (@mxcl) 2015 m. Birželio 10 d

Kiek kartų išėjai iš interviu ir galvoji, ką aš padariau ne taip? Kodėl jie mane atmetė?

Kaip kandidatas, tai labai padeda suprasti interviu lūkesčius.

Šiame straipsnyje noriu kiekvienam pretenduojančiam kandidatui parodyti skirtumą tarp gero ir blogo interviu ir kaip jį vertina pašnekovas.

Palyginsime ir palyginsime du skirtingus interviu ir pasimokysime iš kiekvieno, kad galėtumėte pakoreguoti savo veiksmus, kad atitiktų lūkesčius.

Pirmasis interviu

Leiskite man atsakyti į tą patį klausimą aukščiau „Dvejetainio medžio apvertimas“.

Pašnekovas (I) : Sveiki, Sveiki atvykę į mūsų įmonę. Aš xxx darau yyy. Taigi papasakok man apie save.

Kandidatas (C) : Aš esu xxx. Turiu apie 5 metų „Backend“ kūrimo patirtį. Man patinka spręsti technines problemas ...

: Puiku. Taigi ar pereisime prie problemų sprendimo dalies?

C : Aišku!

I : Taigi jums duotas dvejetainis medis. Noriu, kad apverttumėte dvejetainį medį ir atspausdintumėte gautą medį.

C : (Galvoju galvoje) Hmmm Gerai. Dvejetainis medis turi du vaikus. Taigi aš darau prielaidą, kad atvirkštinė reiškia spausdinimą nuo lapo iki šaknies. Taigi paprasčiausias būdas tai padaryti yra sukryžiuoti medį iki galo ir rasti lapus ...

: (Po 5 minučių visiškos tylos)  Ar supranti klausimą? Ar jums reikia paaiškinimo?

C : Aš aišku . Dabar aš tik galvoju, kaip atspausdinti mazgus, pradedant nuo lapo.

I : Ką reiškia atspausdinti mazgus pradedant nuo lapo?

C : Taigi iš esmės turėčiau spausdinti nuo lapo iki šaknies, tiesa? Lengva pereiti iki lapo. Bet sunkiausia dalis keliauja atgal?

: Hmmm. Ar tikrai suprantate klausimą teisingai? Medžio apvertimas reiškia, kad turėtumėte sukeisti kairįjį ir dešinįjį vaikus .

C : Atsiprašau, man neaišku. Kai pasakėte invertą, aš maniau, kad turite omenyje spausdinimą nuo lapo iki šaknies.

: viskas gerai (čia jūs praradote darbą) . Dabar, kai jums viskas aišku, eikime toliau.

C : Taip, aš aišku. Taigi dabar turiu sukeisti kairįjį ir dešinįjį mazgus. Tai lengva, tiesa.

(Rašo kodą tylėdamas)

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

C : Aš baigiau kodą.

: kietas. Taigi, ką tu čia padarei?

C : Apversčiau medį sukeisdamas kairįjį ir dešinįjį mazgus. Taigi aš laikau temp kintamąjį, kad pasiekčiau tą patį.

: (Bandau judėti tinkamo sprendimo link) Bet tai keičia tik šaknies mazgą?

C : (suglumęs) Hmm taip, taigi kairieji ir dešinieji vaikai bus apversti. Tai klausimas teisingas?

: (Vis dar nėra aiškumo) Klausimas yra tai, kad visas medis turėtų būti apverstas. Ne tik šaknis.

C : O gi. Taigi tai ne tik šaknis, bet ir visas medis. Ar aš teisus?

I : Taip, tai teisinga.

C : Gerai. Leisk man apie tai pagalvoti.

(Po 2 min.)

C : Manau, kad supratau. Taigi iš esmės man reikia atlikti tą patį algoritmą, kurį parašiau visam medžiui. Ar aš teisus?

I : Taip, bet kaip tu tai darai?

C : (pradeda rašyti kodą)

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

Taigi spėju, kad tai turėtų veikti.

: Hmmm, leisk man pamatyti. (Randa problemą. Ar galite?) Nesu tikras, ar jis veikia. Ar galėtumėte mane paleisti?

C : Aišku. Pirmiausia apverčiu kairįjį, po to dešinįjį medį, tada sukeičiu juos taip, kad šaknis būtų apverstas.

: Hmmm. Bet kairysis ir dešinysis mazgai grąžina naujus mazgus po apsikeitimo dešine? Jūs vis dar keičiate senus mazgus.

C : Nesu tikras, ką tu tuo nori pasakyti. Manau, kad tai bus tinkama visais atvejais.

: Puikus žmogus! Mums pritrūko laiko. Ačiū už jūsų laiką, buvo malonu su jumis kalbėtis. HR susisieks su jumis.

Atsiliepimas

Kaip manote, koks buvo galutinis sprendimas ir kokie buvo pašnekovo atsiliepimai? Hipotetinis grįžtamasis ryšys būtų kažkas panašaus:

  • Kandidatas prisiėmė daug dalykų ir problemos neišsiaiškino.
  • Kandidatas sugalvojo požiūrį iš niekur, o už pasirinktą požiūrį nebuvo tinkamų argumentų. (Prisimeni tylą interviu metu?)
  • Kandidatui net įgyvendinimo etape nebuvo aiškūs reikalavimai.
  • Kandidatas kovojo su įgyvendinimu ir jis negalėjo pasiimti užuominų, nukreipiančių į sprendimą.
  • Kandidatas nesugebėjo nustatyti klaidų kode, net suteikęs pakankamai laiko ir patikrinęs, ar sprendimas teisingas.

Jei tai būtų tikras interviu, kandidatas būtų atmestas. Dabar kaip turėtų vykti idealus interviu?

Antrasis interviu

Pašnekovas (I) : Sveiki, Sveiki atvykę į mūsų įmonę. Aš xxx darau yyy. Taigi papasakok man apie save.

Kandidatas (C) : Aš esu xxx. Turiu apie 5 metų „Backend“ kūrimo patirtį. Man patinka spręsti technines problemas ...

: Puiku. Taigi ar pereisime prie problemų sprendimo dalies?

C : Aišku!

I : Taigi jums duotas dvejetainis medis. Noriu, kad apverttumėte dvejetainį medį ir atspausdintumėte gautą medį.

C : (Galvoju garsiai) Kietas. Taigi dvejetainis medis turi du mazgus. Taigi, kas yra atvirkštinė? ar tai sukeisti kairę ir dešinę?

: tiksliai. Taigi kairysis mazgas turėtų būti dešinėje ir atvirkščiai.

C : Gerai. Taigi, kas nutiks šiuo atveju?

Pateikia pavyzdį ir paaiškina įvestį ir išvestį

I : Jūs esate tam tikra prasme teisus. Bet tai turėtų atsitikti visam medžiui, ne tik šaknims. (Atkreipkite dėmesį, kaip anksti reikalavimai buvo įtvirtinti)

C : O supratai! Taigi aš galvoju, kad tai turiu daryti rekursiškai. Žmogau, tai sunku! Leisk pažiūrėti. Bet prieš tai aš tiesiog patikrinsiu savo supratimą, pateikdamas dar vieną pavyzdį.

Pateikia dar vieną, pvz., Kad būtų galima išsiaiškinti trūkstamus gabalus

I : Taip tu teisus. Tai yra rezultatas. Manau, kad jūs visiškai supratote problemą. Taigi kaip prie jo prieiti?

C : Leisk man pamatyti. Taigi, norėdamas sukeisti kairę ir dešinę, galiu naudoti tik temp. Bet kaip tada padarysiu, kad likčiau? Oi, aš galėčiau tiesiog atsikartoti kitiems ir daryti tą patį.

: kietas. Ar yra kokių nors problemų dėl tokio požiūrio?

C : Hmmm. Taip, jei aš tiesiog rekursyviai pakeisiu kairę ir dešinę, kaip seksiu seną ir naują medį?

: nesu tikras, ar seku tave. Kas yra sena ir nauja?

C : Aš turėjau omenyje tai, kad bus atnaujintų vaikų, turiu juos pakeisti, o ne senus vaikus.

I : Taip, teisingai.

C : Taip, aš tiesiog galiu vadinti šią funkciją rekursiškai kairėje ir dešinėje ir išsaugoti tas reikšmes kintamajame. Tada galėčiau atnaujinti medį su tais kintamaisiais. Tokiu būdu galiu įsitikinti, kad visas medis yra apverstas.

: kietas. Dar ko nors trūksta?

C : Ne, aš manau. Taigi tam reikės O (n) laiko ir O (1) vietos, nes aš nenaudoju jokios papildomos vietos. (Atkreipkite dėmesį, kaip proaktyviai kandidatas aptaria laiką ir erdvę)

: man viskas gerai. Galite pradėti koduoti.

C : Aišku. (Koduodamas kalba per kodą)

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

C : Taigi aš baigiau. Leiskite man pervesti jus per mano kodą. Taigi tokiam medžiui kaip ... (Paaiškina ir parodo sausus bėgimus)

: spėju, kad tu teisus. Ar tai tinka visais atvejais?

C : Hmmm. Spėju, kad tuščiam medžiui gausiu „Null“ žymeklio išimtį. Leiskite man tai ištaisyti pridėjus niekinį patikrinimą.

: Dabar atrodo gerai. Visko, ko jums trūksta.

C : Ne, aš manau, kad kiti dalykai, kuriuos aš padengiau, pvz., Nėra lapų, vieno lapo ir kt. (Atkreipkite dėmesį, kaip jis šaukia kiekvieną svarstytą atvejį)

: kietas. Aš esu geras. Turite klausimų? :)

Atsiliepimas

Taigi, ką tu galvoji apie šį interviu?

  • Prieš pradėdamas įgyvendinti, kandidatas patikslino reikalavimus.
  • Kandidatas taip pat įšaldė reikalavimus, pateikdamas keletą pavyzdžių ir patikslindamas savo supratimą.
  • Kandidatas pasiūlė veikiantį sprendimą be jokių tyrimų.
  • Kandidatas aktyviai diskutavo apie laiko ir erdvės sudėtingumą.
  • Koduodamas kandidatas turėjo aiškią viziją, ką jis daro ir kur eina.
  • Kandidato kode buvo klaida, o paprašytas patikrinti, ar nėra klaidų, jis rado klaidą ir ją ištaisė patys.

Išvada

Interviu yra visiškai kitoks nei kodavimo įgūdis. Nors jums sekasi spręsti problemas, interviu yra ta aplinkybė, kai pašnekovas bando apsispręsti, ar jus priimti į darbą, ar ne. Taigi, be kodavimo, taip pat turite suprasti pašnekovo požiūrį, kad jam būtų lengviau jus įdarbinti. Šiame straipsnyje norėjau palyginti ir palyginti gerą interviu su vidutiniu. Pabandykite praktikuoti interviu įgūdžius atskirai, nes kuo daugiau praktikuojate, tuo geriau tai pasiekiate. Galite kreiptis į mane, jei jums reikia pagalbos imantis pašaipių interviu.

Šis straipsnis pirmą kartą buvo paskelbtas //kaizencoder.com. Jei jums patiko šis straipsnis, apsilankykite ir perskaitykite daugiau panašių į mane arba sužinokite daugiau apie mane!