Intervievarea este o abilitate în sine. Poți să fii cel mai bun dezvoltator din lume, dar poți totuși să te descurci cu un interviu.

Da – dezvoltatorul care a creat Homebrew – unul dintre cele mai utilizate sisteme de gestionare a pachetelor din lume – a fost respins de la Google în timpul procesului de interviu pe tablă albă.

De câte ori ai ieșit dintr-un interviu și te-ai întrebat ce am greșit? De ce m-au respins?

Ca candidat, ajută foarte mult să înțelegem așteptările într-un interviu.

În acest articol, vreau să arăt fiecărui candidat care aspiră diferența dintre un interviu bun și unul rău și modul în care este perceput de intervievator.

Vom compara și vom contrasta două interviuri diferite și vom învăța de la fiecare dintre ele, astfel încât să vă puteți modifica acțiunile pentru a se potrivi cu așteptările.

Primul interviu

Permiteți-mi să iau aceeași întrebare de mai sus „Inversarea unui copac binar”.

Intervievator (I): Bună, Bine ați venit la compania noastră. Sunt xxx făcând aaaa. Deci, spune-mi despre tine.

Candidat (C) : Sunt xxx. Am aproximativ 5 ani de experiență în dezvoltarea Backend. Ador rezolvarea problemelor tehnice …..

Eu: Grozav. Deci, vom trece la partea de rezolvare a problemelor?

C: Sigur!

Eu: Deci ți se dă un copac binar. Vreau să inversați arborele binar și să imprimați arborele rezultat.

C: (Gândind în cap) Hmmm bine. Un copac binar are doi copii. Deci, presupun că inversarea înseamnă imprimarea de la frunză la rădăcină. Deci, cel mai simplu mod de a face acest lucru este să străbateți copacul până la capăt și să găsiți frunzele …

Eu: (După 5 minute de liniște completă) Înțelegi întrebarea? Ai nevoie de lămuriri?

C: Eu sunt clar. Acum mă gândesc doar la o modalitate de a imprima nodurile începând de la frunză.

Eu: Ce vrei să tipărești nodurile începând de la frunză?

C: Deci, în principiu, ar trebui să imprim de la frunză la rădăcină nu? Este ușor de parcurs până la frunze. Dar partea dificilă este trecerea înapoi?

Eu: Hmmm. Ești sigur că înțelegi întrebarea nu? Inversarea unui copac înseamnă că ar trebui schimbați copiii din stânga și din dreapta.

C: Scuze, nu sunt clar. Când ai spus inversează eu asumat v-ați referit la tipărirea de la frunză la rădăcină.

Eu: Este in regula (Aici ai pierdut slujba). Acum, că ești clar, să continuăm.

C: Da, sunt clar. Așa că acum trebuie să schimb nodurile stânga și dreapta. Este ușor, corect.
(Scrie cod în tăcere)

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

C: Am terminat cu codul.

Eu: Misto. Deci, ce ai făcut aici?

C: Am inversat arborele schimbând nodurile din stânga și din dreapta. Așa că păstrez o variabilă de temperatură pentru a obține același lucru.

Eu: (Încercarea de a împinge spre o soluție adecvată) Dar acest lucru schimbă doar nodul rădăcină nu?

C:(Nedumerit) Hmm da, deci copiii din stânga și din dreapta vor fi inversați. Aceasta este întrebarea, nu?

Eu: (Totuși, nu există nicio claritate în cauză) Deci, întrebarea este că arborele complet ar trebui inversat. Nu doar rădăcina.

C: Oh, dracu. Deci nu este doar rădăcina, ci arborele complet. Am dreptate?

Eu: Da, este corect.

C: O.K. Lasa-ma sa ma gandesc la asta.

(După 2 minute)

C: Cred că am înțeles. Deci, practic, trebuie să fac același algoritm pe care l-am scris pentru întregul copac. Am dreptate?

Eu: Da, dar cum faci asta?

C: (Începe să scrie cod)

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

Așa sunt și eu ghicind acest lucru ar trebui să funcționeze.

Eu: Hmmm, lasă-mă să văd. (Găsește problema. Poți?) Nu sunt sigur dacă funcționează. Poți să mă treci prin asta?

C: Sigur. Mai întâi inversez subarborele stâng, apoi subarborele drept și apoi le schimb astfel încât rădăcina să fie inversată.

Eu: Hmmm. Dar nodurile stânga și dreapta returnează noduri noi după swap, nu? Încă schimbați vechile noduri.

C: Nu sunt sigur ce vrei să spui prin asta. Cred că asta voi lucrează pentru toate cazurile.

Eu: Om mare! Ne-a rămas fără timp. Mulțumesc pentru timpul acordat, a fost minunat să vorbesc cu tine. HR vă va întoarce.

Părere

Acum, care credeți că a fost decizia finală și care a fost feedback-ul intervievatorului? Feedback-ul ipotetic ar fi ceva în acest fel:

  • Candidatul și-a asumat o mulțime de lucruri și nu a clarificat problema.
  • Candidatul a venit cu abordarea de nicăieri și nu a existat un raționament adecvat în spatele abordării luate. (Vă amintiți tăcerea din interviu?)
  • Candidatul nu a fost clar cu cerințele nici măcar în etapa de implementare.
  • Candidatul s-a luptat cu implementarea și nu a reușit să primească indicii care să indice soluția.
  • Candidatul nu a reușit să identifice erorile din cod, chiar și după ce a oferit suficient timp și a încercat să verifice dacă soluția este corectă.

Dacă acesta ar fi un interviu propriu-zis, candidatul ar fi fost respins. Acum, cum ar trebui să meargă interviul ideal?

Al doilea interviu

Intervievator (I): Bună, Bine ați venit la compania noastră. Sunt xxx făcând aaaa. Deci, spune-mi despre tine.

Candidat (C) : Sunt xxx. Am aproximativ 5 ani de experiență în dezvoltarea Backend. Ador rezolvarea problemelor tehnice …..

Eu: Grozav. Deci, vom trece la partea de rezolvare a problemelor?

C: Sigur!

Eu: Deci ți se dă un copac binar. Vreau să inversați arborele binar și să imprimați arborele rezultat.

C: (Gândind cu voce tare) Misto. Deci un arbore binar are două noduri. Deci, ce anume inversează? schimbă stânga și dreapta?

Eu: Exact. Deci, nodul stâng ar trebui să fie în dreapta și invers.

C: O.K. Deci, în acest caz, ce se întâmplă?

Oferă un exemplu și clarifică intrarea și ieșirea

Eu: Ai dreptate într-o oarecare măsură. Dar acest lucru ar trebui să se întâmple pentru întregul copac, nu doar pentru rădăcină.(Observați cât de devreme s-au solidificat cerințele)

C: Oh, am înțeles! Așa că mă gândesc că trebuie să o fac recursiv. Omule, e greu! Stați să văd. Dar înainte de asta, îmi voi verifica doar înțelegerea parcurgând încă un exemplu.
Oferă încă unul, de exemplu, pentru a clarifica orice piesă lipsă

Eu: Da ai dreptate. Acesta este rezultatul. Cred că ai rezolvat problema complet. Deci, cum o abordezi?

C: Stați să văd. Deci, pentru a schimba stânga și dreapta, pot folosi doar o temperatură. Dar atunci cum o voi face pentru a rămâne? Oh, aș putea să mă învârt pentru ceilalți și să fac la fel.

Eu: Misto. Există vreo problemă cu această abordare?

C: Hmmm. Da, dacă schimb doar recursiv stânga și dreapta, cum voi urmări arborele vechi și nou?

Eu: Nu sunt sigur că te urmăresc. Ce este vechi și nou?

C: Ceea ce am vrut să spun este că vor exista copii actualizați, trebuie să îi schimb și nu copiii bătrâni.

Eu: Da, corect.

C: Da, pot doar să apelez această funcție recursiv pentru stânga și dreapta și să stochez acele valori într-o variabilă. Aș putea apoi să actualizez arborele cu acele variabile. În acest fel mă pot asigura că întregul copac este inversat.

Eu: Misto. Mai lipsești ceva?

C: Nu, cred. Deci va dura O (n) timp și O (1) spațiu, deoarece nu folosesc niciun spațiu suplimentar.(Observați cât de proactiv candidatul discută timpul și spațiul)

Eu: Sunt bine. Puteți începe codarea.

C: Sigur. (Vorbește prin cod în timp ce codificați)

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

C: Deci am terminat. Lasă-mă să te ghidez prin codul meu. Deci pentru un copac ca …(Explică și rulează uscat cu un exemplu)

Eu: Banuiesc ca ai dreptate. Funcționează pentru toate cazurile?

C: Hmmm. Cred că voi obține excepția indicatorului Null pentru un copac gol. Permiteți-mi să remediez acest lucru adăugând o verificare nulă.

Eu: Acum arată bine. Orice altceva îți lipsește.

C: Nu, cred că am acoperit alte lucruri ca fără frunze, o frunză etc.(Observați cum apelează la fiecare caz pe care l-a considerat)

Eu: Misto. Sunt bun. Alte intrebari? 🙂

Părere

Deci, ce părere aveți despre acest interviu?

  • Candidatul a clarificat cerințele înainte de a începe implementarea.
  • De asemenea, candidatul a înghețat cerințele examinând câteva exemple și clarificându-și înțelegerea.
  • Candidatul a venit cu o soluție de lucru fără nicio sondare.
  • Candidatul a discutat proactiv despre complexitatea timpului și spațiului.
  • În timp ce codifica, candidatul avea o viziune clară a ceea ce făcea și unde se îndrepta.
  • Candidatul avea o eroare în codul său și, când i s-a cerut să verifice erori, a găsit eroarea și a remediat-o singură.

Concluzie

Intervievarea este o abilitate complet diferită de cea de codare. Chiar dacă sunteți priceput la rezolvarea problemelor, interviul este un cadru în care intervievatorul încearcă să decidă între angajarea dvs. sau nu. Deci, pe lângă codificare, trebuie să înțelegeți și perspectiva persoanei intervievatorului, astfel încât să vă faciliteze angajarea. În acest articol, am vrut să compar și să contrastez un interviu bun față de unul mediocru. Încercați să exersați abilitățile de interviu separat, cu cât practicați mai mult, cu atât vă pricepeți mai bine. Poti întinde mâna pentru mine dacă aveți nevoie de ajutor pentru a face interviuri simulate.

Acest articol a fost publicat pentru prima dată pe http://kaizencoder.com. Dacă ți-a plăcut acest articol, te rog vizita pentru a citi mai multe așa sau pentru a afla mai multe despre mine!