Как взломать интервью по кодированию? Советы, темы и навыки
8 марта 2022 г.Без сомнения, пройти интервью по программированию в ведущих технологических компаниях, таких как Google, Microsoft и Amazon, очень сложно, но вы все равно можете пройти его, тщательно спланировав и подготовив основные навыки, которые наиболее важны, такие как [структуры данных и алгоритмы] (https: //javarevisited.blogspot.com/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html), Системный дизайн, Многопоточность и параллелизм, Дизайн SQL и базы данных и, конечно же, навыки решения проблем.
Будучи автором Java и ведущего блога по программированию, я часто получаю вопросы о том, как подготовиться к собеседованию по кодированию? как пройти собеседование с разработчиком программного обеспечения в Google или Microsoft? или как я могу получить работу по разработке программного обеспечения на Amazon или Фейсбук?
После того, как я ответил многим своим читателям один за другим на Facebook и LinkedIn, я решил составить список основных тем для собеседований по программированию.
Этот список станет хорошим стартом для вашей подготовки к собеседованию в любой технологической компании, такой как Google и Amazon. Однако, даже если вы не ориентируетесь на Google и просто хотите работать разработчиком программного обеспечения, вы все равно можете подготовить эти темы.
На самом деле, подготовка к технологическим гигантам, таким как Google, Amazon, Apple и Facebook, означает, что вы намного опережаете других кандидатов и, скорее всего, получите множество предложений о работе от небольших фирм, стартапов и инвестиционных банков.
Вот почему я предлагаю стремиться к более высокому уровню, потому что даже если вы не получите то, что хотите, вы все равно получите предложения о работе, которые желательны для многих программистов.
Еще одна важная вещь, которую следует отметить, заключается в том, что для разных интервью требуются разные навыки. Например, когда вы идете на собеседование с разработчиком Java, вы обязаны знать Яву. Аналогично, для собеседования с разработчиком Python ожидается, что вы знаете Python и некоторые популярные фреймворки Python, такие как Django и Flask.
Для веб-разработчика HTML, CSS и JavaScript являются основными навыками, и вы будете знать их, помимо современных фреймворков веб-разработки, таких как [Angular] (https://javarevisited.blogspot.com/2018/06/5- best-courses-to-learn-angular.html), React и Vue.js с немного [node.js] (https://medium.com/javarevisited/7-free-courses-to-learn-node-js-in-2020-2f1dd6722b49).
Я не буду касаться этой темы, но поделюсь основными навыками, необходимыми для прохождения всех этих собеседований. Они также известны как основные навыки программирования, и каждый разработчик программного обеспечения должен знать это.
Как подготовиться к собеседованию по кодированию и программированию — темы и навыки
В любом случае, не теряя больше вашего времени, вот мой список тем, которые вы можете подготовить, чтобы повысить свои шансы на собеседованиях по программированию в Google, Amazon и Microsoft.
1. Структура данных
Как программист, это нормально, если вы не можете писать веб-приложения с помощью Django или React,, но это не нормально, если вы не не знаете, как работает хеш-таблица и когда использовать список вместо массива? И какие преимущества предлагает B-Tree по сравнению с массивом? Структура данных и алгоритмы являются основой компьютерных наук и программирования, и ожидается, что каждый разработчик программного обеспечения должен хорошо знать фундаментальную структуру данных.
Крайне важно иметь хорошее представление о структуре данных для написания надежного, производительного приложения, которое оценят ваши пользователи.
Представьте, если Facebook или Google потребуется 1 минута, чтобы войти в систему, вы никогда не зайдете туда, забудьте, насколько они важны. Производительность имеет решающее значение, и пока вы не поймете, как работает ваша программа и как хранятся ваши данные, вы никуда не денетесь.
В технических интервью вас попросят оптимизировать свое решение по времени и пространству. Вы не сможете этого сделать, если у вас нет четкого понимания того, как работает ваш код и как данные хранятся и доступны.
Это, пожалуй, самая важная тема для интервью по программированию, и вы должны хорошо к ней подготовиться. Как минимум, вы должны знать о массиве, связанном списке , бинарные деревья, двоичное дерево поиска, самобалансирующиеся деревья, такие как дерево AVL, хэш-таблица (или карта или словари, известные в Java и Python), стек, очередь и граф.
Вы должны понимать, как хранить элементы этих структур данных и получать к ним доступ, а также понимать связанные с этим вычислительные затраты. У вас также должен быть сравнительный анализ того, когда использовать конкретную структуру данных, например, для более быстрого массива поиска, и лучше хеш-таблицу. Тем не менее, для более быстрого добавления и удаления связанный список лучше массива.
Если вам нужен ресурс, чтобы освоиться, я предлагаю вам выбрать курс по структуре данных, где примеры показаны на языке, который вам наиболее удобен. Разработчикам Java я рекомендую Структура данных и алгоритмы: глубокое погружение в Java, а для программистов Python я рекомендую курс «Алгоритмы и структура данных в Python» на Udemy. Вы можете ознакомиться с этим курсом [здесь] (https://medium.com/javarevisited/top-10-free-data-structure-and-algorithms-courses-for-beginners-best-of-lot-ad807cc55f7a).
2. Алгоритмы
Хотя важно знать основные структуры данных, такие как массив, связанный список и деревья, не менее важно научиться работать с этими структурами данных. Если вы не знаете разницу между алгоритмами линейного поиска и бинарного поиска и что означает выполнение за O(log n), а не за O(n^2), вам нужно потратить некоторое время на изучение алгоритмов.
Это часто может быть разницей между точно настроенным приложением и медленным, дрянным процессом, который больше зависает, чем работает. Как минимум, вы должны знать об алгоритмах сортировки, таких как quicksort, [ сортировка слиянием] (https://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html), сортировка кучей и т. д. алгоритмы поиска, такие как двоичный поиск, и некоторые алгоритмы графов, такие как самый быстрый маршрут- алгоритмы поиска, лежащие в основе многих приложений для доставки и вызова такси, таких как Uber, Grab и Ola.
Вы также должны понимать, как работают библиотечные методы, которые вы используете для сортировки массива, какой алгоритм он использует внутри, и когда другой алгоритм справился бы лучше.
Я настоятельно рекомендую вам тщательно подготовиться к этой теме. Если вам нужен ресурс, наиболее рекомендуемым ресурсом является «[Введение в алгоритмы»] Томаса Х. Кормена (http://www.amazon.com/dp/0072970545/?tag=javamysqlanta-20), но он не для слабонервные. Для менее пугающей записи я бы порекомендовал [Алгоритмы Grokking] (https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230/?tag=javamysqlanta-20) книгу Адитьи Бхаргавы. и курс «Алгоритмы» на Coursera.
[ ] (https://hackernoon.com/grokking-algorithms-book-review-aa4459da93f5)
3. Дизайн системы
Это еще одна важная тема, которую вам нужно хорошо подготовить к собеседованию по программированию, особенно в крупных технологических компаниях, таких как [Google]. работа разработчика программного обеспечения в Google-3d8c83c444d6), Microsoft, Amazon и Facebook. У вас должны быть некоторые идеи о том, как спроектировать ваше решение от архитектуры до кодирования.
Дизайн системы на самом деле очень обширен. На высоком уровне он охватывает такие вещи, как архитектура программного обеспечения, я имею в виду преимущество между монолитной и микросервисной архитектурой и выбор между [NoSQL] (https://javarevisited.blogspot.com/2019/03/top-5-nosql-database). -web-developers-should-learn.html#ixzz64aBvbXQ4) и база данных SQL.
Он охватывает такие вещи, как разработка приложения, способного одновременно обслуживать 10 000 пользователей, а также такие вещи, как масштабируемость.
На низком уровне он охватывает объектно-ориентированное программирование и дизайн, в которых рассказывается о разработке ваших классов и их взаимосвязей, следовании передовым методам кодирования и принципам разработки программного обеспечения, таким как SOLID.
Из-за этого многим кандидатам сложно ответить на вопросы по проектированию системы, и если вы хотите добиться успеха, вы должны уделять этому навыку особое внимание. Если вам нужен ресурс, я рекомендую вам ознакомиться с курсом [Интервью по проектированию систем Grokking] (https://www.educative.io/collection/5668639101419520/5649050225344512?affiliate_id=5073518643380224) на тему «Образование», который подготовлен людьми, которые работал менеджером по найму в этих технологических компаниях, а также знакомит вас с общими вопросами собеседования по проектированию систем.
Для объектно-ориентированного проектирования и анализа я рекомендую книгу Head First Object-Oriented design book, чтобы изучить основы и Grokking the Object-Oriented Interviews курс по Образовательный для некоторой практики.
4. Многопоточность и параллелизм
Параллелизм — один из самых желаемых навыков для работодателей, а также одна из самых сложных тем, поднимаемых на собеседованиях. Потому что это показывает вашу способность разработать программу, которая эффективно использует ресурсы, но в то же время это очень сложная тема для освоения, и именно поэтому интервьюеры любят ее.
Параллелизм также можно использовать для оценки вашего опыта и технических знаний, и часто использует в качестве ключевого решающего фактора в вашем общем уровне найма. Если вы только начинаете свою карьеру или хотите сменить работу, никогда не помешает посвятить некоторое время освоению параллелизма.
Как минимум, вы должны знать о потоках, процессах, разделяемой памяти, мониторах, блокировках, критической секции и отложенных обратных вызовах. Еще лучше иметь хорошее знание того, как избежать условий гонки и взаимоблокировки.
Практика классических параллельных вопросов интервью, таких как [Producer-Consumer] (https://www.java67.com/2012/12/producer-consumer-problem-with-wait-and-notify-example.html), Dining Philosopher и другие. также может многому научить вас в отношении параллелизма и многопоточности и дать вам уверенность в том, что вы можете визуализировать, как код и данные работают, когда несколько потоков выполняются параллельно.
Если вам предстоит собеседование, я настоятельно рекомендую вам удвоить параллелизм. Это потому, что я знаю, что это может быть одной из самых сложных тем, которые поднимаются во время большинства интервью, даже для опытных разработчиков. Однако получение параллелизма мастеринга даст вам значительное преимущество перед другими кандидатами.
Если вам нужны ресурсы, я настоятельно рекомендую вам ознакомиться с [Вопросами для интервью о многопоточности и параллелизме] (https://www.educative.io/courses/java-multithreading-for-senior-engineering-interviews?affiliate_id=5073518643380224) C.H. Афзал на Образовательном. Этот курс содержит наиболее распространенные вопросы для интервью, решаемые на Python, Java, C# и Ruby. Ответив на эти вопросы, вы получите хорошее представление о параллелизме и многопоточности.
[ ] (https://www.educative.io/courses/java-multithreading-for-senior-engineering-interviews?affiliate_id=5073518643380224)
5. SQL и проектирование баз данных
Как разработчик программного обеспечения, работа с реляционной базой данных является важным навыком, который вам понадобится, и он останется с вами, независимо от того, где вы находитесь в своей карьере.
Каждая компания, от мала до велика, использует СУБД, поэтому вполне вероятно, что вы столкнетесь с разными моделями данных, типа баз данных (NoSQL и SQL) и зависимости от различных компаний.
Очень важно знать, как структурировать данные в СУБД.
Следует ли вам использовать модель «сущность-связь» (ER)? Иерархическая модель? Трехсхемная архитектура?
Выбор может быть пугающим, но полезно знать о различных способах структурирования ваших данных, например, когда вы переключаете поставщиков баз данных, таких как [Oracle] (https://medium.com/javarevisited/top-10-free-courses- to-learn-microsoft-sql-server-and-oracle-database-in-2020-6708afcf4ad7) на SQL Server или PostgreSQL, вы можете подключиться с минимальным ручным кодированием.
Как программист, вы также должны знать о SQL, не только о синтаксисе, но и о том, как база данных фактически выполняет ваш запрос и как выполняются соединения, как используются индексы, а также разницу между сканированием таблицы, сканированием индекса и поиском индекса. Эти детали важны не только с точки зрения собеседования по программированию, но и с точки зрения повседневной работы.
Если вам нужны ресурсы, я предлагаю вам пройти Основы проектирования баз данных для инженеров-программистов, где вы узнайте о различных концепциях и методах, которые вы можете использовать для структурирования своих данных, и узнайте, почему вы должны использовать определенные подходы для определенных проблем.
Вы также познакомитесь с такими методами, как нормализация, которые помогают повысить эффективность базы данных и избежать дублирования. Я также предлагаю вам пройти курс, ориентированный на SQL, например The Complete SQL BootCamp от Jose Portilla на Udemy, поскольку SQL-запросы также являются важной частью собеседований по программированию наряду с проектированием базы данных. Я также предлагаю использовать книгу Index Luke, чтобы лучше понять, как работает SQL-запрос в целом.
6. AWS, Docker и Kubernetes
Хотя эти пять навыков, безусловно, необходимы для собеседований по кодированию, в настоящее время работодатели также ищут современные технические навыки, такие как AWS, Docker и Kubernetes, что делает их важными темами для технических собеседований.
Поскольку облачные вычисления — это следующий большой шаг, и это десятилетие разработки программного обеспечения будет облачным, разработчику программного обеспечения лучше знать об облаке и современных инструментах развертывания, таких как [Docker] (https://javarevisited.blogspot.com). /2018/02/10-free-docker-container-courses-for-Java-Developers.html) и Kubernetes.
Это также важно, если вы хотите оставаться на шаг впереди и дать своему работодателю повод нанять вас, а не следующего кандидата в очереди. Что касается AWS и Cloud, то еще одна вещь, которую вы можете сделать, — это получить сертификат не потому, что вы не можете получить работу без сертификата, а для того, чтобы лучше учиться и получить признание своих навыков.
Что касается AWS, я предлагаю вам иметь как минимум сертификацию AWS Cloud Practitioner, чтобы продемонстрировать необходимые облачные навыки, а если вы предпочитаете Microsoft Azure, то основы Azure (AZ-900) — отличная сертификация для начала.
Docker — это контейнер, который позволяет вам запускать ваше приложение целиком вместе со всеми зависимостями. Это упрощает как разработку, так и развертывание, особенно для [микросервисов] (https://medium.com/javarevisited/top-5-courses-to-learn-microservices-in-java-and-spring-framework-e9fed1ba804d). Поскольку контейнер делает облачное развертывание более управляемым, менеджеру также легче масштабировать его вверх и вниз.
Kubernetes — это инструмент оркестровки контейнеров, что означает, что он может используйте контейнеры менеджера в масштабе.
Развернуть несколько ящиков и управлять ими легко, но когда вам нужно развернуть сотни контейнеров для вашего приложения для рекламного мероприятия, такого как Amazon Prime Sale, а затем нужно отключить его, как только трафик вернется к нормальному состоянию, это непросто. Kubernetes может сделать это за вас и обеспечить автоматизацию и душевное спокойствие.
Хотя и Docker, и Kubernetes не являются обязательными навыками для программиста, но определенно необходимы с точки зрения работы. Я рекомендую каждому разработчику программного обеспечения или начинающему программисту изучить Docker и Kubernetes, а если вам нужен ресурс, онлайн-курс Стивена Грайдера -** Docker and Kubernetes: The Complete Guide** на Udemy — отличная отправная точка.
Это все о некоторых из самых важных навыков и тем, которые вы можете подготовить, чтобы пройти собеседование по программированию в таких компаниях, как Google, Microsoft, Apple, Facebook и Amazon. Наряду с этими темами я также перечислил некоторые из лучших книг и курсы, которые вы можете пройти, чтобы освоить эти навыки и лучше подготовиться к следующему интервью по кодированию.
Другие статьи по программированию и Java, которые могут вам понравиться
- [10 курсов для взлома интервью по кодированию] (https://javarevisited.blogspot.com/2018/02/10-courses-to-prepare-for-programming-job-interviews.html#axzz5oeVu3CYQ)
- [10 веб-сайтов для решения проблем с программированием] (https://www.java67.com/2019/05/10-great-resources-for-programming-job-interview-questions.html)
- [10 книг для подготовки к собеседованию по техническому программированию/кодированию] (http://www.java67.com/2017/06/10-books-to-prepare-technical-coding-job-interviews.html)
- [5 лучших книг по структуре данных и алгоритмам для разработчиков Java] (http://javarevisited.blogspot.sg/2016/05/5-free-data-structure-and-algorithm-books-in-java.html#axzz4uXETWjmV)
- [10 бесплатных курсов по структуре данных для разработчиков Java] (http://www.java67.com/2019/02/top-10-free-algorithms-and-data.html)
- [10 советов и 101 проблема кодирования, чтобы решить интервью по программированию] (https://dev.to/javinpaul/101-coding-problems-and-few-tips-to-crack-your-next-programming-interviews-402a)
- [10 лучших курсов системного дизайна для интервью по кодированию] (https://medium.com/javarevisited/10-best-system-design-courses-for-coding-interviews-949fd029ce65)
- [6 лучших курсов динамического программирования для собеседований] (https://medium.com/javarevisited/10-best-system-design-courses-for-coding-interviews-949fd029ce65)
- [100+ проблем со структурой данных и кодированием для интервью] (http://www.java67.com/2018/06/data-structure-and-algorithm-interview-questions-programmers.html)
Спасибо, что прочитали эту статью. Если вы найдете эти навыки и темы для интервью полезными, поделитесь ими со своими друзьями и коллегами. Если у вас есть какие-либо вопросы или отзывы, пожалуйста, оставьте заметку.
П. S. - Если вы нацелены на компании FAANG (Facebook, Amazon, Apple, NetFlix и Google), я также предлагаю вам пройти курс Андрея Негаойе в Академии ZTM. Интервью FAANG труднее всего пройти, и этот курс является ценным ресурсом для взлома интервью FAANG.
Впервые опубликовано [здесь] (https://javarevisited.blogspot.com/2020/04/5-essential-skills-to-crack-coding-interviews.html).
Оригинал