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

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

Работев како системски програмер за Linux околу 10 години. Тоа се кернел модули (простор на јадрото), разни демони и работа со хардвер од кориснички простор (кориснички простор), разни подигнувачи (u-boot итн.), фирмвер на контролер и многу повеќе. Дури понекогаш се случувало да се пресече веб-интерфејсот. Но, почесто се случуваше да морам да седам со рачка за лемење и да комуницирам со дизајнери на печатени кола. Еден од проблемите со таквата работа е тоа што е доста тешко да се процени нивото на вашата компетентност, бидејќи може многу длабоко да знаете една задача, но друга да не знаете воопшто. Единствениот адекватен начин да се разбере каде да се оди и какви струи има сега е да се оди на интервјуа.

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

Статијата ќе вклучува мал натпревар со награди.

Карактеристики на професијата

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

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

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

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

Друга карактеристика на развојот на ниво на драјвер и хардвер е тоа што Google не помага. Честопати треба да барате информации за вашиот проблем, а има три линкови, од кои две се ваши прашања на некој форум. Или уште полошо, кога ќе наидете на прашање од истиот кутриот кој го поставил пред 5 години на мејлинг листата на кернелот и никогаш не добил одговор. Во оваа работа, покрај грешките во дизајнот и на хардверот и на софтверот, често се среќаваат и грешки во документацијата - ова се веројатно најтешките и најнепријатните проблеми. Понекогаш регистрите се погрешно опишани или воопшто нема опис за нив. Ваквите проблеми може да се решат само со научно вметнување случајни броеви во одредени регистри (еден вид обратно). Често се случува процесорот да содржи одредена функционалност, но никој освен вас не ја имплементирал оваа функционалност (особено ако процесорот е нов). А тоа значи одење низ полето со гребло, од кои 70% се за деца. Но, кога има документација, макар и со грешки, ова е веќе напредок. Многу често се случува воопшто да нема документација, а тоа е кога пешачењето низ минските полиња започнува кога гори железото. И да, и јас успешно ги решив таквите проблеми.

Интервјуа

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

Друга интересна карактеристика е квалитетот на интервјуата. Ова е моја опсервација, и не е вистина, признавам дека имав среќа. Ако интервјуто оди според сценариото:

  • Кажи ни за себе;
  • Имаме такви задачи;
  • ти сакаш?

И ако по овој дијалог ви се допаѓаат едни со други, одите на работа, тогаш, по правило, компанијата и задачите излегуваат многу пријатни и соодветни. Ако интервјуто наликува на поминување низ 12 кругови на пеколот: прво интервју со HR, потоа интервју со група програмери, потоа директор, повеќе домашни задачи итн., тогаш по правило тоа беа пропаднати организации во кои не работев за многу долго. Повторно, ова е лична опсервација, но по правило, преголемата бирократија и долготрајниот процес на вработување покажуваат дека истите точни процеси се одвиваат во компанијата. Одлуките се носат бавно и неефикасно. Имаше и спротивни ситуации, кога имаше кругови на интервјуа пекол, а друштвото испадна одлично, и кога по шлаканица друштвото испадна мочуриште, но овие се ретки.

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

За мене, тоа е многу добар показател за една компанија кога тие бараат да покажат примери за нивните проекти и код. Нивото на обука на апликантот веднаш се покажува. А, што се однесува до мене, од гледна точка на избор на кандидати, ова е најефективниот метод на селекција од емисиските интервјуа. Всушност, можете да не успеете на интервју од возбуда, или, напротив, да излезете на адреналин. Но, во вистинска работа не можете да се справите со вистинските задачи. И јас, исто така, наидов на ова кога самиот интервјуирав луѓе. Доаѓа специјалист, се покажува одличен, ми се допадна, му се допаднавме ние. И јас се борев со наједноставниот проблем еден месец, и како резултат на тоа, друг програмер го реши за неколку дена. Морав да се разделам со тој програмер.

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

Најинтересните работи што ги имав беа во одбранбениот комплекс на нашата земја. Во процесот на работа, морав да решам едноставно фантастични проблеми за кои комерцијалните програмери никогаш не ни сонувале. Суперкомпјутери, дизајнирање рутери, разни системи за борба против јазли - ова е неверојатно возбудливо. Кога за време на парадата ќе видите комплекс што го чува вашиот код, тоа е навистина убаво. Доволно чудно, интервјуата со такви компании обично се многу едноставни, буквално се, како што е, прифатени (веројатно спецификите на војската, кои не сакаат да зборуваат премногу), се надредени. Предизвиците со кои се соочив таму беа навистина интересни и предизвикувачки. Со искуство, се покажа дека тие се добри за учење да се биде висококвалитетен системски програмер. Има и недостатоци, а тоа не се ни ниски плати. Во моментов платата во одбранбениот комплекс е сосема пристојна, со бонуси и бенефиции. Како по правило, има многу бирократија, долги работни часови, бескрајни брзи работни места и работа под голем стрес. Во одредени случаи не може да се исклучи тајноста, што додава одредени проблеми за патување во странство. Плус, се разбира, тиранијата на газдите, и ова, за жал, исто така се случува. Иако моето искуство за работа со претставник на клиенти е исклучително пријатно. Ова е колективен впечаток на три различни истражувачки институти и компании поврзани со државните одбранбени налози.

Задачи за интервју

За да нема недоразбирања и за да не ги разоткривам компаниите со кои разговарав, нема да ја искушам судбината и да ги наведам нивните детали. Но, јас сум благодарен за секое интервју, за времето што луѓето го потрошија на мене, за можноста да се погледнам себеси однадвор. Можам само да кажам дека задачите беа за големи меѓународни компании застапени во различни земји.

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

Втората најполаризирачка тема се патоказите, ова навистина треба да ви скокне од забите. За да те разбудат среде ноќ и да можеш се да кажеш и покажеш.

Во главата ми украдов прашања од неколку интервјуа и ќе ги претставам овде, бидејќи ми се доста интересни. Намерно не давам одговори на овие прашања за да можат читателите сами да одговорат на овие прашања во коментар и да имаат малку пудра кога поминуваат низ вистинско интервју.

Прашања бр. 1

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

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Дали сите записи се точни?

II. Зошто оваа програма ќе фрли дефект на сегментација?

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

III. Да се ​​биде паметен.

Има стап долг еден метар. Десет мравки по случаен избор паѓаат врз неа, ползејќи во различни насоки. Брзината на движење на една мравка е 1 m/s. Ако мравката наиде на друга мравка, таа се врти и ползи во спротивна насока. Колку е максималното време што треба да почекате сите мравки да паднат од стапот?

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

Прашања за интервју бр. 2

Хардверски проблеми.

  • Како системските повици на Linux се наредени на асемблерски јазик на ARM процесор, на x86. Што е разликата?
  • Кои алатки за синхронизација постојат? Кои алатки за синхронизација може да се користат во контекст на прекини, кои не и зошто?
  • Која е разликата помеѓу i2c bus и spi bus?
  • Зошто има терминатори на i2c автобусот и која е нивната вредност?
  • Дали интерфејсот RS-232 може да работи САМО на две жици: RX и TX? Еве јас ќе дадам одговор: Излегува дека е лошо, на 9600, но може!!!
  • И сега второто прашање: зошто?
  • Кој е најдобриот начин за уредување на сигналните линии и моќноста во повеќеслојните табли и зошто? Напојување во слоевите, или сигнални линии во слоевите? (Прашањето е генерално чисто за дизајн на кола).
  • Зошто диференцијалните линии имаат патеки што одат заедно насекаде?
  • Автобус RS-485. Обично има терминатори на таква линија. Сепак, имаме коло со ѕвезда, со променлив број на приклучни модули. Кои средства за избегнување на судири и пречки треба да се користат?
  • Што се црвени и бинарни дрвја?
  • Како да се работи со cmake?
  • Прашања за изградба на yocto Linux.

Цели за ова интервју:

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

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

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

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

4. Кои се излезните методи во програмите, вкл. во поток од грешки.

Третиот избор беше релативно неодамнешен, и не би ме чудело да има уште таков прашалник таму, па нема да ја откријам компанијата за да не ги разоткривам... Но генерално ќе дадам пример на можни прашања, а ако ги препознаете вашите прашања, тогаш велам здраво :).

Прашања за интервју бр. 3

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

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

Ова поглавје веројатно не е ни за програмери (иако и за нив), туку повеќе за HR. Најадекватните компании не ги гледаат педантно резултатите од интервјуата. Нормално е да се прават грешки; најчесто тие гледаат како човек знае да решава проблеми и да расудува.

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

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

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

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

Наоди

Програмери, одете на интервјуа! И секогаш трудете се да се унапредите. Да речеме, ако добиете N пари, тогаш одете на интервју за најмалку N*1,2, или подобро N*1,5. Дури и ако не го преземете ова слободно работно место веднаш, ќе разберете што е потребно за ова ниво на плата.
Моите набљудувања покажаа дека одлучуваат доброто познавање на англискиот јазик, доволно богатото искуство во индустријата и самодовербата. Вториот е главниот квалитет, како и секаде во животот. По правило, посамоуверен кандидат може подобро да се претстави на интервју, дури и со повеќе грешки, отколку одличен, но посрамежлив и попроактивен апликант. Среќно со вашите интервјуа!

P/S натпревар

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

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

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

Извор: www.habr.com

Додадете коментар