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

Привет, ребята, нет никаких сомнений в том, что взломать собеседование на должность программиста непросто, и еще сложнее, если вы хотите взломать собеседования по программированию технологических компаний, таких как Google, Microsoft и Amazon, но вы все равно можете взломать его, тщательно спланировав и подготовив основные темы, которые имеют наибольшее значение, такие как Структуры данных и алгоритмы, Дизайн системы, Многопоточность и параллелизм, Дизайн SQL и баз данных, ООП, концепции Linux, Компьютерные сети и, конечно же, работа над вашей проблемой- навыки решения.

Как автор блога Java и программирование, я часто получаю вопросы о том, как подготовиться к собеседованию по программированию? Как пройти собеседование с разработчиками программного обеспечения Google или Microsoft? Или как могу ли я получить работу по разработке программного обеспечения на Amazon или Facebook?

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

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

На самом деле, подготовка к таким техническим гигантам, как Google, Amazon, Apple и Facebook, означает, что вы на много миль впереди других кандидатов, и вы, скорее всего, получите множество предложений о работе от небольших фирм, стартапов и инвестиционных банков.

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

Еще одна важная вещь, которую следует отметить, - это то, что для разных собеседований требуются разные навыки. Например, когда вы идете на собеседование с Java-разработчиком, вы обязательно должны знать Java. Точно так же для собеседования с разработчиком Python ожидается, что вы знакомы с Python и некоторыми популярными фреймворками Python, такими как Django и Flask.

Для веб-разработчика: HTML, CSS и JavaScript - это базовые навыки, и вы будете обучены им, помимо современных фреймворков веб-разработки, таких как Angular, React и Vue.js, а также немного node.js. < br />
Я не буду касаться этой темы, но я поделюсь основными навыками, необходимыми для прохождения всех этих собеседований. Они также известны как основные навыки программирования, и от каждого разработчика программного обеспечения требуется знать это.

10 тем, которые вы должны подготовить к собеседованию по программированию и программированию

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

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

Как программист, это нормально, если вы не можете писать веб-приложения с помощью Django или React, но не нормально, если вы не знаете, как работает хеш-таблица и когда использовать список над массивом? И, какие преимущества предлагает B-Tree по сравнению с массивом? Структура данных и алгоритмы являются ядром информатики и программирования, и от каждого разработчика программного обеспечения ожидается, что он имеет твердые знания в области фундаментальной структуры данных. < br />
Крайне важно хорошо понимать структуру данных для написания надежного, производительного приложения, которое оценят ваши пользователи. Представьте, если Facebook или Google потратят 1 минуту, чтобы войти в систему, вы никогда не попадете туда, забыв, насколько они важны. Производительность имеет решающее значение, и если вы не поймете, как работает ваша программа и как хранятся ваши данные, вы никуда не пойдете.

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

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

Как минимум, вы должны знать о массиве, связанном списке, двоичных деревьях, двоичном дереве поиска, самоуравновешенных деревьях, таких как дерево AVL, хеш-таблица (или карта или словари, известные в Java и Python). стек, очередь и граф.

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

Если вам нужен ресурс для ускорения работы, я предлагаю вам выбрать курс структуры данных, где примеры показаны на языке вам удобнее всего. Разработчикам Java я рекомендую Структура данных и алгоритмы: глубокое погружение в Java, а разработчикам Python я рекомендую курс Алгоритмы и структура данных в Python на Udemy. Вы можете ознакомиться с этим курсом здесь.

2. Алгоритмы

Хотя важно знать основную структуру данных, такую ​​как массив, связанный список и tres, не менее важно научиться работать с этими структурами данных. Если вы не знаете разницы между алгоритмами линейного и двоичного поиска и не знаете, что значит запускать в O(log n) в отличие от O(n²), вам нужно потратить некоторое время на изучение алгоритмов.

Часто это может быть разница между точно настроенным приложением и медленным, дрянным процессом, который больше зависает, чем работает. Как минимум, вы должны знать об алгоритмах сортировки, таких как quicksort, mergesort, heapsort и т. Д., Алгоритмах поиска, таких как двоичный поиск, и некоторых алгоритмах графов, таких как алгоритмы быстрого поиска маршрута, которые являются основой многих доставок и такси. -hailing приложений, таких как Uber, Grab и Ola.

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

Я настоятельно рекомендую вам тщательно подготовиться к этой теме. Если вам нужен ресурс, наиболее рекомендуемый ресурс - Введение в алгоритмы Томаса Х. Кормена, но он не для слабонервных. Для менее пугающего входа я бы порекомендовал книгу Поисковые алгоритмы Адитьи Бхаргавы и курс Алгоритмы на Coursera.

3. Дизайн системы

Это еще одна важная тема, которую вам нужно хорошо подготовить к собеседованию при приеме на работу программиста, особенно в таких крупных технологических компаниях, как Google, Microsoft, Amazon и Facebook. Вам нужно иметь представление о том, как разработать решение от архитектуры до кодирования.

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

Вот несколько основных концепций проектирования системы, которые вам следует знать:

  1. Балансировка нагрузки
  2. Кеширование
  3. Разделение данных
  4. Индексы
  5. Прокси
  6. Резервирование и репликация
  7. SQL против NoSQL
  8. Распределенные системы

На низком уровне он охватывает объектно-ориентированное программирование и дизайн, в которых говорится о проектировании ваших классов и их взаимосвязей, следовании передовым методам кодирования и принципам проектирования программного обеспечения, таким как SOLID.

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

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

4. Многопоточность и параллелизм

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

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

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

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

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

Если вам нужны ресурсы, я настоятельно рекомендую вам проверить Вопросы на собеседовании по многопоточности и параллелизму автор: CH Афзал по образовательной. Этот курс содержит наиболее распространенные вопросы собеседований по параллелизму, которые решаются на Python, Java, C # и Ruby. Ответ на эти вопросы даст вам хорошее представление о параллелизме и многопоточности.

5. Проектирование баз данных и SQL

Как разработчику программного обеспечения, работа с реляционной базой данных - это критически важный навык, который вам понадобится, и он останется с вами независимо от того, где вы находитесь в своей карьере. Каждая компания, от маленькой до крупной, использует СУБД, поэтому вполне вероятно, что вы столкнетесь с разными моделями данных, базами данных типа so (NoSQL и SQL) и зависимостями от разных компаний.

Знание как структурировать данные в СУБД очень важно. Следует ли использовать модель сущность-связь (ER)? Иерархическая модель? Архитектура с тремя схемами?

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

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

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

Вы также познакомитесь с такой техникой, как нормализация, которая поможет повысить эффективность базы данных и избежать дублирования. Я также предлагаю вам пройти курс, посвященный SQL, например The Complete SQL BootCamp Хосе Портилла на Udemy, поскольку запросы SQL также являются неотъемлемой частью собеседований по кодированию наряду с проектированием базы данных.



Я также предлагаю прочитать книгу Маркуса Винанда Объяснение производительности SQL, чтобы лучше понять, как в целом работает SQL-запрос.

6. Команды и концепции Linux

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

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

Как минимум, вы знаете, как находить файлы в Linux, как проверять статус процесса, писать простые сценарии bash, находить процесс и уничтожать его. Также важны такие понятия, как загрузка Linux, концепции файлов и каталогов, разрешений и т. Д.

Если вы работали в Linux, вы можете легко ответить на такие вопросы, но если вам нужен курс повышения квалификации, я рекомендую вам присоединиться к курсу Мастерство в Linux: освоить командную строку Linux за 11,5 часов на Удеми. Это отличный увлекательный курс, позволяющий быстро изучить основные команды Linux.

7. Основы информатики

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

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

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

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

8. Компьютерные сети

Помимо основ информатики, вы можете хорошо подготовить еще одну тему - компьютерные сети. Как минимум, вы должны знать об основных протоколах, таких как HTTP, FTP, SSH, TCP, UDP и т. Д.

Вот темы, которые вы можете подготовить в компьютерных сетях:

  • Как работают компьютерные сети
  • Сетевые топологии
  • Сетевые устройства и кабели
  • Модели OSI и TCP / IP
  • IP-адресация и подсети
  • Коммутаторы и маршрутизаторы
  • Беспроводная сеть
  • Сетевая безопасность
  • Процесс планирования и проектирования сети

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

9. Объектно-ориентированное программирование [концепции ООП]

Концепции объектно-ориентированного программирования, также известные как концепция ООП, - еще одна важная тема, которую вы должны подготовить к собеседованию при приеме на работу. По крайней мере, вы должны быть знакомы со строительными блоками ООП, такими как

  1. Абстракция
  2. Полиморфизм
  3. Инкапсуляция
  4. Наследование
  5. Состав
  6. Класс и объект

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

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

Если вам нужны ресурсы для объектно-ориентированного проектирования и анализа, я рекомендую книгу Head First Object-Oriented Design, чтобы изучить основы, и курс Grokking the Object-Oriented Interviews на тему Образовательные для некоторой практики. .

Я порекомендовал пару образовательных курсов для этой статьи, так как они действительно хороши для собеседований по программированию. Вы можете купить их по отдельности или рассмотреть возможность получения Образовательной подписки, которая предоставляет доступ ко всем их более чем 100 интерактивным курсам всего за 14,9 долларов США. Это лучшее вложение, которое вы можете сделать для вы подготовка к собеседованию по кодированию.



Неограниченное образование: будьте впереди всех
Мы услышали ваш отзыв. Теперь вы можете заплатить всего один раз и получить полный доступ ко всем курсам на Educative. www.educative.io »



10. Динамическое программирование.

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

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

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

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

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

10. AWS, Docker и Kubernetes [бонусные темы]

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

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

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

Для AWS , Я предлагаю вам иметь как минимум сертификацию AWS Cloud Practitioner, чтобы продемонстрировать необходимые навыки работы с облачными технологиями, а если вы предпочитаете Microsoft Azure, то Azure Fundamentals (AZ-900 ) - отличная сертификация для начала.

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

Kubernetes - это инструмент оркестровки контейнеров, что означает, что он может использовать контейнеры диспетчера в любом масштабе. Развернуть несколько устройств и управлять ими легко, но когда вам нужно развернуть сотни контейнеров для вашего приложения для рекламного мероприятия, такого как Amazon Prime Sale, а затем нужно отключить его, как только трафик вернется в нормальное состояние, это непросто. Kubernetes может сделать это за вас и обеспечить автоматизацию и душевное спокойствие.

Хотя и Docker, и Kubernetes не являются обязательными навыками для программиста, но определенно необходимы с точки зрения работы. Я рекомендую каждому разработчику программного обеспечения или начинающему программисту изучить Docker и Kubernetes, и если вам нужен ресурс, онлайн-курс Стивена Грайдера Docker и Kubernetes: The Complete Guide на Udemy станет отличной отправной точкой.

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

Другие статьи по программированию и Java, которые вы можете нравится

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

Если у вас есть какие-либо вопросы или отзывы, напишите нам.

P. С. - Если вы нацелены на компании FAANG (Facebook, Amazon, Apple, NetFlix и Google), то я также предлагаю вам присоединиться к интервью Master the Coding Interview: Big Tech (FAANG) Interviews курс Андрея Нэагои в ZTM Academy. Интервью FAANG сложнее всего взломать, и этот курс является ценным ресурсом для взлома интервью FAANG.