Введение

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

Доступность рабочих мест в технологическом секторе продолжает расти быстрыми темпами, несмотря на пандемию COVID-19 и другие факторы, влияющие на глобальную арену. По данным Business Insider, в технологической отрасли ощущается острая нехватка специалистов. Примеры таких навыков включают в себя инженеров, которые: умеют создавать пользовательские интерфейсы, обладают естественными способностями к созданию масштабируемых серверных сервисов или могут автоматически предоставлять инфраструктуру для крупномасштабных приложений. Если это кажется вам интересным, сейчас самое время поднять свою карьеру на новый уровень!

Предисловие

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

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

Вы тот, кто обладает ценным набором навыков, которые нужны компаниям, и вы тот, кто все контролирует.

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

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

PS: я могу использовать термины разработчик/разработчик/инженер/[добавьте модное слово здесь] взаимозаменяемо. Кроме того, я изо всех сил стараюсь воздерживаться от конкретных советов по фреймворку/библиотеке, поскольку это руководство служит фундаментальной базой, которую может использовать любой инженер, например. мобильный, полный стек, интерфейс и сервер.

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

Целевая аудитория

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

Мотивация

Я хочу, чтобы вы задумались над тем, почему вы читаете эту статью.

Почему вы ищете свою следующую роль?

Почему вы хотите стать лучшим инженером?

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

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

  1. Подача заявки на работу
  2. Интервью

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

Вам нужно будет шлифовать. Под усердием я подразумеваю усердно учиться.

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

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

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

Предполагая, что вы работаете полный рабочий день, я бы порекомендовал уделить себе около 4–6 месяцев самостоятельного изучения перед финальной игрой (Интервью).

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

Полное руководство из 6 шагов:

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

Шаг 1. Выберите язык программирования

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

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

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

Шаг 2. Изучение

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

Шаг 3. Основные структуры данных и алгоритмы

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

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

  1. Посмотрите видео о нотации Big O, сложности времени и пространства.
  2. Посмотрите несколько видеороликов о том, как работает память в вычислениях, например. когда вы создаете переменную, как она сохраняется в памяти? что на самом деле происходит за кулисами?
  3. Практикуйте алгоритмы кодирования, используя выбранный вами язык. Хотя такие книги, как Cracking the Coding Interview, отлично подходят для обучения, я предпочитаю иметь возможность набирать код, запускать его и получать мгновенную обратную связь. Существуют различные онлайн-платформы, такие как LeetCode, HackerRank и CodeForces, чтобы вы могли практиковаться в вопросах онлайн и привыкать к языку. По опыту, вопросы LeetCode больше всего похожи на вопросы, которые задают на собеседованиях, тогда как вопросы HackerRank и CodeForces напоминают вопросы о соревновательном программировании. Если вы практикуете достаточное количество вопросов LeetCode, есть большая вероятность, что вы уже видели/задавали свой реальный вопрос для интервью (или какой-то его вариант) раньше.
  4. План. План. План. При работе над любой проблемой кодирования, будь то работа или собеседование, всегда думайте о входных и выходных данных, а затем о процессах, необходимых для получения результата, то есть никогда не погружайтесь прямо в написание кода, не имея плана/идеи.

Шаг 3. Разработка мастер-систем

На собеседовании по проектированию системы интервьюеры обычно просят кандидатов разработать крупномасштабное приложение, которое потенциально может иметь миллионы пользователей/запросов. Например, они могут попросить вас спроектировать Monzo, спроектировать Netflix, спроектировать Trainline, спроектировать GoogleDrive и т. д.

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

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

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

Чтобы иметь большие шансы на это, вы должны изучить системный дизайн от systemsexpert.io.

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

Шаг 4. Изучите приведенные ниже темы

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

  • Структуры данных и алгоритмы
  • Системный дизайн
  • Концепции JavaScript: обратные вызовы, промисы, async/await, var/const/let (как они на самом деле работают и различия), IIFE, filter/map/reduce.
  • Функциональное программирование
  • Объектно-ориентированное программирование
  • Принципы SOLID
  • Обозначение Big-O и анализ сложности
  • API:HTTP, REST API, GraphQL и REST, микросервисы и монолит.
  • Модель OSI: концептуальная структура, используемая для описания функций сетевой системы.
  • Аджайл против водопада
  • Концепции облака: DevOps, IaC, CI/CD, Pipelines, AWS/GCP/Azure
  • Тестирование: убедитесь, что у вас есть возможность писать полноценные тесты на выбранном вами языке. Ознакомьтесь со следующим: различные типы тестирования (модульные, интеграционные, системные тесты, контрактные тесты, тестирование API, тестирование производительности, регрессионное тестирование), жизненный цикл разработки тестов, выполнение текста, разработка тестовых случаев, планирование тестирования.
  • Среды развертывания: например. разработка, тестирование, подготовка, производство
  • Как вы переносите функции из требований в производство?

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

Шаг 5. Создайте свое присутствие в Интернете

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

  • Поделиться личными проектами на GitHub
  • Общайтесь в LinkedIn с полезными связями
  • Документируйте процесс обучения на Medium

Шаг 6: Поведенческое интервью

Поведенческое интервью — это метод, который оценивает способность кандидата соответствовать требованиям работы на основе его предыдущего опыта.

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

Типичные темы/вопросы, которые могут возникнуть на этом этапе:

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

Заключение

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

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

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

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

Технический сектор повсеместен, и люди жалуются на сложный процесс собеседования. При этом меритократический характер этого сектора означает, что человек без высшего образования и связей может получить работу в таких компаниях, как Google, Uber, Monzo, Trainline, Skyscanner, Amazon и других.

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

Удачи!

Ресурсы:

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

Проекты:

  1. Проекты React через abdirahmancodes (рекомендуется БЕСПЛАТНО): https://www.instagram.com/p/CNDsDSUHrxB/?utm_medium=share_sheet
  2. Идея: создать полнофункциональное приложение, поместить его в контейнер с помощью Docker, а затем развернуть на EKS, GKE, AKS, Minikube или K3d.

Книги:

  1. Прохождение собеседования по программированию
  2. Дизайн повседневных вещей
  3. Чистый код (рекомендуется)
  4. Прагматичный программист

Структуры данных и алгоритмы:

  1. AlgoExpert (рекомендуется — ПЛАТНО) https://algoexpert.ioЛУЧШИЙ онлайн-курс по структурам данных и алгоритмам. В этом курсе рассматриваются основы структур данных, а затем предлагаются упражнения по программированию, похожие на интервью.
  2. Упражнения по Leetcode (рекомендуется): https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions. Список наиболее распространенных проблем программирования, с которыми вы столкнетесь.
  3. CS Dojo YouTube: https://youtu.be/bum_19loj9A
  4. geeksforgeeks:https://www.geeksforgeeks.org/data-structures/
  5. Ускоренный курс собеседования по алгоритмам и структурам данных(ОПЛАЧИВАЕТСЯ), обучающий курс, который рассчитан на 12 часов.
  6. AlgoMonster, один из самых эффективных способов обучения и практики кодирования интервью.
  7. Собеседование по программированию: структуры данных + алгоритмы на Udemy (ПЛАТНАЯ ИНФОРМАЦИЯ)
  8. DSA Revision — бесплатный 100-страничный PDF-файл с шаблонами вопросов и примерами вопросов

Системный дизайн:

  1. SystemsExpert (рекомендуется ПЛАТНО): https://systemsexpert.io
  2. Гаурав Сен YouTube: https://youtu.be/xpDnVSmNFX0
  3. Интервью по проектированию системы: https://www.youtube.com/watch?v=bUHFg8CZFws

Другие ссылки:

  1. Микросервисы: https://microservices.io/patterns/microservices.html
  2. API / REST API: https://www.redhat.com/en/topics/api/what-is-a-rest-api#whats-an-api
  3. GraphQL: https://graphql.org/
  4. HTTP / Методы HTTP / Коды состояния: https://developer.mozilla.org/en-US/docs/Web/HTTP
  5. Основной запрос клиента/сервера: Что происходит, когда вы вводите «www.cnn.com в браузере?»
  6. Контейнеры: https://www.docker.com/resources/what-container/#:~:text=Containers%20are%20an%20abstraction%20at,isolated%20processes%20in%20user% 20спейс.
  7. Архитектура Docker: https://docs.docker.com/get-started/overview/
  8. Технический документ AWS DevOps: https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/welcome.html
  9. Принципы WDS SOLID: https://www.youtube.com/watch?v=dJQMqNOC4Pc
  10. Обратные вызовы JavaScript, обещания Async Await: https://www.youtube.com/watch?v=PoRJizFvM7s&t=1196s
  11. Введение в JavaScript для функций высшего порядка (FP): https://www.youtube.com/watch?v=rRgD1yVwIvE&t=658s
  12. Реагировать на хук useState(): https://www.youtube.com/watch?v=kkuq0gTGRFQ
  13. Реагировать на хук useEffect():https://www.youtube.com/watch?v=UVhIMwHDS7k
  14. Реакция на пользовательские хуки и хук useRef(): https://www.youtube.com/watch?v=nshyjApIovo
  15. Веб-пакет: https://webpack.js.org/
  16. Создайте свое резюме: https://resume.io или https://flowcv.io