Rocky Road to Berlin - Поиск работы и онлайн-собеседования - p1
https://t.me/anscombes_quartetUDP: вторая часть - вот здесь.
Давеча собирался написать серию заметок про Берлин вообще, пусть эта будет первой.
Вещи, сказанные здесь по большей части самоочевидны для тех, кто знает детали поиска работы в Берлине, и уже были озвучены, однако мне кажется что всегда полезно посмотреть на то, как кто-то в миллионный раз проходится по всем известным граблям.
TL;DR
Итого: 5 офферов (4 в Берлин, 1 в Мюнхен)
Потраченное время:
- 8 месяцев зубрежки английского
- 2 месяца LeetCode + Codility + Cracking the Coding Interview
- 1 месяц на подачу / онлайн собеседования
- 1 неделя в Берлине на онсайтах
Результат: Data Engineer позиция в Zalando
Часть 1 - Где искать?
Самый простой вариант, с которого стоит начать - это ковровая бомбардировка на Glassdoor + Linkedin. Суммарно по этому варианту я отправил около 20 CV + CL, из них 3 превратились в офферы. Я бы сказал что это отличная тренировка на кошках, алгоритм поиска очень простой:
- Находите позицию на сайте-агрегаторе
- Ищете эту же позицию на сайте самой конторы (если у конторы нет на сайте Jobs-раздела, делать там нечего)
- Кидаете CV + CL
- Ждете отклика
Пару заметок про вакансии:
- Достаточно чтобы совпадало 60/70% ваших скиллов и скиллов в описании позиции
- Если позиция описана на немецком, а немецкого вы не знаете - skip
- Если по позиции видно что нужен джун, хотя в названии гордо стоит middle/senior - skip
Опционально и если возможно - лучше подаваться по рефералам, это:
- сильно повышает ваши шансы на успешный отклик
- снимает необходимость общаться с HR
- на надо проходить всякие онлайновые тесты на время по типу Codlility
- улучшает сон, пищеварение и нервную систему
Часть 2 - Short note про CV/CL
Про CV спето ужо много песен, я бы выделил главное:
- Обязательный джентельменский набор ссылок - Linkedin, Github (если вы разработчик с пустым GitHub в 2019 году, мне нечего сказать), Kaggle если вы DS/ ML Engineer и есть чем похвастаться
- Скиллы выносим крупно блоками, не списками - достаточно одних названий. Все равно на прескрининге резюме HR будет смотреть на regexp match ваших скиллов и текста в вакансии
- Одна страница без фото/возраста/пола - вы не модель
В CL можно почти всегда писать одно и то же - нравится ваш продукт, классный международный опыт, и далее по списку.
Часть 3 - Собеседования
Классический путь от собеседования до оффера выглядит так (в зависимости от компании пункты в списке могут меняться или исчезать):
- Онлайн с HR
- Codility/ LeetCode
- Тестовое задание
- Онлайн с инженерами
- Онлайн с тимлидом
- Онсайт вайтбординг
- Онсайт архитектура
- Онсайт с тимлидом
- Оффер
Разберем онлайн и онсайт собеседования по кусочкам.
Часть 4 - Онлайн
Общие рекомендации:
- Нормальный микрофон
- Хороший интернет
- Розетка рядом
Последний пункт испытан на собственной шкуре - на одном из собеседований в самый разгар дискуссии по поводу полнотекстового поиска мой ноут решил что ему пора отдохнуть - вышло не очень приятно, но оффер все же был получен.
Почти наверняка ваш первый разговор будет с HR. В идеале практиковаться для начала с HR из всяких агенств - да, это не прямой путь к позиции, но если вам нужна языковая тренировка, это бесплатные полтора часа общения. Поскольку большинство HR в Берлине по непонятной мне причине - либо британцы, либо работают на аутсорсе из Лондона - приготовьтесь к тому что в половине слов будут отсутствовать слоги, поэтому очень советую послушать что-нибудь по типу BBC в процессе подготовки, чтобы не быть в шоке от акцента. С вашей стороны очень на руку будет заготовить пачку ответов на классические "расскажите о себе", "сколько вы хотите", "почему вам интересна наша позиция" и пару раз вдумчиво их проговорить.
Если HR - не native speaker, говорите не торопясь, вам же лучше - вас смогут понять. Как кто-то остроумно писал - "lingua franca of European IT is the bad English".
После прохождения HR, вам скорее всего в любом случае прилетит фидбек, воронка на проход далее тут сужается процентов на 10, не более - если больше, вам стоит поменять что-то в самоописаниях.
Следующий шаг - это LeetCode / Codility (если вам не повезло). Ничего особенно сложного в этих заданиях нет, обычные задачки-гномики, иногда с прикладным смыслом (напишите API который делает X от входов Y,Z), для Data Engineer будет полезно повторить SQL в привязке к PostgreSQL (обычно тесты пишутся под него). Мне кажется что здесь практически невозможно потеряться, потому что времени на задания обычно дается от 2 до 4 часов - что вполне соответствует их сложности, а иногда даже и чересчур.
Если вы успешно проходите LeetCode, вам скорее всего вышлют тестовое задание. Оно обычно довольно generic, мне попадались такие:
- Напишите репликатор из одной Postgres таблицы в другую, не используя CDC решения или внутренние механики репликации Postgres. В табличку идет большой поток апдейтов, соответственно решение было простым - сначала выкачиваем в параллель всю базу с ее текущим состоянием (Google Cloud + Spark), затем начинаем раз-в-X (в моем случае была выбрана минута) вычитывать данные из БД с фильтром по update_dttm (тут пригодился Python + Psychopg, он читает мелкие батчи гораздо быстрее).
- Дан 400MB json-массив с комментами по поводу различных туристических локаций, напишите масштабируемый полнотекстовый поиск по комментам. В качестве базового решения предлагался Python с in-memory словарем, обернутый в Tornado, необходимо было сделать решение быстрее. У меня было мало времени на эту домашку, поэтому я воспользовался готовыми технологиями - данные залил в Redis и воспользовался готовым полнотекстовым поиском от Redis Labs, сервер сделал на Go с fastHTTP, ускорение получилось где-то x4 от исходного теста. В качестве аргумента масштабируемости был приведет Redis cluster-mode.
- Напишите любую модель (точность не важна) на Python, которая предсказывает Titanic Dataset по трем полям. Оберните модель в HTTP ReST API. Я сделал это в виде классического sklearn + pickle и сверху добавил Connexion модуль
В целом все тестовые задания обычно достаточно простые, нужно просто не лениться их делать, иногда можно по пути изучить что-нибудь полезное.
Пара комментов по поводу ТЗ:
- не забудьте написать минимальные тесты
- не забудьте написать документацию к вашему решению
- если ТЗ занимает больше двух вечеров, скорее всего кто-то делает свою работу за ваш счет - отказывайтесь от таких опций.
Почти наверняка через пару дней после рассмотрения вашего ТЗ у вас будет онлайн-звонок с инженерами, которые в перспективе станут вашими коллегами. Тут нужно уметь грамотно аргументировать свое решение. В большинстве случаев это - самая адекватная и интересная часть всего процесса отбора (если кто-нибудь из тех кто общается с вами не считает себя rockstar developer, конечно же). Обычно сюда же добавится обсуждение некоторых технических деталей и расспросы по теоретической базе. В целом в процессе этого собеседования стоит поинтересоваться у ваших возможных будущих коллег - чем они занимаются, над чем и как они работают. Я всегда расспрашивал про то, как происходит планирование спринтов, кто и сколько работает на проекте, как происходит code-review, как обстоят дела с CI/CD пайплайнами - обычно самые интересные ответы и больше всего релевантных данных вы можете получить здесь.
Последним шагом на пути к приглашению на онсайт (если таковой имеется), будет общение с тимлидом. Обычно это cultural-fit тест, делаем poker-face и учимся продавать свои навыки по завышенной цене. После всей цепочки вы получите фидбек, обычно где-то за 2-3 дня. В моем случае всегда, когда я доходил до тимлида, я получал либо оффер, либо приглашение на онсайт, могу предположить что если не ударить в грязь лицом и показать себя адекватным человеком, шансов провалиться здесь практически нет.
В заключение по первой части
Если руки дойдут и фидбек читателей будет позитивным, расскажу как я проходил онсайты в Берлине (3 компании за 4 дня).
Мой канал в TG - https://t.me/anscombes_quartet
P.S. Если вы все знаете из того что тут написано, или ищете позицию Senior Data Engineer в Берлине - подавайтесь в нашу команду Event Processing:
- описание позиции - https://jobs.zalando.com/en/jobs/1584329/?gh_jid=1584329
- мой контакт в TG: @renardeinside