Русский
Русский
English
Статистика
Реклама

Программисты, ходите на собеседования


Картинка взята из видеоролика с канала Воинствующие Аметисты

Около 10 лет я работал системным программистом под Linux. Это модули ядра (kernel space), различные демоны и работа с железом из пространства пользователя (user space), различные загрузчики (u-boot и др.), прошивки контроллеров и многое другое. Даже иной раз случалось пилить web-интерфейс. Но чаще бывало, что приходилось и с паяльником посидеть, да с проектировщиками печатных плат взаимодействовать. Одна из проблем такой работы это то, что достаточно сложно оценить уровень своей компетенции, поскольку одну задачу ты можешь знать очень глубоко, а рядом можешь не знать совсем. Единственный адекватный способ понять куда идти, и какие течения сейчас есть это ходить на собеседования.
В данной статье хочу обобщить мой опыт похода по собеседованиям на вакансию системного программиста linux, особенности интервью, работы и как по общению с будущим работодателем оценить личный уровень знаний и чего от этого ожидать не стоит.
В статье будет небольшой конкурс с призами.

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


Системный программист, в той специфике, в которой работал я это полный универсал: мне приходилось как писать код, так и отлаживать железо. И часто возникала необходимость что-то паять самостоятельно. Периодически, случалось что мои корректировки по железу передавались потом разработчикам. Поэтому, для работы в этой сфере требуется достаточно хороший багаж знаний, как в области цифровой схемотехники, так и в области программирования. Из-за этого, часто собеседования на вакансию системного программиста выглядят как поиск специалиста по электронике.


Типичное рабочее место системного программиста.

На фото выше моё типичное рабочее место в момент отладки драйверов. Логический анализатор показывает корректность передаваемых посылок, осциллограф контролирует форму фронтов сигнала. Так же в кадр не попал jtag-отладчик, который применяется тогда, когда стандартные средства отладки уже не справляются. И со всем этим парком оборудования необходимо уметь работать.
Часто бывает, что перепаять какие-то элементы, исправить ошибки топологии быстрее и проще самому, чем носить изделие монтажнику. И тогда на твоём рабочем месте поселяется ещё и паяльная станция.
Ещё особенность разработки на уровне драйверов и железа заключается в том, что гугл не помогает. Часто приходится искать информацию по своей проблеме, а там три ссылки, из которых две это твои же вопросы на каком-то форуме. Или ещё хуже, когда встречаешь вопрос такого же бедолаги, который задавал его 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,"hello\n");       fork();       return(0);}


III. На сообразительность.

Имеется палка длинной в один метр. На неё случайным образом падают десять муравьёв, которые ползут в разные стороны. Скорость движения одного муравья 1 м/с. В случае если муравей встречается с другим муравьём, то он разворачивается и ползёт в противоположную сторону. Какое максимальное время нужно прождать, чтобы все муравьи упали с палки.


Следующее собеседование было для меня провальным, и я считаю его самым полезным в моей программистской практике. Оно показало всю глубину моей некомпетентности. До этого собеседования я был знаком с каждым из этих вопросов и они постоянно встречались на моей практике, но как-то не придавал им большого значения, соответственно и не разбирался в них на пятерку. Поэтому данный экзамен, я с позором провалил. И я очень благодарен, что такой провал свершился, это подействовало на меня максимально отрезвляюще. Ты думаешь, что ты крутой специалист, знаешь схемотехнику, интерфейсы, работу с ядром. И тут на тебе реальные вопросы и ты поплыл. Итак, посмотрим.

Вопросы собеседования 2
Аппаратные вопросы.
  • Как устроены системные вызовы linux на языке ассемблера на ARM-процессоре, на х86. В чём отличие?
  • Какие средства синхронизации бывают? Какие средства синхронизации можно использовать внутри контекста прерывания, какие нет и почему?
  • Чем отличается шина i2c от spi?
  • Для чего на шине 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 обратите внимание, что программисты готовы отказаться даже от самой вкусной вакансии, если рабочий день должен начинается рано утром.
В конце приведу отличное видео отбора программиста, скриншот которого приведён в начале этой статьи. Такое собеседование у меня тоже было и не один раз. Если вы видите самодурство на этапе вопросов, то уважайте себя, встаньте, возьмите вещи и уйдите это нормально. Если HR и руководитель на собеседовании самоутверждаются за счёт вас это говорит о токсичности компании и вам там работать не следует, если только вы не любите неадекватных начальников.


Выводы


Программисты, ходите на собеседования! Причём старайтесь идти всегда на повышение. Допустим, если вы получаете N денег, то идите на собеседование минимум на оплату N*1,2, а лучше N*1,5. Даже если вы не возьмёте эту вакансию сразу, то поймёте что же нужно для этого уровня оплаты.
Мои наблюдения, показали что решает хорошее знание английского языка, достаточно богатый опыт работы в отрасли и уверенность в себе. Последнее это главное качество, как и везде в жизни. Как правило, более уверенный кандидат может успешнее пройти собеседование, даже при наличии большего количества ошибок, чем отличный, но более стеснительный и инициативный соискатель. Удачи на собеседованиях!

P/S Конкурс


Если у вас есть интересные примеры задачек, которыми вас загрузил HR, то welcome в комментарии. Мы подготовили небольшой конкурс условия просты: вы пишете самое необычное задание которое у вас было на интервью, читатели проводят его оценку (плюсом), а мы через неделю подводим итоги и награждаем победителя весёлыми ништяками.



Источник: habr.com
К списку статей
Опубликовано: 29.09.2020 12:13:11
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании ruvds.com

Карьера в it-индустрии

Разработка под linux

Управление персоналом

Собеседование

Собеседование в it

Hr

Системный программист

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru