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

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

Щелчок-щелчок-щелчок-щелчок. Звук того, как я яростно разбиваю клавиши на клавиатуре, разносился по всей ночи.

Я поднял глаза от экрана своего ноутбука и бросил взгляд на часы на стене моей квартиры в подвале, которую я снимаю за 600 долларов в месяц.

Было 2 часа ночи.

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

Я не был.

Я готовился к предстоящему собеседованию по техническому кодированию на веб-сайте leetcode.com.

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

Как я сюда попал

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

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

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

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

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

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

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

Мой фон

У меня был 3-летний опыт работы в качестве инженера полного цикла в стартапе, в основном я занимался созданием микросервисов и разработкой API на стеке AWS. Стек был в значительной степени ориентирован на PHP, NodeJS, AWS SQS в качестве очереди сообщений, Postgres для нашей базы данных и AWS S3 для долгосрочного хранения.

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

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

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

Я подал заявку в более чем 30 различных компаний, проинтервьюировал 15, отклонил 6, получил предложения от 6, отклонил 5 и принял 1. Прочтите здесь, если вам интересно, как я получал предложения от ведущих компаний FAANG без плюща. Степень лиги.

Если вы считаете, математические расчеты не совпадают идеально, потому что некоторые компании бросились на поиски на месте.

Как я готовился к интервью

Я провел большую часть своего времени на leetcode.com и книге под названием Elements of Programming Interviews. Я также около 10% времени просматриваю Youtube в поисках интервью по системному дизайну, таких как Джек Габбард (ссылка) и Горан Сен (ссылка). Еще мне понравился DailyCodingProblem.com, который в день присылает мне вопрос на электронную почту.

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

В общей сложности я тратил около 3 часа в день в будние дни из-за работы и от 4 до 6 часов в выходные дни, в общей сложности около ~ 20 часов в неделю в течение месяца .

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

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

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

Лента новостей

  • 10 февраля 2017 г. - Рекрутер обратился к нам, чтобы назначить TPS
  • 8 марта 2017 - Первоначальный TPS
  • 13 апреля 2017 - Второй ДТП
  • 18 апреля 2017 - на территории отеля
  • 2 мая 2017 - Предложение продлено
  • 23 мая 2017 - Твиттер подтвержден
  • 24 июля 2017 года - официальная дата начала (в NHO)

Первые два технических экрана телефона включали кодирование в совместно используемом онлайн-документе, например в Google Docs. Мы говорили о разных подходах и компромиссах и потратили 30+ минут на реализацию.

После двух раундов меня перевели к следующему раунду на сайте Twitter в Сиэтле.

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

У меня ушло около дня на то, чтобы разобрать код, распечатать его на бумаге (около 5 страниц, шрифт 10pt) и отметить области улучшения на бумаге. Как я выяснил позже, это оказалось полезным упражнением.

На месте

Всего на площадке было 3 раунда:

  • Ширина (75 минут)
  • Глубина (75 минут)
  • Обед
  • Высшая оценка (90 минут, Необязательно)

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

Мой опыт

Ширина (системный дизайн)

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

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

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

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

Глубина (резюме)

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

Исходя из опыта стартапа, я отвечал за создание многих вещей с нуля, таких как настройка кластеров AWS, настройка SQS для обработки задач.

В этом раунде нет вопросов по кодированию.

Культурный

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

В этом раунде нет вопросов по кодированию.

Ретроспектива

  • Интервью в Твиттере в значительной степени сосредоточены на основах информатики, поэтому убедитесь, что вы знаете свои структуры данных сверху вниз слева направо, а также все основные алгоритмы, которые вы узнали бы в своем классе CS101.
  • Понимание, как работают компромиссы между сложностью времени и сложностью пространства.
  • Очень помогло знание и хорошее понимание одного языка. Для этого я рекомендую что-то вроде Python, Java или C ++, поскольку это очень часто используемые языки. Мне лично нравится использовать Python, потому что его очень легко читать, очень легко объяснять, и в него встроено множество структур данных.
  • Обязательно освежите в памяти проекты, перечисленные в моем резюме. Это означало понимание всего дизайна программного обеспечения, за который я отвечал, понимание компромиссов, которые были сделаны в системе, и наличие причины, по которым системы были построены таким образом, и каковы были альтернативы.
  • Будьте дисциплинированы при подготовке. Выясните заранее, чего вам не хватает, и составьте график занятий. Важно постоянно и непрерывно тренироваться. Я начал не с той ноги и пожалел, что не знал об этом раньше, чтобы не тратить время на неправильные вещи.
  • Подумайте о системах, с которыми вы взаимодействуете ежедневно. Выясните компромиссы, альтернативы, плюсы и минусы, и как вы можете построить лучшую систему. Этот навык поможет вам очень далеко в разработке программного обеспечения.

Ресурсы

  • Rooftop Slushie - Rooftop Slushie помогает вам общаться с сотрудниками ведущих технологических компаний, таких как Google и Facebook. Получите отзывы о резюме, рекомендации сотрудников, советы по собеседованию, советы по карьере и многое другое
  • Элементы интервью по программированию: отлично подходит для решения задач программирования.
  • Cracking The Coding Interview: отлично подходит для освещения основных проблем программирования CS.
  • Успешное прохождение технического собеседования: индивидуальный коучинг, который поможет вам пройти техническое собеседование в ведущих технологических компаниях.
  • Разработка приложений, интенсивно использующих данные: отличная книга, чтобы узнать о масштабировании распределенных систем! Настоятельно рекомендуется.
  • Daily Coding Problem.com: это бесплатный веб-сайт, который предлагает бесплатные ежедневные задачи по кодированию. Вы можете подписаться на интересные ежедневные задания по программированию и можете платить за решения, если хотите.
  • Leetcode.com: здесь можно попрактиковаться в написании кода.

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