Рубрики
Без рубрики

Как проверить интервью. Конечный гид.

Эта статья была первоначально опубликована в моем блоге www.yourdevopsguy.com. Почему ты должен читать … Tagged с карьерой, начинающими, SQL, Python.

Эта статья была первоначально опубликована в моем блоге www.yourdevopsguy.com Анкет

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

Получение работы в компании FAANG (Facebook, Amazon, Apple, Netflix, Google) может предоставить вам, среди прочего, следующие преимущества:

  • Большая компенсация
  • Фантастическая рабочая среда
  • Сложная работа
  • Умные коллеги
  • Впечатляющее резюме

Я сделал это, и я могу сказать вам, что это того стоит.

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

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

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

Не быть в компании FAANG (Facebook, Amazon, Apple, Netflix, Google), не означает, что вы не являетесь большим разработчиком. Это только означает, что вы еще не преодолели интервью. Продолжайте читать, если вы хотите получить пошаговое руководство о том, как подготовиться, чтобы получить эту работу.

Контур

Это то, что я расскажу в этой статье:

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

Мышление

Разработчики в FAANG Companies не боги. Это обычные люди, которые проходили тот же процесс, что и вы, с их собственными проблемами и неуверенностью. Они также страдали от синдрома самозванца – вероятно, все еще делают это. Не кладите их на пьедестал. Имейте это в виду всегда, особенно когда вы получаете работу.

Я встретил интервьюеров, которые любили мучить кандидатов. Некоторые интервьюеры, которые не будут нанимать некоторых своих товарищей по команде. К счастью, они меньшинство, но вы можете столкнуться с одним из них во время своего набора интервью. Единственная умная вещь, которую нужно сделать, это сосредоточиться на том, что вы можете контролировать: ваша подготовка. Сосредоточиться на процессе. Если вы готовитесь хорошо и настойчивы, это будет вопросом времени, прежде чем вы получите желаемую работу. Оказавшись там, будет легко перейти в другую компанию, если вам это нравится. У вас будет 4, 5 или 6 раундов проблем, которые помогут вам, если вы потерпите неудачу в одном – или найдете одного из психологических интервьюеров, о которых я говорил ранее. Вы можете подчеркнуть в одном из раундов и при этом получить работу.

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

  • Что прошло хорошо?
  • Где мне нужно улучшить?

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

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

Люди в конце концов оставляют эти компании, будь то после 1, 2, 3 или 5 лет. Это не рай, просто еще одна работа, но это то, чему я не могу научить вас. Вы должны увидеть это сами.

Как практиковать

Подражать настройке интервью

Постарайтесь сделать свои практические занятия как можно более похожими на фактическое интервью. Это включает:

Время самостоятельно

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

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

Нет отвлекающих факторов

Приключить свой телефон. Нет музыки. Без интернета. Вы хотите, чтобы ваши тренировочные занятия были максимально реалистичными.

Если вы застряли, продолжайте пытаться. Не сдавайся.

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

Думай вслух

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

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

Разверните свой набор инструментов

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

Например, вот хитрость, чтобы пройти через всех соседей (горизонтально и вертикально) ячейки в матрице с координатами (ряд, col):

const vector> dirs = {{1,0}, {-1,0}, {0, 1}, {0, -1}};
for (const auto& d:dirs) {
  const nextRow = row + d[0];
  const nextCol = col + d[1];

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

Вести журнал общих ошибок ты делаешь

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

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

Итерации

Насколько я вижу, во время вашей подготовки есть два этапа.

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

Этап 1

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

  • Какой алгоритм и/или структура данных хороши для этого типа проблемы?
  • Почему?
  • Почему этот другой подход хуже или неправильный?
  • Какова сложность времени и пространства этого подхода?
  • Могу ли я обменять время на космос?

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

На этом этапе я не пишу код. Я просто делаю все, что делаю, прежде чем начать писать код:

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

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

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

Этап 2

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

  • Не используйте свою IDE. Во время интервью у вас этого не будет. Это будет либо доска, либо общий онлайн -документ. Убедитесь, что вы понимаете формат интервью, чтобы вы могли сосредоточиться
  • Если вам нужно написать код на доске, я бы порекомендовал решить некоторые проблемы в бумаге Когда вы приближаетесь к интервью Анкет Написание на доске отличается от ввода на клавиатуре. Это навык, который вы захотите попрактиковаться.

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

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

Технологические знания

То, что вы должны знать

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

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

Теоретически и как их использовать в коде

  • Массивы
  • Строки
  • Списки
  • Стеки и очереди
  • Деревья (и пытаются)
  • Деревья бинарного поиска (сбалансированные)
  • Хэш -таблицы
  • Наборы (Discoint Sets тоже, если можете)
  • Графики

Алгоритмы

  • Бинарный поиск
  • Сортировка
  • Рекурсия
  • Разделите и победите
  • Динамическое программирование
  • Жадный
  • Алгоритмы на строках

На графиках (очень важно):

  • DFS
  • BFS
  • Минимальные охватывающие деревья: Крускал и Прима
  • Краткий путь: Dijkstra и Floyd-Warshall

Некоторая дискретная математика тоже может помочь.

Языки программирования

Я всегда использовал C ++, но следующее хорошо для интервью:

  • Питон
  • JavaScript
  • Ява

Поскольку большинство интервьюеров их знают. Большинство кандидатов имеют тенденцию идти на Python. Что бы вы ни выбрали, убедитесь, что вы хорошо это знаете.

Больше ресурсов

MIT курсы по алгоритмам

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

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

Введение в алгоритмы

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

Взломать интервью для кодирования.

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

Элементы программирования интервью

Это отличная книга. Я продолжаю возвращаться к нему перед каждым интервью. Вопросы сложны, поэтому вы будете очень хорошо подготовлены. Есть версии C ++, Python и Java.

Для большего количества проблем я использовал только https://www.leetcode.com Анкет У вас будет более чем достаточно со свободными проблемами.

Ошибки, чтобы избежать

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

1. Не готовясь

Да. Люди остаются неподготовленными. Я видел много людей пустыми во время интервью. Мне пришлось вырезать интервью через 20 минут. Это происходит больше, чем вы думаете.

Как и напоминание, вы должны быть хорошими в следующем:

  • Алгоритмы
  • Структуры данных
  • Язык (ы) по вашему выбору
  • CS Основы

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

2. Не сообщая, что вы думаете

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

3. Не задавая разъясняющих вопросов

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

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

4. Решение неправильной проблемы

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

5. Трата времени

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

6. Не тестирование вашего кода

Это огромный красный флаг, поэтому убедитесь, что вы здесь не терпите неудачу. Придумайте несколько тестовых случаев (нет необходимости писать фактический код):

  • “Счастливого пути”
  • Крайные случаи
  • Пустой/нулевой вход
  • Повторные элементы

7. Не отлаживая это

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

8. Плохой анализ времени и пространства

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

9. Собираясь к оптимальному решению

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

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

10. Недостаточно свободно владеет вами на выборе

Обычно вы можете забрать нужный язык программирования для интервью. Если вы говорите, что можете кодировать в Python, JavaScript или Java, убедитесь, что вам не нужно 3 минуты, чтобы написать цикл (я видел это много раз). Это не конец света, если вы забудете подробности API или полуколон.

11. Крайные случаи

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

12. Низкокачественный код

Напишите чистый код. Не только для интервью. Хорошее именование, короткие функции, которые выполняют одну вещь и т. Д. Читайте «Код завершен» Стива Макконнелла. Это повысит качество вашего кода.

13. “Взломать” ошибки

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

14. Прыгая прямо в код

Сделать Не Прыгните прямо в написание кода.

  1. Решите проблему «вручную».
  2. Объясните свое решение
  3. Проанализировать это (в большом о)
  4. Найдите узкие места и постарайтесь придумать что -то более эффективное

После всего этого вы можете начать кодирование.

15. Недостаточно хорошо управлять пространством

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

16. Просить отзывы в конце

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

Примеры

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

Пример 1

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

Это очень простая проблема, но достаточно, чтобы сосредоточиться на процессе. Вещи, которые приходят на ум:

  • Вход – это Массив целых чисел а Это отсортировано? b. Что если он содержит повторные элементы? c. Что если он содержит отрицательные элементы? d. Что если все элементы отрицательны/положительны? е – Что если массив пуст? фланг Насколько это велико?
  • Возврат Индексы a. Что если нет решения? b. Что если есть несколько решений?

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

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

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

Обычно сортировка и хэш -таблицы могут упростить многие проблемы. Это одна из них.

Вы можете найти решение Здесь Анкет

Пример 2

Учитывая двухмерную сетку карты ‘1 (земля) и’ 0 (вода), подсчитайте количество островов. Остров окружен водой и образуется путем соединения соседних земель горизонтально или вертикально. Вы можете предположить, что все четыре края сети все окружены водой.

Мысли:

Счет количество островов. Мне нужен счетчик (очевидно)

2D сетка карта:

  • Могу ли я моделировать это как график? Я знаю BFS и DFS
  • Острова соединены горизонтально (та же строка) или вертикально (тот же столбец), а не по диагонали
  • Я могу посетить остров только один раз, поэтому мне нужен какой -то механизм, чтобы не подсчитать один и тот же остров дважды. Например, измените «1 на» 0 (будь то в матрице, которую мы получаем, или в копии, которую мы создаем, если не можем изменить вход) или хэш -набор, где вы храните пару индексов, которые определяют посещаемые ячейки. Я бы выбрал первый вариант, но второй – это хорошо знать, так как его можно использовать в других проблемах.

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

Убедитесь, что вы рассмотрите случай пустой матрицы, матрицу, полной «0» – Zero Islands-, полной «1» – всего лишь 1 островов и других тестовых случаев. Что произойдет, если вы видите «2», когда сканируете матрицу? Это также то, что для обсуждения с вашим интервьюером, как и любое другое предположение. В случае сомнения, лучше переоценить ваши мысли.

Вы можете найти решение Здесь Анкет

Вывод

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

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

PS: Надеюсь, вы нашли это полезным. Если так, например, и поделитесь этой статьей, посетите мой блог www.yourdevopsguy.com и давайте подключимся к Twitter Анкет

Оригинал: “https://dev.to/codinglanguages/how-to-ace-coding-interviews-the-ultimate-guide-5567”