После рассказа о том, как я получил работу в Amazon, в этом посте на reddit мне задали множество вопросов о том, как мне помог LeetCode в подготовке к собеседованиям. В статье я отвечу на эти вопросы. Я начал готовиться за 2-3 месяца до собеседований в BigTech. В то время я тратил по 2-3 часа в день на подготовку. Вот разбивка работы на leetcode по годам. В рамках года я начал заниматься на leetcode более стабильно (от 30 минут до часа ежедневно), а не импульсивно по месяцу-два, как это было раньше. Вот так выглядит моя разбивка сейчас; когда я завершил свои последние собеседования в апреле, у меня было пройдено около 450 вопросов. Ты не получишь никакой пользы от выполнения тех заданий, с которыми уже освоился. Если ты легко решаешь easy, то увеличь количество выполняемых medium. Относить к практике осознанно, трать время с максимальной пользой. Наверно, идеальное соотношение — это 1: 3: 1. Большинство вопросов, задаваемых на собеседованиях, относятся к категории medium, поэтому если вы можете решать их уверенно, то достаточно хорошо готовы к собеседованию. Я решал ежедневные задачи LeetCode, а также выполнял верхние задачи из списка собеседований Amazon, которые доступны в premium-подписке LeetCode. Этот список оказался очень полезным для подготовки к собеседованиям в Amazon, потому что выполненные мной задачи оказались очень похожими по сложности и стилю. Если вы стремитесь попасть в конкретную компанию, то рекомендую пройти список этой компании. (Вероятно, для этого не понадобится premium-подписка, потому что можно найти бесплатные списки задач компаний по тэгам, например, amazon list free) Когда я только начал пользоваться Leetcode, то отвечал на случайные вопросы. Это противоречит принципу продуманной практики. Самый эффективный подход заключался бы в том, чтобы решить примерно 20-40 easy, затем освоить список blind 75. После этого вы будете достаточно готовы к тому, чтобы приступать к собеседованиям, и я искренне считаю, что ещё примерно сто заданий, которые были постоянно сложными и повышали мои навыки, сделают вас столь же эффективным, как мои примерно 450 задач. Вывод заключается в том, что количество задач не так важно, как их качество, и что уровень, при котором вы спокойно будете решать стандартные задачи на собеседованиях, составляет примерно 200 задач. Этот вопрос задавали очень часто. 75% моих знаний по структурам данных и алгоритмам (Data Structure and Algorithms, DSA) взято из университетского курса DSA благодаря тому, что я намеренно зубрил этот курс. Остальные знания я набрался гуглением непонятных мне аспектов при решении задач LeetCode; также я пользовался разделом ответов и обсуждений в задачах LeetCode. Тогда Интернет — ваш друг. Всё, что вы знаете, есть онлайн и доступно бесплатно, например, есть популярный курс по изучению DSA с нуля. Идеальный процесс выглядел бы так: изучить новую структуру данных -> выполнить несколько задач LeetCode с тэгами этой структуры данных -> повторить. И как ни очевидно это звучит, просто гуглите то, что вы не знаете или хотите знать. Так получилось, что я решил достаточно задач, чтобы покрыть все типы вопросов, которые мне могли задавать. Если вы уверенно сможете решать leetcode blind 75, то вашего уровня покрытия тоже будет достаточно. Но чтобы ответить на этот вопрос, я воспользуюсь этим списком; вот моя разбивка большинства тем по важности: Массивы, строки, связанные списки, деревья, сортировка и поиск УРОВЕНЬ 2 (спрашивают не так часто, как УРОВЕНЬ 1, но переходите к нему только тогда, когда решите достаточно много задач УРОВНЯ 1). Динамическое программирование УРОВЕНЬ 3 (частично важный, включает в себя сочетания тем уровня 1, но я не считаю их столь же важными, как УРОВЕНЬ 1) Задачи по проектированию и математике Конечно, нет. Это полностью ситуативно и зависит от ваших условий/возможностей/способа обучения. Оглядываясь назад, если бы я знал, как практиковаться эффективно, то смог бы справиться за 150-200 задач LeetCode. Отвечая на вопрос «когда я смогу приступать к собеседованиям», скажу: как только вы будете уверенно себя чувствовать с задачами уровня medium (для меня это было около 150-200 задач), вы должны начать проходить собеседования. Практикуйтесь осмысленно, выполняйте задачи, которые сложны для вас, но не настолько, что вам очень сложно выполнить задачу. Сосредоточьтесь на актуальных темах, с которыми у вас есть трудности, если готовитесь к устройству в конкретную компанию, то полезно будет использовать список задач LeetCode для конкретной компании. Не откладывайте собеседования надолго. Как только вы решите 100-200 задач, нужно приступать к собеседованиям. Даже если вы не преуспеете, то получите опыт и обратную связь для дальнейшего развития. Выполнив свою задачу получения должности в BigTech, я нацелен стать хорошим разработчиком ПО/развивать свою карьеру и создавать онлайн-контент, связанный с технологиями.