Какие вопросы задать на собеседовании работодателю программист

Опубликовано: 14.05.2024

Большинство разработчиков, когда их спрашивают, почему они хотят сменить работу, отвечают что-то вроде: «Я хочу совершенствоваться, как программист, а моё текущее место не даёт такой возможности». Все ищут новых знаний, однако когда приходит время задать вопросы новому работодателю, обычно всё сводится к этому:

  1. Можно ли у вас иногда работать удалённо?
  2. Медицинская страховка предоставляется?
  3. А что насчёт отпуска?

Тут можно сделать один из двух выводов: либо разработчикам всё-таки в первую очередь нужна возможность работать удалённо, иногда отдыхать и лечиться за счёт компании, либо они задают не те вопросы.

Для тех из вас, кто заинтересован в постоянном профессиональном самосовершенствовании мы подготовили несколько советов о том, что на самом деле нужно спрашивать во время собеседования.

1. Как разработчики узнают что-то новое?

Ревью кода
Обмен знаниями
Отдельные спринты для рефакторинга
Парное программирование
Ретроспективные обсуждения

Не самые лучшие:

Stack Overflow
Можно спросить других разработчиков
Иногда отправляем на конференции
Смотря как вам удобнее узнавать новое

Этот вопрос поможет узнать, заботится ли компания о повышении уровня разработчиков и способствует ли получению новых знаний сотрудниками.

Возможные хорошие ответы:

  • Мы проводим ревью кода, некоторые спринты выделяются только для погашения технического долга, практикуем парное программирование, проводим ретроспективы.
  • Разработчики регулярно принимают участие в наших внутренних или внешних хакатонах.
  • Мы не против экспериментов с любыми новыми вещами на выбор самих разработчиков.
  • У нас есть собрания для обмена знаниями.
  • Разработчики учатся друг у друга (здорово, если в компании есть кто-то хотя бы с таким же или большим опытом, чем у вас самих).
  • Разработчики читают книги на разные темы и обсуждают их между собой.
  • Если не получается решить проблему самостоятельно, разработчики ищут её решение в Интернете.

2. Вы разрешаете разработчикам экспериментировать?

Свободный выбор технологий
Поощрение новых идей
Вы сами планируете своё время для
покорения неизведанных территорий

Не самые лучшие:

Никаких экспериментов
Менеджеры расскажут, как нужно это сделать
У нас нет времени на эту ерунду

Эксперименты с чем-то новым — это один из лучших путей расширения горизонтов и обучения, так что если работодатель не против самостоятельного выбора разработчиками технологий для реализации нового проекта, то это хороший знак.

Вам лучше заранее узнать, придётся ли вам работать на сверхзвуковой скорости, постоянно гоняясь за смехотворно короткими дедлайнами. Если это так, то вам, скорее всего, придётся всегда использовать наиболее знакомый вам стек технологий — на что-то другое просто не будет времени.

Также неплохо, если в компании выделяют время на собственные проекты сотрудников. Не ждите, что это будет какое-то фиксированное количество часов в неделю или в месяц, важно лишь, что руководство в принципе не против этого. Если же они скажут, что компания не может себе позволить тратить время на такие эксперименты, ведь времени и так всегда не хватает, то спросите, каким образом ещё один разработчик в вашем лице сможет изменить ситуацию.

3. Что нужно для того, чтобы получить повышение?

У нас разработан путь продвижения
программистов по карьерной лестнице
Личное обсуждение с руководителем
Обратная связь
Экспертный обзор
Оценка как минимум раз в пол года

Не самые лучшие:

Продвижение после N лет работы
Мы скажем, когда вы будете готовы
Вы ведущий программист тогда,
когда вы помогаете другим

Не стоит недооценивать эту тему, ведь то, насколько быстро люди продвигаются по службе, отражает насколько быстро они получают новые навыки в компании. Конечно, всё это зависит от личной мотивации и других персональных характеристик человека, но компании могут помочь разработчикам в отслеживании прогресса и обозначении точек роста. Есть три вещи, которые вам стоит проверить:

  • Руководство знает и открыто заявляет, какие именно навыки они ожидают от вас на различных карьерных уровнях. Если вам заранее известно, каким качествам нужно соответствовать, чтобы получить повышение, то над этим намного проще работать. Да, это на самом деле довольно очевидная вещь.
  • В компании отслеживают ваши успехи и предоставляют обратную связь по работе. Ещё один вполне очевидный, но крайне важный пункт. Убедитесь, что с вами будут встречаться лично раз в несколько месяцев и предоставлять информацию, помогающую оставаться на верном пути.
  • Другие разработчики будут производить экспертную оценку вашей работы, что поможет компании в целом лучше понимать успехи своих сотрудников.

4. Расскажите о вашем опыте работы с чем-то необычным или инновационным

Мы платим в биткоинах
Как-то раз проводили хакатон
по боям роботов
У нас бывают недели, когда запрещено
использовать мышку
Однажды мы попробовали использовать X,
но ничего не вышло.

Не самые лучшие:

Хм, не припомню такого
Технология X — самая крутая и
мы используем только её
Не стоит изменять то,
что и так отлично работает

«Нам нужен программист для работы над интересным, инновационным проектом» — сколько раз вы видели подобные слова в вакансиях? Так давайте же предоставим шанс работодателю оправдать написанное.

На самом деле это очень коварный вопрос! Вероятно, он может сильно удивить вашего собеседника и привести либо к 10-минутному страстному рассказу о том, какую классную уникальную штуку они как-то раз создавали, либо к оправданию по поводу того, что они не могут себе позволить сделать что-то большее, чем стандартное решение.

5. Будет ли у меня наставник и стану ли я сам для кого-то в будущем наставником?

В команде есть как опытные
разработчики, так и новички
В каждой команде есть технический
наставник
Парное программирование
Ревью кода

Не самые лучшие:

Вы будете один на проекте
Все работают удалённо
Пожалуй, вы будете единственным
разработчиком с таким опытом

Вполне очевидно, что если вы будете самым опытным на проекте, то станете тем самым разработчиком, к которому посылают всех остальных за помощью в решении проблем. Конечно, это неплохо для самолюбия, но так вы останетесь без того, с кем можно поделиться новыми идеями и обсудить их. Даже если вы уже очень опытный специалист, наличие кого-либо со схожим опытом рядом определённо пойдет на пользу вашему развитию.

6. Какие у вас есть перспективы для ведущих разработчиков?

У нас есть планы для роста и для
ведущих разработчиков тоже
Будем рады помочь вам
строить ваше будущее
Всегда есть чему ещё научиться,
можно заняться наставничеством

Не самые лучшие:

Через год мы сможем обсудить
повышение оклада
Отправим вас на более сложные проекты
Вы даже можете занять моё место
когда-нибудь

Представим, что вы заняли позицию «самого главного» разработчика в компании, много работали для этого и добились своего. Но что дальше?

Как понять, что после определённой точки ваш рост не прекратится и вам всегда будет куда развиваться? Просто спросите! Может быть, в компании есть более высокие должности для разработчиков. Тогда обязательно попросите их описать эти должности подробнее, чтобы не получилось, что они сводятся к другой надписи на визитке и большему количеству денег.

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

7. Вы выделяете бюджеты и время на обучение сотрудников и посещение конференций?

Мы оплачиваем участие в конференциях
Сами тоже выступаем
Покупаем книги
Выделяем деньги на покупку
учебных материалов

Не самые лучшие:

Аээ, зачем?
В Интернете же и так всё можно найти!

Конечно, вы в любом случае будете учиться в процессе работы, но разве не было бы здорово иногда посещать сторонние конференции или слетать послушать вашего кумира в мире программирования?

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

8. Что вы делаете, когда понимаете, что проект начинает проваливаться?

Если вы ошиблись,
мы все можем поучиться на этом!
Посмотрим, что пошло не так
и не будем допускать подобных
ошибок в следующий раз!
Мы проводим ретроспективы как в случае
успеха, так и при провалах!

Не самые лучшие:

Бывает, что не повезло,
нужно двигаться дальше
Мы не будем платить за время
на исправление ваших собственных ошибок

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

Также можете попробовать спросить:

  • Насколько проведение ретроспектив вообще привычно для вашей компании?

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

Хорошие программисты высоко ценятся на современном рынке труда. Компании часто соревнуются за работников банально своими кошельками — кто сможет больше платить, тот и получит лучшего специалиста. Конечно, иметь хорошую зарплату дело полезное, никто не просит вас работать только за идею! Но разве мы не можем рассчитывать на нечто большее, чем просто деньги?

В конце концов, вы, как программист, производите код, а взамен, получаете деньги и опыт. И если вас заботит в том числе вторая часть про опыт, то будет вполне уместным задать некоторые свои вопросы на собеседовании, а не только поинтересоваться уровнем оклада. Хорошем тоном тут будет заранее сообщить, что вы планируете это сделать, чтобы собеседник выделил достаточно времени на вас.

А вы задаёте свои вопросы на собеседованиях? Использовали ли когда-либо вопросы из этого списка? Какие получили ответы в каких компаниях? Какие ещё вопросы вы используете и с какой целью? Поделитесь своим мнением в комментариях, это будет очень полезно для остальных читателей.



Интервьюеры не отличаются оригинальностью, и один и тот же вопрос можно встретить на 3-5 разных собеседованиях. Но даже опытные программисты, оказываясь в стрессовой ситуации, нередко теряются и не могут найти ответ на довольно простые вопросы. Предлагаем заранее потренироваться, проверить свои знания, а заодно посмотреть на любимые вопросы интервьюеров. Не исключено, что именно на них вам предстоит отвечать на следующем собеседовании.

Структуры данных и вопросы об алгоритмах – основная часть любого собеседования для программистов вне зависимости от их специализации.

Это один из самых популярных вопросов на собеседованиях. Его используют даже в телефонных интервью, чтобы быстро определить общий уровень знаний кандидата и оценить его способность быстро решать нестандартные задачи.

Все программисты знают, что средний элемент в LinkedList несложно найти, определив длину списка, последовательно пройдя все его узлы, пока не дойдёшь до NULL в первом проходе. А затем, пройдя половину из них во втором проходе. Когда же их просят решить эту задачу за один проход, многие теряются.

Большинство задач, поставленных на собеседовании, имеет довольно простое решение, и сидя в спокойной обстановке, Вы без особого труда найдёте его сами.

В этой задаче достаточно ввести два указателя. Первый будет увеличиваться при прохождении одного узла списка, второй – при прохождении двух узлов. В момент, когда второй указатель дойдёт до конца списка (наткнётся на NULL), первый будет указывать на середину списка.

Успешно справились с этим вопросом? Получите следующий.

Исходный код решения

Если в списке есть цикл, то в какой-то момент оба указателя будут показывать на один и тот же узел списка.

Уже знаете ответ?

Можно использовать ту же схему решения. Первый указатель показывает на первый узел в связанном списке, второй на i-тый сначала. Когда второй указатель достигнет конца списка (дойдёт до NULL), первый будет указывать на i-тый элемент с конца.

Это вообще задача на логику для средней школы. Многие программисты стремятся её решить длинным перебором/сравнением элементов, но есть куда более рациональный и эстетичный способ.

  1. Считаем сумму всех чисел от 1 до 100 любым удобным для Вас методом.
  2. Считаем сумму элементов массива.
  3. Вычитаем первое из второго. Получаем… Правильно, получаем значение дублирующегося элемента.
  4. Если надо, находим номера искомых элементов в массиве.

Один из самых популярных экспресс-вопросов. Есть несколько способов выполнения этого задания, но на собеседовании лучше выбрать самый простой. Не забывайте, что Ваш собеседник далеко не всегда может оценить преимущества длинного, но красивого решения.
Неплохо подойдёт что-то типа этого:

Вопросы по сортировке данных присутствуют почти на каждом собеседовании. Они позволяют нанимателю быстро оценить уровень умений кандидата и определить, соответствует ли этот уровень нужному.

Решить это можно так:

Задавая такие вопросы, ваш собеседник, понятное дело, хочет услышать не заученное определение из учебника или получить ссылку из Википедии, а оценить ваше собственное понимание различия этих двух типов структур данных.
Стек и очередь похожи отсутствием свободного доступа ко всем элементам структуры данных. Главное же отличие заключается в том, что стек – это структура типа LIFO(Last In First Out), где свободный доступ возможен только к последнему добавленному элементу, а при его удалении методом «pop» к элементу, добавленному перед ним. Когда же в стек добавляется новый элемент, доступен становится только он.
Очередь относится к типу FIFO(First In First Out), то есть доступен в ней только первый добавленный элемент. В случае его удаления доступен второй и т.д.

Этот вопрос довольно часто на собеседовании слышат те, кто сумели быстро найти 1 дублирующийся элемент в массиве. Для решения этой задачи можно использовать HashMap. Как Вы, несомненно, знаете, HashMap хранит данные парами – ключ/значение, и создав нужное количество карточек, Вы легко найдёте все повторы и их номера.

Это один из классических вопросов для телефонного собеседования. Любой программист на него ответит, почти не задумываясь.

В обоих списках узлы связаны посредством указателей. Только в односвязном списке указатель от каждого узла ведёт исключительно к следующему, и переход возможен только к нему, то есть исключительно в одном направлении. А в двусвязном от каждого узла, кроме первого и последнего, есть возможность перейти как к следующему, так и к предыдущему узлу, то есть двигаться в обоих направлениях.

Если вдруг кто-то не знает, числа Фибоначчи – это последовательность, где каждое следующее число после 1 является суммой двух ему предшествующих. То есть ряд чисел Фибоначчи выглядит так: 1,1, 2, 3, 5, 8, 13, 21…

Решить эту задачу можно так:

Палиндром – это набор знаков (слово, число, фраза), в котором все знаки при прямом прочтении полностью совпадают со знаками при обратном прочтении.
То есть палиндромами являются числа 66, 13431, 789987 и т.д.

  1. Для определения значения каждого символа в числе можно использовать оператор /. Например: 66/10 вернёт 6.
  2. А для нахождения последнего символа в числе оператор %.
    66%10=6
    123%10=3
  3. Сравниваем полученные значения и делаем выводы.

Можно пойти другим путём и развернуть число, используя рекурсию.

А после этого дописать этот код так, чтобы он сравнивал полученные цифры.

Задача, в принципе, аналогичная предыдущей, но с существенным отличием - использовать операторы / и % не получится.
Используем рекурсию и получим простое и красивое решение:

Бинарное, или двоичное дерево поиска – это структура данных, каждый узел в которой может иметь от 1 до 2 подузлов (детей) или не иметь их вовсе.

Расположение данных в бинарном дереве имеет ряд ограничений:

  1. Как и во всех деревьях, любой узел бинарного дерева не может иметь более одного родителя.
  2. Данные в дереве распределяются в зависимости от их значений. Если значение подузла (ребёнка) меньше, чем значение узла (родителя), этот подузел становиться левым или ребёнком левого подузла, если левый подузел уже существует. Соответственно, если значение подузла больше значения узла, то он становится правым или ребёнком правого.

Применяются бинарные деревья в реализации ассоциативных массивов и множеств, например TreeMap или TreeSet, в некоторых алгоритмах вычислительной геометрии.

Этот вопрос позволяет Вам продемонстрировать свои навыки владения стандартными методами (push и pop) для работы с этой структурой данных. При выполнении этой задачи Вам нужно будет использовать массив или связный список для хранения элементов.
Написать можно, например, программу стандартного калькулятора.

for java interview

Ещё один пример очень популярного вопроса. Есть много способов изменения порядка элементов в связанном списке. В следующей статье я рассчитываю подробно осветить их все.
Ждите! Или пишите свои варианты этой программы, не заглядывая в «авторскую версию»!

Не забывайте, что решая ту или иную задачу на собеседовании, желательно разъяснять каждый логический шаг интервьюеру. На стартовом собеседовании оценивают не только скорость и правильность решения поставленных задач, но и логику мышления в целом.
Именно поэтому иногда даже неполное решение сложной задачи позволит интервьюеру оценить ваши знания как достаточные для вакантной должности.
Даже если Вы опытный программист с десятками реализованных проектов портфолио, не поленитесь перед собеседованием повторить теорию. Ведь ответ «ну это работает где-то так… и вообще, за последние 3 года я ни разу не пользовался этой структурой данных» вряд ли устроит интервьюера.
Часть материалов переведена из этого источника.

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

Адаптировали статью команды блога Codementor о том, что важно спросить у веб-разработчика перед тем, как его нанять.

19 вопросов, которые стоит задать веб-разработчику на собеседовании

Полина Кабирова

Коммерческий автор и переводчик

Подготовьтесь заранее

Есть такая поговорка: кто не планирует свою победу, тот планирует чужую. И она будет к месту, если вы ищете разработчика, особенно на удалёнку.

Вот главные советы.

Определите требования

Опытные веб-разработчики всегда очень заняты. Нужно определиться с вашими ожиданиями и объёмом работы кандидата. Чётко сформулируйте должностную инструкцию и особенности работы в компании. Соискатель должен ясно понимать рабочие обязанности и предлагаемые условия труда.

Выделите оптимальный бюджет

Помните, вы получите ровно столько, сколько заплатили.

Обязанности и уровень самоотдачи разработчика зависят от зарплаты, которую вы предлагаете. По статистике, ведущий разработчик в США в среднем получает $85 000 в год. Для удалённых сотрудников зарплаты разнятся от $60 до $120 в час и выше.

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

В России на первое полугодие 2018 года средняя зарплата ИТ-специалистов составляет около 100 тыс. рублей в месяц. При этом диапазон зарплат достаточно большой — от 14 до 350 тыс. рублей.

В целом зарплата по миру в сфере разработки может достигать 89 000 $ в год.

Установите реалистичные дедлайны

Разработчику может потребоваться время, прежде чем приступить к работе в вашей компании. Учитывайте это при отборе кандидатов, тем более вам тоже нужно время для поиска подходящего человека.

На срочный проект можно рассмотреть фрилансера. Он начнёт работу, а у вас появится время для поиска кандидата в штат. Убедитесь, что у выбранного фрилансера или подрядчика достаточно времени на ваш проект.

Подготовьтесь к собеседованию

У хорошего разработчика во время и после собеседования появятся вопросы. Будьте готовы объяснять, что именно вы ищете в кандидате и какую работу ему предлагаете.

Профессия

Веб-разработчик

Узнать больше

  • Научитесь программировать на JavaScript и PHP
  • 11 готовых проектов в портфолио по итогам обучения

Вопросы для собеседования с разработчиком

Процесс поиска разработчика зависит от его роли в команде и особенностей компании в целом. Вот несколько вещей, на которые стоит обратить внимание при поиске.

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

Основные вопросы для собеседования с разработчиком и ответы, которые следует от него ждать. Не забывайте делать заметки во время собеседования — это поможет точнее оценить кандидатов.

Вопросы об опыте

1. Расскажите о проекте, которым по-настоящему гордитесь. Что вы сделали для его успешной реализации?

Начните собеседование аккуратно, чтобы уменьшить волнение кандидата. Ответ на этот вопрос даст представление об амбициях специалиста, покажет его взгляд на успех и рабочий процесс. Обратите внимание, упомянул ли разработчик других членов команды или сосредоточился на своих стараниях.

2. Расскажите о проекте, который вас разочаровал. Что бы вы сейчас изменили при работе над ним?

Разработчик должен постоянно анализировать свою работу. Вы не захотите нанимать человека, который всё время повторяет ошибки.

3. Что в программировании для вас самое сложное?

Другими словами, какие слабые стороны видит разработчик в своих технических навыках.

4. Как проводите тестирование? И что вообще о нём думаете?

Хороший код — это минимум багов в работе приложения и мало ошибок в коде. Хороший разработчик уделяет много внимания тестированию качества. Так можно сократить количество бессонных ночей в поисках ошибок на ранних этапах работы.

5. Как следите за последними тенденциями в веб-разработке?

Другими словами, прикладывает ли кандидат усилия, чтобы оставаться востребованным специалистом. Например, спросите, какие технические издания он читает, какими авторами и личностями ИТ-сообщества восхищается и почему.

Сфера веб-разработки постоянно меняется, поэтому для специалиста важно интересоваться последними тенденциями и формировать своё мнение о них.

6. Какую среду разработки предпочитаете?

Не важно, где работает кандидат — вам необходимо найти человека, который может адаптироваться под разные технологии и делиться своим мнением. Ответ на вопрос также покажет его опыт работы с разными фреймворками, системами контроля версий, юнит-тестированием и так далее.

Курсы Нетологии

Soft Skills

Узнать больше

  • Soft skills — это надпрофессиональные навыки, которые помогают любым специалистам в любой отрасли быть востребованными
  • Сможете прокачать навыки, чтобы быстро решать задачи, убедительно аргументировать свою позицию, грамотно выстраивать коммуникацию — без лишних эмоций и стресса 💪

Вопросы о коммуникативных и управленческих навыках

7. Расскажите, какие качества помогают вам в работе

Возможно, вы ищете человека, который быстро решает проблемы, отлично ведёт переговоры или любит учиться. Попросите кандидата привести примеры, как он применяет эти навыки.

В зависимости от вакансии, одни навыки будут приоритетнее других. Например, тайм-менеджмент и коммуникативные навыки будут более важны для удалённого сотрудника, чем для штатного разработчика.

8. Расскажите о проблеме, которую вы решили вне программирования

Проблема может быть какой угодно. Например, кандидат починил кофемашину или помог коллеге отремонтировать велосипед. Неважно, что именно он сделал. Главное — вы увидите его способность решать проблемы и взаимодействовать с людьми.

9. Как бы описали вас другие разработчики / менеджеры проектов, с которыми вы работали?

Это отличный способ понять, как кандидат оценивает себя и свои навыки, какую роль играет в команде и как проявлял себя на прошлых должностях.

10. Представьте, что не можете решить проблему, связанную с программированием. Что сделаете, чтобы найти решение?

Читать также

19 вопросов, которые стоит задать веб-разработчику на собеседовании

11. Что вы думаете о парном программировании? Был ли у вас такой опыт?

Такой метод программирования не всегда подходит для повседневной разработки, но будет интересно узнать, готов ли кандидат сесть рядом с коллегой и разбираться в его коде.

12. Работали ли вы когда-нибудь напрямую с заказчиком или как-то взаимодействовали с ним? Если нет, хотели бы попробовать?

Ответ на этот вопрос даст представление, как кандидат реагирует на мнения других людей о его работе. Если вы ищете человека для разработки приложения или способного в будущем расти внутри компании, он неизбежно будет сталкиваться с критикой пользователей и коллег.

Вопросы для проверки технических навыков разработчика

13. Опишите, пожалуйста, процесс создания веб-страницы или приложения.

Это отличный способ оценить, как кандидат справляется с базовыми задачами. Он используют фрагменты кода для быстрого создания базовой HTML-страницы, добавляет jQuery и начинает программировать или использует вспомогательные инструменты для разработки, типа Bower или Yeoman?

14. Какие инструменты используете для поиска багов?

Ответ на этот вопрос будет зависеть от среды разработки, которую использует кандидат. Разные языки программирования используют разные профилировщики, а некоторые фреймворки имеют встроенные инструменты для устранения багов. Важно узнать не инструмент, а подход к решению проблемы.

15. Что знаете о CORS?

CORS (Cross-Origin Resource Sharing, с англ. — «совместное использование ресурсов между разными источниками») — основной элемент HTML5, который должен быть знаком большинству фронтенд-разработчиков. Технология позволяет запрашивать доступ к различным ресурсам другого домена (jQuery, библиотекам шрифтов).

16. Вы можете объяснить назначение каждого типа HTTP-запроса при соблюдении требований RESTful?

Знает ли ваш кандидат разницу между запросом GET и POST? Не забыл ли он упомянуть запросы PATCH и CONNECT? Это серьёзный вопрос для оценки базового понимания HTML.

17. У вас есть пять разных таблиц стилей, как лучше всего интегрировать их в сайт?

Этот вопрос проверяет понимание CSS. Объединит ли кандидат стили в один CSS-файл или объединит только стили для конкретного приложения? И как он использует библиотеки стилей, например, Bootstrap?

18. Как вы организуете JavaScript-код?

Ответ на этот вопрос покажет, как кандидат систематизирует свой код. Он разделяет JavaScript и HTML? JS разбит на логические блоки и хранится в отдельных файлах? Он использует скрипт для объединения этих файлов в один пакет? А пространство имён в JavaScript, чтобы не захламлять глобальное пространство имён?

19. Как вы учитываете SEO, производительность, безопасность и UX при создании приложения?

Это очень важный вопрос. Способность понимать и сочетать эти факторы в работе является ключевым навыком для любого веб-разработчика. Из ответа также будет понятно, чему кандидат отдаёт приоритет при программировании. Например, если вы — крупная финансовая компания, безопасность для вас будет важнее SEO. Если вы — интернет-издание, на первом месте производительность сайта и SEO.

Ваше собеседование не ограничивается перечисленными вопросами.

Узнавайте больше о техническом опыте кандидата, стеке технологий, который встретится ему на новой работе. Если вы сами не разработчик, лучше попросить опытного специалиста провести техническую часть собеседования.

Примеры вопросов для технической части собеседования и ответы специалистов:

После собеседования

Из-за нехватки специалистов веб-разработчики очень востребованы. Если вы ищите разработчика, действуйте быстро: оцените всех кандидатов и сразу же свяжитесь с теми, кто вам подходит. Хороший кандидат быстро найдёт работу.

Нет единой правильной схемы для поиска разработчика — важны детали. Чтобы найти идеальный вариант, ясно определите собственные ожидания и требования для разработчика. На Github есть целый список вопросов для интервью.

Читать также

19 вопросов, которые стоит задать веб-разработчику на собеседовании

Мнение автора и редакции может не совпадать. Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

Готовясь к собеседованию, многие начинающие программисты понятия не имеют, каких вопросов ожидать от интервьеюров — будь то собеседование в стартап или технологический гигант вроде Amazon , Microsoft или Google . В статье на Hacker Noon разработчик Джавин Пол собрал вопросы, которые любят задавать на таких интервью, а также ответы на них и дополнительные ресурсы для подготовки.

Все задания, которые с большой вероятностью предложат кодеру на техническом собеседовании, можно условно разделить на две группы: общие логические задачи типа «поменять значения переменных, не используя временную переменную», а также вопросы по структурам данных и алгоритмам . Наиболее частые из последних: массивы, связные списки, строки, двоичные деревья, а также различные вопросы по алгоритмам — именно они будут рассмотрены ниже.

Но прежде чем приступить к ним, понадобится хорошо изучить эти темы, или по крайней мере освежить навыки решения задач по ним. Для этого можно пройти курс по алгоритмам и структурам данных Роберта Хорвика : часть 1 и часть 2 .

Список наиболее часто задаваемых вопросов для собеседований по программированию.

1. Массивы

Массив — это важнейшая структура данных, хранящая набор элементов в непрерывном участке памяти. Это излюбленная тема интервьюеров, и много вопросов по ней можно ожидать в любом собеседовании , например на реверс, сортировку или поиск элементов массива.

Главный плюс такой структуры данных, как массив — он обеспечивает быстрый поиск сложностью О(1) при знании индексов, но добавление и удаление элементов из него происходит медленно, потому что нельзя менять размер массива после создания. Чтобы увеличить или уменьшить массив, нужно создать новый и скопировать в него все элементы из старого.

Чтобы с лёгкостью отвечать на вопросы, связанным с массивами, нужно хорошо разбираться как с самими массивами, так и с базовыми конструкторами, такие как рекурсия и основные операторы.

Вот самые частые вопросы:

  • Как найти пропущенное число в заданном массиве целых чисел от 1 до 100? (решение)
  • Как найти повторяющееся число в заданном массиве целых чисел? (решение)
  • Как найти наибольшее и наименьшее число в неотсортированном массиве? (решение)
  • Как найти все пары в массиве целых чисел, сумма которых равна заданному числу? (решение)
  • Как найти повторяющиеся числа в массиве, если их несколько? (решение)
  • Как удалить повторяющиеся элементы из заданного массива в Java? (решение)
  • Как сортировать массив целых чисел без дополнительной памяти при помощи алгоритма быстрой сортировки? (решение)
  • Как удалить повторяющиеся элементы из массива без дополнительной памяти? (решение)
  • Как сделать поменять порядок элементов в массиве на обратный без дополнительной памяти в Java? (решение)
  • Как удалить повторяющиеся элементы из массива без использования коллекций? (решение)

Эти вопросы помогут не только развить навыки решения задач, но и прокачать знания по массивам. Более сложные вопросы по теме можно найти в курсе по алгоритмам The Coding Interview Bootcamp: Algorithms + Data Structures , разработанном специально для подготовки к собеседованиям в таких технологических гигантах, как Google, Microsoft, Apple или Facebook.

Дополнительно можно поупражняться на этой подборке из 30 вопросов .

2. Связный список:

Ещё одна базовая структура данных — связный список. Как и массив, это линейная структура данных, и элементы в нём хранятся линейно, но в отличие от массива — не в непрерывных областях. Они разбросаны в памяти и соединяются с помощью узлов. Связный список — ничто иное, как список узлов, каждый из которых содержит собственно данные и ссылку на следующий узел.

Благодаря такой структуре добавлять и удалять элементы в связном списке достаточно легко, так как нужно просто изменить ссылку без необходимости создавать новый список. При этом искать элементы сложнее; поиск по односвязному списку занимает линейное время O(n). В этой статье можно подробнее прочесть о различиях между массивами и односвязными списками.

Есть разные виды связных списков: односвязный список, который позволяет передвигаться только в одну сторону: в начало или в конец; двусвязный список, дающий возможность перемещения как вперёд, так и назад; кольцевой список, который формирует зацикленную структуру.

Чтобы успешно справляться с вопросами по линейным спискам, важно хорошо знать рекурсию . Если извлечь из связного списка один узел, оставшаяся структура по-прежнему будет связным списком, и поэтому для многих задач в этой теме более простыми являются рекурсивные решения, чем итеративные.

Вопросы для собеседования:

  • Как найти центральный элемент в односвязном списке за один проход? (решение)
  • Как проверить заданный связный список на цикличность? Как найти исходный узел цикла? (решение)
  • Как сделать реверс связного списка? (решение)
  • Как сделать реверс односвязного списка без рекурсии? (решение)
  • Как удалить повторяющиеся узлы из несортированного связного списка? (решение)
  • Как найти длину односвязного списка? (решение)
  • Как найти 3-й узел с конца в односвязном списке? (решение)
  • Как найти сумму двух связных списков, используя стек? (решение)

Эти вопросы помогут развить умение решать задачи на связные списки и углубить знание этой структуры данных. Если они вызывают трудности, можно обновить свои знания структур данных и алгоритмов, пройдя курс Data Structures and Algorithms: Deep Dive Using Java .

Кроме того, можно потренироваться на этом списке из 30 вопросов .

3. Строки

Помимо массивов и связных списков, ещё одной популярной темой являются строки: вопросы по ним неизменно звучат на каждом собеседовании на должности в программировании.

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

Вот наиболее частые из них:

  • Как вывести повторяющиеся символы из строки? (решение)
  • Как проверить, являются ли две строки анаграммами? (решение)
  • Как вывести первый неповторяющийся символ из строки? (решение)
  • Как сделать реверс заданной строки с использованием рекурсии? (решение)
  • Как проверить, что строка состоит только из цифр? (решение)
  • Как найти повторяющийся символ в строке? (решение)
  • Как посчитать количество гласных и согласных звуков в заданной строке? (решение)
  • Как посчитать, сколько раз в строке встречается заданный символ? (решение)
  • Как найти все возможные перестановки элементов строки? (решение)
  • Как сделать реверс слов в заданном предложении, не используя классы-коллекции? (решение)
  • Как проверить, является ли одна строка перестановкой другой? (решение)
  • Как проверить, является ли заданная строка палиндромом? (решение)

Способность решить эти вопросы говорит о достаточно хорошем уровне владений строками. Более продвинутые задачи можно найти в книге « Алгоритмы. Руководство по разработке » Стивена Скиены .

Ещё 20 вопросов можно найти здесь .

4. Двоичное дерево поиска

Все рассмотренные выше структуры — линейные, однако в действительности представить всю информацию таким образом невозможно, и здесь помогает такая структура данных, как дерево.

Дерево позволяет хранить данные в виде иерархии. В зависимости от способа хранения информации, существуют различные типы деревьев, например двоичное дерево , в котором каждый узел имеет не более двух дочерних элементов. Наряду с двоичным деревом поиска , это одна из самых широко распространённых древовидных структур данных, а значит, по нему обязательно попадётся множество вопросов, включая их обход, подсчёт узлов, определение глубины и сбалансированности дерева.

Секрет успешного прохождения вопросов, связанных с двоичным деревом — основательное знание теории, например, что такое размер или глубина двоичного дерева, что такое лист и узел, а также понимание основных алгоритмов обхода дерева: в прямом, симметричном и обратном порядке.

Наиболее распространённые вопросы по бинарным деревьям:

  • Как реализуется двоичное дерево поиска? (решение)
  • Как выполнить обход в прямом порядке в заданном двоичном дереве? (решение)
  • Как обойти заданное двоичное дерево в прямом порядке без рекурсии? (решение)
  • Как выполнить симметричный обход в заданном двоичном дереве? (решение)
  • Как вывести все узлы заданного двоичного дерева, используя симметричный обход без рекурсии? (решение)
  • Как применяется алгоритм обхода в обратном порядке? (решение)
  • Как обойти заданное двоичное дерево в обратном порядке без рекурсии? (решение)
  • Как вывести на печать все листья двоичного дерева поиска? (решение)
  • Как посчитать количество листьев в заданном двоичном дереве? (решение)
  • Как выполнить двоичный поиск в заданном массиве? (решение)

Если пройти эти вопросы самостоятельно слишком сложно, не помешает пройти какой-нибудь качественный курс по структурам данных и алгоритмам, например From 0 to 1: Data Structures & Algorithms in Java . Вот ещё два списка книг и курсов на эту тему.

5. Прочие алгоритмы и вопросы

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

Очень важно хорошо подготовиться по этим темам, потому что на реальных собеседованиях по ним часто попадаются неожиданные каверзные вопросы. Если прорешать их заранее, они не вызовут проблем, а это придаст уверенности в себе при объяснении решения интервьюеру.

  • Как реализуется сортировка пузырьком? (решение)
  • Как реализуется итеративная быстрая сортировка? (решение)
  • Как реализуется сортировка вставками? (решение)
  • Как реализуется сортировка слиянием? (решение)
  • Как реализуется блочная сортировка? (решение)
  • Как реализуется сортировка подсчётом? (решение)
  • Как реализуется поразрядная сортировка? (решение)
  • Как поменять местами значения двух переменных без использования третьей? (решение)
  • Как определить, пересекаются ли два прямоугольника? (решение)
  • Как спроектировать торговый автомат? (решение)

Свыше 189 вопросов для прохождения собеседования по программированию с ответами можно найти в книге « Карьера программиста » (6-е издание) Гэйл Лакман Макдауэлл .

Здесь можно пройти ещё 50 вопросов по программированию для прохождения собеседований по телефону ; закрепить навыки можно с помощью вот этих подборок книг и курсов .

Вот ещё несколько ресурсов и подборок, которые помогут подготовиться к собеседованию:


Приглашая вас на собеседование перед приемом на работу, представители компании хотят:

  1. Определить объективные границы ваших знаний.
  2. Выяснить, чем вы можете быть полезны компании сейчас и в ближайшем будущем.
  3. Определить, сможете ли вы влиться в команду.

Исходя из этого, следует ожидать вопросов трех видов — об имеющемся опыте работы, о технических знаниях и умениях, об управленческих и коммуникативных навыках.

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

Вопросы об опыте

  1. Расскажите о проекте, который вызывает у вас гордость. Какова ваша роль в его реализации? Этим вопросом наниматель пытается выяснить ваши амбиции — что является для вас мерилом успеха, говорите ли вы только о себе или упоминаете других членов команды.
  2. Был ли у вас проект, в котором вы сейчас хотели бы что-то улучшить? Работодателю важно понять, что вы умеете анализировать свою работу, чтобы избегать ошибок в будущем.
  3. Что считаете сложным для себя в программировании? Это вопрос на понимание своих слабых сторон.
  4. Как относитесь к тестированию? Хороший разработчик должен уделять достаточно времени тестированию качества, добиваясь минимума ошибок в коде и багов в работающем приложении.
  5. Как вы повышаете уровень своей компетентности? Хорошим ответом будет перечисление источников актуальных знаний (очные либо онлайн-курсы, книги, сайты, подкасты, статьи).
  6. Какими еще языками (или методологиями) интересуетесь? В какой среде предпочитаете работать? Ответ на эти вопросы покажет, умеете ли вы адаптироваться при необходимости под разные технологии. Расскажите о своем опыте работы с юнит-тестированием, системами контроля версий, с различными фреймворками.

Программист

Вопросы об управленческих и коммуникативных навыках

Следующая группа вопросов, которые могут задавать на собеседовании, раскрывает вас как командного игрока и возможного руководителя проекта, способного организовать работу команды.

  1. Какие свои качества считаете наиболее полезными в работе? Ответ на этот вопрос зависит от требований компании к вакансии, на которую вы претендуете. Можете упомянуть, что любите учиться, умеете вести переговоры и быстро решаете возникшие проблемы.
  2. Какие проблемы, не связанные с программированием, вам приходилось решать? Не важно, что именно вы сделали. Ответ на этот вопрос должен показать вашу способность быстро и эффективно находить решения возникших проблем и умение взаимодействовать с людьми.
  3. Как бы вас описали бывшие коллеги и руководители проектов? Ответ показывает вашу самооценку и роль в команде.
  4. Как вы поступаете, когда не можете самостоятельно решить проблему из области программирования? Ответ характеризует ваш путь преодоления трудностей. Попытаетесь ли найти ответ с помощью интернет-ресурсов или обратитесь к коллегам.
  5. Ваше отношение к парному программированию? Нанимателю интересно понять, готовы ли вы будете вместе с коллегой разбираться в написанном им коде.
  6. Есть ли опыт непосредственного взаимодействия с заказчиком? Как вы к этому относитесь? Ответ покажет ваше отношение к возможной критике со стороны коллег и пользователей, насколько болезненно вы реагируете на мнение других людей о вашей работе.

Собеседование с кандидатом

Вопросы о технических навыках

Эта группа вопросов может отличаться в зависимости от того, претендуете ли вы на должность junior-программиста, или вы уже не новичок и хотите занять должность middle или senior-разработчика. Во втором случае вопросы могут быть узкоспециализированными, направленными на выяснение ваших знаний и навыков в конкретной области программирования, которой вам предстоит заниматься.

Наибольший интерес для нас представляют вопросы для новичков.

Что должен знать junior-разработчик

  • разбираться в принципах объектно-ориентированного программирования;
  • уметь самостоятельно писать код;
  • уверенно знать хотя бы один язык и фреймворк;
  • знать различные алгоритмы сортировки, написать код, используя быструю сортировку;
  • иметь представление о работе с различными технологиями;
  • ориентироваться в работе хотя бы с одной интегрированной средой разработки, уметь подключать библиотеку к проекту;
  • иметь опыт работы с базами данных, уметь к ним обращаться;
  • разбираться в методологиях, знать принципы Agile;
  • разбираться в системе контроля версий;
  • уметь работать с веб-сервисами.

Помимо этого, претендента на должность junior-программиста могут спросить:

  1. Почему он выбрал именно этот язык. Здесь следует рассказать о его сильных и слабых сторонах, где его предпочтительнее использовать.
  2. Где он проходил обучение и в каких проектах принимал участие.
  3. Какой проект он разрабатывал самостоятельно (для себя или на курсах), в чем состояла задача, как он их решал возникшие проблемы.
  4. Готов ли он все время учиться новому, в том числе за счет личного времени и средств.
  5. Насколько развиты его soft skills, коммуникативные навыки.
  6. Каков уровень знания английского языка (желательно не ниже intermediate). Это необходимо для работы с иностранными коллегами и заказчиками.
  7. Как он будет решать возникшую проблему. Желательно сначала самому найти несколько вариантов решения, и только потом обращаться за советом к более опытному коллеге.
  8. Может ли он оценить срок выполнения поставленной задачи.

Программирование

С будущим младшим программистом могут провести тестирование. Обычно оно состоит из трех частей:

  • логическая часть — позволяет оценить умение кандидата делать выводы из поступившей информации и выполнить обобщение;
  • проверка внимания памяти, качества усвоения информации — необходимо проанализировать задачу из пяти-шести пунктов, описать пути решения и сделать выводы;
  • проверка скорости мышления, речевых навыков, способности работать в команде, основанная на решении «поведенческих» задач.

Как подготовиться, тактика поведения

Как вести себя на интервью

  1. Не надо надевать костюм и галстук, если вы не носите их достаточно часто. Оденьте то, в чем вы чувствуете себя уверенно и комфортно. Главное, чтобы одежда была опрятной, а ваш внешний вид производил впечатление аккуратного человека.
  2. Узнайте побольше о компании, в которую хотите устроиться. Чем она занимается, какие вопросы будут в вашей компетенции. Поищите информацию в разных источниках, включая сайт, соцсети, блог. Поинтересуйтесь отзывами. Особое внимание уделите тому, что вас в ней привлекает — не забудьте упомянуть это на собеседовании.
  3. Продемонстрируйте свое желание влиться в культуру компании. Все, что для этого требуется — проявить искреннюю заинтересованность к тому, чем компания занимается. Если вы действительно хотите работать в этой компании, вряд ли ваш энтузиазм будет наигранным.
  4. Изучите заранее часто задаваемые вопросы и подготовьте ответы на них. Лучше всего их отрепетировать в спокойной обстановке. При подготовке к техническим вопросам используйте разные источники. Важно не вызубрить готовый ответ, а научиться понимать поставленную проблему, анализировать ее и видеть пути решения.
  5. Вас могут попросить найти несколько способов решения предложенной задачи. Будьте готовы к этому, не паникуйте, если не можете что-то вспомнить. Просто начните рассуждать вслух, показывая ход ваших мыслей.
  6. Подготовьтесь к рассказу о своих достижениях. Лучше всего, если это будут уже реализованные проекты, которые активно используются и показывают реальные результаты. Достижениями могут быть не только проекты, но и выступления на конференциях, успешные переговоры с заказчиком.
  7. Не лгите о своих заслугах, обман вскроется очень быстро. Указывайте в резюме только тот опыт, который действительно имеется — вам могут задать вопросы, чтобы понять глубину ваших знаний в этой области.
  8. Набирайтесь опыта, проходя интервью в разных компаниях. Если вы заинтересовались сразу несколькими вакансиями, проходите собеседование сначала в менее важных для вас. На следующее интервью вы уже придете более подготовленным и уверенным в себе.
  9. Не забудьте задать интересующие вас вопросы о размере заработной платы, о будущем рабочем месте (желательно его посмотреть). Спросите о рабочих проектах, о размерах команд и вашей роли в них. Попросите познакомить вас с вашим будущим начальником.

Работа

Как правильно отвечать на каверзные вопросы

Вопросы на собеседовании

Какие вопросы HR-ры задают программистам на собеседованиях

Категория общих вопросов

К этой категории относятся вопросы на проверку знания базовых основ программирования. С их помощью выявляют общую эрудицию программиста, его интерес к деталям, новым трендам в мире кодинга. Среди часто задаваемых вопросов:

  • рассказать о «своем» языке — год выхода последней версии, изменения и нововведения;
  • перечислить операторы цикла этого языка, какие есть методы организации циклов без использования операторов;
  • модульное программирование — что это, плюсы и минусы;
  • описать (изобразить) жизненный цикл программы;
  • рассказать о методологиях программирования, что вы знаете об agile и waterfall;
  • привести несколько примеров и дать определение каждому из типов языков программирования — процедурным, функциональным, императивным;
  • перечислить типы констант;
  • дать определение компилятору и интерпретатору, в чем сходство и отличие;
  • что означает полнота языка по Тьюрингу;
  • рассказать о высокоуровневых и низкоуровневых языках программирования.

Работа за ноутбуком

Методы сортировки

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

  • поразрядной сортировки;
  • сортировки подсчетом;
  • блочной сортировки;
  • сортировки методом слияния;
  • сортировки методом вставки;
  • быстрой сортировки;
  • сортировки методом пузырька.

Алгоритмы поиска и замены

Большинство программных продуктов нацелено на обработку огромного числа данных. Программистам приходится работать с массивами чисел и символов, поэтому им необходимо знать различные алгоритмы поиска и замены данных. На собеседовании могут попросить продемонстрировать свои знания в этой области:

  1. Не используя специальных библиотек, написать программу удаления дублированных или вставки пропущенных значений в массиве, содержащим целые числа от 0 до 100.
  2. Без использования библиотек написать программу, переворачивающую массив целых чисел (первое значение меняется местами с последним, предпоследнее встает на место второго и т.д.).
  3. Для отсортированного и не отсортированного массива целых чисел от 1 до 100, написать программу по поиску повторяющихся значений. Текущий массив содержит 101 число.
  4. Для отсортированного и не отсортированного массива целых чисел от 1 до 100, написать программу по поиску пропущенного значения. Текущий массив содержит 99 чисел.
  5. Для массива из 100 чисел написать программу поиска максимального и минимального значений.

У большинства программистов эти задания не вызовут затруднений. Но проводящий собеседование специалист может попросить обосновать выбор способа решения и предложить поискать другие варианты.

Работа на дому

Работа со строками

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

  • показать различные методы конкатенации строк и пояснить различия в исполнении кода в каждом из них;
  • написать программу, которая выискивает в заданном источнике информации основные данные (например, анкетные данные из резюме) и передает их для дальнейшего использования в соответствующие массивы;
  • написать программу, подсчитывающую количество символов в строке по определенному критерию (например, гласные и согласные буквы);
  • написать программу проверки наличия в строке только цифр или только символов;
  • написать программу для проверки двух строк, не являются ли они анаграммами (состоят из одних и тех же символов, переставленных местами);
  • написать программу для проверки строки, не является ли она палиндромом (одинаково читается в обоих направлениях).

Читайте также: