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

Почему это так сложно и отличается от реальной работы?

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

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

1. Интервью по программированию в прямом эфире

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

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

После этого я бы рекомендовал рассмотреть различные алгоритмы и структуры данных. Возможно, вы слышали о знаменитой книге интервью Cracking the Coding. Здесь собран список хороших релевантных структур данных и алгоритмов, а также их приложений. Основываясь на частоте, я обнаружил, что компании предпочитают вопросы, связанные с Hashmap/Hashtable, поэтому убедитесь, что вы знаете, как это работает. В противном случае обязательно узнайте о рекурсии и поиске BFS/DFS с точки зрения кодирования.

Практикуйте Литкод. Как только вы убедитесь, что знаете о структурах данных и алгоритмах и о том, как писать их на предпочитаемом вами языке, зайдите на веб-сайт Leetcode и потренируйтесь на как можно большем количестве задач. Обычно достаточно выполнить 20 простых задач, 15 задач среднего уровня и 1–2 сложных, но вы должны убедиться, что действительно понимаете их, а не просто смотрите на решение. Эта практика позволит вам начать видеть шаблоны в вопросах и поможет вам узнать во время интервью, какой алгоритм или структуру данных выбрать.

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

2. Интервью по проектированию системы

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

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

Вы должны знать свои базы данных и сервисные технологии. Узнайте о преимуществах SQL по сравнению с NoSQL, когда вы будете использовать один над другим. Поймите, как лучше всего структурировать базу данных, сможет ли база данных справиться с нагрузкой в ​​секунду для службы, нужна ли вам реляционная модель для вашего проекта и помогут ли вам свойства ACID. Существует также дизайн API, если применимо, какой метод HTTP вы будете использовать и какая служба будет размещать какой API. Затем вы можете начать рассматривать общую архитектуру этого с помощью диаграмм, где будет находиться служба, как она будет взаимодействовать с базой данных и интерфейсной службой. Здесь вы можете поговорить о масштабируемости, о том, как ваш сервис будет масштабироваться и обрабатывать асинхронные запросы, если вы добавите балансировку нагрузки, будет ли какое-то хранилище лучше в кеше, будете ли вы делать репликацию базы данных и если да, то почему или почему нет и т.д.

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

3. Поведенческое интервью

Это собеседование есть не в каждой организации, но все же распространено. Амазонки довольно известны этим интервью. Основное внимание в этом интервью уделяется знанию принципов компании, в которую вы подаете заявление (или, в случае с Amazon, принципам лидерства). Вы должны исследовать саму компанию и знать, каковы ее ценности. Обычно вам задают вопрос о ситуации, например. «Расскажите мне о случае, когда вам пришлось столкнуться с конфликтом на работе или в любом проекте, над которым вы работали», и ключ в том, чтобы сопоставить ваш ответ с их ценностями и правильно все объяснить. Для этого я бы рекомендовал изучить метод STAR, который состоит из ситуации, задачи, действия и результата. Чтобы подготовиться к этому, я искал список общих поведенческих вопросов, выписывал их, а затем для каждого из них использовал этот метод STAR, чтобы написать одну или две строки для каждого шага, так что одна или две строки о ситуации, задаче , действие и результат каждого. Хорошо, если это немного дольше, чем это, но не слишком долго. Ваша цель должна быть краткой в ​​вашем объяснении и гарантировать, что вы донесете, в чем была проблема и какова была ваша роль в этой ситуации.

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

4. Пройти домашний тест

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

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

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

Заключение

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