Kako se pripremiti za tehnički razgovor - savjeti i trikovi koji će vam pomoći da postignete najbolje što možete

Ah, intervju za kodiranje.

"Užasavaj se. Bježi od toga. Sudbina svejedno stiže." - Thanos 2018

Ok, možda je to malo dramatično, ali ne znam nikoga tko je oduševljen što je prošao postupak intervjua. Postupak traženja posla / razgovora u najboljem je slučaju iscrpljujući, a u najgorem slučaju mnoge druge stvari.

Mnogi ljudi proučavaju trikove i taktike za intervju (a dat ću vam i nekoliko njih), ali većina ljudi ne razmišlja o svom razmišljanju ulazeći na intervju.

Vaš način razmišljanja određuje ton kako ćete gledati i oblikovati svoju situaciju. Uđite s pravim načinom razmišljanja i moći ćete razumjeti i kretati se svime što vam se baci. Uđite s raštrkanim ili plašljivim umom i naći ćete se poljuljani i izudarani.

Vi ste i anketar

Jedna stvar koju većina ljudi često zaboravi jest da ste i vi intervjuer.

Da, to se intervju u ovoj tvrtki, ali su i intervjuiranje tvrtku vidjeti ako oni su dobar fit za vas.

Koje su vrijednosti ove tvrtke? Kakva je njihova radna etika? Što ljudi cijene?

Položiti intervju je važno, ali želite li raditi u ovoj tvrtki ako položite?

Ponekad nam jednostavno treba posao - bilo koji posao - i zato ne želim minimalizirati samo dobivanje posla. Ali ako možete, napravite korak unatrag i razmislite kako će ovaj posao dugoročno utjecati na vašu karijeru. Reći "da" nekom poslu znači "ne" desetak drugih - ako platite, plaćate velik oportunitetni trošak.

Dakle, to je prvo što treba zapamtiti: ovo nije jednosmjerna dinamika snage. Možda vam se ponekad čini, ali ovdje imate određenu kontrolu i imate mogućnosti. Ovo osnažuje.

Vrste intervjua

Ok, dakle, također procjenjujemo tvrtku na temelju ljudi s kojima komuniciramo u procesu razgovora, pa što ćemo s tim informacijama?

Pa, postoji nekoliko različitih vrsta tehničkih intervjua. Ove vrste intervjua govore nam puno o načinu razmišljanja tvrtke i kako je raditi tamo. Razlažem različite vrste na ovaj način:

  • Bordanje
  • Izazov koda (informatička pitanja ili algoritmi)
  • Izazov koda (razuman problem kodiranja)
  • Ponesite kući projekt

Užasna tabla

Neke od prvih vježbi na razgovorima koje je tehnološka industrija usvojila bile su vježbe na ploči. Dobit ćete zadatak i tražiti da napišete kôd na ploči. Općenito se na ovaj pristup gleda i s njim se danas ukida tehnološka industrija, ali još uvijek postoje mnoge tvrtke koje koriste tu praksu.

Nije stvar u tome što je kodiranje na bijeloj ploči samo po sebi loše - već što je ploča toliko udaljena od posla koji zapravo radimo kao programeri koji svakodnevno rade na računalima . Ploča je nespretna za pisanje, uređivanje i ne daje vam povratne informacije - nema automatskog dovršavanja, nije istaknuto sintakse, a ne možete otvoriti Google da biste pogledali reference standardne knjižnice.

Povrh toga, mnoga mjesta koja zapošljavaju ankete na bijeloj ploči postavljaju i određena pitanja koja su, iskreno, bezvrijedna za 99% programskih poslova vani. To su zastrašujući algoritmi računalne znanosti: obrtanje binarnog stabla, pronalaženje najkraćeg puta u grafu itd.

Problem s tim pitanjima je što se oni u stvarnom životu jednostavno ne pojavljuju kao programeri. Ako intervjuirate na Amazonu ili Facebooku, možda oni tamo imaju neku vrijednost, ali većina ljudi nikada se neće suočiti s ovim problemom u svojoj karijeri. A ako to učine, samo će upotrijebiti neki paket ili knjižnicu koji su već implementirali tu funkciju.

Pa što možemo učiniti s bijelim pločama? Pa, evo što bih učinio: potrudite se, upotrijebite savjete i trikove navedene u nastavku i ozbiljno procijenite je li ova praksa razgovora simptom većeg mentalnog problema u tvrtki.

Izazovi koda

Ako imate dovoljno sreće da izbjegnete bijelu ploču, većina mjesta će vas (i vjerojatno bi trebala) tražiti nekakav izazov koda. Ponovno se ovo može činiti kao jednosmjerna dinamika snage, ali ovaj izazov koda zapravo je dobar za vas. Tu morate zablistati i pokazati svoju tehničku kompetentnost, a prema mom iskustvu to drastično utječe na vašu pregovaračku moć kada je u pitanju rang radnog mjesta i plaća.

Prije nego što uđemo u određene savjete, trebali bismo biti svjesni da to što ste izbjegli ploču ne znači da ovdje još uvijek nećete dobiti pitanje algoritma informatike - samo na računalu. Ako je to slučaj, samo duboko udahnite i poslužite se savjetima i trikovima u nastavku. Proći ćete to.

Ako imate dovoljno sreće da izbjegnete bijelu ploču i CS pitanje, vjerojatno ste se suočili s razumnim izazovom kodiranja. Za mene su to pitanja poput:

Napišite funkciju koja uzima broj centi (USD) kao cijeli broj manji od ili jednak 100 i ispisuje najmanju količinu kovanica potrebnih za njegovo predstavljanje.

50 => 2 četvrtine

11 => 1 novčić i 1 peni

7 => 1 nikal i 2 groša

Primio sam i pitanja koja se čine kao CS pitanja, ali zapravo nisu toliko loša. Na primjer, "implementirajte dvostruko povezan popis." Na prvi pogled ovo se čini kao problem s CS-om zbog dijela "dvostruko povezane liste", ali ono što je anketar zapravo želio bio je kod koji je primijenio isto ponašanje kao dvostruko povezani popis - nisam koristio pokazivače i adresiranje objekti u memoriji - samo oponašajući isto ponašanje. U tom slučaju to je na kraju bio prilično jednostavan izazov.

I to me dovodi do mog prvog savjeta:

Savjet br. 1: Postavite razjašnjena pitanja

U dvostruko povezanom popisu izazova dobio sam praznu Ruby datoteku (intervjuirao sam za posao u Rubyju) i prazan testni paket. Nešto kao ovo:

class DoublyLinkedList end 

(Ako niste upoznati s Rubyjem - ne brinite. Kôd ovdje bit će jednostavno razumljiv. Ovdje je samo da ilustrira ukupne poante.)

Dakle, dvostruko povezani popis, zar ne? Možda znate što je to, ili možda ne znate. Ako ne: postavljajte pitanja. Ovo je prva zamka koju treba izbjeći. Ako ne razumijete problem ili što oni traže, nastavite postavljati pitanja dok ne shvatite.

Vidio sam kako sugovornici silaze pogrešnim zečjim putem, a ispitivač ih je jednostavno puštao - a cijelo vrijeme će ih šutke iznevjeriti. Iako se ne slažem s ovom praksom, pobrinite se da radite ispravno.

Dolazim iz pozadine računalnih znanosti, pa sam znao da dvostruko povezan popis znači popis koji ima pokazivač na a headi tailčvor - gdje svaki čvor također pokazuje na svoj nexti previousčvor.

Iako sam to znao, što sam učinio? Rekao sam to naglas i pitao je li to točno. Iako sam mislio da znam što učiniti, bio sam apsolutno siguran da znam.

Jednom kada mislite da razumijete problem, ponovite svoje razumijevanje anketara kako bi vas mogao ispraviti ili voditi.

Sljedeće što sam učinio bilo je postavljanje drugog pitanja: "Mogu li koristiti niz za čvorove?" I otkucao sam otprilike ovako:

class DoublyLinkedList def initialize @nodes = [] end end 

(Ako niste upoznati s Rubyjem, ovo je samo inicijalizator ili konstruktor u kojem izrađujem novu varijablu koja se naziva @nodesset praznog niza.)

Ali, anketar mi je rekao, ne, nisam to mogao učiniti - što ima smisla. Da sam koristio niz, porazio bi cijelu svrhu vježbe koja stvara lažne "pokazivače" između čvorova.

I dečko, je li mi drago što sam pitao. Nisam htio riskirati da mi ispitivač dopusti da koristim niz, a zatim me iznevjere.

Dakle, nema niza - pa što da radim sada? Evo savjeta br. 2:

Savjet br. 2: Tvrdo kodirani -> Glupi -> Bolji

Kada se suočite s izazovom kodiranja, riješite problem sljedećim redoslijedom: tvrdo kodiran -> nijem -> bolji -> još bolji (ako vrijeme dopušta).

U svom iskustvu intervjuiranja i intervjuiranja drugih programera, otkrio sam da većina ljudi pokušava učiniti previše odjednom.

Kada odjednom napravite previše, lako je pogriješiti (koje nećete uhvatiti zbog InterviewBrain ™). Dakle, započnite jednostavno - najjednostavnije što zapravo možete - tvrdo kodirano - i krenite dalje.

Dakle, imam prazan tečaj Ruby, kako mogu hardcode nešto napredovati? Pogledao sam svoj prazni testni paket i vidio da postoji pozvana funkcija headkoja je vratila prvi čvor na popisu, pa pokušajmo to:

class DoublyLinkedList def head 'A' end end 

Napravio sam headfunkciju i čvrsto kodirao veliko slovo "A" kao niz i proveo sam taj test. Prošlo je.

Je li ovo super jednostavno? Je li to previše očito? Da! Ali ovaj kod čini dvije vrlo važne stvari:

  • Omogućuje mi pokretanje testova i testiranje da moja postavka funkcionira (uklanjajući glupe ili sintaksne pogreške)
  • Dobivam brzu pobjedu - što mi podiže samopouzdanje

Postoji bezbroj intervjua koje sam vidio gdje netko odmah na početku napravi malu pogrešku, uznemiri se, a zatim provede većinu intervjua pokušavajući se oporaviti i popraviti sve što nije u redu.

Ne potcjenjujte vrijednost brzih pobjeda za vaše samopouzdanje. Slaganje malih pobjeda potaknut će vas kroz intervju.

Ok, imamo kodirani niz 'A'. Sada, kako to pretvoriti u glupo rješenje? Pa, što kažete na to da slovo "A" pretvorite u hash (ili mapu)?

class DoublyLinkedList def head { value: 'A' } end end 

To je malo bolje. Sada je umjesto čvora od jednog znaka naš "čvor" predstavljen kao hash sa valuesvojstvom. Prešli smo iz kodiranog u nijemi. Sad kako to možemo učiniti boljim? Pa, kako bi bilo da headna popis uvedemo naš pokazivač?

class DoublyLinkedList def initialize @head = { value: 'A' } end def head @head end end 

Što smo ovdje promijenili? Ovdje vraćamo svoj inicijalizator i kreiramo novu varijablu pod nazivom @head, i koristimo tu novu varijablu u našoj headfunkciji. Ovo počinje izgledati kao neki pravi kod.

Sad se ovaj pristup može činiti stvarno glup, ali obećavam vam da djeluje. Svaka od ovih promjena izvršava se u sekundama malog, iterativnog kodiranja i slaže se da bi se u kratkom vremenu stvorila radna implementacija.

Ako mislite da će se ovaj pristup potencijalnom ispitivaču činiti čudnim, evo sljedećeg savjeta, a ovaj je vrlo važan:

Savjet br. 3: Razgovarajte. Naglas.

Sve vrijeme dok radite izazov kodiranja trebali biste razgovarati - naglas.

Recite sve što mislite - sve.

(Pa, sve što se odnosi na programiranje.)

Evo u čemu je stvar: važno je doći do ispravnog rješenja, ali jednako tako ako ne i važnije je pokazati svoj misaoni proces. Anketar želi znati kako mislite - kako rješavate probleme. To možete učiniti dijeljenjem svega što mislite naglas.

Svaki je anketar u nekom trenutku bio sugovornik - oni znaju za InterviewBrain ™ i da čak i jednostavne stvari mogu postati teške u intervjuu. Dobre sugovornike nije briga što ste 100% dobili ispravno rješenje - oni samo žele znati da posjedujete dobre sposobnosti kritičkog mišljenja. Jedini način da te unutarnje misli učinimo vidljivima jest izgovoriti ih naglas.

Ako to nikada prije niste učinili, možda biste htjeli to vježbati jer je to presudno za zakucavanje intervjua.

Da bih vam dao nekoliko praktičnih primjera, evo nekoliko stvari koje kažem svaki put kad me intervjuiraju:

„Ok, samo stavimo ovu vrijednost u tvrdi kôd i pobrinimo se da naša postavka funkcionira.“ „Nabavimo prvo glupu verziju ovog rada i učinimo ga boljim.“ „Za sada ću to učiniti, i ako imamo vremena, vratimo se i "" Ok, trebamo funkciju koja uzima niz, radi X i vraća se. "

U nekim scenarijima ti se intervjui mogu početi osjećati poput sjednica programiranja u paru.

Ok, govorimo stvari naglas. Ali ponekad pogriješimo ili zapnemo. Glasno smo izgovarali svoj proces razmišljanja, ali sada ćemo se možda morati pomaknuti i istražiti potencijalni problem ili pogrešku.

Evo važnog savjeta za ovo:

Savjet br. 4: Ostanite u logičnom toku

Sad ću priznati: ovaj ponekad zna biti težak.

Ako ste na razgovoru i postoji problem ili pogreška s vašim kodom, vaš mozak očajnički želi shvatiti što nije u redu - ali nemojte biti previše očajni što ćete početi razbijati svoj kod ili svoj misaoni proces.

Vidite, baš kao što ispitivač želi vidjeti kako rješavate problem, oni također žele vidjeti kako rješavate problem. Ovo je jednako važno kao i objašnjenje vašeg misaonog procesa. Potrudite se ostati u logičnom toku i izbjegavati razbijanje koda ili svojih ideja.

Ako ide dobro

Dakle, izazov ide dobro, a vi rješavate problem i sve jednostavne stvari.

Što sada? Kako od prolaznog do slomljenog?

Ovo je izuzetno važan dio razgovora, jer tu dobivate većinu poluge za pregovaranje o razini posla i naknadi. I savjet je:

Savjet br. 5: Pokažite što znate

Radite na izazovu, govorite naglas i ide vam dobro. Sljedeće što trebate potražiti su prilike da pokažete svoje znanje i stručnost.

Je li to mjesto u kodu na koje biste mogli poslati e-poštu? Spomenite da bi to trebalo učiniti u pozadinskom radniku (vjerojatno to nećete morati ni implementirati).

Radite li na logici provjere valjanosti u modelu? Razgovarajte o tome kako biste dodali i ograničenja baze podataka kako biste osigurali integritet podataka. Koje biste indekse dodali? Kako biste pokrenuli migracije kako biste spriječili zastoje?

Jednom kada dobijete svoje teško kodirano -> glupo -> bolje rješenje, razgovarajte o tome kako biste ga refaktorizirali dajući mu više vremena. Biste li stvorili modul za ovo? Što je s uslužnim objektom? Što je s stavljanjem neke od ove logike u pozadinski posao? Razgovarajte o kompromisima.

Zašto je ovo toliko važno?

Većina pitanja za intervju usmjerena je na najmanji zajednički nazivnik - što znači vrlo osnovne zahtjeve posla. Sami izazovi ili pitanja obično nisu namijenjeni provjeri vrha nečije vještine . Intervju vjerojatno neće izvući informacije iz vas, pa ih morate dostaviti.

Dakle, dok razgovarate kroz svoj misaoni proces, spomenite sve stvari koje biste ugradili u stvarnu aplikaciju ili bazu kodova i raspravite o njima.

Dodatni savjeti i trikovi zgrabite torbu

Dakle, tako biste trebali pristupiti svom intervjuu i riješiti se bilo kojeg izazova koji ste dobili.

Evo nekoliko dodatnih trikova koje se ponekad mogu iskoristiti za male prednosti.

Trik # 1: Poznajte uobičajene probleme

Postoji nekoliko uobičajenih problema koji se često pojavljuju u intervjuima (posebno na bijelim pločama). Ti bi problemi trebali biti upoznati s vama jer su to nekako poput pitanja za koja znate da će biti na testu.

Dva glavna su FizzBuzz i rješavanje Fibonaccijevog niza (pobrinite se da ih znate).

Sada upozorenje: ne uvijek žele polagati napamet rješenje u jednom intervjuu. To može ići samo loše (a svjedočio sam tome da se događa). Ipak želite biti upoznati s rješenjem - i moći ga ponovno stvoriti od nule.

Dakle, upotrijebite knjige za pripremu pitanja za intervju, da, ali pobrinite se da razumijete rješenje, možete li ga objasniti i možete ga ponovno stvoriti od nule. Upamćeni odgovor neće vas dovesti nikamo ovdje.

Trik # 2: Obično je u redu pogledati dokumente

U svim intervjuima u kojima sam bio ili u jednom dijelu, nikoga nije bilo briga ako tražite standardnu ​​biblioteku ili paketne dokumente. Ispitivači nisu u redu kad tražite odgovor (pa bih izbjegao StackOverflow), ali savjetovanje s referencama obično je poštena igra. Ako sumnjate, pogledajte Savjet br. 1 i zatražite pojašnjenje.

Trik # 3: Pripazite na vizualne znakove

Ovo mi je vjerojatno najdraži savjet / trik. Nije najkorisnije, ali je zabavno. Jedan od svojih intervjua odradio sam na daljinu i koristili smo program za dijeljenje zaslona i mogao sam vidjeti lice anketara u gornjem desnom dijelu zaslona.

Krajičkom oka primijetio sam dok sam kodirao da anketar klima glavom. Ah ha! Mali vizualni znak da znam da sam na dobrom putu.

Opet nije puno, ali moglo bi biti korisno. :)

Trik # 4: Ako ste udaljeni, dobro se namjestite

Kad smo već kod udaljenosti, ako ste udaljeni, pokušajte imati najbolje moguće postavke. To znači uključenu kameru (ako je moguće postavljanje tamo gdje gledate ravno u nju), dobar internet, računalo uključeno u struju, tihu sobu, čašu vode u blizini itd.

Te stvari ne bi trebale utjecati na rezultat vašeg intervjua, ali nema potrebe iznervirati ispitivača ili si zadati dodatni stres zbog problema s internetom ili bukom.

Trik # 5: Budite osobni!

Posljednji trik za vas je biti osoban.

U svom intervjuu budite netko s kim biste željeli surađivati. Pokažite im svoje najbolje ja.

Intervjui mogu biti zastrašujući, a programeri su općenito tiši i suzdržaniji, ali ljudima s kojima komunicirate morate pokazati: "Hej, ja sam zabavna i simpatična osoba za rad."

Ne tražim od vas da budete netko tko niste. Ali, prema jednom od mojih bliskih prijatelja koji cijelo vrijeme intervjuira ljude, ne želite biti "morsko stvorenje".

Bonus trik # 6: Odradite sve ostale pripreme za intervju (ako želite)

Ako se osjećate nedovoljno pripremljenima ili je ovo vaš prvi tehnički razgovor, obavite pripremne zadatke dok se ne osjećate ugodno.

Čitajte knjige poput Cracking the Coding Interview ili vježbajte algoritme i zagonetke na HackerRank-u.

Pročitajte ostale sjajne postove na vijestima za programere o intervjuiranju.

Ako intervjuirate za ulogu punog sloga, budite spremni ispočetka postaviti novi projekt ili testnu datoteku s testnim paketom.

Istražite tvrtku, budite spremni sa sjajnim pitanjima o tvrtki ili svakodnevnom poslu itd., Itd.

Na kraju: to je samo intervju.

Na kraju je to što jest.

Izvest ćete kako vi izvodite.

Razgovarat će s vama osoba s kojom ćete razgovarati.

Njihov postupak razgovora bit će njihov postupak razgovora.

Možda ste imali slobodan dan - možda je ispitivač imao slobodan dan.

Nakon toga, ako se osjećate posramljeno, poraženo ili bilo što drugo - duboko udahnite i pustite to! Ne dopustite da vas mozak guštera odmjeri. Loš intervju nije kraj svijeta. Karijera vam nije uništena, reputacija i život.

To je samo intervju. Učite iz toga, prilagodite se i budite bolji sljedeći put.

U redu je biti nervozan

Većina ljudi (uključujući i mene) nervira se prije stvari poput intervjua, razgovora ili prezentacija.

Nekad sam nervozu smatrao lošom stvari - stvari koju nisam želio. I bez obzira na to koliko sam si puta rekao "ne budi nervozan" - pogodi što: to me samo učinilo nervoznijim!

Naučio sam preispitivati ​​kako gledam na živce. Nervoza je moje tijelo koje se priprema za borbu - onu iskonsku borbu ili bijeg.

Ali kao što smo već rekli: ovo je samo intervju. Tigar mi se ne prikrada u sobi za razgovore. Ovaj iskonski odgovor nije potreban.

Počeo sam se prekvalificirati kako bih nervozu doživljavao kao dobru stvar. To znači da mi se tijelo i osjećaj povećavaju, tako da mogu postići najbolje performanse koje mogu prikupiti.

Dakle, prigrlite živce. Samo vas pripremaju da date sve od sebe.

Intervjuiranje je vještina

Na kraju je intervjuiranje vještina. Potrebno je malo proučavanja i puno vježbe.

Zato se nemojte tući ako ne izvodite onako kako biste se nadali. Nastavite učiti i nastavite vježbati - stići ćete tamo!

Ako imate pitanja ili komentare, slobodno me kontaktirajte na Twitteru, a ako želite više informacija o tome kako se pripremiti za razvojnu karijeru, takve stvari pišem na svoj blog.

Hvala na čitanju!

Ivan