С чего начать? Присоединиться к чьему-нибудь стартапу? Запустить собственный? Сфокусироваться на откачивании знаний алгоритмов и структур данных?
Для начала несколько полезных ссылок, упоминавшихся в ответах:
1. Аншуман Сингх, соучредитель InterviewBit, разработчик в Facebook
Типичный процесс прохождения собеседования
Существует множество блогов и сайтов, содержащих разнообразные материалы для подготовки к техническому интервью, но трудно найти хоть один, который предлагал бы структуру и порядок этой подготовки.
Именно таким является проект InterviewBit. Он абсолютно бесплатен, и предоставляет любому желающему упорядоченный и тщательно структурированный план подготовки к техническому собеседованию, в некоторой степени исполняя роль персонального наставника.
Последовательный подход. никаких деревьев и хэшей, пока вы как следует не усвоите массивы и списки.
Каждая тема разбита на подтемы
Имитация интервью в процессе решения задач
Джимми Саад, работает в Facebook
Развернутый и очень содержательный пост от человека, который сам готовился к собеседованию в Facebook и в результате успешно прошел его. Он детально описывает свою подготовку к собеседованию в течение примерно одного месяца, после чего получил работу в Facebook.
Одним из главных аспектов является то, что, готовясь к интервью, вы никогда не знаете наверняка, что вас там ожидает. Поэтому необходимо быть подкованным по огромному количеству возможных тем, однако некоторые из них могут встретиться вероятнее, чем другие.
Итак, представим, что у вас собеседование через месяц. Как бы вы спланировали подготовку за это время?
Дни -∞-0: исходные данные
Предполагается, что вы знаете алгоритмы и знакомы с основными структурами данных, включая бинарные деревья поиска, хэш-таблицы, кучи, стэки, очереди, графы, а также владеете основными методами работы с ними и знаете временную сложность каждого из них.
Если это не так, вам понадобится куда больше месяца. Для начала обратите внимание на книгу «Введение в алгоритмы».Также от вас ожидают, что вы знаете язык программирования вроде С++ или Java.
День 1: книга
Приобретите книгу «Элементы технических собеседований». Это одна из лучших книг по данной теме. Она содержит более 300 вопросов, задаваемых на реальных интервью.
День 2-14: алгоритмы
Читайте книгу глава за главой, по одной в день, с 5-й по 19-ю. Решайте каждую задачу. Не программируйте, просто находите алгоритм решения. Поставьте себе дедлайн на каждое задание в зависимости от его сложности. Если не получается решить задачу за это время — перейдите к ответу и тщательно проанализируйте его.
День 14-24: программирование
Пройдите книгу еще раз, на этот раз программируя. Теперь вы знаете ответы, так что сможете вспомнить алгоритм решения каждой задачи довольно быстро (если нет, можно подсмотреть). Это этап программирования, так что не тратьте время на повторный подбор алгоритмов.
День 25-30: больше вопросов
Обратите внимание на следующие ссылки:
День 31: не техническая часть
Да, это немного жульничество — добавлять 31-й день, но настоятельно рекомендуется сделать это. Вам нужен день для подготовки к не технической части интервью (особенно, если вы устраиваетесь в Facebook, там практикуют не технические собеседования).
Во-первых, заготовьте вопросы, которые вы хотели бы задать интервьюеру. Затем подумайте о своем образовании и опыте: в каких проектах вы участвовали, частью каких команд были, какие возникали трудности и конфликты.
Подготовьтесь отвечать на вопросы вроде «почему вы выбрали именно нашу компанию?». Такие вопросы обычно заставляют соискателя растеряться.
Marcelo Juchem, разработчик в Facebook
30 минут занятий в день бесспорно лучше, чем 3 часа 30 минут в неделю. Занимайтесь часто и регулярно. Нет смысла работать непрерывно по 8-10 часов, это чревато выгоранием. Планируйте небольшие занятия через удобные для вас отрезки времени в течение дня. Сделайте этот график гибким, давайте себе отдохнуть, если это необходимо (нет смысла прерываться всего на 15 минут, если вы действительно устали). Не нужно геройствовать, достаточно выработать режим, который позволит вам стабильно развиваться.
Изучая алгоритмы, структуры данных и решения задач с собеседований, никогда не пытайтесь заучивать код. Вы должны сосредоточиться на понимании того, как и почему работает решение задачи.
Не фокусируйтесь только на конечном результате — сам процесс подготовки должен приносить удовольствие. Если это не так, велика вероятность, что вы делаете что-то неправильно: по какой-то неправильной причине вы выбрали неправильную профессию.
Будьте скромны. Никто не учит то, что, как он думает, он и так знает. Никто не совершенствуется, если считает, что он и так достаточно хорош. Вы соревнуетесь сами с собой, поэтому будьте перед собой честны.
Даже если вы считаете, что достаточно подготовлены и готовы пройти собеседование, возможно, вам стоит позаниматься еще. Если вы считаете, что вы не готовы, это может значить все, что угодно.
Не сдавайтесь, провалив интервью. Проанализируйте свои возможные ошибки и примите их к сведению. Процесс собеседования не идеален, случается всякое.
Форматы собеседований
Большая часть собеседований на позиции разработчиков делится на три типа:
Где взять ресурсы для изучения
Для начала несколько полезных ссылок, упоминавшихся в ответах:
- Grokking the System Design Interview
- LeetCode
- Coderust 2.0: Faster Coding Interview Preparation Using Interactive Visualizations
- Programming Interview Questions | CareerCup
- GeeksForGeeks | A computer science portal for geeks
- HiredInTech`s Training Camp for Coding Interviews
- http://highscalability.com/
- Problem Solving in Data Structures & Algprithms Using Java: The Ultimate Guide to Programming Interview
1. Аншуман Сингх, соучредитель InterviewBit, разработчик в Facebook
Типичный процесс прохождения собеседования
- 2-3 телефонных интервью. Обычно перед личной встречей проходит несколько бесед по телефону, чтобы «прощупать» собеседуемого. Как правило, в них могут задаваться несложные алгоритмические задачи, но в основном телефонные интервью предназначены для выявления «красных флажков» — потенциальных нежелательных черт и возможных проблем при вхождении нанимаемого в коллектив.
- Личные беседы
- интервью 1-2: программирование, алгоритмы и структуры данных, культура программирования, «чистота» кода;
- интервью 3: программирование или системный дизайн. Этот этап зависит от опыта собеседуемого. Соискатель тестируется на понимание сферы его предполагаемой профессиональной деятельности;
- интервью 4: поведенческое. После нескольких технических собеседований следует собеседование с hr-ом. Его цель — выявить ваши психологические плюсы и минусы, оценить, насколько вы способны влиться в коллектив.
Существует множество блогов и сайтов, содержащих разнообразные материалы для подготовки к техническому интервью, но трудно найти хоть один, который предлагал бы структуру и порядок этой подготовки.
Именно таким является проект InterviewBit. Он абсолютно бесплатен, и предоставляет любому желающему упорядоченный и тщательно структурированный план подготовки к техническому собеседованию, в некоторой степени исполняя роль персонального наставника.
Последовательный подход. никаких деревьев и хэшей, пока вы как следует не усвоите массивы и списки.
Каждая тема разбита на подтемы
Имитация интервью в процессе решения задач
Джимми Саад, работает в Facebook
Развернутый и очень содержательный пост от человека, который сам готовился к собеседованию в Facebook и в результате успешно прошел его. Он детально описывает свою подготовку к собеседованию в течение примерно одного месяца, после чего получил работу в Facebook.
Одним из главных аспектов является то, что, готовясь к интервью, вы никогда не знаете наверняка, что вас там ожидает. Поэтому необходимо быть подкованным по огромному количеству возможных тем, однако некоторые из них могут встретиться вероятнее, чем другие.
Итак, представим, что у вас собеседование через месяц. Как бы вы спланировали подготовку за это время?
Дни -∞-0: исходные данные
Предполагается, что вы знаете алгоритмы и знакомы с основными структурами данных, включая бинарные деревья поиска, хэш-таблицы, кучи, стэки, очереди, графы, а также владеете основными методами работы с ними и знаете временную сложность каждого из них.
Если это не так, вам понадобится куда больше месяца. Для начала обратите внимание на книгу «Введение в алгоритмы».Также от вас ожидают, что вы знаете язык программирования вроде С++ или Java.
День 1: книга
Приобретите книгу «Элементы технических собеседований». Это одна из лучших книг по данной теме. Она содержит более 300 вопросов, задаваемых на реальных интервью.
День 2-14: алгоритмы
Читайте книгу глава за главой, по одной в день, с 5-й по 19-ю. Решайте каждую задачу. Не программируйте, просто находите алгоритм решения. Поставьте себе дедлайн на каждое задание в зависимости от его сложности. Если не получается решить задачу за это время — перейдите к ответу и тщательно проанализируйте его.
День 14-24: программирование
Пройдите книгу еще раз, на этот раз программируя. Теперь вы знаете ответы, так что сможете вспомнить алгоритм решения каждой задачи довольно быстро (если нет, можно подсмотреть). Это этап программирования, так что не тратьте время на повторный подбор алгоритмов.
День 25-30: больше вопросов
Обратите внимание на следующие ссылки:
День 31: не техническая часть
Да, это немного жульничество — добавлять 31-й день, но настоятельно рекомендуется сделать это. Вам нужен день для подготовки к не технической части интервью (особенно, если вы устраиваетесь в Facebook, там практикуют не технические собеседования).
Во-первых, заготовьте вопросы, которые вы хотели бы задать интервьюеру. Затем подумайте о своем образовании и опыте: в каких проектах вы участвовали, частью каких команд были, какие возникали трудности и конфликты.
Подготовьтесь отвечать на вопросы вроде «почему вы выбрали именно нашу компанию?». Такие вопросы обычно заставляют соискателя растеряться.
Marcelo Juchem, разработчик в Facebook
30 минут занятий в день бесспорно лучше, чем 3 часа 30 минут в неделю. Занимайтесь часто и регулярно. Нет смысла работать непрерывно по 8-10 часов, это чревато выгоранием. Планируйте небольшие занятия через удобные для вас отрезки времени в течение дня. Сделайте этот график гибким, давайте себе отдохнуть, если это необходимо (нет смысла прерываться всего на 15 минут, если вы действительно устали). Не нужно геройствовать, достаточно выработать режим, который позволит вам стабильно развиваться.
Изучая алгоритмы, структуры данных и решения задач с собеседований, никогда не пытайтесь заучивать код. Вы должны сосредоточиться на понимании того, как и почему работает решение задачи.
Не фокусируйтесь только на конечном результате — сам процесс подготовки должен приносить удовольствие. Если это не так, велика вероятность, что вы делаете что-то неправильно: по какой-то неправильной причине вы выбрали неправильную профессию.
Будьте скромны. Никто не учит то, что, как он думает, он и так знает. Никто не совершенствуется, если считает, что он и так достаточно хорош. Вы соревнуетесь сами с собой, поэтому будьте перед собой честны.
Даже если вы считаете, что достаточно подготовлены и готовы пройти собеседование, возможно, вам стоит позаниматься еще. Если вы считаете, что вы не готовы, это может значить все, что угодно.
Не сдавайтесь, провалив интервью. Проанализируйте свои возможные ошибки и примите их к сведению. Процесс собеседования не идеален, случается всякое.
Форматы собеседований
Большая часть собеседований на позиции разработчиков делится на три типа:
- поведенческое (психологическое)
- системный дизайн
- алгоритмы и программирование
Где взять ресурсы для изучения
- GeeksForGeeks
Прекрасный блог, где не только рассматриваются технические задачи, но и приводятся примеры их решения. - Список вопросов с технических собеседований
- Введение в алгоритмы (The MIT Press)
Хорошая книга по алгоритмам. - Отложите все и прочтите книгу «Жемчужины программирования» Джона Бэнтли, если до сих пор не сделали этого. Серьезно, сделайте это прямо сейчас.
- Может пригодиться прочесть первые главы книги «Современные операционные системы» 2-е изд., дабы освежить в памяти процессы, потоки, контексты и тому подобное.
- Начните с того, сколько времени в день вы хотите тратить на занятия. Составьте приблизительный план и старайтесь придерживаться его.
- Встречаясь с новым материалом, старайтесь понять, как он связан с тем, что вы уже изучили.
- Постройте график зависимостей, чтобы структурировать информацию.
- Отслеживайте свой прогресс и отмечайте, соответствуете ли вы намеченному плану.
- Время от времени возвращайтесь к уже решенным задачам. Вы удивитесь, насколько быстро человек способен все забывать.
- Найдите напарника для совместной учебы или заведите блог, чтобы делиться опытом с другими людьми.
- Напишите собственную библиотеку по изученным алгоритмам и структурам данных. Старайтесь пользоваться ею по мере возможности.