Пошаговый алгоритм, как можно переехать в Германию. Описание разных вариантов.

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

    Сначала я рассылал только англоязычным вакансиям (примерно 50 шт) на вышеуказанных сайтах. Когда они закончились - начал рассылать по немецкоязычным (50 шт), но только тем, где в требования явно не был указан немецкий. Потратил на это примерно 2 месяца, отправляя по несколько вакансий в день. Конечн…
    • ​Level 2. Технический тест

      ​Level 2. Технический тест

      Boris

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

      Заранее просили выделить от 1.5 до 5 часов времени. После начала задания его нельзя остановить. Здесь уже в разных компаниях были нюансы:


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

      Самая простая задачка: "Насос выкачивает бассейн за 12 часов. Второй насос на 50% мощнее. За сколько времени оба насоса выкачают бассейн?". У вас есть 60 секунд на ответ, но пока сюда дочитаете, переведете с английского на русский и поймете условие - останется 20 секунд.

      В данном случае надо не написать код для вычисления, а надо посчитать в уме (или на бумажке) и дать ответ в минутах-секундах.

      Сразу говорю, что решение "Один за 12 часов, другой за 8, оба одновременно за (12 + 8) / 2 = 5 часов" - неправильно!

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

      Пишите свои варианты ответов в комментариях.

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

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


      Автоматический тест codility.com : за пару часов надо выполнить несколько заданий на написание определенного алгоритма. Обычно по исходному массиву или строке надо было что-либо посчитать. Код можно было сразу же выполнить и посмотреть результат на паре известных тестовых наборов. При необходимости можно изменить код. После завершения тестирования (когда код уже нельзя менять) код выполнялся еще на 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. Как избежать проблемы, когда одновременно (в одну миллисекунду) два разных юзера бронируют единственный доступный товар? Какие бизнес-процессы, какие технологии лучше использовать? Что делать при росте нагрузки?


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


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

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