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

Этот неполный список вопросов постоянно возникал у меня в голове.

  • «Я должен говорить через свой код?»
  • «Как часто мне следует общаться с интервьюером?»
  • «О боже, я забыл создать экземпляр моей переменной! Я обречен ?! »
  • «Что интервьюер думает о моем ответе?»
  • «Ничего страшного, если я сделаю это?»

… И список продолжается…

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

Вы идете на собеседование по поводу работы своей мечты, о которой мечтали с 12 лет. И все сводится к тому, чтобы произвести впечатление на того, кого вы никогда не встречали, в течение 60 минут.

Борьба настоящая.

1. Всегда думайте наперед

Часто вы слышите, как интервьюер спрашивает: «Хорошо, я думаю, это хорошо. А как бы вы улучшили этот код? »

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

  • качество кода
  • некоторые проблемы / узкие места, которые не были затронуты во время сеанса планирования алгоритма
  • как бы вы масштабировали имеющееся решение.

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

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

Позвольте мне знать в комментариях ниже. Я хотел бы услышать твои мысли.

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

Что это означает в сеансе кодирования

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

2. Есть более одного ответа

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

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

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

Упражнение по программированию, чтобы проиллюстрировать мою точку зрения:

Объединить два отсортированных связанных списка. (Он связан с Leetcode, если вы хотите попробовать решить). В основном вы можете решить эту проблему несколькими способами:

  1. Поместите все узлы в массив, а затем отсортируйте его. Затем создайте указатель и свяжите вместе все элементы массива.
  2. Объедините их, используя манипуляции с указателями. Сравните два, отслеживая, какой из них меньше, а затем верните результаты в конце.

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

3. ООП не умер

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

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

Однако способность превращать сложные проблемы в более простые и управляемые фрагменты с помощью объектно-ориентированного программирования - редкий и ценный навык.

Написать код, понятный компьютерам, легко. Писать код для людей сложно.

4. Составьте свое резюме.

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

Ваше резюме - это ваша визитная карточка. Это первое впечатление компании о вас.

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

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

5. Общайтесь раньше и общайтесь чаще.

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

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

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

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

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

Что это означает во время сеанса программирования

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

6. [Extra] Используйте абстракцию

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

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

Что это означает в сеансе кодирования

Давайте сравним и сопоставим эти два фрагмента кода:

На мой взгляд, правая сторона выглядит намного чище и легче для понимания. Затем я могу найти время для реализации getNeighbors или isEmpty, в зависимости от того, что от меня требуется.

Здесь важно то, что абстракция теперь помогла сохранить мой код чистым, легким для чтения и легким для понимания. Кто не любит есть свой торт и тоже его съесть?

Почему я хочу поделиться своим опытом?

Каким-то чудом мне удалось преодолеть препятствия и найти работу своей мечты. Это отнюдь не мой способ хвастаться. Это вовсе не мое намерение.

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

Надеюсь, эти советы помогут другому соискателю! Удачи! 👍

Если вам понравилась эта статья, вот еще несколько рекомендуемых статей, которые я написал:

Ресурсы и инструменты, которые я рекомендую

  • Элементы интервью по программированию: отлично подходит для более сложных задач программирования.
  • Cracking The Coding Interview: отлично подходит для освещения основ CS.
  • OneNote: я использую его для хранения всех фрагментов кода.
  • Evernote: для всего остального
  • CodeRunner: я обожаю это приложение для Mac! Я использовал это несколько раз для запуска специальных скриптов / функций Python, и он просто отлично работает. 🔥
  • DailyCodingProblem: это сервис, который ежедневно отправляет вам на электронную почту проблемы с кодированием. Используйте мой код купона zhiachong, чтобы получить скидку 10 долларов!
  • CodePath: некоммерческая организация, которая помогает людям подготовиться к карьере в сфере технологий. Натан и Тим - замечательные люди, и я многому у них научился. Сообщество очень полезно, и каждый готов помочь.
  • Тонкие маркеры: принесите их на собеседование. Я их очень рекомендую!

Чжиа Чонг (Zhia Chong) - разработчик программного обеспечения в Twitter. Он работает в группе Ads Measurement в Сиэтле, оценивая эффективность рекламы и рентабельность инвестиций для рекламодателей.

Вы можете найти его в Twitter и LinkedIn.