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

1. Подготовка к поведенческим вопросам

Ладно, на самом деле это не техническая концепция. Но это стоит упомянуть, потому что страх перед технической частью интервью может привести к пренебрежению поведенческими вопросами, которые не менее важны. Поведенческие вопросы — это типичные вопросы, из которых состоят типичные собеседования для работы, не связанной с программированием, например: Каковы ваши сильные стороны?. Они помогают интервьюеру оценить ваши навыки межличностного общения, такие как сотрудничество, а также вашу пригодность для компании. Если вы хорошо пройдёте эту часть собеседования, вы сможете выделиться среди других соискателей, а также наладить контакт с интервьюером. Существует множество ресурсов, которые объясняют, как пройти ваше поведенческое интервью, например, этот.

2. Алгоритмическая сложность

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

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

3. Массивы

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

4. Сортировка и поиск

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

Сортировка данных в решении может значительно повысить эффективность вашей программы по времени. Таким образом, важно понимать, где использовать сортировку. Также важно знать, есть ли в вашем языке программирования встроенные функции сортировки, и как их использовать. Если нет, знание одного алгоритма сортировки O[n*logn] может оказаться полезным во время собеседования.

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

5. Стеки и очереди

Стеки и очереди также являются двумя полезными структурами данных, которые нужно знать. Стек — это структура данных, в которой элементы, добавляемые в него, следуют схеме «первым пришел — последним вышел» — как и в случае стопки тарелок, первый элемент, добавленный в стек, также будет последним извлекаемым. Очереди, с другой стороны, следуют схеме «первым пришел – первым обслужен», где первый элемент, добавленный в очередь, также будет первым извлеченным элементом. Эффективное решение некоторых проблем зависит от них, поэтому их просмотр позволит вам определить, когда и где они могут понадобиться. Вы также должны знать, как стеки и очереди реализованы в выбранном вами языке программирования. Они не только помогут вам в ваших решениях по кодированию, но также могут помочь улучшить ваше понимание того, как кодирование и компьютеры работают (например, рекурсивные вызовы функции представлены в виде стеков на вашем компьютере).

6. Хэш-таблицы и карты

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

7. Ресурсы для практики

Мы закончили изучение самых основ того, что вы должны знать для своего первого собеседования по программированию. Для того, чтобы привыкнуть к ним, чтобы эффективно использовать их в реальных, срочных интервью, неизбежно потребуется практика. Такие платформы, как Leetcode и Hackerrank, предоставляют программистам тренировочные задачи, аналогичные или такие же, как и на собеседованиях, поэтому регулярное использование этих сайтов может помочь вам подготовиться и повысить уровень ваших способностей к решению проблем. Если вам нужны дополнительные рекомендации о том, как решать проблемы на собеседовании, вы также можете прочитать Cracking the Coding Interview Гейл Лаакманн Макдауэлл, где автор описывает и объясняет распространенные проблемы.

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