Самая важная подготовка — это не заучивание алгоритмов

Ничто так не пугает технического специалиста, как перспектива технического собеседования.

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

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

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

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

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

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

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

Типы технических интервью

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

Эти форматы обычно можно разделить на две категории: академические и практические:

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

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

Давайте посмотрим на различные способы проведения технических интервью и на какую классификацию они обычно попадают:

  1. Фильтр звонков: во время первого или второго экрана звонков ожидайте серию технических вопросов в стиле викторины с черно-белыми ответами, которые служат начальным фильтром. Эти вопросы, как правило, охватывают основные академические концепции, а также практические знания предметной области, и на них должно быть легко ответить, если вы подходите для этой должности.
  2. Интерактивный сеанс кодирования: вы будете работать с интервьюером над решением задач в режиме реального времени. Эти тесты обычно проводятся онлайн с использованием общего текстового редактора или вашей собственной IDE через совместное использование экрана. Ожидайте, что вам придется решать как академические задачи программирования, так и отдельные задачи из реальной жизни, такие как написание класса или функции для достижения конкретной цели.
  3. Возьми домой: практическое упражнение, которое обычно выполняется в течение дня или двух после его получения. Ожидайте завершения базового приложения или задачи в техническом стеке, используемом организацией, в которую вы подаете заявку. При тестировании этого типа обратите внимание на качество кода и стандарты.
  4. Найдите ошибки: вам дается существующий сегмент кода, и вы прослеживаете его, чтобы выявить потенциальные проблемы. Это может означать обнаружение синтаксических ошибок, логических проблем, пропущенных пограничных случаев или проблем с производительностью. Это практическое упражнение должно быть знакомо тем, кто имеет опыт проверки кода.
  5. Доска: личная и часто более глубокая версия интерактивного сеанса кодирования. Этот тип интервью часто носит академический характер, фокусируясь на алгоритмах и основах, но также может охватывать более практические темы.
  6. Циклические интервью. Распространенные среди крупных фирм, это серия индивидуальных интервью с вашими потенциальными коллегами и менеджерами, чтобы проверить вашу пригодность для работы в организации. Скорее всего, он будет сочетать в себе несколько ранее упомянутых форматов, а также общий разговорно-ориентированный дискурс. Они предлагают прекрасную возможность задать вопросы и понять, где вы хотите работать.

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

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

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

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

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

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

Подготовка к академическому техническому интервью

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

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

Это означает охват следующих тем:

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

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

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

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

Кроме того, вот несколько очень простых советов по подходу к вещам:

  1. Используйте явные имена переменных, а не x, y, z (хотя «i» подойдет в качестве итератора цикла). Помните, ваш код должен быть понятен интервьюеру.
  2. Помните о структуре if/else. Я знаю, что это элементарно, но это красный флаг, если вы пишете два оператора if подряд, которые должны быть блоком if/else (if).
  3. Не забудьте разорвать циклы, как только они выполнили свою задачу.
  4. Хеш-карты — ваши друзья, и они часто могут избавить вас от необходимости использовать вложенные циклы. Допустим, у вас есть два массива строк, и вам нужно вывести строки, которые встречаются в обоих массивах. Вместо того, чтобы перебирать второй массив для каждой записи в первом массиве, рассмотрите возможность превращения первого массива в карту, пройдя по нему один раз, а затем перебирая второй массив, выполняя поиск по карте. Вы можете использовать встроенные возможности языка (например, функции JavaScript map или reduce), чтобы сделать это за вас.
  5. Вернитесь и просмотрите, протестируйте и оптимизируйте свое решение. На собеседовании вы можете удовлетворить интервьюера, просто заявив, как бы вы улучшили решение.

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

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

Подготовка к практическому техническому интервью

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

Все мы знаем (включая интервьюеров), что в реальном мире Google и Stack Overflow находятся у вас под рукой, и вам никогда не придется строить красно-черное дерево, используя только горсть маркеров на доске и смутные воспоминания о ваших алгоритмах 101 класса. .

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

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

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

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

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

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

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

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

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

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

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

Это распространенный стиль вопроса, который возникает во время практических интервью.

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

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

Мое интервью с Facebook

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

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

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

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

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

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

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

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

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

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

Мягкая сторона

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

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

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

  1. Не решайте проблемы с практикой заранее; прыгайте сразу или попросите друга составить список для вас, чтобы заняться.
  2. Проработайте задачи на настоящей доске или бумаге и говорите вслух, как будто в комнате находится интервьюер. Это может показаться глупым, но утиная отладка работает не просто так.
  3. Внимательно прочтите формулировку задачи, изложите ее и сформулируйте, о чем в конечном счете идет речь. Во время интервью это шанс для вас продемонстрировать свое понимание проблемы и задать уточняющие вопросы.
  4. Помните о деталях проблемы. Если в нем упоминается, что вам дан массив уникальных значений, а не просто массив, это может указывать на то, что вам следует использовать карту. Спросите о пограничных случаях и масштабах и укажите, каким будет ваш первоначальный подход. Уточните все моменты, в которых вы не уверены.
  5. Продолжайте решать проблему, общаясь с интервьюером. Объясните, что вы делаете, и выслушайте любые отзывы или вопросы, которые они задают, так как это могут быть подсказки.
  6. Завершите задачу и обсудите свое решение с интервьюером. Скорее всего, они будут задавать вопросы о принятых вами решениях. Это также возможность указать, как ваше решение может быть улучшено или оптимизировано, давая интервьюеру возможность обсудить этот вопрос, если он того пожелает.

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

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

Как интервьюер

Провалив свое техническое собеседование с Facebook, я остался в компании еще на несколько лет, пока она росла.

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

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

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

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

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

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

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

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

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

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

Последние мысли

Давайте резюмируем. Самая важная подготовка — это не запоминание алгоритмов; это помнить о том, как вы ведете себя и взаимодействуете с интервьюером.

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

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

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

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

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

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

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

Автор Кевин Доу

Ресурсы

Книги

Проблемы программирования

Пробные интервью