Cel mai mare concurs de programare din Europa de Nord-Vest Mă numesc Andrei și sunt programator de competiție în ultimii cinci ani. Am participat la finala mondială a Google HashCode, cea mai mare competiție de algoritmică organizată de Google, iar înainte de asta, am câștigat trei medalii de aur la Olimpiada de informatică din România. Având această experiență, am publicat cursul online „Introduction to Algorithms and Data Structures in C++” care a ajutat peste 8000 de studenți din 135 de țări cu primii lor pași în domeniu.
Acum studiez Informatică la University College London și între timp, creez un curs pentru a ajuta studenții și tinerii profesioniști să se pregătească pentru interviul de programare în marile companii de tehnologie. Prin urmare, în acest articol, vreau să vă împărtășesc experiența mea cu interviul de codificare și să vă spun care este cea mai directă cale de a-l trece. Mă puteți contacta aici.
Dați-mi voie să vă pun o întrebare: ați visat vreodată să lucrați într-o mare companie de tehnologie, precum Microsoft? Dacă da, fii sigur că și cei mai mulți dintre noi am făcut-o. Și pentru că există o cerere atât de mare pentru câteva zeci de locuri de muncă, au nevoie de o modalitate de a vedea care candidați sunt mai bine pregătiți.
Până să fii invitat la interviul de codare, trebuie să aplici pentru postul respectiv și să ai un CV care să strălucească printre ceilalți. În acest articol, voi vorbi despre interviul de codare propriu-zis și despre cum vă puteți pregăti pentru el, și nu despre procesul de aplicare pentru postul respectiv.
Pentru majoritatea companiilor de tehnologie, interviul de codare constă în probleme de Algoritmi & Structuri de date. Gândiți-vă la acestea ca la întrebări de rezolvare a problemelor, în care intervievatorul caută să vă evalueze capacitatea de a rezolva o problemă pe care nu ați mai văzut-o până acum. Un interviu durează aproximativ 45 de minute și vi se oferă una sau două probleme de codificare. Intervievatorul se așteaptă să găsiți soluția cea mai optimă, să o codificați și să explicați ceea ce tocmai ați codificat.
În cele din urmă, veți avea șansa de a-i pune câteva întrebări despre companie sau despre orice altceva care vă interesează. Vom discuta pe larg toți acești pași în ultima parte a acestui articol.
Cum să te pregătești pentru interviul de codare?
Vreau să fiu clar cu tine de la început: nu există o scurtătură sau un truc pentru a trece interviul. Singura modalitate de a găsi soluții optime la problemele de algoritmică este exersând, rezolvând cât mai multe probleme.
În două cuvinte, este o muncă grea.
S-ar putea să nu vă placă și să începeți să căutați în altă parte un truc pentru a înțelege cum să rezolvați întrebările de la interviu, dar acesta nu există. Gândiți-vă o secundă: dacă ar exista un astfel de truc, de ce nu l-ar folosi toată lumea și nu ar trece interviul?
Deci, trebuie să înțelegeți că singura variabilă a trecerii interviului este cât de mult exersați înainte. Experiența ta, inteligența și toate celelalte sunt deja stabilite. Prin urmare, timpul dedicat practicii va face diferența între candidații care trec și cei care nu trec.
Interviul de codare este o luptă cu tine însuți, iar singura modalitate de a-l câștiga este să exersezi mult.
Primul pas este să vă simțiți confortabil cu un limbaj de codare obișnuit, cum ar fi C/C++, Java sau Python. Unele companii acceptă și alte limbaje, iar majoritatea clară se limitează la aceste trei. Alegeți-l pe cel care vă place cel mai mult și rămâneți cu el. Nu vă decideți la jumătatea pregătirii că vreți să schimbați limbajul! Pentru restul articolului, voi presupune că ați ales un limbaj și că îi cunoașteți bine sintaxa.
Acum, de obicei, interviul de codare se referă la Algoritmi și Structuri de date. Acestea includ câteva subiecte fundamentale pe care trebuie să le înțelegeți temeinic și nici nu vă gândiți să mergeți la interviu fără să vă simțiți confortabil cu ele.
Mai jos există o listă cu Algoritmi și Structuri de date pe care trebuie să le cunoașteți. Le-am scris în ordinea importanței lor și aceasta este cea mai bună cale de învățare.
1) Complexitatea Big O: Este o necesitate și formează baza fundamentală a gândirii dumneavoastră algoritmice. Înțelegeți ce înseamnă și ajungeți în punctul în care puteți spune complexitatea unui algoritm de bază doar uitându-vă la el.
2) Array-uri: Ar trebui să fiți familiarizat cu conceptul de array-uri în acest moment. Acest subiect se referă la probleme în care array-ul este folosit doar pentru stocare și soluția include tehnici de bază, cum ar fi iterarea cu doi pointeri. O problemă clasică este aceea de a verifica dacă o matrice dată este o permutare.
3) Șiruri de caractere: Știți cum să manipulați un șir de caractere în limbajul dumneavoastră și fiți familiarizați cu problemele care vă cer să le concatenați sau să le rotiți.
4) Liste legate: Este obișnuit să întâlniți la interviu o problemă de liste legate. Aici trebuie să acordați o atenție deosebită cazurilor de colț. Gândiți-vă ce se întâmplă dacă lista legată este goală? Sau are doar un singur element? Sau doriți să iterați până la ultimul element? Atunci când rezolvați o problemă cu liste legate, gândiți-vă de două ori la cazurile colțuroase.
5) Hash Tables: Structură de date fundamentală care este prezentă în majoritatea interviurilor. Dacă aprofundați un subiect, alegeți tabelele hash. Cunoașteți fluent biblioteca de tabele hash din limbajul dumneavoastră și exersați cel puțin cinci probleme. La final, acceptați această provocare: Cum ați găsi cel mai lung subarray cu intrări distincte?
6) Stive: Familiarizați-vă cu ideea că puteți manipula doar un capăt al stivei. Rezolvați această provocare: Implementați o stivă cu un API MAX, ceea ce înseamnă că în fiecare moment puteți întreba care este elementul maxim din stivă.
7) Cozi: Nu le confundați cu stivele, deoarece acestea au două capete. Implementați problema clasică de simulare a unei cozi folosind două stive.
8) Greedy: Această tehnică este destul de simplă și probabil că o folosiți în fiecare zi. Practic, se referă la luarea celei mai bune decizii posibile la un moment dat, fără a lua în considerare consecințele viitoare. Exersați câteva probleme și nu vă gândiți că orice problemă poate fi rezolvată folosind Greedy.
9) Tipuri primitive: Se ocupă în principal de manipularea biților și de operațiile de bază asupra numerelor. Cu toate acestea, unele probleme pot deveni destul de complicate. Cum se poate număra numărul de 1 într-o reprezentare binară?
10) Arbori binari: Concentrați-vă pe traversări, strămoși comuni și iterați recursiv prin arbori.
11) Heaps: Sunt utilizate pe scară largă în aplicații din lumea reală, așa că învățați să cunoașteți heaps! Exersați până când puteți fi siguri când să folosiți un min-heap sau un max-heap. Cum ați putea tipări cele mai mari cinci elemente dintr-o secvență de numere? Folosiți un min-heap sau un max-heap?
12) Căutarea: Căutarea este un subiect de bază pe care toată lumea ar trebui să îl cunoască. Așadar, exersați cel puțin trei probleme folosind căutarea binară.
13) Sortare: Asigurați-vă că puteți să implementați mergesort și quicksort. Cunoașteți foarte bine complexitatea lor în cel mai bun, mediu și cel mai rău caz. Dacă aveți timp, învățați și Heapsort.
14) Arbori de căutare binară: Acestea sunt întrebate pe scară largă la interviul de codare și trebuie să puteți implementa toate operațiile lor de bază, inclusiv ștergerea unui element!
15) Backtracking: Practic, înseamnă generarea tuturor soluțiilor posibile și luarea celor care respectă cerințele dumneavoastră. Să se implementeze un generator al setului de puteri al ansamblului și problema n-Doamnei.
16) Grafuri: Acestea sunt probabil cea mai utilizată structură de date în informatică. Știați că fiecare rețea socială este doar un graf imens? Exersați realizarea unei copii a grafului în memorie și detectarea ciclurilor în grafuri.
17) Programarea dinamică: Programarea dinamică este văzută de cei mai mulți ca fiind cel mai înfricoșător subiect. Dar este cel mai frumos dacă înțelegeți gândirea din spatele ei. Deci, exersați primele cinci întrebări cele mai frecvente și rămâneți cu ele până când înțelegeți de unde vin recurențele.
În cursul, pe care îl creez acum, explic fiecare subiect în această ordine. Încă lucrez la curs, dar puteți obține acces anticipat la unele dintre lecții și, de asemenea, mă puteți ajuta cu feedback-ul dumneavoastră, alăturându-vă grupului de Facebook al cursului.
Dacă multe subiecte nu vă sunt familiare, înseamnă că trebuie să începeți să exersați imediat după acest articol. Nu mai căutați online alte ghiduri, doar mergeți și practicați. Nu uita că interviul este o luptă cu tine însuți, cu cât exersezi mai mult, cu atât șansele tale de a câștiga sunt mai mari. Depinde de tine să îți crești zona de confort a problemelor.
Cum să dai tot ce ai mai bun în timpul interviului de codare?
Interviul are cinci părți pe care le vom discuta în profunzime. Urmăriți videoclipurile explicative pentru exemple reale.
1) Introducere
Această parte dă startul interviului și durează aproximativ trei până la cinci minute. Intervievatorul dorește să afle mai multe despre dumneavoastră și vă oferă șansa de a vă prezenta. În mod obișnuit, el este interesat de proiectele la care ați lucrat înainte și care a fost cel mai impresionant. Aceasta este șansa dumneavoastră de a străluci, așa că nu o irosiți!
Nu încercați să fiți măgulitor. Este ușor să recunoști o personalitate falsă care încearcă să te păcălească. Eu și toți ceilalți îi urâm pe acești oameni, așa că asigură-te că îți arăți adevărata personalitate.
Trebuie să știi dinainte ce vei spune despre proiectul tău preferat, așa că pregătește-l înainte de interviu. Acum, majoritatea oamenilor spun doar două propoziții scurte, ceea ce este rău. Care răspuns vă place mai mult?
1) „Am lucrat la o aplicație web pentru a gestiona mai bine pacienții din spitale. Am scris backend-ul în Node.js.”
Modul în care te prezinți contează cu adevărat
2) „Un proiect care mi-a plăcut foarte mult a fost despre crearea unei aplicații web pentru Serviciile Naționale de Sănătate din Marea Britanie pentru a-i ajuta să gestioneze mai bine pacienții din spital. A făcut parte din curriculumul universitar, a durat două luni și am fost liderul unei echipe de trei persoane.
Am pornit proiectul de la o idee de bază și l-am transformat într-o aplicație reală. Am fost responsabil pentru codificarea backend-ului în Node.js și a bazei de date în MongoDB. A fost prima aplicație pe care am creat-o pentru un client și nu eram familiarizat cu tehnologiile web. Procesul de dezvoltare a fost iterativ și am făcut câteva greșeli pe parcurs.
În final, am livrat peste așteptări cu multe funcționalități, iar preferata mea este faptul că utilizatorii pot actualiza camerele spitalului, în loc să fie codificate în mod dur.
Am învățat multe lucruri din acest proiect, în special cum să lucrez în echipă. Au fost câteva momente în care au apărut probleme tehnice sau de echipă, dar până la urmă totul a mers bine și am obținut cea mai mare notă a anului!”
Turnează această prezentare în avantajul tău! Intervievatorul este cu adevărat interesat să afle mai multe despre tine, așa că începe cu o introducere concisă a proiectului, explicând despre ce este vorba. Apoi spuneți care a fost contribuția dvs. (dacă ați ajutat echipa cu o idee inteligentă, spuneți-o!) și ce ați învățat din procesul de dezvoltare. De asemenea, puteți menționa ce diferență ați făcut pentru utilizatori.
Ar trebui să vorbiți unu-două minute despre proiectul dumneavoastră.
2) Înțelegeți problema
Intervievatorul vă va spune pe scurt enunțul problemei pe care trebuie să o rezolvați. Am spus „pe scurt” pentru că nu vă va da multe detalii despre constrângeri, cazuri colțuroase sau despre cum primiți datele. Face parte din sarcina dvs. să cereți tot ceea ce aveți nevoie pentru a rezolva problema. Repetați afirmația cu voce tare pentru a fi siguri că ați înțeles-o corect.
.