- PVSM.RU - https://www.pvsm.ru -
Каждый инженер-программист стремится впечатлить людей своим техническим мастерством. Технологические гиганты этого мира — прекрасное место для работы технарей, которые могут предоставить услуги миллиардам пользователей. На моём недавнем собеседовании было несколько раундов, я получил предложения от Google и Amazon. В последние несколько лет онлайн-сообщество очень помогло мне в подготовке к собеседованиям. В этом посте я поделюсь всем о моём пути к собеседованию и верну вклад общества в моё обучение.
Я сосредоточусь на подготовке к циклу кодирования, поскольку оно занимает большую часть собеседования. Но мы кратко рассмотрим системный дизайн и навыки лидерства в следующих разделах.
Инженеры-программисты часто оказываются в сложных ситуациях, например, работают с двусмысленностью, нечёткими требованиями, разбивают сложные задачи на подзадачи, обрабатывают крайние случаи, завершают работу над компромиссом с учётом компромиссов и т. д. Собеседования по программированию — один из способов получить представление об этих навыках.
Ради упрощения этапы программирования сосредоточены на решении проблем с помощью структур данных и алгоритмов. Эти вопросы, как правило, сложны и дают ценную информацию об аналитических способностях кандидата.
Научитесь решать задачи с помощью алгоритмов и структур данных. Этот навык приобретается со временем, к нему нет короткого пути; единственная настоящая формула — последовательность. Практикуйтесь, практикуйтесь и практикуйтесь, пока не разовьёте природную способность решать задачи.
Часто оценка времени игнорируется и не считается необходимой. Я предлагаю откалибровать то, насколько хорошо вы умеете решать задачи по алгоритмам и структурам данных. Я изучил свои сильные и слабые стороны и сделал приблизительную оценку времени на подготовку. Эта оценка помогла мне подготовить мой разум к долгосрочной (и краткосрочной) цели и поддержала мотивацию.
«Давайте себе достаточно времени на подготовку. Всегда. Лучше оказаться слишком подготовленным, чем недостаточно подготовленным**».
Общая продолжительность подготовки может различаться, она зависит от вашего опыта. В общем, я разделил уровни подготовки так:
Перед собеседованием я ставлю себя на средний уровень.
Оценка времени подготовки
В основном я практиковался в программировании на LeetCode [1], InterviewBit [2] и GFG [3]. Перед собеседованием я решил около 320 задач LeetCode, 80 InterviewBit и 30 вопросов GFG.
Как распределялись задачи
Задачи средней сложности очень важны: большинство вопросов на собеседовании имеют среднюю сложность. Решение задач средней сложности сделает вас быстрее и прибавит умения решать проблемы.
На ранней стадии важно начинать с простых и средних вопросов. Начните со сложных задач, как только ощутите адекватную уверенность. Не теряйте мотивацию, если не можете решить сложные задачи. На отработку и совершенствование их решения может потребоваться больше времени, чем вы рассчитывали. Всякий раз, когда я ощущал себя разбитым, чтобы повысить мотивацию, я возвращался к лёгким задачам.
Поддерживайте установку на рост. Каждая проблема, которую вы не можете решить, — это возможность узнать что-то новое.
Я не полагался полностью на какой-то один ресурс. Каждый подавал мне новые идеи. Я вёл дневник, постоянно расширяя свои знания.
И последнее, но не менее важное — статьи о BaseCS [13] Вайдехи Джоши [14]. Она пишет интуитивно понятные и простые объяснения по нескольким темам алгоритмов и структур данных.
Поскольку продолжительность собеседований сокращается, очень важно работать над тем, как вы решаете проблемы. Как правило, собеседование по программированию длится 45–50 минут, от кандидата ждут, что он решит две средние, одну сложную или одну лёгкую и одну сложную задачи.
Даже если вы могли бы решить исходный вопрос, но потратили больше времени, это означает, что у вас нет достаточно времени, чтобы решить второй.
Я ставил таймер, чтобы отсчитывать время, за которое решал задачи:
Новички могут игнорировать время: для них найти правильное решение, очевидно, важнее.
Перед настоящим собеседованием я прошёл много имитационных. Имитация собеседования может оказаться весьма полезной. Ранний отказ в тестовой среде даёт вам полезную информацию. Она поможет вам обнаружить пробелы в вашем мыслительном процессе. Старайтесь исправлять каждую ошибку и становиться лучше с каждым ложным интервью.
«Если вы несколько раз пройдёте имитации, расценивайте это как хороший знак».
Бесплатные:
Платные пробные собеседования дают преимущества. Например, обратная связь после интервью даёт много подробностей о том, чего ждал рекрутер.
До сих пор мы много говорили о различных элементах подготовки. Теперь давайте попробуем соединить всё и составить план продвижения! Посмотрите скриншот моего календаря за месяц до собеседования.
Расписание подготовки
Я разбил всю подготовку на задачи. Поставил цели на каждый день за недели (и даже месяцы) до собеседования. Это помогло мне избежать хаотичности и не потеряться в пути к цели.
Еженедельное распределение времени
Я знаю, что у многих из нас есть семейные обязанности и работа на полную ставку. Не всё и не всегда идёт по плану. Но идея в том, чтобы сформировать привычку. Следите за своим прогрессом и за тем, что не доделано. Настраивайте график, пока не найдёте подходящий.
В этом раунде проверяют навыки технического проектирования. Его можно разделить на дизайн низкого уровня (LLD) и дизайн высокого уровня (HLD). Знания в этой области становятся больше с опытом работы в отрасли.
Попытайтесь приобрести знания о таких концепциях, как распределённые системы, балансировка нагрузки, сетевые протоколы, согласованное хеширование, теорема CAP, репликация, сегментирование и т. д.
В отличие от предыдущих раундов этот раздел не технический. Компания рассчитывает узнать больше о кандидате его словами. Компанию могут интересовать:
Главное — оставаться прозрачным и просто быть собой.
Я выделю раздел, упомянутый в CTCI [10] о модели S.A.R. (ситуация, действие, результат). Идея в том, чтобы определить важные важные обсуждения, распределяя рассказы с предыдущего места работы. Вот схема навыков работы в обществе [26] (т. н. soft skills), чтобы вы узнали о них больше.
Таблица SAR
Q1. На какие темы структур данных и алгоритмов ориентироваться? На какие ресурсы вы ссылались?
Обучающие ресурсы, упомянутые ранее, будут полезны. Я не добавлял отдельный ресурс для каждой темы, это сделает пост слишком большим.
Темы высокого уровня без определённого порядка:
Связные списки, битовые манипуляции, стеки и очереди, бинарный поиск, кучи, жадные алгоритмы, динамическое программирование, векторы/ArrayList, нотация большое О, время и пространство, сортировки, указатели, окна TCP/IP, системы непересекающихся множеств, операции со строками, графы и деревья, удержание стабильности системы, поиск в ширину и в глубину, рекурсия, поиск с возвратом, хеширования, синтаксическое дерево, обрезка деревьев и индексированных бинарных деревьев.
Q2. Какие языки программирования вы изучали?
Изучите один язык снаружи и внутри; на мой взгляд, этого достаточно. Я предпочитаю Java.
Q3. Откуда вы знаете, какие задачи подходят, чтобы практиковаться для решения всех проблем?
Практически невозможно решить все проблемы. Тем не менее есть максимум 12-15 тем из области структур данных и алгоритмов. Старайтесь лучше овладеть каждой темой, решая тематические задачи. С практикой придет умение определить нужную структуру данных и алгоритм. Сосредоточьтесь на качестве, а не на количестве.
Q4. Есть ли у меня шанс, если я не программирую на соревнованиях?
Да, безусловно. Программировать на конкурсах в этом контексте необязательно.
Однако раунды кодирования представляют собой совсем другой этап и имеют разные приоритеты.
Q5. Как получить приглашение на собеседование? Как вы подали заявку?
Рекрутер связался со мной напрямую через LinkedIn. Я не знаю, как отбираются кандидаты. Но у меня есть несколько предложений.
Самое главное — наслаждайтесь путешествием. Будьте прилежны в работе. Имейте терпение, уважение и всегда стремитесь сегодня быть лучше, чем вчера, а также не забывайте про специальный промокод HABR, который добавит 10% к скидке на баннере. Остальное приложится.
Автор: Picard
Источник [46]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/google/360873
Ссылки в тексте:
[1] LeetCode: https://leetcode.com/
[2] InterviewBit: https://www.interviewbit.com/
[3] GFG: http://about:blank
[4] этому пути: https://www.interviewbit.com/courses/programming/
[5] Специализация алгоритмы на Coursera: https://www.coursera.org/specializations/algorithms
[6] Рачит Джайн: https://www.youtube.com/channel/UC9fDC_eBh9e_bogw87DbGKQ
[7] Абдул Бари: https://www.youtube.com/channel/UCZCFT11CWBi3MHNlGf019nharw
[8] THNLGf019nRo: https://www.youtube.com/user/tusharroy2525
[9] BackToBack SWE: https://www.youtube.com/c/BackToBackSWE
[10] CTCI: https://www.crackingthecodinginterview.com/
[11] EPI: https://elementsofprogramminginterviews.com/
[12] CLRS: https://en.wikipedia.org/wiki/Introduction_to_Algorithms
[13] статьи о BaseCS: https://medium.com/basecs
[14] Вайдехи Джоши: https://medium.com/u/8f55993c973e?source=post_page-----f41e2dc3cdf9----%20----------------------------
[15] Имитация на LeetCode: https://leetcode.com/interview/
[16] Pramp: https://www.pramp.com/
[17] InterviewBit: https://www.interviewbit.com/mock-interview/
[18] ExpertMitra: https://expertmitra.com/
[19] Mocki: https://mocki.co/
[20] Пробное техническое собеседование: https://www.techmockinterview.com/
[21] Gaurav Sen: https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFsKw
[22] Narendra L: https://www.youtube.com/channel/UCn1XnDWhsLS5URXTi5wtFTA
[23] Grokking the System Design Interview: https://www.educative.io/courses/grokking-the-system-design-interview
[24] Проведение интервью по объектно-ориентированному дизайну: https://www.educative.io/courses/grokking-the-object-oriated-design-interview
[25] Основы проектирования системы AlgoExpert: https://www.algoexpert.io/systems/fundamentals
[26] схема навыков работы в обществе: https://www.crackingthecodinginterview.com/uploads/6/5/2/8/6528028/cracking_the_soft_skills_-_v6.pdf
[27] CollabEdit: http://www.collabedit.com/
[28] Профессия Data Scientist: https://skillfactory.ru/dstpro?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_DSPR&utm_term=regular&utm_content=210121
[29] Профессия Data Analyst: https://skillfactory.ru/dataanalystpro?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_DAPR&utm_term=regular&utm_content=210121
[30] Профессия Java-разработчик: https://skillfactory.ru/java?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_JAVA&utm_term=regular&utm_content=210121
[31] Профессия Веб-разработчик: https://skillfactory.ru/webdev?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_WEBDEV&utm_term=regular&utm_content=210121
[32] Профессия QA-инженер на JAVA: https://skillfactory.ru/java-qa-engineer?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_QAJA&utm_term=regular&utm_content=210121
[33] Профессия Frontend-разработчик: https://skillfactory.ru/frontend?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_FR&utm_term=regular&utm_content=210121
[34] Профессия Этичный хакер: https://skillfactory.ru/cybersecurity?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_HACKER&utm_term=regular&utm_content=210121
[35] Профессия C++ разработчик: https://skillfactory.ru/cplus?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_CPLUS&utm_term=regular&utm_content=210121
[36] Профессия Разработчик игр на Unity: https://skillfactory.ru/game-dev?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_GAMEDEV&utm_term=regular&utm_content=210121
[37] Профессия iOS-разработчик с нуля: https://skillfactory.ru/iosdev?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_IOSDEV&utm_term=regular&utm_content=210121
[38] Профессия Android-разработчик с нуля: https://skillfactory.ru/android?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_ANDR&utm_term=regular&utm_content=210121
[39] Курс по JavaScript: https://skillfactory.ru/javascript?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_FJS&utm_term=regular&utm_content=210121
[40] Курс по Machine Learning: https://skillfactory.ru/ml-programma-machine-learning-online?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_ML&utm_term=regular&utm_content=210121
[41] Курс «Математика и Machine Learning для Data Science»: https://skillfactory.ru/math_and_ml?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_MATML&utm_term=regular&utm_content=210121
[42] Курс «Алгоритмы и структуры данных»: https://skillfactory.ru/algo?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_algo&utm_term=regular&utm_content=210121
[43] Курс «Python для веб-разработки»: https://skillfactory.ru/python-for-web-developers?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_PWS&utm_term=regular&utm_content=210121
[44] Курс по аналитике данных: https://skillfactory.ru/analytics?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_SDA&utm_term=regular&utm_content=210121
[45] Курс по DevOps: https://skillfactory.ru/devops?utm_source=infopartners&utm_medium=habr&utm_campaign=habr_DEVOPS&utm_term=regular&utm_content=210121
[46] Источник: https://habr.com/ru/post/538536/?utm_source=habrahabr&utm_medium=rss&utm_campaign=538536
Нажмите здесь для печати.