Kada se pomene tehnički intervju, obično je prva asocijacija da je u pitanju rigorozan proces koji zahteva dugu pripremu i pažljivo istraživanje svih mogućih scenarija. Razlog tome jeste pre svega činjenica da tehnički intervju može imati različite forme koje zavise uglavnom od potreba kompanije, stanja na tržištu, senioriteta kandidata, i mnogih drugih faktora koji ovaj proces mogu da učine strašnijim nego što jeste.
Međutim, gotovo u svim izvorima se navodi da taj proces ne mora biti težak i naporan sve dok je prisutno znanje o tome šta tehnički intervju podrazumeva i koji su to problemi na koje možete naići u toku istog.
Iako ne postoji univerzalni odgovor na pitanje kako se najbolje pripremiti za tehnički intervju, u nastavku teksta će biti izlistani koraci i najbolje prakse koje navodi veći broj relevantnih izvora, i koje mogu da posluže kao orijentir za savladavanje konkretnijih situacija.
TL;DR
- Analizirajte opis posla da biste razumeli šta poslodavac želi
- Saznajte što više o kompaniji i procesu intervjuisanja
- Odaberite programski jezik
- Koje gradivo treba obuhvatiti
- Kako napraviti plan učenja
- Forme tehničkih intervjua
- Priprema portfolia
- Saveti za vežbanje
- Korisni resursi
Analizirajte opis posla da biste razumeli šta poslodavac želi.
Iako možda deluje očigledno, dobar opis posla će navesti većinu stavki koje su potrebne za neku poziciju. Kako većina ljudi ima običaj da preskače opis pozicije, jedna od preporuka većine obrađenih izvora je da se ovaj korak ne preskače.
Informisanost o poziciji može da pomogne u donošenju odluka vezanih za pripremu za intervju, a može biti od koristi i tokom samog procesa. Na primer, može biti korisno da za svaki zahtev u oglasu osmislite nekoliko primera koji ilustruju kako ispunjavate traženu stavku ili primer gde ste koristili određenu veštinu ili tehnologiju, i kako vaše znanje može da pomogne u rešavanju problema. Recimo, ako je poznavanje JavaScript-a jedna od stavki na oglasu, razmislite kako vas je vaš dosadašnji rad na JS-u pripremio da rešavate probleme sa vrstama aplikacija koje razvija poslodavac na čiji oglas ste se prijavili.
Ukoliko se traži veština ili znanje koje ne posedujete, jedna od preporuka je da razmislite kako možete da poboljšate tu veštinu ili kako možete da objasnite kako će vam vaše postojeće iskustvo pomoći da brže savladate nešto novo na poslu. Recimo, ukoliko ne poznajete JavaScript, razmislite o tome kako vaše znanje nekog drugog jezika može da se primeni na učenje novog, i o dosadašnjem iskustvu koje može u tome da vam pomogne. Ukoliko ne znate kako da odgovorite na neko pitanje, razmišljajte o načinima na koji možete da skicirate intervjueru kako biste istražili kako da dođete do rešenja.
Saznajte što više o kompaniji i procesu intervjuisanja
Još jedna od stavki koje potencijalni kandidati za posao ponekad umeju da preskoče jeste podrobno istraživanje kompanije. Dobijanje informacija o kompaniji pre intervjua može da pomogne da steknete širu sliku o tome čime se bave i kakav profil ljudi radi u njoj, što može da vam pomogne u pripremi za tehnički intervju.
Recimo, tehnologije koje kompanija koristi, projekti i klijenti sa kojima radi mogu da pomognu da odaberete programski jezik kojim ćete se služiti na intervjuu, a ove informacije takođe mogu biti korisne za način na koji ćete nastupiti na samom intervjuu, i usmere vas da postavite pitanja koja su vama relevantna. Na primer, ukoliko je kompanija servisna i znate za neke njene projekte, to može da vas usmeri na pitanja o procesu rada ili zahtevima klijenata, i otkrije stvari koje bi za vas mogle biti red flags.
Pored toga, na platformama poput Helloworld, Joberty i slično, često su zabeležena iskustva o prolasku kroz proces tehničkog intervjua u pojedinim kompanijama. Iako kvalitet takvih sadržaja može da varira, vredi ga pogledati jer ponekad može da pruži korisne savete, skicira broj koraka ili čak ceo proces, ili ponudi potencijalna pitanja za tehnički intervju.
Takođe, kako ističu i neki izvori, poznanici ili kontakti koji su prošli kroz proces intervjuisanja, ili su trenutni ili bivši zaposleni u kompaniji, mogu biti vredan izvor informacija.
Odaberite programski jezik
Iako može delovati kontraintuitivno, većina kompanija će ponuditi kandidatima da izaberu jezik na kom će obavljati zadatke tokom tehničkog intervjua. Iz tog razloga, u izvorima se savetuje da dobro razmislite o tome šta vama leži. U suštini, preporučuje se da izaberete jezik u kojem se najbolje snalazite i sa kojim imate najviše prakse i iskustva.
Takođe, još jedan od faktora prilikom izbora jeste i koliko je jezik pogodan za osobu koja vas intervjuiše. Na primer, u većini izvora se navodi da su Python i Java najčešći izbor, dok se u toj grupi često nalaze i JavaScript, Ruby i C++. Sa druge strane, prema pomenutim izvorima, jezike poput C i Go treba generalno izbegavati s obzirom da im nedostaju neke standardne funkcije i strukture podataka.
No, pošto većina izvora preporučuje proučavanje koncepata računarskih nauka kao jednu od oblasti pripreme za tehničke intervjue, preporuka je da se jedan programski jezik koristi kako za upoznavanje osnova, tako i za rad tokom intervjua.
Među obrađenim izvorima često se navode jezici koje koriste velike tehnološke kompanije, kakve su Facebook, Google ili Amazon, i te preporuke su uglavnom za C++, Javu ili Python koje smo već pomenuli ranije, ali se takođe navode i Ruby, Golang ili Kotlin.
Koje gradivo treba obuhvatiti
Iako materijal za učenje može zavisiti od mnogo faktora ‐ potreba posla, senioriteta i sličnog, prema obrađenim izvorima, većina tehničkih intervjua ipak se skoncentriše na fundamentalne koncepte računarstva, često i za seniornije pozicije. Iako konsenzus ne postoji, deluje da je ideja iza ovakve strukture testiranje nedomenskih znanja, čime bi se isfiltrirali manje perspektivni kandidati.
Izvori navode sledeće teme i glavne oblasti kao česte u tehničkim intervjuima:
5.1 Osnovno poznavanje računarstva
- Baze podataka
- Testiranje
- Fundamenti infrastrukture Interneta
Ovo uključuje osnovno poznavanje TCP/IP protokola, HTTP protokola, osnovno znanje o SQL bazama podataka, osnovnu praksu u testiranju koda, bazično poznavanje operativnih sistema (Windows, MacOS, Linux), itd.
5.2 Algoritmi
- Sorting algoritmi
- Tree traversals
- Traversals – Dijkstra’s, A*, BFS, DFS
- Prefix-tree searches
- Big-O notacija
Preporuka je da se algoritmi kodiraju tokom vežbanja, jer gledanje tuđeg koda obično nije dovoljno. Pored toga, ovakvim praktičnim radom se mogu identifikovati rupe u znanju i oblasti koje treba dodatno izvežbati.
5.3 Struktura podataka
- Array
- String
- Linked List
- Stack/Queue
- Trees (Tree, Binary Tree, Binary Search Tree, Red-Black Tree, etc)
- Heap
- Hash Table
- Directed/Undirected/Weighted Graphs
- Trie
- Linked Hash Map
Kao i sa algoritmima, preporuka je da na intervjuu budete spremni da iskodirate svaki od njih, kao i da unapred pripremite primere i scenarije u kojima biste implementirali svaki od njih, i argumente zašto je to najbolji izbor u datoj situaciji.
5.4 System Design (seniorniji kandidati)
- Dizajniranje TinyURL servisa
- Dizajniranje web crawlera
- Key/value datastore
- Skaliranje X sistema
System Design ukazuje na sposobnost primene teoretskih koncepata na rešavanje kompleksnih problema. U idealnom slučaju, tokom rešavanja ovih zadataka, kandidat treba da demonstrira mentalni proces kojim složene probleme razbija na manje celine, kako ih i zašto rešava, oslanjajući se na teorijske koncepte i svoje prethodno iskustvo, pritom vodeći računa o stvarima koje čine projekat skalabilnim (data compliance, bezbednost, itd).
Kako napraviti plan učenja
Iako priprema za tehnički intervju može varirati u zavisnosti od iskustva kandidata, i pozicije za koju se prijavljuje, nekoliko izvora navodi da je potrebno oko 30 sati za spremanje osnovnog znanja, i oko 100 sati za temeljniju pripremu tipičnih oblasti koje se pokrivaju na tehničkim intervjuima. Jedan mogući raspored učenja je oko 2 do 3 sata dnevno, 4 do 6 nedelja pre intervjua. Savet je da se uzme i jedan slobodan dan u nedelji kako biste se odmorili.
Za pripremu postoji veliki broj predloga i tehnika, ali se ističu 3 osnovna pristupa, u zavisnosti od raspoloživog vremena:
- Fokus na širini – pokrivaju se sve teme i vežbaju pitanja iz svih oblasti dok se ne pokriju sve ciljane tačke; (oko mesec dana)
- Fokus na dubini – pokriva se jedna po jedna tema, obnavlja materijal, i za svaku se prolazi kroz dosta pitanja; na sledeću se prelazi tek kad je prethodna savladana; (može biti korisno kada manjka vremena)
- Dubina pa širina – pokriva se jedna po jedna tema dok se ne savlada, izvežba se nekoliko pitanja i prelazi se na sledeću; na kraju se prolazi kroz vežbe i pitanja iz svih oblasti zajedno; (preko mesec dana)
Forme tehničkih intervjua
U zavisnosti od potreba kompanije ili pozicije, tehnički intervjui mogu imati nekoliko faza. Iako se izvori mahom slažu da su opšte smernice i saveti korisni za sve forme intervjua, ponekad je potrebno obratiti više pažnje na različite stvari tokom trajanja procesa.
No, 3 osnovne faze koje se pominju u većini izvora su Remote screening (procena sposobnosti kandidata), Daljinski intervju (rešavanje određenih zadataka/testova) i Intervju uživo (kodiranje i bela tabla).
Remote screening
Po nekim izvorima, glavni cilj ove faze je provera da li je kandidat dovoljno kvalifikovan da pređe na sledeću rundu, i obično traje 15-30 minuta. Kako biste se izdvojili na ovom stadijumu intervjua, neki izvori preporučuju da odgovore formulišete tako da se odnose na rad kompanije, kao i da pokažete entuzijazam i podudarnost sa vrednostima i misijom kompanije, jer bi tako trebalo da se izdvojite u odnosu na druge kandidate.
Daljinski intervju / Domaći zadatak
Neke kompanije će želeti da testiraju veštine kodiranja kandidata putem preliminarnog testa, pre intervjua uživo. On može biti u vidu zadatka koji se radi online, uz prisustvo nekoga sa druge strane, ili u vidu nečega što podseća na domaći zadatak.
Preporuka je da se tokom razgovora razmišlja naglas, kako bi se pokazalo razumevanje ideja i koncepata, a često se preporučuje i postavljanje pitanja sagovorniku kako bi se uspostavila saradnja tokom rada. Tokom domaćeg zadatka, preporuka izvora je da se odvoji vreme i isplanira kod pre pisanja, kako bi se izbegla mogućnost da se uputstva i zahtevi nisu dobro razumeli.
Intervju uživo / Whiteboard
Ovo je faza koju većina podrazumeva pod terminom „tehnički intervju”, i obično obuhvata intervju uživo, sa izazovima kodiranja koje je potrebno rešiti na beloj tabli.
Većina izvora slaže se da su veštine rešavanja problema, veštine komuniciranja, tehnička kompetencija, efikasnost i pouzdanost rešenja glavne karakteristike koje se traže u ovoj fazi tehničkog intervjua.
Kako bi se što bolje prebrodili izazovi, pojedini izvori savetuju sledeće korake:
- Detaljno pojasnite definiciju problema i očekivane outpute, na početku, proverite pretpostavke i ponovite problem drugoj strani, kako bi se izbegle nejasnoće ili nesporazumi;
- Prodiskutujte o mogućim rešenjima i načinu optimizacije procesa sa intervjuerom, kako bi ste zajedno uspostavili okvire zadatka i dobili odobrenje za svoj pristup;
- Tokom samog kodiranja, preporuka je da se govori naglas, kao i da se piše čitak i jasan kod;
- Na kraju procesa, treba proći kroz kod, ispraviti greške i dodati test slučajeve, razjasniti pojedine odluke, identifikovati prilike za poboljšanje, itd.
Priprema portfolia
Na kraju, jedna od važnih tačaka koja se sreće u tehničkim intervjuima su i lični projekti. Deo vremena na tehničkom intervjuu će se potrošiti na razgovore o prošlim projektima, i preporuka izvora je da se unapred spremi nekoliko dobrih projekata o kojima možete detaljno da razgovarate. Budite spremni da pričate o tome šta ste uradili, sa kojim izazovima ste se suočili i šta ste naučili.
Saveti za vežbanje
Iako se i koraci, i dužina intervjua mogu razlikovati u zavisnosti od različitih faktora, ispod je niz preporuka koje navode obrađeni izvori, a koji se tiču nekih najboljih praksi kako vežbati ključne veštine tokom učenja:
- Trudite se da tokom rada razumete misaoni proces koji stoji iza svakog koncepta, jer se tako bolje uči i lakše zadržavaju informacije;
- Uvežbajte se da naglas razmišljate o procesu dolaska do rešenja i analizirajte problem dok ga rešavate;
- Tokom vežbanja, merite sebi vreme, kako biste bili što spremniji za sam intervju i vežbali kako da rešavate nepredviđene zadatke;
- Vežbajte veštine prezentacije i komunikacije – preciznost, jasnoća, i dobar utisak su važni aduti u procesu selekcije;
- Simulirajte proces intervjuisanja i rešavanja zadataka i snimite proces, kako biste kasnije mogli da vidite šta možete da poboljšate.
Korisni resursi
https://www.techinterviewhandbook.org/
https://github.com/jwasham/coding-interview-university
https://github.com/donnemartin/system-design-primer
https://ocs.yale.edu/channels/the-technical-interview/
Izvori
https://www.reddit.com/r/cscareerquestions/comments/1jov24/heres_how_to_prepare_for_tech_interviews/
https://www.techinterviewhandbook.org/coding-interview-prep/
https://www.techinterviewhandbook.org/coding-interview-rubrics/
https://www.techinterviewhandbook.org/coding-interview-cheatsheet/
https://www.techinterviewhandbook.org/programming-languages-for-coding-interviews/
https://www.wikihow.com/Prepare-for-a-Technical-Interview
https://www.interviewbit.com/technical-interview-questions/
https://algodaily.com/lessons/how-to-prepare-for-a-technical-interview
https://www.indeed.com/career-advice/interviewing/technical-interview-preparation
https://learntocodewith.me/posts/technical-interview/
https://www.geeksforgeeks.org/get-started-technical-interviews/
https://www.freecodecamp.org/news/interviewing-prep-tips-and-tricks/
https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/
http://patrickhalina.com/posts/systems-design-interview-guide/