Что я узнал о технических собеседованиях на Back-End Software Engineer в Украине [для Junior и Middle разработчиков]

29 July, 2021

5 min read

Последнее обновление: 29 July, 2021

Il est souvent tentant de trouver une solution sans trop prendre la peine de bien comprendre ce qu'on tente de résoudre. Au fil des années, nous avons acquis la conviction que la connaissance profonde des besoins est primordiale et préalable à la conception de solution. Nos méthodes de travail ont été organisées en conséquence, afin de maximiser la satisfaction de nos clients... Plutôt que celle de nos égos!

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

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

Первый этап — скрининг или знакомство с эйчаром. Особенности

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

Я провел около 10 скрининговых встреч за последнюю сессию поиска работы, и переодически делаю это даже тогда, когда работу не ищу.

Во время встречи-знакомства я старался помнить о том, что...

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

Чаще всего, в вопросах рекрутера уже зашифрованы ответы, которые ей/ему хотелось бы от меня получить

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

Технические интервью. Какие были вопросы?

Теория с фокусом на используемый вами язык программирования

Я собеседовался на позиции Back-End Software Engineer, мой основной язык программирования — Python. И первое отличие, которое мне кажется важным отметить это то, что украинские компании на технических собеседованиях очень любят теоретические вопросы.

Вот основные темы, которые интересуют интервьюеров:

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

Например:

  • как сделан list или dict в Python
  • паттерны проектирования: фабрика, синглтон, декоратор и другие
  • в Python вопрос must-have про генераторы и еще очень популярный — про статик, инстанс и класс методы

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

System design или архитектура популярных библиотек

Никто не просил спроектировать инстаграм или, в принципе, спроектировать что-либо в реальном времени.

Просили...

  • описать мои действия в случае падения какого-то важного сервиса
  • как бы я запускал MVP продукта, работая с клиентом один на один. Описать последовательность действий от переговоров до презентации первых результатов
  • описать как можно сэкономить на костах в AWS
  • описать как я бы подбирал базу данных к проекту
  • описать как сделать шардинг в postgres
  • рассказать каким образом SQL Alchemy (популярная Python ORM библиотека) определяет с какой базой данных она работает
  • описать базовую архитектуру K8c кластера

Знание фреймворка

Если мы говорим про Python, то часто интервьюеры очень привязываются к тому сколько у тебя лет опыта работы с определенным фреймворком — Django, Flask, Pyramid и так далее.

Меня много спрашивали про конкретные аспекты фреймворка с которыми я работал:

  • Зачем blueprints в Flask?
  • Куда сгружать "тяжелые" вьюхи в асинхронном фреймворке?
  • Как сделать oAuth в Django?

и тому подобное.

Учитывая украинские реалии, возможно, эти вопросы имеют смысл. Мало какие компании делают свой опен-сорс или свои фреймворки/библиотеки, поэтому вопросов о том как можно было бы сделать свой фреймворк — я не слышал. Впрочем, это, наверное, не подходящий вопрос для Junior или Middle позиции.

Немного про базы данных

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

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

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

Популярный вопрос — описать преимущества и недостатки NoSQL баз данных, или наоборот — реляционной модели.

Совсем нет вопросов по security

Я проходил 5 технических интервью и ни на одном у меня не спросили по поводу security practices. Возможно, это совпадение, а возможно — украинские компании не особо уделяют внимания этому вопросу.

Что мне помогло подготовиться к техническому интервью?

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

Мне очень помогли эти книги: Designing Data-Intensive Applications и Learning SQL by Alan Beaulieu

А кроме книг, вот эти YouTube каналы:

Когда я хотел пройти техническое интервью максимально хорошо, я тратил на подготовку два дня. Мне этого хватало.

Что нравилось во мне, как в кандидате?

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

Я упоминал вскользь о том, что я:

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

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

Вопросы для компании и интервьюера

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

  • Что в моем резюме понравилось? Что показалось интересным в профиле на Джинне? (для рекрутера)
  • Каким вы себе представляете классного программиста в вашей команде? (для тех лида, продакт менеджера)
  • Есть ли что-то, что вы могли бы отметить во мне, как в кандидате? Что-то, что вам запомнилось, бросилось в глаза
  • Часто ли у вас промоутят людей внутри на более высокие позиции или обычно, когда вам нужен менеджер или лид, вы открываете хайринг?
  • Есть ли у вас какая-то формальная процедура оценивания уровня программиста? (Junior, Middle, Senior)

Если это продуктовая компания, то я обязательно делаю три вещи:

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

Graceful shutdown

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

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

В прохождении собеседований я бы еще отметил несколько важных табу.

  • Не стоит открыто выражать свои эмоции — keep it professional. Интервью — это не место для обид, интриг, пассивно-агрессивных шуток, взаимных унижений и злости. Всякое случается, люди просто делают свою работу, надо держать себя в руках.
  • Не надо играть в друзей с рекрутером / нанимающей компанией. Общаться дружелюбно — это их работа, не стоит принимать это за дружбу.
  • Не надо принимать первый оффер. Первый оффер, как блин, всегда комом 🙂 Хотя, это спорное табу, конечно.

На этом все. И удачной охоты на ваш идеальный оффер!

Подписаться на мою рассылку

Похожие посты

Troy Köhler

TwitterYouTubeInstagramLinkedin