• Как проходят собеседования

    Как проходят собеседования

    В Германии хроническая нехватка квалифицированного персонала, но при этом даже немцу устроиться на новую работу непросто. Даже если вы полностью соответствуете вакансии и согласны на среднюю зарплату, собеседования в каждую компанию обычно растягиваю…
    • ​Level 2. Технический тест

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

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

      Автоматический тест на сайте testdome.com или testgorilla.com: присылают ссылку, можно начать выполнение в любое удобное время, интервьюера нет (он потом проверит результат), но после начала остановить нельзя. Несколько десятков вопросов на логику, математику, программирование разного уровня сложности, на каждый из которых в течение 1-10 минут надо было написать ответ (результат или небольшой код). Возвращаться к предыдущему заданию нельзя.

      Самая простая задачка на математику школьного уровня:

      Насос выкачивает бассейн за 12 часов. Второй насос на 50% мощнее. За сколько времени оба насоса выкачают бассейн?

      У вас есть 60 секунд на ответ, но пока сюда дочитаете, переведете с английского на русский и поймете условие - останется 20 секунд. В данном случае надо не написать код для вычисления, а посчитать в уме (или на бумажке) и дать ответ на задачу в часах и минутах.

      Сразу говорю, что решение "Один за 12 часов, другой за 8, оба одновременно за (12 + 8) / 2 / 2 = 5 часов" - неправильно! Объясняю на пальцах. Представьте два одинаковых бассейна, в одном первый насос, во втором второй. Включили оба. Второй выкачал свой бассейн за 8 часов, первый за это время выкачал 2/3 бассейна. Ваше решение: из оставшейся 1/3 первого бассейна взять половину (1/6 исходного) и отлить это во второй. Так? А вот и нет. Проблема то в том, что второй опять выкачает быстрее! И придется опять оставшийся кусочек делить пополам! И так бесконечно. То есть разницу надо делить не пополам (среднее арифметическое), а пропорционально их мощностям. То есть придется скорректировать на сумму бесконечно убывающей последовательности 1/6 + 1/36 + ..., но это сложно считать в уме. Тем более за 20 секунд. Есть вариант решения гораздо проще. Пишите свои варианты ответов в комментариях.

      Остальные вопросы были по специальности. Для меня это типа "Спроектируйте структуру таблиц БД", "Напишите SQL...", "Напишите на PHP функцию...".

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

      Автоматический тест codility.com : задачи гораздо сложнее, чем в предыдущем варианте, но их меньше. За пару часов надо выполнить 2-4 заданий на написание определенного алгоритма (примерно десяток строк). Обычно по исходному массиву или строке надо было что-либо посчитать. Код можно было сразу же выполнить и посмотреть результат на паре известных тестовых наборов. При необходимости можно изменить код. После завершения тестирования (когда код уже нельзя менять) код выполнялся еще на 5-10 тестовых наборах (мне заранее неизвестных), в том числе невалидных (повторяющиеся значения, нулевые, отрицательные, пустой массив, очень большой массив и пр.) и показывал итоговый результат как по правильности, так и по затраченной памяти и скорости выполнения. Поэтому важно не только считать правильно, но и эффективно, делать валидацию входных параметров, правильно обрабатывать исключительные ситуации.

      Они просили не разглашать конкретные задачи, поэтому для примера приведу другую (популярную в узких кругах) задачу:

      Массив значений означает высоту столбцов, идет дождь. Сколько "клеток" воды соберется в "лужах" между стенами?

      Например, для [2,5,1,2,3,4,7,7,6] в индексе 2 будет 4 клетки воды (стена высотой 1, вода на клетках 2-5), в 3 - 3, в 4 - 2, в 5 - 1. Итого ответ 4 + 3 + 2 + 1 = 10. Самый эффективный алгоритм имеет сложность O(N), то есть решает задачу за единственный проход массива, причем логика достаточно простая и занимает всего десяток строчек. Пишите свои варианты алгоритмов в комментариях.

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

      Советую заранее зарегистрироваться на вышеуказанном сайте и пройти demo-задания.

      Собеседование с Team lead с видео. На сайте coderpad.io или в мессенджере с видео и расшаренным экраном.

      Обсуждали задачи, похожие на реальные. Например, "нужно спроектировать БД для отеля / библиотеки / интернет-магазина / склада и пр." (какие именно таблицы, поля, индексы, внешние ключи и пр.). По этим таблицам составить определенные SQL. Как избежать проблемы, когда одновременно (в одну миллисекунду) два разных юзера бронируют единственный доступный товар (race condition)? Какие бизнес-процессы, какие технологии лучше использовать? Что делать при росте нагрузки?

      Еще в одной компании сказали "За 4 часа напишите на PHP сайт (блог) с возможностью добавлять статьи и комментарии, с авторизацией, проверкой прав и т.д." , в общем "с блэкджеком и шлюхами". Но есть одно маленькое условие - нельзя использовать ни единой PHP-библиотеки, ни строчки чужого кода. Чужой CSS - так и быть, можно использовать. Потом этот код я выложил на свой github, сделал публичным и показывал другим рекрутерам в качестве примера своего кода, чтобы упростить будущие собеседования.

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

      Отдельно отмечу компанию Amazon и ее отличный подход к собеседованию. Мне заранее прислали ссылку для ознакомления с процессом собеседования emea-resources.awscloud.com , там описаны общие принципы их собеседования:

      • Не нужны энциклопедические знания, не задают каверзных вопросов. Только практические вопросы и на общую логику.
      • Не обязательно сразу давать самое лучшее решение, но важно объяснить свое решение (!), плюсы-минусы, посчитать сложность (!), предложить другие возможные варианты решения задачи. И уже потом можно оптимизировать.
      • Лучше сделать хоть какое-то решение и объяснить его, чем сделать самое лучшее, но не объяснить его. Код должен быть читаемым, поддерживаемый, тестируемый.
      • Надо писать код для решения алгоритмических задач. Язык - любой, на ваш выбор. Заранее позаботьтесь об IDE, компиляторе и пр.
      • Если не получается - можно попросить помощь у интервьюера. Это не очень хорошо, но гораздо лучше, чем тупить и полностью провалить собеседование. Еще раз: надо говорить!
      • Иногда нет правильно ответа или все ответы правильные. Хотят посмотреть, что вы будете делать, как справляться и объясните свое решение. И повторю еще раз - надо говорить!
      • Иногда есть не все исходные данные. Даже если всё понятно, не надо сразу же реализовывать алгоритм. Надо задавать вопросы (!). Подумайте заранее про оптимизацию, нагрузку, масштабирование, тестирование, как получать данные, в каком формате отдавать результат, что делать при ошибке (неправильный параметр или формат, деление на 0, невозможно найти решение), как будет это использоваться, что важнее (читаемость, расход памяти, производительность или всё сразу), распараллеливание работы в команде и пр.
      • Посмотрите видео на этой странице. Во-первых, вы должны свободно понимать интервьюера по-английски. Во-вторых, там есть очень хороший разбор реализации алгоритма освобождения кэша с объяснением плюсов-минусов каждого варианта - вы на собеседовании должны будете сделать аналогично.
      • Кстати, на собеседовании в Amazon мне задавали как аналогичные вопросы, так и те же самые, которые подробно разбирались в вышеуказанных видео. То есть проверяли не только мои базовые знания, но и насколько я готовился (сделал ли я то, что они просили).

      Только одна компания (не Amazon) прислала тест на теоретические знания параметров консольных команд. Такое впечатление, что тест составлял HR-менеджер, который открыл документацию и надергал оттуда вопросы про параметры команд. Все вопросы были типа

      Какой git-командой передать объект FILE пакета в репозиторий?

      Они ожидают ответ "git bundle unbundle FILE", но я не знаю всех этих параметров наизусть и не хочу знать. Когда мне это бывает нужно на практике, то я в GUI-программе кликаю на файл и выбираю "unbundle". Если придется делать без GUI в консоли, тогда прочитаю подсказку "git bundle --help". Но во время теста было запрещено убирать фокус из формы ввода ответа (нельзя переключиться в другую вкладку браузера или консоль). Я так ответил где-то на 50 вопросов за полчаса, потом надоело, я закрыл этот тест и отозвал свою заявку на вакансию в этой компании.

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