Програмери, идите на интервјуе

Програмери, идите на интервјуе
Слика је преузета са видео снимка са канала "Милитантни аметисти»

Радио сам као системски програмер за Линук око 10 година. То су модули кернела (простор језгра), разни демони и рад са хардвером из корисничког простора (кориснички простор), разни боотлоадери (у-боот итд.), фирмвер контролера и још много тога. Чак се и понекад дешавало да исече веб интерфејс. Али чешће се дешавало да сам морао да седим са лемилом и да комуницирам са дизајнерима штампаних плоча. Један од проблема код оваквог рада је и то што је прилично тешко проценити ниво своје компетенције, јер један задатак можда познајете веома дубоко, а други уопште не знате. Једини адекватан начин да схватите где да идете и какве струје сада постоје јесте да идете на интервјуе.

У овом чланку желим да сумирам своје искуство интервјуисања за радно место програмера Линук система, специфичности интервјуа, посла и како да процените свој лични ниво знања кроз комуникацију са будућим послодавцем и шта не би требало очекивати од тога.

Чланак ће укључити мало такмичење са наградама.

Особине професије

Системски програмер, у специфичној области у којој сам радио, је потпуни генералиста: морао сам и да пишем код и да отклањам грешке на хардверу. И често је постојала потреба да сами залемите нешто. С времена на време се дешавало да се моја подешавања хардвера пренесу на програмере. Стога, да бисте радили у овој области, потребна вам је прилично добра база знања, како из области дигиталних кола, тако и из програмирања. Због тога, интервјуи за позицију системског програмера често изгледају као потрага за специјалистом за електронику.

Програмери, идите на интервјуе
Типична радна станица за системског програмера.

Фотографија изнад приказује моје типично радно место приликом отклањања грешака у драјверима. Логички анализатор показује исправност пренетих порука, осцилоскоп прати облик ивица сигнала. Такође, јтаг дебуггер није укључен у оквир, који се користи када се стандардни алати за отклањање грешака више не сналазе. И морате бити у стању да радите са свом овом опремом.

Често се дешава да је брже и лакше сами поново залемити неке елементе и исправити грешке у топологији него однети производ инсталатеру. А онда се станица за лемљење такође налази на вашем радном месту.

Још једна карактеристика развоја на нивоу драјвера и хардвера је да Гугл не помаже. Често морате да тражите информације о свом проблему, а постоје три везе, од којих су две ваша питања на неком форуму. Или још горе, када наиђете на питање од истог јадника који га је поставио пре 5 година на кернел маилинг листи и никада није добио одговор. У овом раду, поред грешака у дизајну и хардвера и софтвера, често се сусрећу и грешке у документацији – то су вероватно најозбиљнији и најнепријатнији проблеми. Понекад су регистри погрешно описани, или уопште не постоји опис за њих. Такви проблеми се могу решити само научним убацивањем случајних бројева у одређене регистре (нека врста обрнутог). Често се дешава да процесор садржи неку функционалност, али нико осим вас није имплементирао ову функционалност (нарочито ако је процесор нов). А то значи ходање по пољу са грабљама, од којих је 70% за децу. Али када постоји документација, чак и са грешкама, то је већ напредак. Често се дешава да уопште не постоји документација, и тада почиње шетња минским пољима када гори гвожђе. И да, и ја сам успешно решавао такве проблеме.

интервјуи

Моје мишљење је да треба да идете на разговоре најмање једном у шест месеци, чак и ако обожавате свој посао и не желите да га мењате. Интервју вам омогућава да разумете свој ниво специјалисте. Верујем да су највреднији интервјуи они који не успеју. Они су ти који најпрецизније показују која уска грла у вашем знању треба побољшати.

Још једна занимљива карактеристика је квалитет интервјуа. Ово је моје запажање, и није истина, признајем да сам само имао среће. Ако интервју иде по сценарију:

  • Реците нам нешто о себи;
  • Ми имамо такве задатке;
  • Волиш?

А ако се после овог дијалога допаднете једни другима, кренете на посао, онда се, по правилу, друштво и задаци испостављају веома пријатни и адекватни. Ако интервју личи на пролазак кроз 12 кругова пакла: први интервју са ХР, па интервју са групом програмера, па директором, још домаћим итд., онда су то по правилу биле пропале организације у којима нисам радио. веома дуго. Опет, ово је лично запажање, али по правилу, превише бирократије и развучен процес запошљавања показују да се исти процеси одвијају унутар компаније. Одлуке се доносе споро и неефикасно. Било је и супротних ситуација, када су били кругови пакла интервјуа, а друштво је испало сјајно, и када је, након шамарања, друштво испало као мочвара, али ове су ретке.

Ако мислите да сценарио: упознали, испричали о себи и запослили, постоји само у малим компанијама, онда не. То сам видео у веома великим компанијама које запошљавају више од стотине људи и које су заступљене на светским тржиштима. Ово је нормалан механизам, посебно ако имате богато искуство и имате прилику да позовете своје претходне послодавце и распитате се о вама.

За мене је то веома добар показатељ компаније када траже да покажу примере својих пројеката и кода. Одмах се показује степен обучености кандидата. А што се мене тиче, са становишта селекције кандидата, ово је најефикаснији метод селекције од емисијских интервјуа. У ствари, можете пропасти на интервјуу од узбуђења, или, напротив, изаћи на адреналин. Али у стварном раду не можете да се носите са стварним задацима. Такође сам се сусрео са овим када сам лично интервјуисао људе. Дође специјалиста, покаже се као одличан, он ми се допао, њему смо ми. И са најједноставнијим проблемом сам се мучио месец дана, и као резултат, други програмер га је решио за пар дана. Морао сам да се растанем са тим програмером.

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

Најинтересантнији послови које сам имао били су у одбрамбеном комплексу наше земље. У процесу рада морао сам да решавам једноставно фантастичне проблеме о којима комерцијални програмери нису ни сањали. Суперкомпјутери, пројектовање рутера, различити борбени системи чворова - ово је невероватно узбудљиво. Када током параде видите комплекс који чува ваш код, заиста је лепо. Чудно је да су интервјуи са оваквим компанијама обично врло једноставни, буквално долазе, свиђају се, прихватају (вероватно специфичности војске, која не воли превише да прича), преклапају се. Изазови са којима сам се тамо суочио били су заиста занимљиви и изазовни. Са искуством се показало да су добри за учење да буду квалитетни системски програмери. Постоје и недостаци, а ово нису чак ни ниске плате. Тренутно је плата у одбрамбеном комплексу сасвим пристојна, са бонусима и бенефицијама. По правилу, има много бирократије, дугог радног времена, бескрајне журбе и рада под великим стресом. У појединим случајевима не може се искључити тајност, што додаје одређене проблеме за путовање у иностранство. Плус, наравно, тиранија шефова, а ово се, авај, такође дешава. Иако је моје искуство рада са представником купаца изузетно пријатно. Ово је збирни утисак три различита истраживачка института и предузећа везана за државне одбрамбене налоге.

Задаци интервјуа

Да не би дошло до неспоразума и да не бих разоткрио компаније са којима сам разговарао, нећу искушавати судбину и наводити њихове детаље. Али сам захвалан за сваки интервју, за време које су људи потрошили на мене, за прилику да се сагледам споља. Могу само да кажем да су задаци били за велике међународне компаније заступљене у различитим земљама.

Рећи ћу вам најзанимљивију ствар: који задаци се дају током интервјуа. Генерално, најчешћа питања за упражњено радно место системског програмера и програмера микроконтролера су битне операције, у свим могућим варијацијама. Стога се најбоље припремите у овој области.

Друга најполаризирајућа тема су путокази, ово би вам заиста требало скочити из зуба. Па да те пробуде у сред ноћи и да све испричаш и покажеш.

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

Питања бр.1

И. Познавање СИ. Шта значе следећи уноси:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Да ли су сви уноси тачни?

ИИ. Зашто ће овај програм изазвати грешку сегментације?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

ИИИ. Бити паметан.

Постоји штап дужине један метар. Десет мрава насумично пада на њу, пузећи у различитим правцима. Брзина кретања једног мрава је 1 м/с. Ако мрав наиђе на другог мрава, он се окреће и пузи у супротном смеру. Колико је максимално времена потребно да сачекате да сви мрави падну са штапа?

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

Питања за интервју #2

Проблеми са хардвером.

  • Како су линук системски позиви распоређени у асемблерском језику на АРМ процесору, на к86. Која је разлика?
  • Који алати за синхронизацију постоје? Који алати за синхронизацију могу да се користе у контексту прекида, а који не могу и зашто?
  • Која је разлика између и2ц магистрале и спи магистрале?
  • Зашто постоје терминатори на и2ц магистрали и која је њихова вредност?
  • Да ли РС-232 интерфејс може да ради САМО на две жице: РКС и ТКС? Овде ћу дати одговор: Испада да је лоше, на 9600, али може!!!
  • А сада друго питање: зашто?
  • Који је најбољи начин да уредите сигналне линије и напајање у вишеслојним плочама и зашто? Снага унутар слојева, или сигналне линије унутар слојева? (Питање се углавном односи искључиво на дизајн кола).
  • Зашто диференцијалне линије имају стазе које иду заједно?
  • РС-485 аутобус. Обично на таквој линији постоје терминатори. Међутим, имамо звездасто коло, са променљивим бројем прикључних модула. Која средства за избегавање судара и сметњи треба користити?
  • Шта су црвено и бинарно дрвеће?
  • Како радити са цмаке-ом?
  • Питања о изградњи Иоцто Линук-а.

Циљеви овог интервјуа:

1. Напишите функцију која инвертује у uint32_t сви битови. (рад са битовима је веома популаран на интервјуима, препоручујем га)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Шта ће ова функција вратити? (решење на папиру, без компјутера)

3. Функција за израчунавање аритметичке средине два броја int32_t.

4. Које су методе излаза у програмима, укљ. у ток грешака.

Трећи избор је био релативно скорашњи и не би ме изненадило да још постоји такав упитник, па нећу да откривам компанију да их не откривам... Али генерално даћу пример могућих питања, а ако препознајете своја питања, онда вас поздрављам :).

Питања за интервју #3

  1. Дат је пример кода за прелазак стабла, потребно је рећи шта се ради у овом коду и указати на грешке.
  2. Напишите пример услужног програма лс. Са најједноставнијом опцијом „-л“.
  3. Наведите пример како да направите статичко и динамичко повезивање. Која је разлика?
  4. Како ради РС-232? Која је разлика између РС-485 и РС-232? Која је разлика између РС-232 и РС-485 са тачке гледишта програмера?
  5. Како УСБ функционише (са тачке гледишта програмера)?
  6. Превод техничког текста са руског на енглески.

Успешан интервју није гаранција успешног рада

Ово поглавље вероватно није чак ни за програмере (мада и за њих), већ више за ХР. Најадекватније компаније не сагледавају педантно резултате интервјуа. Нормално је грешити, најчешће гледају како човек уме да реши проблеме и расуђује.

Један од кључних проблема је то што кандидат успешно решава проблеме током интервјуа, показује се као одличан специјалиста, али не успе у првом правом задатку. Нећу да лажем, и мени се ово десило. Успешно сам прошао све кругове пакла, решио све тестне задатке, али се у реалним условима посао показао претешким због једноставног неискуства. Улазак на брод није најтежи задатак. Најтеже је остати на броду ове компаније.

Због тога верујем више компанија које воде једноставне интервјуе са кандидатом и кажу: већ после првог месеца рада биће јасно да ли сте за нас или не. Ово је најадекватнији приступ, да, можда мало скупљи, али се одмах види ко је ко.

Постоји још једна опција за интервјуе: када га успешно положите, али на основу резултата интервјуа схватите да је послодавац потпуно неадекватан. Одмах одбијам посао ако ми се понуди да радим као индивидуални предузетник, обећавајући велике приходе. Ово је облик утаје пореза за оперативну организацију, и зашто би проблеми послодавца требали да ме брину као програмера? Друга опција су разне владине агенције. Имао сам интервју, због чега ми је понуђена добра плата, али су ми рекли да је претходни програмер дао отказ, да се разболео, умро, отишао у пијанку због оптерећења, а радни дан ти почиње у 8 ујутру . Са таквог места и он је трчао тако да су му пете заискриле. Да, ХР, имајте на уму да су програмери спремни да одбију и најукуснији посао ако радни дан мора да почне рано ујутру.

На крају ћу дати одличан видео о избору програмера, чији је снимак екрана дат на почетку овог чланка. И ја сам више пута имао такав интервју. Ако видите тиранију у фази питања, онда поштујте себе, устаните, узмите своје ствари и идите - то је нормално. Ако се ХР и менаџер током интервјуа наметну на ваш рачун, то указује да је компанија токсична и да тамо не бисте требали радити осим ако не волите неадекватне шефове.

Пусти видео

Налази

Програмери, идите на интервјуе! И увек се трудите да будете унапређени. Рецимо ако добијете Н новца, онда идите на интервју за најмање Н*1,2, или боље Н*1,5. Чак и ако одмах не преузмете ово радно место, схватићете шта је потребно за овај ниво плате.
Моја запажања су показала да одлучују добро познавање енглеског језика, довољно богато искуство у индустрији и самопоуздање. Ово друго је главни квалитет, као и свуда у животу. По правилу, кандидат са више самопоуздања може боље да прође на интервјуу, чак и са више грешака, него одличан, али стидљивији и проактивнији кандидат. Срећно са вашим интервјуима!

П/С такмичење

Ако имате занимљиве примере проблема са којима вас је ХР оптеретио, добродошли у коментаре. Припремили смо мали конкурс - услови су једноставни: напишете најнеобичнији задатак који сте имали током интервјуа, читаоци га оцењују (плус), а након недељу дана сумирамо резултате и награђујемо победника забавним посластицама.

Програмери, идите на интервјуе

Програмери, идите на интервјуе

Извор: ввв.хабр.цом