Что спрашивают на behavioral и system design интервью, или Как я попал в Facebook
Несколько недель назад я начал работать в Facebook, и хочу поделиться субъективным мнением о том, как подготовиться и успешно пройти собеседование.
Я пишу эту статью по двум причинам. Во-первых, в интернете очень много информации о том, как подготовиться к техническим собеседованиям, но очень мало — о behavioral и system design интервью, а это половина процесса. Во-вторых, если бы я знал обо всем, о чем пойдет речь ниже, то еще 12 лет назад устроился бы в Google, а в прошлом году не провалился бы в Amazon. Надеюсь, мой опыт кому-то пригодится.
Несколько слов обо мне: за 13 лет в украинском IT успел поработать как в небольших местных, так и в крупных аутсорсинговых и продуктовых компаниях. Между этим 7 лет посвятил работе над собственным проектом. За свою карьеру я побывал на десятках (а может, и сотнях) собеседований и получил множество отказов. Меня не взяли в Google, Amazon, Snapchat, Shopify и еще в кучу компаний поменьше. Из каждой неудачи я вынес что-то полезное, и в итоге этот опыт обеспечил серию успешных собеседований и оффер в лондонский офис Facebook.
Как сделать так, чтобы вас позвали на первое собеседование
Вариантов тут несколько:
- Посмотрите LinkedIn, возможно, кто-то из ваших контактов уже там работает. Внутренний референс всегда эффективнее.
- Контактируйте с рекрутером напрямую в том же LinkedIn.
- Рассылайте резюме. К сожалению, эффективность этого способа довольно низка, но она далеко не нулевая.
В моем случае сработал второй вариант. В январе мне написала рекрутер из Facebook, но я на тот момент уже принял оффер от одной небольшой канадской компании и решил не рисковать, так как шансы устроиться в Facebook казались уж очень призрачными. В итоге я вежливо отказался, но. пришел COVID-19, и в апреле мне отменили канадский оффер.
Всегда будьте вежливы и старайтесь отвечать на все сообщения LinkedIn, даже и отказом. Никогда заранее не знаешь, в какой момент это может принести пользу.
Общение с рекрутером
Первое, что вас ждет после переписки с рекрутером — это созвон с ним же длительностью примерно 30 минут. Большая часть разговора — это рассказ рекрутера про Facebook и пара стандартных вопросов: немного об опыте, проектах, что любите/не любите и т.п. Но главный вопрос — когда вы готовы пройти первое собеседование. Для многих это может показаться странным, но кандидат выбирает сам. Это может быть и через несколько дней, если кандидат чувствует уверенность, а может быть и через два месяца, если нужно подготовиться. Тут решайте сами, но по личному опыту хочу сказать, что лучше особо не торопиться.
После звонка вы получите письмо от рекрутера следующего содержания:
- общая информация о собеседовании;
- приглашение на live вебинар с одним из инженеров Facebook, который расскажет о том, как будет проходить первое собеседование;
- запись прошлого вебинара;
- несколько обучающих видео о том, как проходит собеседование, чего именно ждать и как себя вести непосредственно во время собеседования. Будет даже видео от Gayle Laakmann McDowell, сделанное специально для Facebook (если что, это автор книги Cracking the Coding Interview);
- ссылки на ресурсы, где можно потренироваться в решении алгоритмов и посмотреть список вопросов, которые задавали людям на прошлых собеседованиях (мой однозначный фаворит — LeetCode).
Вы не поверите, но Facebook вас реально готовит к собеседованию! Честно говоря, я не встречал такого ни в одной компании мира, хотя успел пособеседоваться в очень многих местах.
Как пройти скрининговое собеседование
Оно проходит с одним из инженеров Facebook — техническое, и длится 45 минут. Состоит из следующих этапов: 5 минут — общие технические вопросы, 35 минут — две практические задачи на знание алгоритмов и 5 минут — ваши вопросы.
Первым делом посмотрите все видео, которые вам пришлет рекрутер, регистрируйтесь на Leetcode и начинайте решать задачи из списка топ-100. На этом этапе стоит сконцентрироваться на Easy и Medium задачах. Очень рекомендую не жалеть 35$ и оплатить подписку на месяц или два. С платной подпиской будет доступ к вопросам, которые задают в определенной компании. За 5 собеседований в Facebook меня попросили решить 7 задач. 6(!) из них я до этого встречал на LeetCode в том или ином виде, и лишь одна была не алгоритмическая, а полностью практическая и сконцентрирована на специфике iOS. Кстати, если вы хорошо и быстро решите задачу, то вам могут задать еще дополнительные вопросы в качестве усложнения — и к этому, к сожалению, целенаправленно не подготовиться. Поможет только опыт решения задач.
Сколько нужно решить задач? Я бы сказал, штук 100. В идеале — еще решить все задачи из закладки Facebook. Итого, получится около 150 задач. В моем случае я решал примерно по 2 задачи в день, так что на подготовку ушло около
Кстати, алгоритмические задачи вечны и не меняются! В Facebook меня попросили решить ровно такую же задачу, какую я решал в Google 12(!) лет назад. Так что этот опыт очень пригодится и в будущем.
Вот, к примеру, моя статистика по LeetCode, 160 задач вполне хватило:
Структуры данных
Вам нужно знать следующее: Arrays, Maps / Dictionaries (они же хэш-массивы и ассоциативные хэш-массивы), Stack, Heap, Trees, Graphs, Linked List. Еще хорошо бы знать алгоритм построения Trie, так как он используется в некоторых задачах.
В качестве базового ресурса для изучения структур данных я бы посоветовал всем известную книгу Cracking the Coding Interview и снова тот же LeetCode, где вы сможете выбрать задачи по категориям и потренироваться в их решении.
Интересный момент: в некоторых языках нет определенных структур данных, но вы всегда можете описать их интерфейс и создать решение задачи на основе этой структуры. И только потом, если останется время, добавить имплементацию. К примеру, мне задали задачу, которая оптимальнее всего решалась при помощи Heap, но в iOS нет этой структуры данных, так что я описал предполагаемое решение словами, и интервьюер уже сам предложил считать, что у нас уже есть Heap. В итоге я написал только базовый код алгоритма без имплементации этой конкретной структуры.
Важно! Даже если в вашем языке нет каких-то структур, вы должны четко понимать сложность работы с операциями во всех структурах данных (сложность вставки, удаления, поиска, сортировки и т.д.), что подводит нас к следующему пункту.
Изучение Big O Notation
Этот пункт чрезвычайно важен. Вы должны понимать сложность алгоритмов даже на позицию джуниора! Очень рекомендую уделить этому достаточно времени, тем более что там все не так сложно, как с первой частью.
Если вы новичок, то начните с этой статьи, в которой описываются базовые принципы Big O, а также cнова загляните в Cracking the Coding Interview.
Big O нужно не заучить, а понять. Если вы поймете, почему какой-то небольшой кусок кода выполняется за определенное время, то и оценка сложности всего алгоритма не будет проблемой. Обязательно обратите внимание на LeetCode, так как практически во всех задачах есть описание нескольких возможных решений, и по каждому — оценка временной сложности и количества используемой памяти.
Как вести себя на собеседовании
Тут все просто — разговаривайте. Каждый шаг должен быть озвучен заранее. Не пишите код до того, как обсудите его с интервьюером. Цель интервьюера — понять, как вы мыслите, и найти ваши сильные стороны. Если, к примеру, вы знаете два решения задачи (скажем, простое и сложное или эффективное и не очень), то озвучьте оба и обсудите «за» и «против» по каждому из вариантов.
Пожалуй, по первому этапу это все. Разве что не забудьте подготовить несколько вопросов про Facebook. Очень надеюсь, что первый этап пройдет гладко, и вы получите приглашение на второй этап, о котором мы поговорим сейчас.
Как пройти on-site интервью в офисе
К сожалению, мне сложно что-то рассказать о поездке в офис Facebook, так как у меня ее не было из-за COVID-19. Мое on-site интервью было виртуальным и состояло из четырех звонков с перерывом посередине. Если бы была возможность выбирать между виртуальным вторым этапом или реальным — я бы долго колебался, что лучше. В случае реальной поездки вы посетите офис Facebook, поживете в классной гостинице и посмотрите интересный город за счет компании, зато в случае виртуальных собеседований у вас будет возможность в перерыве посмотреть свои шпаргалки, немного отвлечься и в целом чувствовать себя более комфортно дома.
Второй этап будет состоять из четырех собеседований с четырьмя разными людьми: два технических собеседования + behavioral + system design.
Относительно технической части: она идентична той, что на первом этапе (пара общих вопросов, две задачи, ваши вопросы). Будет лишь одно изменение: задачи станут чуть сложнее. Если на предыдущем этапе стоило решать задачи уровня easy-medium, то теперь пришло время переключиться на medium-hard (но все же с уклоном в medium). LeetCode снова вам в помощь.
А теперь самое интересное. Поговорим об интервью, о которых, как правило, меньше всего информации.
Как пройти Behavioral interview
Это интервью может показаться самым простым, но это совсем не так. Готовьтесь тщательно! Хорошенько покопайтесь в памяти и ответьте на следующие вопросы о себе:
- сильные стороны
- слабые стороны
- успехи, особенно на последнем месте работы (зависит от длительности работы, за год должно получиться 2 и больше пунктов);
- неудачи
- конфликты/несогласие с коллегами и менеджерами, как вы решали эти вопросы (хорошо бы иметь примера в запасе);
- примеры проактивности, какие результаты это дало
- ваши цели, как вы их добиваетесь/добивались, в какую сторону хотите двигаться в будущем
- почему вы хотите работать именно в Facebook и скиллы, которые помогут вам реализовать себя максимально эффективно
- что вас мотивирует в работе (тоже
- примеры позитивного и негативного фидбека от коллег и менеджеров, как вы на это реагировали.
Вот, к примеру, мои шпаргалки с ответами на большинство этих вопросов (ответы заблурены, так как ценность они имеют только для меня и больше ни для кого):
Безусловно, вам не понадобятся абсолютно все пункты на собеседовании, но я бы очень рекомендовал подготовить запас ответов, чтобы во время собеседования иметь возможность подстроиться под интервьюера и направить разговор в наиболее комфортное русло.
Интересная особенность этого интервью: если опыта у вас уже больше, чем то будьте готовы говорить скорее о плохом, чем о хорошем. Именно поведение в сложных, конфликтных, неопределенных ситуациях покажет, насколько вы хороши в своих soft skills.
К примеру, вас могут спросить: «Что бы вы изменили на своем текущем месте работы?». Так как идеальных компаний не бывает, какой-то ответ должен найтись у каждого. И, конечно же, сразу за этим вопросом последует следующий: «Если вам это не нравится, то что конкретно вы сделали для того, чтобы изменить эту ситуацию?». Тут уж ваш шанс блеснуть своей проактивностью.
Как вести себя на собеседовании? Главное — не врите! Если нет ответа на вопрос, то не старайтесь что-то придумать, так как последующие вопросы вас разоблачат. Не пытайтесь выставить свои слабые стороны как сильные, а лучше расскажите, как вы работаете над избавлением от определенных недостатков.
Обязательно посмотрите видео, в котором бывший инженер Facebook рассказывает много интересного про behavioral интервью: как готовиться, что стоит и не стоит говорить, как показать себя с лучшей стороны.
System Design interview
Итак, мы подошли к самой последней и, наверное, самой сложной части. Именно по этой части оценивают ваш seniority level, и именно от этой оценки будет зависеть ваш уровень дохода.
Что представляет собой это интервью? Это обсуждение архитектуры какого-либо приложения/сервиса. Представьте, что вы CTO небольшой компании, и вам необходимо придумать, нарисовать и объяснить архитектуру проекта всей компании: от джуниор-девелоперов и до CEO. К примеру, если это позиция iOS, то будьте готовы, что приложение будет общаться с клаудом, асинхронно загружать данные и медиафайлы, кэшировать все это добро и т. п.
Самый интересный вопрос — как готовиться? К примеру, если вы iOS разработчик, то возьмите свой айфон, посмотрите приложения, которыми вы чаще всего пользуетесь, и. начинайте рисовать архитектуру. В идеале — попросите нескольких коллег/друзей (конечно же, шарящих в вашей предметной области) помочь. Сядьте вместе и распишите архитектуру одного из приложений. Чем больше схем вы нарисуете, тем легче будет вам на собеседовании.
Вот несколько приложений из моего телефона, архитектуру которых я пытался продумать и нарисовать: Facebook, Instagram, Twitter, WhatsApp, Gmail, Notes, YouTube.
В реальной жизни вам, конечно же, не нужно придумывать архитектуру за 40 минут, всегда есть день-неделя-месяц на размышления, и конечный результат получается красивым и стройным. На собеседовании все иначе: нужно все охватить, ничего не забыть, углубиться в детали и еще, к тому же, красиво нарисовать. Хорошая новость — после подготовки (при условии, конечно, что нарисуете хотя бы десяток архитектур) у вас вырисуется шаблон, по которому можно идти на собеседовании. Я, к примеру, даже знал, с какой стороны доски какую часть приложения буду рисовать и как соединять стрелочками. Это о-о-о-очень помогло на самом собеседовании, так как оно у меня было последним и особенно тяжелым (как минимум, сказались усталость и нервы).
Вот пример того, как выглядело мое начало подготовки с друзьями:
И финальный вариант на собеседовании (он не совсем полный, так как часть пришлось стереть по ходу дела из-за нехватки места):
Финальный вариант, как мне кажется, получился более чистый, понятный и простой. Так что не игнорируйте эту часть, тренируйтесь!
Как вести себя на собеседовании
Внимательно слушайте задачу. Повторите вслух то, что вы услышали. Убедитесь в том, что вы правильно поняли задачу.
Задайте уточняющие вопросы. Проблема будет довольно абстрактная, поэтому уточнить будет что. Не делайте предположений об условиях, узнайте все недостающие детали заранее. Вот примерный список вопросов для iOS приложения: возможные ограничения, интерфейс, покупки в приложении, геолокация, приватность, работа в фоне, пуш-уведомления, работа без сети или с плохой связью и т. п.
Начинайте рисовать и проговаривать свои идеи. Это тот момент, когда нужно перехватить инициативу и следующие минут быть главным. Этого от вас и ждут!
Не забудьте охватить все части вашей архитектуры. Двигайтесь от общего к частному. Лучше, если вы скажете о каждой части по чуть-чуть, чем если углубитесь в одну и не успеете объяснить остальные. Вот список того, что было бы хорошо охватить для iOS: сетевая часть и клауд (протоколы, нагрузка на сервер, API), UX, кэширование и БД (Core Data, например), доступ к системным ресурсам и данным (камера, фото, контакты, файлы, локация и т. п.), нотификации и апдейты контента, аналитика, тестирование, нагрузка на CPU/GPU/батарею.
Думайте о будущем! Задача, скорее всего, будет довольно простая, но очень полезно, если вы заложите в архитектуру возможности масштабирования. К примеру, с сервера вам ежедневно приходит 100 записей с какими-то данными. Подумайте, как изменится приложение, если их станет 100 тысяч, не забудьте сразу заложить эту возможность в серверные API (pagination, например). Не удивляйтесь, но даже iOS программисту нужно будет хотя бы примерно описать список требуемых серверных API.
Вот и все. Главное — будьте лидером, отвечайте на немногочисленные вопросы интервьюера и рисуйте красивые диаграммы. При качественной подготовке все должно пойти как по маслу.
Через недели вы получите предварительный результат, и если он будет положительным, то еще через неделю вам пришлют оффер. Как озвучивают отказ, я, честно говоря, не знаю. В Google и Amazon — это штатное письмо из разряда «спасибо, мы впечатлены, но нет». В Facebook положительный фидбек давали по телефону и очень развернуто, поэтому и отрицательный фидбек, как мне кажется, могут дать более подробный, чтобы вы знали, над чем поработать в будущем.
Прохождение собеседования — это скилл. Так что тренируйтесь, тренируйтесь и еще раз тренируйтесь. Все возможно!
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
Этапы собеседования разработчиков — что, где и как?
Процесс набора специалистов в ИТ компанию — сложный и может занять кучу времени и сил. Как со стороны компании, так и со стороны кандидата.
В основном, этот шаблон нацелен на «базу» и должен дать ответы на главные вопросы, по которым можно будет хотя бы судить о человеке. Как правило: чем серьёзней компания — тем больше этапов. Но, всё всегда зависит от самой компании и нельзя ровнять всех под одну гребёнку.
Из общепринятых процессов можно выделить следующие:
Это первая точка соприкосновения с компанией. Многие думают об этом этапе как о самом лёгком и достаточно наплевательски относятся к нему, позволяя общаться с человеком сидя за рулём автомобиля, во время приёма пищи или что-то ещё хуже.
Но, на самом деле, именно после знакомства с HR будет понятно как будут проходить все остальные этапы и нужны ли они вообще.
Основная задача со стороны компании — это “распробовать почву” и понять что из себя представляет кандидат: манера речи, поведение, уровень адекватности, уровень ответственности, совпадает ли вся информация в резюме со словами и так далее.
Кандидат же должен просто вести себя естественно, не говорить лишнего и показать себя с лучшей стороны. Если он не врал в своём резюме и действительно является адекватным по современным меркам, то этого будет достаточно, чтобы о вас хорошо отзывались. Суммарно это занимает не более одного часа.
2. Техническое интервью
Это самая сложная часть собеседования к которой необходимо готовиться на полном серьёзе. В основном собеседование проходит в форме общения, где вам будут задавать технические вопросы, например:
- Как вы делаете передачу данных между A и B?
- Можно ли делать интернет запросы на X потоке и почему?
- Где по вашему мнению лучше всего хранить временные переменные?
А так же теоретические вопросы, ответы на которые должен знать каждый разработчик работающий с то или иной технологией каждый день. Это действительно очень сложный этап, будьте готовы, что вам будут задавать очень много странных вопросов.
Иногда вопросы будут заставлять вас думать: “Что за бред, кто вообще так будет делать?” — это нормально.
Дело в том, что суть некоторых вопросов в том, чтобы загнать вас в тупик и узнать как вы мыслите в таких ситуациях. Разузнать насколько глубоки ваши познания, были ли у вас ситуации, в которых нужно было прибегать к не стандартным решениям и так далее.
На практике же никто вас не будет заставлять делать все эти странные штуки, о которых вас спрашивали (ну я надеюсь, в противном случае ливайте оттуда)
Есть и альтернативный вариант проверить кандидата — это программирования в режиме реального времени. В таком случае акцент будет делаться на чистоту кода, его качество и быстродействие. Так же будут смотреть как вы используете паттерны, как вы называете функции, параметры и тд.
Отдельно от интервью компания может запросить предоставить вас какой-нибудь проект для оценки качества или сделать техническое задание в рамках несколько часов или дней. Конечно же вы можете отказать, вас никто не обязывает, но вы вроде как должны быть заинтересованы в том, чтобы показать себя со всех сторон в лучшем свете.
Этот этап сложно оценить по времени, поскольку всё очень зависит от компании и того, как они проверяют кандидатов. В среднем для позиции Junior это около часа, максимум — полтора.
В компаниях, где вам прийдётся работать с данными и отвечать за результат вычислений, с очень большой вероятностью у вас будет этот этап собеседования. Но, всё зависит от компании.
По большому счёту, для позиции Junior будут больше смотреть на то, как вы мыслите. Даже если вы сделаете ошибку, но покажите что вы можете решить это задание 2-я или 3-я способами, то думаю это тоже засчитают как “плюс”, но всё же старайтесь правильно решать задачи.
Если же вы целитель на компанию, которая занимается только клиент-серверными приложениями, где вам нужно будет делать пользовательский интерфейс и прикручивать запросы на сервер, то скорее всего, этот этап пропустят.
Для позиции Junior это займёт около полтора часа.
Cофт скилы — это личные качества, которые зависят от характера человека и приобретаются с личным опытом. Поэтому здесь либо есть понимание как это устроено, либо — нет.
Во время прохождения этого этапа собеседования нужно быть готовым к вопросам с загвоздкой, либо таким, которые будут за собой тянуть последующие вопросы. Последний раз когда у меня было такое интервью, то мне задавали вопросов 50, наверное, и нужно отметить, что все они были к месту.
Конкретно на этом этапе компанию интересует следующее:
- умение реагировать на критику
- уровень конфликт менеджмента
- насколько кандидат конфликтный / ответственный / самостоятельный / стрессоустойчивый
- навыки предоставления критики
- навыки деловой коммуникации
- уровень работы в команде
- навыки предоставлять оценку работы и попадание в эстимейт
- мотивация / целеустремленность
- понимание процессов в работе
Этот этап — очень тонкий процесс, в котором можно всё испортить одной лишь неправильной фразой. Все эти навыки приобретаются с опытом, поэтому здесь подготовится особо не получиться, но стоит подойти к этому вопросу серьезно.
Для позиции Junior это займёт около часа, максимум — полтора.
Данный этап собеседования существует только не в англоязычных странах. Если же вы проходите собеседования в англоязычной стране, то у вас этого не будет, поскольку подразумевается, что вы априори знаете этот язык. Английский в IT очень важен, ОЧЕНЬ.
Большинство программистов, которые плохо говорят, либо вовсе не говорят на английском думают, что их работа — это писать код. А один раз в год можно перевести всё, что нужно через Google Translator, но это не так.
Начнем с того, что работа в IT это не писать код по 8 часов 5 дней в неделю. Если у вас будет возможность писать код хотя бы 3–4 часа в день, то это даже очень хорошо. Кроме как писать код, у вас будет куча других задач, например:
- daily sync call
- retrospective
- planning
- demo
- release management
- grooming meetings
- sync calls about different features
- regular sync call with your team members
- grooming with designers
Это всё будет в разное время, что будет разбивать ваш рабочий день на маленькие временные интервалы, когда можно будет спокойно писать код. Беда в том, что этого времени не хватает на то, чтобы сосредоточиться и вникнуть в работу. Всё что будет в голове, это: “что я делал до митинга?”, “зачем я сделал эту функцию именно так?” и мысли о только что завершенном митинге.
Все эти процессы, которые я описал выше будут проходить в устной форме. Если у вас есть хоть один англоязычный человек в команде, то всё будет на английском, поэтому уметь писать и говорить нужно обязательно. Ещё, я заметил такую интересную закономерность:
“Чем выше уровень программиста — тем меньше он пишет код.”
Всё время уходит на обсуждения различных задач, то как они будут реализованы, какие есть риски, что команда будет с ними делать и тд. Джуниоры как правильно утопают в маленьких, не особо сложных задачах, но это всё временно.
Для джуниора достаточно уметь писать и читать на английском, если он умеет ещё и говорить, то это будет жирным плюсом.
Данный этап займёт не больше 15-и минут, этого в основном достаточно чтобы понять уровень владения языком.
Общение с CTO компании при наборе на работу сейчас не редкость, люди хотят знать кого берут на работу и быть лично знакомыми.
Это свойственно не большим компания, в силу того, что просто не хватит времени со всеми знакомится, если текучка по 15–20 людей в день, например. В общем и целом, здесь нет ничего сложного либо страшного, это будет просто знакомство с вами, как с личностью. Собственно здесь вам могут задавать типичные для работодателя вопросы, например:
- “где вы себя видите через 5 лет?”,
- “к чему вы стремитесь?”,
- “что хотите получать от работы?”
- и тд.
С точки зрения работодателя — он понимает, что если вы дошли до этого этапа, то с вами всё ок. Он не намерен вас “валить”, поэтому просто ведите себя естественно, познакомьтесь, расскажите о себе, покажите свои лучшие качества.
Очень часто ещё этот этап называют “Оффер-интервью”. Здесь вы уже можете услышать результаты за предыдущие этапы и сразу же получить предложение о сотрудничестве с конкретными цифрами.
Если же этого не произошло, то не стоит расстраиваться, значит это просто знакомство, о котором я писал выше. А все детали и цифры вы услышите от человека с которым вы начинали весь этот длинный путь.
ИТОГИ
Я для себя выделил 6 этапов, которые встречаются чаще всего:
- Знакомство с HR — первые впечатления о кандидате
- Техническое интервью — проверка вашего уровня подготовки
- Алгоритмы — проверка вашего мышления
- Софт скилл ревью — создание психологического портрета кандидата
- Английский — анализ уровня подготовки: умение писать, читать, говорить.
- Интервью с СТО — проверка лидерских качества.
В конце любого собеседования, независимо от результата, просите развёрнутый отзыв о каждом из этапов. Вам эта информация очень пригодится в будущем, чтобы понять ваши слабые стороны.
Главное не сдаваться, всё обязательно получиться. Никто не говорил что будет легко, но результат оправдывает средства. И даже если очень долго не получается, помните: fake it till you make it.
Больше информации вы можете найти на моём Patreon и Youtube:
Job interview in English: как готовиться и что отвечать
Привет! Меня зовут Анна Гандрабура, вот уже почти 7 лет я преподаю корпоративный английский в IT-компаниях и помогаю с проверкой английского при собеседованиях. Из опыта скажу, что у большинства IT-специалистов практически всегда есть запрос на подготовку к собеседованию на английском или пройти английский тест при приеме на работу. За прошлый год мы с командой проверили знание языка у более чем 200 кандидатов. В этой статье расскажу про их боли и дам советы, как пройти собеседование на определение уровня английского.
Определите свои слабые места
Собеседование на английском — это, как правило, разговор о вас, ваших компетенциях и карьерных планах с целью определить, насколько хорошо вы способны улавливать устную речь и излагать мысли по английски. Процесс подготовки будет зависеть от вашего уровня, временных рамок и т. д. Однако в любом случае основной упор следует сделать именно на практику ваших speaking skills.
Главной болью IT-специалиста в плане английского чаще всего является то, что он/она может читать, воспринимать речь на слух и даже выражать мысли в письменной форме, но в силу отсутствия разговорной практики, живое общение без подготовки оказывается устрашающей задачей. Естественно, если вы придете на собеседование, не помня, когда вы в последний раз сказали по-английски что-то более сложное, чем „no problem”, вам будет чрезвычайно трудно продемонстрировать свой реальный уровень.
Поэтому, прежде чем тянуться за учебником грамматики, словарем или включать „Друзей” на английском, попрактикуйте ответы на частые вопросы, желательно записывая их на диктофон. Проверьте свой текущий уровень и определите, с чем у вас возникает больше всего трудностей (не хватает грамматической базы, трудно строить предложения, вылетают слова из головы, чувствуете, что страдает произношение и т. д.).
Ваша цель — убрать ощущение странности, научиться чувствовать себя максимально комфортно и формулировать связные мысли, используя те знания, которые у вас есть.
Частые вопросы обычно касаются следующих тем:
Ваша профессиональная история
Why did you choose to work in IT?
Why did you choose this company?
How did you get started in IT?
What was the most interesting project you’ve ever done?
What were the biggest challenges you had to solve in one of your recent projects?
Ваша текущая работа
What are your current responsibilities?
What do you like most about your current position?
What are your biggest strengths?
Are you trying to learn anything new at the moment?
Ваши планы на будущее
Where do you see yourself in the future?
Do you have any long term/short term plans?
What would be your ideal job?
Как вы проводите свободное время
What are your interests?
What do you like to do outside of work hours?
What are your favorite movies/books?
После того, как вы потренировались и определили свои слабости, можете повторять необходимую грамматику и заучивать слова и тут же опять применять эти знания на практике.
Потренируйтесь отвечать на 5 популярных вопросов
1. Tell me about yourself
Будьте готовы к тому, что это будет первый вопрос, который вам зададут. Не спешите рассказывать про хобби и семью. Вместо этого подумайте, какими профессиональными качествами вы можете похвастаться. Чтобы ответить на этот вопрос максимально эффективно, можно разбить ваш ответ на две части.
I am a full-stack developer with over 5 years of experience. In my most recent job, I was involved in a number of e-commerce projects where I was in charge of implementing web design solutions as well as maintaining the database.
Часть 2. Почему вы подходите на эту должность? (здесь можно упомянуть о тех проектах, обязанностях и скиллах, которые, по вашему мнению, покажутся наиболее интересными).
I started out as a front-end developer but soon started taking on database and server management tasks. I have a strong background in Ruby on Rails and Bootstrap as well as MySQL and MongoDB. I am proficient in JavaScript, CSS, Ruby, and Java. I am also skilled at using Git. I’m always working towards updating my skills and keeping up with the industry. This is why I’ve recently started taking AngularJS courses. So far, I love the experience.
2. What are your biggest strengths and weaknesses?
Начнем с сильных сторон. Как описать их, не вдаваясь в излишние хвастовство? Прежде всего, проанализируйте описание вакансии и определите, какие заявленные требования совпадают с тем, что есть у вас. Также будьте максимально конкретны и не злоупотребляйте общими фразами. „I am a self-motivated, responsible person. I am a great team player and have very good communication and interpersonal skills”. Такой ответ в самом деле будет звучать как необоснованное хвастовство. Поэтому лучше выделите две или три черты, которые вы можете поддержать примерами из вашего прошлого опыта и расскажите о них.
I’ve always considered myself an organized and result-driven person. I make sure that the tools and approaches we choose are right for the project and will result in a product that satisfies the customer’s needs. I’m all about delivering solutions in a timely manner and I don’t like to overcomplicate things. For instance, I try to keep my code clean and easy to read so that another person can take over my work if need be or, if I have to go back and make some changes, I don’t get mixed up and confused. I think a big part of being organized is being able to look at the big picture and asking yourself what may come in the future.
Говоря о слабостях, важно помнить две вещи. Слабость — это не черта характера, которую трудно или невозможно исправить, поэтому не спешите отвечать: „I am an emotional person” или „I don’t really like talking to people”. Также — это не завуалированный комплимент самому себе, поэтому ответы вроде „I’m a perfectionist and, sometimes, I just worry about the project success too much” прозвучат как „humblebrag” (скромничанье).
I actually think my English could use some improvement. In the past, my fear of communicating in English has prevented me from taking an active part in meetings. I also used to lack the confidence to write to my colleagues or the client team, because, I think, there were a few instances when they thought I was a bit impolite over email. However, it is something I am working on at the moment. I’ve been attending English classes for three months now and I feel like I’m getting over my fear of talking in meetings. I am still working on writing good emails, and I think I’m making progress.
3. Why did you leave your last job? / Why are you leaving your current position / Why do you want to work here?
Здесь важно показать, чего именно вы ждете от желаемой должности и какие ваши цели и планы на будущее. Помните, как бы не обстояла ситуация с вашей прошлой или теперешней работой, не стоит плохо отзываться о работодателе или коллегах. Например, не стоит говорить: „I hate my managers” или „My current workplace is terrible”.
While I’m grateful to my previous employer for giving me the opportunity to learn and grow in my career, I feel like, at this point, I’m not fully satisfied withthe work I’m doing. I would love to do something more meaningfuland useful and get more involved into working on a diverse range of projects where I cancollaboratewith passionate people and learn new approaches and technologies. I would love to work at a cutting-edge company that tries to make a positive impactin the world.
4. Tell me about the biggest challenge you’ve ever had.
Вас могут попросить рассказать о каких-либо трудностях, с которыми вам пришлось столкнуться. В случаях, когда нужно рассказать такую историю из личного опыта, можно применять „STAR technique”. STAR значит:
- Situation — опишите конкретную ситуацию или проблему.
- Task — задача, которая перед вами стояла.
- Action — что вы сделали, чтобы выполнить эту задачу и решить проблему.
- Result — каков был конечный результат.
It’s hard to point it out off the top of my head. Well, there was this one time, when we had to work with a client who did not provide clear requirements which caused a lot of confusion. Once he asked to add a certain feature three weeks before the deadline and we had very little time for testing it. (situation) I had to run all the needed tests and make sure the product was ready to be released. (task) Because the process was very time-consuming and we were on a very tight deadline, I decided to eliminate the most critical bugs and issues first. We held a meeting with the team to determine which issues we should prioritize and got to work. In the end, we managed to deliver a functioning product and the client was happy with it.
5. Do you have any questions for me?
Если вам зададут этот вопрос, отвечайте „нет” только в том случае, когда вы уверены, что эта компания и должность вам совсем не подходят, и вам просто не терпится „get out of there.” Если же вы заинтересованы в работе, подумайте, что бы вам хотелось о ней узнать.
Вот несколько вопросов для примера:
- Why do you like working here?
- Where do you see this company in 5 years?
- What kinds of qualities are you looking for in people?
- What is your culture like?
- How do you evaluate performance?
Just a few tips в догонку:
- Используйте bullet point approach, когда готовитесь к собеседованию. Вместо того, чтобы записывать и заучивать целые предложения, выделите основные тезисные пункты и потренируйте свой ответ в разговоре с другом или просто перед зеркалом. Ваша цель — звучать легко и естественно.
- Не избегайте small talk. Покажите, что вы умеете поддерживать непринужденный разговор на различные темы. Будьте готовы поговорить о том, чем вы занимаетесь помимо работы, ваших любимых книгах, хобби и т. д. Будьте приветливы и на вопрос „How are you?” отвечайте: „I’m great/very well/doing good. What about yourself?”, а не „Normal” (что, по сути, неправильно) или „Not bad.”
- Поблагодарите интервьюера, отправив follow-up имейл после собеседования. Это поможет вам выделиться из толпы кандидатов и заодно покажет, что вы знакомы с англоязычной культурой общения.
Как сделать так, чтобы ваш английский казался лучше, чем есть
Это может показаться очевидным, но главный показатель вашего уровня на собеседовании — это, во-первых, то, что вы говорите, а не из вас вытягивают слова. Во-вторых, связная речь без запинок, заикания и пауз. Следите за темпом речи. Лучше говорить более медленно, но размеренно, чем быстро и сбивчиво.
Старайтесь давать развернутые ответы, ведь если вы отвечаете на все вопросы односложно, ваш уровень никак не смогут оценить. Никто не поймет, upper вы или inter, если каждый ваш ответ — это одно слово.
Практикуйте active listening — слушайте собеседника и реагируйте на его комментарии. Таким образом вы покажете не только заинтересованность в беседе, но и то, что вы в курсе, как общаются носители языка. То есть никто никогда не припишет вам Pre-Intermediate, даже если вы сказали will после if 🙂
„Повысить” свой уровень в ускоренном режиме и без особых усилий можно с помощью некоторых общих фраз, которые часто используют носители языка (но мы часто игнорируем). Например:
Кроме этого, разнообразить свой словарный запас и создать впечатление беглого английского помогают слова, заменяющие выражения с „very”:
Very good = amazing, awesome, fantastic, top-notch
Very bad = awful, terrible, lame (informal)
Very interesting = fascinating
Very boring = dull
Like very much = love
Very big = huge
Very small = tiny
Very important = crucial, critical, key
И еще помогают так называемые „filler words”, то есть слова, которые ничего, по большому счету, не значат, но делают речь более плавной и выигрывают вам дополнительное время подумать над вопросом. Например:
I would say that.
Let me see.
You know.
I mean.
It’s hard to remember off the top of my head.
В плане грамматики лучше сконцентрироваться на основах и не забивать голову новыми правилами за день до собеседования. Из основ вам больше всего понадобятся:
- Past Simple — о прошлых проектах, предыдущих местах работы, первых шагах и т. д. Всегда используется, когда ваше предложение отвечает на вопрос: „Когда именно в прошлом?” e.g. I designed my first app when I was in university.
- Present Perfect — о результатах на данный момент e.g. „I’ve worked at my current company for 6 years”.
- Going to — для планов на будущее e.g. „I’m going to take a PMI exam this spring”.
- Present Simple — для тех действий, которые происходят с какой-то частотой в настоящем e.g. „I very rarely travel abroad”.
- Также такие темы, как Gerunds and Infinitives, First and Second Conditionals и Prepositions.
Secret grammar tip: практически всегда вас спросят: „How long have you been working as . ” И тут многие проваливают тест на английский, потому что отвечают не в том времени: „I work/I’m working as a developer for 5 year”. This is wrong! В английском все просто: в каком времени вопрос, в таком времени ответ (зачастую). Плюс у вас есть маркер времени for, поэтому если вы не используете время Present Perfect Continuous, как было в вопросе, ваш уровень для собеседника едва дотянет до weak Intermediate.
Произношению нужно также определить особое внимание. Проверьте свое произношение самых часто используемых вами слов (например, в Google dictionary). Можно начать с этого списка:
Practice makes perfect! Всегда репетируйте перед собеседованием. Да, как в фильмах американцы стоят в ванной перед зеркалом и повторяют свою речь. Но не заучивайте ничего, вы должны говорить максимально непринужденно и естественно.
Полезные ресурсы
В завершение, несколько ресурсов, которые могут быть полезны для самостоятельной практики английского:
- English Grammar in Use — самоучебник грамматики.
- iTalki — платформа для практики разговорных навыков.
- Quizlet — эффективный способ запоминания новых слов и улучшения произношения.
Несколько рекомендаций по телесериалам для повышения уровня:
- Big Little Lies;
- Corporate;
- The Office (American);
- The IT Crowd;
- Silicon Valley.
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
System Design Interview и как к ним подготовиться
Сегодня я выступал на нашем мероприятии в Рязани с обновленной версией своего доклада “Дизайн секции как проверка навыков проектирования систем на собеседованиях”. В этот раз я сделал упор на то, как подготовится к прохождению интервью. Для этого я детальнее объяснил как оно оценивается и привел материалы, которые мы используем для онбординга новых интервьюеров. По результатам выступления я решил написать краткую статью в продолжении предыдущей.
Update: Недавно я проводил публичное интервью по System Design на C++ Russia и в статье я привел ссылку на запись, а также рассказал как сам бы решал эту задачу, если бы у меня был час на ее решение.
System Design Interview проводится для проверки навыка проектирования распределенных систем. Само собеседование носит открытый и свободный характер, поэтому требуются дополнительные усилия для правильной интерпретации результатов. В этой статье я попробую дать ответы на вопросы
- На какие продемонстрированные кандидатом умения обращают внимание интервьюеры
- Как эти умения оцениваются
- Как может подстраиваться сложность собеседования прямо под кандидата, чтобы точнее оценить его уровень
- Как можно подготовиться к прохождению интервью
Критерии оценки кандидатов
Мы смотрим на следующие моменты:
- Как кандидат формализовал задачу — если говорить кратко, то это про понимание того, какую систему надо спроектировать и какие к ней есть требования. Обычно мы в начальных условиях даем достаточно требований для базового понимания, но для того, чтобы не попасть впросак требуется ряд уточнений и вопросы кандидата очень показательны в этом плане
- Как кандидат понял и прочертил границы системы — а именно что входит и не входит в границы задачи. Характерной чертой хорошо выстроенных границ является понимание основных сценариев работы системы и четко формализованного API
- Как кандидат уловил основной поток работы нашей системы + отобразил через какие компоненты системы он проходит. В зависимости от типа задачи в автоматизируемом процессе может быть как закопано много сложности, так и наоборот почти никакой.
- Как кандидат проработал концептуальную схему. В моем мире концептуальная схема состоит из
— классов кубиков, из которых состоит система (или Architecture Building Blocks (ABB) из TOGAF)
— моделей данных, которые хранятся в этих кубиках и/или путешествуют между ними - Как кандидат проработал реальную схему. По-факту, это выбор для каждого кубика конкретного представителя (или Solution Building Block (SBB) из TOGAF). Здесь кандидат может продемонстрировать крутой кругозор и умение аргументировать свои решения
- Когда выбраны конкретные кубики, то можно уже обсуждать то, как получившаяся схема учитывает вопросы масштабирования под нагрузку. Этот момент хорошо прорабатывают или практики, что многое видели в своей жизни, или теоретики, которые очень хорошо подкованы в проблемах распределенных и высоконагруженных систем
- В финале можно посмотреть на получившуюся схему и оценить насколько она читаема, то есть пригодна для передачи информации о спроектированной системе. Если без автора схема нечитаема, то это плохой знак.
Уровни оценок
Описанные выше моменты мы оцениваем по следующей шкале:
- Junior — этот уровень можно зачастую выбить просто обладая логическим мышлением и имея теоретический/практический опыт в разработке
- Middle — этот уровень уже требует некоторого опыта в проектировании (или вдумчивого штудирования всяких книг и курсов по System Design Interview)
- Senior — этот уровень требует большого опыта в проектировании, а зачастую и широкого кругозора
- Senior+ — этот уровень используется редко (мало таких умельцев) и показывает условно эталонный навык или умение в отдельном критерии
Интегральная оценка
Интегральная оценка выставляется на основании экспертной трактовки оценок по отдельным критериям. В статье про System Design Interview я рассказывал подробнее и приводил пример. Здесь поделюсь rule of thumb в плане выставления и чтения интегральных оценок:
- Junior — обладает хорошей логикой, может собрать решение, которое будет работать в случае happy path и не слишком высокой нагрузки. Человек сам проектировать не может. Может решать хорошо декомпозированные и специфицированные задачи обычно в рамках сервиса/модуля. Для роста требуется сильная команда вокруг, относительно несложные задачи на взаимодействие систем + дальнейшее теоретическое обучение.
- Middle — может самостоятельно решать задачи внутри приложения, а также проектировать небольшие доработки в распределенных системах по образу и подобию (обычно в рамках общепринятого в команде подхода). Самостоятельно спроектировать что-то новое без присмотра не сможет, поэтому требуется наличие сильного инженера, который будет ревьювить решения. Для роста нужны сложные задачи + ментор.
- Senior — может сам проектировать решения в рамках зоны ответственности команды (возможно не одной).
Для роста нужны новые вызовы.
Уровни сложности собеседования
Для более точного определения уровня кандидата обычно собеседование начинается с уровня максимальной сложности и свободы — так кандидат может проявить свои сильные стороны. Если у него это получается, то он сам идет по задаче и интервьюеру требуется только уточнять какие-то моменты. Если кандидат решает задачу в таком формате, то это признак Senior в проектировании систем.
Иногда кандидат подвисает и делает это достаточно часто — тогда сложность собеседования понижается и интервьюер переходит в режим более плотной помощи кандидату и ведёт его к решению основных проблем в задаче. Если проблемы кандидат решает сам, главное ему их иногда подсвечивать, то это заявка на Middle.
Если кандидат кроме happy path ничего не сделал и дальше собеседование выглядит как опрос кандидата с кучей детальных вопросов по частям системы, на которые кандидат отвечает, то это уже уровень Junior.
Как лучше готовиться к собеседованию
Нет ничего лучше совмещения теории и практики. Начнем с теории
Теоретические материалы
- Моя статья про наши System Design Interview
- Моя статья про пробное интервью на C++ Russia 2022
- The System Design Primer —и конкретно теоретическая часть, где излагаются базовые темы, которые стоит знать
- Hacking the Software Engineer Interview by TianPan — ресурс для подготовки к интервью с теорией, которую стоит знать
- Книга “System Design Interview: An Insider’s Guide” и мой краткий обзор предлагаемого в ней фреймворка для прохождения интервью и обзор первой части книги
- Моя статья с 16 рекомендованными книгами по проектированию
- Статья Yandex про System Design Interview с примером задачи про url shortener
- Книга DDIA — отличная книжка, в которой большая часть нужной теории объяснена буквально на пальцах
- Лекции из курса Essential Architecture
— Лекция про код
— Лекция про данные - Крутой курс по распределенным системам (the fault tolerant distributed systems)
— Лекции
— Семинары - Книга Database Internals и ее обзор
— Part 1 — Storage Engines
— Part 2 — Distributed Systems - Репозиторий “Scalable Software Architecture” на Github
Практические материалы
- The System Design Primer — конкретно часть про System Design Exercises, которые можно порешать
- Architectural Katas by Neal Ford — ката с архитектурными задачами, правда без ответов, но примеры задач хорошие
- Hacking the Software Engineer Interview by TianPan — ресурс для подготовки к интервью с примерами, которые стоит порешать
Отдельно рекомендую формулировать и пробовать решать задачи по следующему шаблону, который напоминает наш внутренний шаблон для постановки задач и референсного решения.
Теория без практики мертва, а практика без теории слепа
А. Суворов
Так что используйте в подготовке обе составляющие:)