Я пишу о правде, а не о хитростях и хитростях

Обновление. Следуя приведенному ниже совету, я получил предложения от Google, Microsoft, Amazon, Quantcast и Bloomberg.

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

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

Перестаньте искать советы и рекомендации, это то, что удерживает вас от работы вашей мечты.

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

Статья состоит из трех частей и трех видеороликов, и ее прочтение займет около 30 минут.

  1. Что такое собеседование по кодированию?
  2. Как подготовиться к собеседованию по кодированию?
  3. Как проявить себя во время собеседования по кодированию?

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

Меня зовут Андрей, я занимаюсь конкурентоспособным программированием последние пять лет. Я участвовал во всемирном финале Google HashCode, крупнейшем алгоритмическом соревновании, организованном Google, а до этого я выиграл три золотые медали на компьютерной олимпиаде в Румынии. Имея этот опыт, я опубликовал онлайн-курс Введение в алгоритмы и структуры данных в C ++, который помог более чем 8000 студентам из 135 стран сделать первые шаги в этой области.

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

Что такое собеседование по кодированию?

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

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

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

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

Как подготовиться к собеседованию по кодированию?

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

Одним словом, это тяжелая работа.

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

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

Собеседование по программированию - это борьба с самим собой, и единственный способ победить в ней - много практиковаться.

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

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

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

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

2) Массивы. На этом этапе вы должны быть знакомы с концепцией массивов. В этом разделе рассматриваются проблемы, в которых массив используется только для хранения, а решение включает в себя базовые методы, такие как итерация с двумя указателями. Классическая проблема - проверить, является ли данный массив перестановкой.

3) Строки. Знайте, как манипулировать строкой на вашем языке, и познакомьтесь с задачами, которые просят вас объединить или повернуть их.

4) Связанные списки. Часто во время собеседования можно встретить проблему со связным списком. Здесь нужно уделить особое внимание угловым шкафам. Подумайте, что будет, если связанный список пуст? Или в нем всего один элемент? Или вы хотите перебирать до последнего элемента? Решая проблему со связанными списками, дважды подумайте над крайними случаями.

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

6) Стеки. Знайте, что вы можете управлять только одним концом стека. Решите эту задачу: реализуйте стек с API MAX, что означает, что в любой момент вы можете спрашивать, какой максимальный элемент в стеке.

7) Очереди: не путайте их со стопками, потому что у них два конца. Реализуйте классическую задачу моделирования очереди с использованием двух стеков.

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

9) Примитивные типы: они в основном связаны с битовыми манипуляциями и базовыми операциями с числами. Однако некоторые проблемы могут оказаться довольно сложными. Как можно посчитать количество единиц в двоичном представлении?

10) Двоичные деревья. Сосредоточьтесь на обходах, общих предках и рекурсивно перебирайте деревья.

11) Кучи: они широко используются в реальных приложениях, так что познакомьтесь с кучей! Практикуйтесь, пока не будете уверены, когда использовать min-heap или max-heap. Как бы вы распечатали пять самых больших элементов числовой последовательности? Вы используете минимальную кучу или максимальную кучу?

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

13) Сортировка. Убедитесь, что вы можете реализовать сортировку слиянием и быструю сортировку. Очень хорошо знать их лучшие, средние и худшие сложности. Если у вас есть время, также изучите Heapsort.

14) Двоичные деревья поиска: их часто спрашивают на собеседовании по кодированию, и вам необходимо иметь возможность реализовать все их основные операции, включая удаление элемента!

15) Отслеживание с возвратом. Это в основном означает создание всех возможных решений и принятие тех, которые соответствуют вашим требованиям. Реализуйте генератор набора мощности набора и задачи n-Queen.

16) Графики. Они, вероятно, являются наиболее часто используемой структурой данных в информатике. Знаете ли вы, что каждая социальная сеть - это просто огромный граф? Практикуйтесь в создании копии графика в памяти и обнаружении циклов в графиках.

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

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

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

Как проявить себя на собеседовании по кодированию?

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

1) Введение

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

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

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

1) «Я работал над веб-приложением, чтобы лучше управлять пациентами в больницах. Я написал бэкэнд на Node.js. »

То, как вы себя представляете, действительно имеет значение

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

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

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

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

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

Вы должны рассказать о своем проекте одну-две минуты.

2) Разберитесь в проблеме

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

3) Найдите решение

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

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

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

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

Мораль здесь проста:

Чем больше вы практикуетесь, тем быстрее найдете оптимальные решения

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

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

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

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

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

4) Закодируйте решение

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

Теперь, переходя к самой кодировке, я хочу вам кое-что сказать.

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

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

Причина проста: он не знает, что вы кодируете, если вы не объясняете. Так что упростите его работу и говорите, пока пишете код.

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

После того, как вы закончили кодирование, высока вероятность, что вы пропустили ошибку. Это вообще не проблема! Ваша задача - исправить код самостоятельно. Итак, скажите интервьюеру: «Я только что закончил кодирование. Могу я взглянуть на код, чтобы убедиться, что нет ошибок? ». Он с радостью говорил: «Да, давайте пройдемся по вашему коду».

Затем вы проводите его по каждой строчке кода и снова объясняете, что там происходит. Если вы видите ошибку, сообщите об этом! Не делайте вид, что код идеален, вы просто навредите себе! Поэтому просто скажите: «Я вижу, что это ошибка. Вот решение для ее решения… », и вы вносите изменения.

В конце концов, вы должны прийти к оптимальному решению, которое работает и не содержит ошибок

5) Задавайте вопросы

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

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

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

Вы можете спросить: «Как вам культура компании?» или «Что вам больше всего нравится в вашей работе? или "Как прошла ваша первая неделя здесь?" или «Вы можете выбрать, над каким проектом работать?» или «Какой проект вы обычно даете стажерам?». Вы можете спросить что угодно о компании и его работе.

Задавайте вопросы в конце! Не пропускайте их

Наконец-то

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

Считали этот пост полезным? Пожалуйста, нажмите кнопку ❤ ниже! :)

Об авторе: Андрей Маргелой - увлеченный программист, интересующийся предпринимательством, стартапами и историей. Вы можете связаться с ним в LinkedIn или Facebook.