Посылка

Проработав более 9 лет в компании FAANG в качестве инженера-программиста, я решил найти новую работу в сфере технологий в течение года удаленной работы (если быть точным, в 2021 году). Как я описываю более подробно ниже, это, пожалуй, лучшее время, чтобы начать поиск работы и получить одно или два предложения от ведущей технологической компании, не выходя из собственного дома, без необходимости надевать штаны.

Все это в значительной степени связано с тем, что у вас больше времени, которое вы можете сосредоточить на подаче заявления на работу, Leetcoding, обучении и подготовке к собеседованию, а не на ожидании в офисе, когда наступит 17:00, посещении счастливых часов после работы, поездках на работу и решении проблем. общий стресс офисной жизни.

Ниже вы найдете примечания, которые представляют некоторые шаги, методы и подходы, которые я использовал во время этого удаленного поиска работы. Хотя эти советы и процессы нацелены на должности программистов в средних и крупных компаниях, мы надеемся, что они по-прежнему актуальны для небольших фирм и, возможно, даже для должностей, которые не связаны строго с программной инженерией (например, управление программами, обеспечение качества, Дизайн).

Надеюсь, они вам пригодятся!

Поставьте цель

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

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

Итак, откройте Документы Google и создайте новый документ под названием Стратегия ухода с работы со списком причин, по которым вы хотите сменить компанию, с четко сформулированной целью. Этот документ послужит центром вашего поиска работы; позже он будет ссылаться на другие документы по различным дисциплинам, которые вы будете изучать (структуры данных и алгоритмы, кодирование и т. д.), а также другие ссылки на компании, с которыми вы работаете (например, документ под названием «Facebook» с названием рекрутера, интервьюеров, команды, для которой вы проводите собеседование, и любые другие важные примечания - подробнее об этом ниже).

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

Составьте график

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

Вот как может выглядеть разбивка:

1 сентября. Начните процесс, поставьте цель.

2–5 сентября. Ищите рефералов в LinkedIn.

6–12 сентября. Отправляйте заявки.

Конец сентября. Включите экраны телефонов.

14–19 октября: перерыв с работы на виртуальные сайты.

21–24 октября: оценивайте и обсуждайте предложения.

25 октября. Уведомление на работе за две недели. 👋

Ноябрь - декабрь: возьмите перерыв между работой.

6 января: начало новой работы

Не будьте слишком агрессивны со своими временными рамками. Помните, что вы находитесь во власти рекрутеров, расписания ваших интервьюеров и, возможно, вам трудно вернуться в Leetcoding через много лет (почти десять лет в моем случае).

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

Бросить или не бросить

Довольно загадка.

Это сильно зависит от вашей текущей работы, статуса отношений, иммиграционного статуса (ограничений по визе H1B предостаточно - предположительно, в США разрешено только 10 дней без работы) и финансового положения. В конце концов, я решил учиться на новой работе, пока я работал в своей нынешней компании (отказ от ответственности: я оставил эти две работы отдельно, как описано ниже), чтобы не сомневаться в том, что, имея работу, я мог бы повесить на (если будет) предоставлено мне. Я верю, что расхожее мнение гласит, что лучшее время для поиска работы - это когда она у вас уже есть.

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

Keep It Halal

Я настоятельно рекомендую приобрести отдельный ноутбук, чтобы подавать документы в другие компании, учиться и проводить собеседования. Хотя может и не быть никаких юридических рисков, связанных с использованием вашего рабочего ноутбука для поиска работы (по крайней мере, по мнению Blind), всегда существует риск случайного сообщения электронной почты или совместного использования экрана, утечек копирования и вставки Leetcode, и получение звонков или сообщений от рекрутеров во время встреч (ВХОДЯЩИЙ ЗВОНОК: GOOGLE RECRUITER). К тому же, использовать одну и ту же машину для обоих просто ужасно.

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

Сама по себе машина не обязательно должна быть красивой - достаточно хорошей, чтобы просматривать видео с приличной камерой для видеоинтервью. Подержанный MacBook на Amazon может стоить около 500 долларов и, по-видимому, очень быстро окупится с помощью предложения о работе.

Обновление: найдите аккумулятор с исправным аккумулятором.

Не бойся

Помните, что этот процесс в конечном итоге сделает вас лучшим инженером, независимо от результата. Легко понять, что Leetcoding - это не то, чем программисты на самом деле занимаются изо дня в день, и что это пустая трата времени. Фактически, вы почти наверняка попадете в эту ментальную ловушку в какой-то момент. Однако вы должны помнить, что эти упражнения сохранят ваш разум острым и что вы узнаете что-то новое о структурах данных, сетях, парадигмах программирования, ваших лидерских качествах и тому подобном.

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

Обновите свое резюме

Существует множество ресурсов о том, как поддерживать, обновлять и форматировать резюме, поэтому я не буду терять здесь ваше время. Как правило, вы должны держать его минимальным, чистым и легким для анализа читателем. Если у вас есть многолетний опыт работы, не бойтесь бросать работу, которую вы выполняли сразу после колледжа. На данный момент никого не волнует.

Определите потенциальные компании

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

| Компания | Контактная информация рекрутера | Уровень | Статус | Дата экрана телефона | Примечания

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

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

Вот список, с которого можно начать.

Уровень III:

  • Tableau
  • LinkedIn
  • Полоса
  • AirBnb
  • DoorDash
  • Робин Гуд
  • DocuSign
  • Увеличить
  • Cisco
  • Adobe

Уровень II:

  • Netflix
  • NVIDIA
  • Pinterest
  • Snap Inc
  • Salesforce
  • Venmo
  • Oracle
  • Коробка

Уровень I:

  • Google
  • Facebook
  • Lyft
  • яблоко
  • Амазонка
  • Твиттер

Ищите рефералов

Вот где пригодится этот ужасный сайт LinkedIn. На самом деле, возможно, служа только своему предназначению.

Для каждой из компаний в списке проверьте свои контакты и обратитесь к сотруднику этой компании, если таковой имеется. Учитывая довольно короткую среднюю продолжительность работы в компаниях для современного технологического программиста, вероятно, ваши контакты в LinkedIn охватывают довольно много, когда речь идет о компаниях, перечисленных выше. И в большинстве случаев эти бывшие коллеги / контакты / знакомые более чем счастливы порекомендовать вам реферальные бонусы, которые необходимы для успешного найма.

Пример сообщения может выглядеть примерно так:

«Привет, [бывший коллега]! Проведя некоторое время в [Current Company], я решил начать осматриваться, чтобы узнать, какие еще компании существуют. Я вижу, что вы работаете в [Company of Interest] уже год. Каким был ваш опыт до сих пор?

Просматривая их сайт "Карьера", я нашел несколько позиций, которые могут быть мне интересны (ссылки на которые приведены ниже). Не могли бы вы направить меня к ним? Очень признателен! »

Не забудьте искать рефералов перед тем, как подавать заявку на вакансию, так как это может фактически снова поставить вас в очередь на разговор с рекрутером или на экран телефона.

Подать заявку на вакансии

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

Если возможно, постарайтесь сделать это методично и строго. Откройте все вкладки для вакансий, на которые вы претендуете, и просмотрите вкладку за вкладкой, заполняя каждое поле по очереди. Не поддавайтесь искушению автоматизировать процесс подачи заявки… или нет. 😈

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

Откажитесь от нетерпеливых рекрутеров

У рекрутеров есть план как можно скорее подписать вас на экран телефона. Пока они (да благословит их Бог) пытаются достичь своих собственных целей и задач по развитию своих компаний, помните, что у вас есть собственная повестка дня, которую нужно соблюдать (помните даты сверху?). Тот факт, что у вас есть предварительный разговор с рекрутером, во время которого вы оба решаете, что данная работа идеально подходит для вас, не означает, что вам нужно запланировать экран телефона на эту неделю или даже следующий.

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

Они также в конечном итоге предпочтут подготовленного кандидата (если только они не будут действительно злобными), а не дерьмового, неподготовленного, чтобы заказать показ, съесть и сразу выплюнуть. Составьте четкий график, и у вас обоих будет больше шансов на успех.

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

Leetcode

Другого пути нет. Вы должны потратить много времени на Leetcode. Честно говоря, это хорошо сделанная, документированная, прокомментированная платформа, и аспект геймификации в ней держит вас на крючке, если вы позволите. Начните со списка 100 самых популярных вопросов на собеседовании и возьмите его оттуда.

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

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

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

Мои числа Leetcode никогда не были такими высокими, как некоторые из тех, что опубликованы на Blind - в лучшем случае они были скромными. Но я обнаружил, что Leetcoding потребовалось всего около трех недель, чтобы начать улавливать закономерности в вопросах и иметь возможность сформировать набор инструментов для их решения.

Структуры данных и алгоритмы

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

Более пассивный (но не обязательно менее эффективный) способ проверки этих знаний - это просмотр следующего 8-часового видео, в котором рассматриваются некоторые важные моменты: https://youtu.be/RBSGKlAvoiM

Я рекомендую немного ускорить его до 1,5 или 2 раз для частей, которые, по вашему мнению, могут быть вам уже знакомы, и приостановить видео, чтобы сделать заметки для тех, кого вы изучаете и понимаете впервые. Вы можете добавить эти заметки в свою Структуру данных и алгоритмы Google Doc, чтобы вы могли просмотреть их перед собеседованием или когда вам надоело Leetcoding.

Ниже приведены некоторые основы, которые - как минимум - вы должны уметь описать во время собеседования.

Структуры данных:

  • Связанные списки
  • Бинарные деревья
  • Деревья
  • Стеки
  • Списки векторов / массивов
  • Очереди
  • Хеш-таблицы

Алгоритмы:

  • Поиск в ширину
  • Поиск в глубину
  • Бинарный поиск
  • Сортировка
  • Сортировка слиянием
  • Вставка дерева
  • Быстрая сортировка
  • Сортировка по ведру

Сеть и операционные системы

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

Позвольте мне спросить вас: что происходит, когда вы вводите URL-адрес в браузер и нажимаете Enter? Готовы ли вы ответить на этот вопрос? ›Если нет, вам следует ознакомиться со следующими вещами:

  • IP и TCP
  • Маршрутизаторы и как они работают
  • Уровень приложений и транспортный уровень
  • DNS
  • Печенье
  • Запросы AJAX
  • RESTful API
  • POST, GET, PUT, DELETE действия
  • Http против Https

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

Динамическое программирование

Уф. Слова, которые никто не хочет слышать. Или, может быть, некоторые из вас, больные уроды, так и поступают. Вопросы динамического программирования часто возникают как второстепенные в вопросе, состоящем из двух частей. Часто первая часть вопроса сопоставляется с проблемой Leetcode Easy ™, только вторая часть вызывает ужасный DP.

Есть несколько проблем, которые касаются основ Leetcode. А именно, вы должны уметь применять к проблеме следующее:

  • Мемоизация (сверху вниз)
  • Табулирование (снизу вверх)

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

Grokking the System Design Interview (Интервью по проектированию системы)

Было почти тревожно, как много компаний брали вопросы о системном дизайне прямо из курса Grokking the System Design Interview. Фактически, самый первый вопрос из курса (Дизайн TinyURL) мне задали не один раз, не дважды… а трижды. Несмотря на всю негативность, которая сейчас окружает этот курс (описанный как слишком высокоуровневый и лишенный подробностей), он, похоже, де-факто является банком вопросов для собеседований по системному дизайну.

Так что, в конце концов, оно того стоило. Я заплатил 79 долларов за курс, проявил должную осмотрительность и просмотрел под рукой примеры, понимая, что настоящие жемчужины курса не обязательно были архитектурными примерами (я имею в виду, что на этом этапе вы обязательно должны запомнить первый пример), а скорее простота, с которой Глоссарий определяет такие ключевые понятия, как следующие:

  • Балансировки нагрузки
  • Кеширование
  • Разделение данных
  • Индексы
  • Прокси
  • SQL против NoSQL
  • Опрос против WebSockets

Постарайтесь познакомиться со всеми приведенными выше концепциями. При обсуждении того, какой подход вы выберете, когда вам зададут вопрос о системном дизайне, постарайтесь не упоминать его.

Кроме того, ознакомьтесь с построением графического представления ключевых компонентов в распределенной системе. Собеседование на месте, посвященное системному дизайну, должно быть не первым, когда вы рисуете прямоугольники со стрелками. Если вы проходите собеседование с Google, попрактикуйтесь в их возможностях рисования в Документах Google. У каждой компании будет свой собственный веб-инструмент, который они используют для визуального представления дизайна - изучите этот инструмент и будьте готовы. Это сэкономит ваше время и усилия и ускорит внесение изменений, отметив поле «Интервью по проектированию системы».

Подход к вопросу проектирования системы

Если вам не хочется платить за курс Grokking (вы не стали бы загружать курс…), вот общий план того, как решать проблемы системного дизайна.

  • Определите требования, как функциональные (что должно делать приложение / фреймворк), так и нефункциональные (масштабируемость / надежность / доступность / задержка / согласованность).
  • Выполните некоторые предварительные вычисления с точки зрения операций чтения и записи.
  • Определите API.
  • Определите модели данных.
  • Нарисуйте общую схему компонентов.
  • Более детально проработайте вышеуказанные компоненты, сосредоточив внимание на хешировании, разделении данных, кэшировании, балансировке нагрузки, очистке базы данных и т. Д.
  • Дополнительное время? Обсудите метрики и безопасность.
  • Еще есть дополнительное время? Вы гений. Обсудите возможные узкие места и способы их устранения.

Под давлением: имитационное интервью

Pramp - отличный ресурс. На самом деле позвольте мне повторить это еще раз со ссылкой.

Pramp - отличный ресурс!

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

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

После некоторой практики Leetcoding вы можете с оптимизмом относиться к своей способности отвечать на простые / средние (возможно, даже на пару сложных) вопросов и быть уверенным в правильности экрана телефона, и это здорово. Фактически, это новость о том, что вы движетесь в правильном направлении. Однако после нескольких раундов имитационных собеседований с Прампом вы быстро поймете, что совершенно не готовы мыслить логически под давлением, когда кто-то сидит и смотрит на ваше большое лицо в веб-камеру. Сделайте это несколько раз, и когда придет время, вы почувствуете себя намного комфортнее.

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

Интервью с менеджером по найму

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

  • Продукт, над которым работает команда.
  • Смесь людей, с которыми вы будете работать. Сколько юниоров? Сколько пожилых людей?
  • Какие возможности появятся у вас для развития в определенных сферах? Например, машинное обучение, наука о данных, менеджмент или любая другая область, в которой вы хотите развиваться.
  • Какие методологии разработки использует команда? Какие языки и технологии?

Не задавайте вопросов о балансе работы и личной жизни, так как этот вопрос лучше всего задавать другим сотрудникам в команде.

Поведенческие вопросы

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

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

  • Не могли бы вы рассказать мне о своем текущем проекте?
  • Какие технические проблемы вы решили в рамках этого проекта?
  • Сотрудничали ли вы с другими командами?
  • Расскажите мне о сложной проблеме, с которой вы столкнулись, и о том, как вы ее решили.
  • Вы определяете направление команды? Как вы это делаете?
  • Как вы обучаете других инженеров в этом проекте?
  • Сколько времени вы тратите на руки? Как вы следите за новостями?
  • Не могли бы вы рассказать мне о самом успешном из реализованных вами проектов?
  • Как вы используете данные для объяснения технических концепций?
  • Опишите ситуацию, когда вы допустили ошибку, и что вы из нее узнали.
  • Не могли бы вы рассказать мне о проекте, над которым вы работали, но который потерпел неудачу, и вы его изменили?
  • Опишите время, когда вам пришлось применить свой существующий опыт в новой и иной ситуации.
  • Не могли бы вы рассказать мне о том, как вы взрастили людей в своей команде?
  • Какую проблему вы обнаружили, над которой еще не работали?
  • Какой пример решения по продукту / бизнесу вы не согласны?
  • Какой пример положительной обратной связи вы дали своему руководителю?
  • Каковы ваши личные недостатки и области роста?
  • Какой отзыв был для вас самым сложным?
  • Расскажите мне о различных переходах, которые вы совершили в своей карьере, и о том, почему вы выбрали именно этот путь.
  • Чего вы ищете на следующем этапе карьеры?
  • Почему вам интересна эта роль, почему именно сейчас?
  • Что вдохновляет вас в работе, а что истощает?
  • Чем, по вашему мнению, эта роль будет отличаться от вашей нынешней?
  • Почему вы / хотите покинуть свою текущую / недавнюю компанию?
  • Расскажите мне о случае, когда произошла смена приоритетов в том, над чем вы работали.
  • Расскажите мне о случае, когда вы работали с кем-то, кто вызывал проблемы / создавал разногласия?

Сомнения компилятора

С моими товарищами по ложному интервью были разные мнения относительно того, является ли стандарт компилированием и выполнением вашего кода во время экранов телефонов. Хотя это определенно запрещено для таких компаний, как Google (хотя этот плагин поможет с форматированием и синтаксисом в Google Docs: https://workspace.google.com/marketplace/app/code_blocks/100740430168), я обнаружил что большинство моих собеседников в конце концов заставили меня скомпилировать и отладить код. Я действительно предпочитаю это!

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

В конечном итоге из этого можно извлечь несколько уроков:

  1. Спросите интервьюера - или еще лучше - рекрутера - нужно ли компилировать код, который вы пишете во время упражнения.
  2. Привыкайте к написанию кода, который действительно компилируется (Leetcode, очевидно, поможет в этом).
  3. Привыкайте писать тесты для своего кода (см. Ниже).

Написание тестов

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

Например, для написанных вами методов, принимающих строку, вы можете включить следующие тестовые примеры:

  • Пустая строка.
  • Строка длины Integer.MAX_VALUE
  • Строка, содержащая символы, отличные от ASCII.
  • Строка, содержащая escape-символы.
  • Строка, содержащая только пробелы.

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

Возьми пару Ls

Скорее всего, вы не справитесь со всеми начальными экранами телефона - и это нормально! Хотя вы можете быть готовы к любому вопросу в стиле Leetcode, который они задают вам из-за того, что вы знакомы с этой платформой, у вас может не хватить хладнокровия и ясности мысли, которые возникают из опыта. Вероятно, что некоторые технические пробелы будут обнаружены, когда вы начнете, но этого следовало ожидать.

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

Нервные интервьюеры

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

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

Это видео?

Ответ положительный. Хорошо это или плохо, но экраны телефонов теперь переключаются на видео. Этого не было до появления Zoomified мира, и это, похоже, не в пользу ни интервьюируемого, ни интервьюирующего, но с этим вам придется справиться.

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

Вскрытие

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

  1. Имя и роль интервьюера
  2. Сведения о работе и обязанностях (их может быть немного)
  3. Полученные вопросы
  4. Что прошло хорошо?
  5. Что пошло не так?
  6. Уроки выучены
  7. Последующие действия

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

Онлайн-оценки

Некоторые компании, такие как Microsoft, Uber или Salesforce, могут попросить вас пройти онлайн-тестирование вместо экрана телефона. Вокруг них есть некоторая стигматизация, учитывая, что это почти проявляется, когда вы работаете бесплатно. На самом деле я предпочел трехчасовую оценку кодирования, а не экран телефона, учитывая, что это гораздо более практическое упражнение, чем абстрактный классический вопрос Leetcode. Вы также одиноки и в своей стихии во время этих экзаменов по программированию.

Помните, что вы не сможете сделать паузу и вернуться к проблеме позже. Прежде чем приступить к работе, попробуйте настроить все локально, например:

  • IDE установлена ​​и готова к работе.
  • Напоминание о том, как быстро импортировать служебные библиотеки, которые могут оказаться полезными.
  • Тихий дом без помех.
  • Много кофе.

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

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

Сделайте свое исследование

Когда дело доходит до собеседования на месте, проведите небольшое исследование, когда речь идет о людях, которые будут брать у вас интервью. Поищите их в LinkedIn и попытайтесь получить представление об их сроках пребывания в должности, опыте и том, что они ищут в кандидате. Часто у интервьюеров есть личная страница, на которой рассказывается об их технических достижениях, любимых проектах, технических блогах и тому подобном. Это все фрагменты информации, которые, хотя и не являются абсолютно необходимыми, но дают вам некоторое представление о человеке по ту сторону экрана и о том, как к нему относиться. И хотя можно ссылаться на тот факт, что вы оба работали в компании X в течение 3 лет, не упоминайте их альбом Hawaii 2009 в Facebook - оставайтесь строго профессиональными.

(Виртуальные) собеседования на месте

Предполагая, что вы сделали от 15 до 20 начальных экранов телефона (скажем, с показателем успешности ~ 30%), вам нужно будет пройти несколько собеседований на месте. Отлично! Как описано выше, обязательно забронируйте все это после экранов телефона, когда собеседования в компании высшего уровня будут последними.

Эти собеседования представляют компанию, которая «вводит вас в офис», чтобы они могли лучше вас узнать… и вас обучили 7 или 8 инженеров и менеджеров. За исключением того, что в настоящее время существует очень небольшая разница между экраном телефона и (виртуальным) на месте, а именно:

  1. Обычно это блок непрерывных интервью с перерывом в 5-10 минут между ними, а не один разовый экран телефона.
  2. Вам будут заданы поведенческие вопросы в течение одного или двух собеседований (обычно менеджером или менеджером по продукту). Это редко случается во время экранов телефонов, если только это не предварительное собеседование с менеджером по найму.
  3. Если вы не инженер начального уровня, вам понадобится часть системного дизайна.
  4. У вас будет больше времени, чтобы описать работу, которую вы проделали в прошлом, и рассказать о себе.
  5. В целом фокус будет больше на вас, чем на экране телефона.
  6. Это немного более формально, но это не значит, что вам следует носить костюм. Но хотя бы штаны.
  7. Также существует мнение, что вопросы, заданные на месте, могут быть сложнее, чем вопросы на экране телефона, но это не всегда так.

Несмотря на то, что ожидания немного выше во время пребывания на месте, к кандидату проявляется определенное повышенное уважение, учитывая, что они зашли так далеко. Это не означает, что кандидаты, проверяемые по телефону, являются пушечным мясом, а скорее, что виртуальные сайты пытаются воссоздать более формальный аспект пребывания в офисе и «продажи» кандидата на работу. Они также пытаются произвести на вас впечатление на этом этапе, используйте это в своих интересах.

Запланировать неделю интервью

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

Если раньше нормой был марафон собеседований с вашими потенциальными коллегами и менеджерами, который длился целый день в незнакомом месте, то теперь компании гораздо более сговорчивы, когда дело доходит до разбивки собеседования на 2 или даже 3 дня. Обязательно обсудите это намерение со своим рекрутером, как только будет назначено собеседование. Сделав дневной перерыв между собеседованиями, вы сможете зарядиться энергией, оценить свой статус (не зацикливайтесь на нем) и подготовиться к оставшейся части собеседований.

Обсуждение нескольких предложений

Получаете несколько предложений от компаний? Поздравляю!

Есть много ресурсов, которые рассказывают, как максимизировать ваши предложения, и они делают это гораздо более усердно, чем я когда-либо мог. Мы говорили о полезности интервью с Grokking the System Design Interview, и вот, у них есть (очевидно, гораздо менее техническое) руководство по максимальному использованию ваших предложений, которое вы можете найти здесь: https://www.educative.io/courses/ гроккинг-комп-переговоры

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

Сделайте перерыв между

Вы получили предложение в отличной компании с солидным компенсационным пакетом, что теперь? Рекрутеры и менеджеры по найму будут подталкивать вас к немедленному началу работы, ссылаясь на политику компании в отношении дат начала и т. Д. По правде говоря, вы можете попросить столько времени, сколько вам нужно между ... будь то месяц или полгода. Как правило, некоторые из крупных компаний принимают это больше, что не означает, что это не может быть применено где-либо еще.

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

Заключительное заявление

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

Идите вперед и побеждайте!