Software Engineer – како је протекао интервју за посао

Ево како је протекао мој разговор за посао за позицију Software Engineer (софтвер инжењер). Навешћу све техникалије као и сам мој утисак, па ако некоме затреба може видети како тече сам процес, ако ништа а оно бар због убијања треме пред овакав разговор. Ја сам Никола Влаховић.

Разговор са HR-oм

Разговор са HR-ом у канцеларији, причам о мени генерално…шта сам завршавао од образовања, говори ми мало о самој компанији и бенефицијама. Траје 15-20 минута. Није било питања „Где видите себе за 10 година“, „Где видите себе у нашем тиму“ нити сам имао некакве тестове интелигенције или са производним тракама. Разговор је протекао опуштено, HR је започео конверзацију а ја сам наставио, ништа са тензијама, нема оно „она постави питање а ја ћутим и чекам наредно“ него је више било, као да смо се видели на кафи.

Разговор са техничким лицима

HR одлази, долазе два момка у канцеларију са лаптоповима, исто на почетку се мало упознајемо и онда пролазимо кроз списак уобичајених проблема кроз који пролазе који имају на лаптоповима и пропитују ме шта конкретно знам.

Не могу тачно да се сетим свега што смо причали али смо кроз баш много ствари прошли и имали баш оно што би се рекло дискусију око проблема, није чисто оно „знаш не знаш“ већ и они су ме понекад мало усмеравали или покушали да ископају што више информација из мене уколико би увидели да бих могао да дођем до решења.

Контам да су хтели да виде мој начин размишљања а не нужно је л’ знам нешто или не, јер сам значајан део ствари импровизовао док сам разговарао са њима. Напомињем да постоји шанса да овде што напишем питања и укратко оно што сам одговорио не представља потпуну слику, јер је свако питање имало значајан број подпитања а из текста се не може ни осетити атмосфера приликом испитивања која је била и више него опуштена.

Питали су ме мало о API-јима. Шта је REST, како се он разликује од осталих метода налик њему. Рекао сам им да REST користи HTTP протокол помоћу којег му стижу захтеви типа GET, PUT, POST, DELETE итд. и да он на основу тих захтева обавља неке операције бекенд и враћа одговарајући резултат кориснику. Прича је ишла мало шире али генерално тако нешто сам одговорио и импровизовао даље.

Питали су ме мало о dictionary-ју, не могу да се сетим конкретно детаља, мислим да је било нешто везано за модел објекта или тако нешто пошто су ми поставили то подпитање. Овде сам одговорио нешто типа „мислим да ово није 100% тачан одговор, али по мени dictionary највише личе на асоцијативне низове, где индекси имају неки конкретан назив у облику стрингова помоћу којима приступамо њиховим вредностима“.

Питали су ме о индексима код релационих база података. И овде сам рекао нешто типа ја мислим да су индекси налик индексима у књигама, где имамо неки термин и поред његову локацију где се он налази у књизи, тј. да су индекси виртуелне табеле које омогућавају брзу претрагу табела унутар базе, али да им је једна од потенцијалних мана што могу да заузму много велик меморијски простор.

Питали су ме нешто о алгоритмима али не могу да се сетим конкретно шта, мислим да се некако надовезује на претходна питања и представља увод у следећа те сам и овде подоста импровизовао типа рекао сам им за онај алгоритам стабла што смо радили из Ц-а и још нешто.

Овде су ми рекли да заборавим на релациону базу података и да радим директно са меморијом – како бих у свом програму омогућио унос тј. складиштење нпр. корисника (његов ИД, име и старост) и исто тако приказ свих корисника који су старији од 30 година (дакле, обратити пажњу да се овде не користе SQL упити)? Мислим да је овде била фора да се као направи нека класа као објекат или штавећ са геттерима и сеттерима, али опет нисам 100% сигуран, мислим да има још нека зачкољица али ја сам тако урадио тај део (дали су ми папир да испишем као псеудо-код). Углавном питали су ме како бих ја извео други део и ја сам им рекао да бих пролазио кроз све кориснике и проверавао да ли је korisnik.age већи од 30, што и није баш оптималан начин. Џа-бу итд. мислим да се овде прича свела да су покушали да ме провере колико познајем или да ли могу да научим алгоритме и хеш мапе.

Како бих сместио цео низ интегера од -32768 до 32767 у низ који може да садржи 100 чланова? Овде сам одговорио хеширањем, где велики број информација компресујемо у мању меморију помоћу алгоритама или тако неки фазон. Џа-бу опет се прича свела на алгоритме и хеш мапе.

Даље, имам задатак да направим једну библиотеку тј. скуп класа коју би више компанија користило (као неки API или штавећ) за карте. Питали су ме које би класе направио и шта бих ставио у њих. Овде сам рекао типа направио бих класу карта која би имала чланове знак, нумеричка вредност, назив; класу игре у којима би имао назив игре, број поена до победе, број шпилова итд.; класу шпил која би имала методе нпр. промешај шпил, повуци карту из шпила (када корисник повуче карту из шпила, укупан број доступних карата из шпила се смањује за један нпр.), сортирај шпил итд. Овај део мислим да сам баш добро одрадио.

Вратили су се на API-је и питали о асинхроним позивима, шта API-ији враћају. Овде је одговор био callback и питали су ме како сам им приступао и да ли бих могао да им покажем и онда сам на папиру написао као полу-псеудо код како сам користио АЈАX са jQuery-јем, који у себи има ствoри url, method, data (и овде бих убацивао помоћу jQuery-а нпр. $(„#ID“).val()), и онда су хтели да виде како бих знао да је позив био успешан и ту сам исписао онај success део који у себи има result објекат. Овде сам поприлично сигуран да су били супер задовољни са мном.

Као последње питање, потребно је да замислим да имам шаховску таблу којој су доњи лево и горњи десни ћошак заблокирани/засенчени, и да поред тога имам 31 домину где једна домина покрива два поља. Да ли је могуће у потпуности засенити шаховску таблу?

Нетехнички део разговора

После овога сам причао мало више са момцима, како функционишу, колики су тимови, шта генерално користе од програмских алата и фрејмворка, агиле рад са спринтовима и сл.

Разговор са менаџментом

Након тога они одлазе и враћа се HR и са њом причам још мало и рекла ми је да још један вођа тима и заменик ЦЕО-а желе да ме упознају тако да сам остао мало дуже. Са њима је прича била на исти фазон као са HR-ом, више о себи онако опуштенија атмосфера, шта сам учио, моји хобији, и тако мало не нужно пословне теме, спрдња…типа питали су ме јел’ постоји неки део који бих посебно хтео да радим где сам рекао оно да могу све да радим, нисам тип који се ограничава на одређен део, и исто тако када бих могао да почнем да радим и сл.

Мој закључак

На основу интервјуа на којима сам био до сад да 99.99% питају за dictionary и за хеш мапе. Ово исто се сећам да су ме питали и кад сам код других компанија када сам одлазио на интервјуе. Исто тако верујем да су ОГРОМАН допринос за који ме не би чудило да је компанији био важан колико и моје знање биле моје меке вештине тј. soft skills. Ни у једном тренутку нисам био напет, нервозан или било шта у том фазону, био сам као што са вама причам сад, тако да ако мислите да сте превише несигурни у себе не би било лоше и да на томе порадите, јер на крају крајева и њима је битно какви сте као особа јер ћете проводити по целе дане са њима.

Поред тога, рекли су ми да једна од ствари која ме је издвојила из масе је та што сам узео и написао лепо имејл где сам мало представио себе и шта знам (на течном енглеском) са окаченим портфолиом, јер огроман број кандидата узме и само окачи свој CV и пошаље мејл. Иначе, ово је био сам оглас а мој утисак што се саме фирме тиче је да је ово био један од тежих интервјуа на којима сам био и да заиста имају изузетно јак и стручан тим и скроз озбиљно прилазе послу.