Я решил много проблем с утечкой кода. Привет, ребята, я все еще безработный, так что давайте решим еще одну проблему с кодом утечки.

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

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

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

Но не поверите, но мне хватило 50 задач, чтобы попасть на стажировку в банк. Но я знал, что должен продолжать работать, если хочу получить работу в крупной технологической компании. Поэтому я продолжал решать задачи в случайном порядке, что было еще одной ошибкой. Но, наверное, 60 или 70 вопросов, и я переключился на Python. Я всегда заглядывал в раздел обсуждения кода утечки и видел, что код Python всегда был самым коротким и лаконичным. Несмотря на то, что я никогда не использовал Python раньше и до сих пор, я никогда не использовал Python ни на какой работе или стажировке. Это было легко сделать, потому что вам не нужно учить весь язык.

Вам просто нужно изучить базовый синтаксис, как писать операторы if, циклы for и все стандартные структуры данных и методы. И вы действительно можете изучить их, решая проблемы с кодом утечки, просто погуглив по мере необходимости. Теперь C++ тоже неплохой выбор, но я бы точно избегал многословного языка, такого как Java. Язык, вероятно, не станет решающим фактором, но он определенно может сэкономить вам несколько минут, когда вы печатаете свой код, что определенно может иметь значение на реальном собеседовании. Но не имеет значения, как быстро вы печатаете, если вы не можете решить проблему. И даже после решения 100 задач, хотя я и изучил все важные алгоритмы, такие как DFS, BFS, скользящее окно и поиск с возвратом, я не смог последовательно решить новую задачу в первый раз.

Тогда я этого не знал, но причина была в том, что многие вопросы об утечке кода задаются последовательно. Вы, наверное, встречали такие вопросы, как «Ограбление дома один», «Ограбление дома два» и «Ограбление дома 3». Очевидно, что вы должны решать эти вопросы по порядку, но на самом деле большинство вопросов по коду утечки следует решать в определенном порядке. Например, вам никогда не следует пытаться решать задачи динамического программирования, если вы уже не имеете четкого представления о возврате. И вам, вероятно, не следует пытаться решать задачи с графами, пока вы не разберетесь в деревьях. Оглядываясь назад, это очевидно, но я уверен, что многие люди делают эту ошибку, поэтому я создал дорожную карту, чтобы вы не повторили ту же ошибку, что и я. Оказывается, порядок, в котором вы решаете задачи, имеет значение.

Я также думаю, что последовательное решение одной или двух задач в день намного лучше, чем зубрежка, потому что идеи действительно приживутся. способен решить сам. Раньше я буквально три-четыре часа бился головой о стену над одной задачей, потому что думал, что это единственный способ учиться. Но давайте будем честными, большинство из нас не смогут самостоятельно придумать некоторые из этих сложных академических алгоритмов. И даже если вы сможете придумать алгоритм черепахи и волос Флойда, это, вероятно, не будет эффективным использованием вашего времени. Нет ничего постыдного в поиске решения, если вы точно понимаете, почему оно работает. Вот почему в своих видео я действительно пытаюсь объяснить ход своих мыслей, стоящий за каждой проблемой. В конечном итоге это сэкономило мне много времени, потому что я подходил к действительно сложной проблеме, проблеме чокнутых, как я их называю, например, лопнувшие воздушные шары, и я был довольно близок к решению проблемы.

Я бы знал, что это проблема динамического программирования, но я просто не мог понять, в чем ее секрет. Потом я смотрел на решение, и только после пяти минут чтения я понимал, о, вот в чем фишка. И тогда я смогу сразу решить проблему. Я смог перейти от 100 к 250 решенным вопросам намного быстрее, чем я смог решить свои первые 100 вопросов. И к тому времени я выучил 99% нужных мне паттернов, даже некоторые сложные. И я дошел до того, что написать такие алгоритмы, как DFS, BFS и бинарный поиск, было для меня так же просто, как написать цикл for, даже некоторые продвинутые, вроде Union Find, Дейкстры, я мог написать менее чем за пять минут. И тогда я понял, что большинство проблем с кодом утечки попадают в эти корзины. Для средних вопросов вам просто нужно выяснить, какой алгоритм вам нужен, а затем применить его. Сложные вопросы похожи, за исключением того, что обычно за ними стоит очень сложный трюк.

И иногда, если вы не видели этого раньше, только Бог может помочь вам понять это. Или, может быть, ваш интервьюер, если он окажется щедрым. На тот момент я был уверен, что смогу пройти собеседования, но не был на 100% уверен, готов ли я к крупным собеседованиям в сфере технологий, таким как Google или Facebook. И, спойлер, вы, вероятно, никогда не почувствуете себя готовым на 100%. Это не бинарное решение, готовы вы к интервью или нет, потому что вы никогда не знаете, какие вопросы вам будут задавать. Это скорее дистрибутив. У вас может быть 50% шанс пройти или вы можете добраться до точки, где у вас есть 90% шанс пройти. Если вы перфекционист, я уверен, что вы хотите 100% шанс. Но так почти никогда не будет. Я думаю, что хорошим эмпирическим правилом является то, что вы должны быть в состоянии решить среднюю задачу, которую вы никогда раньше не видели, за 20-25 минут. Если вы можете это сделать, у вас, вероятно, есть как минимум 80% шансов пройти большинство собеседований Fang.

Я продолжаю решать до 569 задач, хотя я уже попал в Google, в основном потому, что я неудачник. Но это не так много времени, как вы думаете, потому что я дошел до того, что могу решить большинство средних вопросов за 10-15 минут. Но я определенно не рекомендую это, потому что от решения все большего количества проблем снижается отдача. Я считаю, что качество намного лучше, чем количество.

Я рекомендую решить около 150 вопросов, таких как аккуратный список кодов 150, в котором есть видеорешения и кодовые решения на 14 языках. Но убедитесь, что вы действительно понимаете каждую проблему. Огромная ошибка, которую совершают большинство людей, заключается в том, что они не возвращаются и не анализируют предыдущие проблемы. Чтобы эти сложные алгоритмы действительно усвоились, вам нужно повторение. Вот почему я работаю над тем, чтобы взять каждую задачу из аккуратного списка Code 150 и преобразовать ее в викторину с несколькими вариантами ответов. Потому что действительно сложно вернуться и решить каждый вопрос. И обычно все, что вам нужно сделать, это просмотреть трюк. Поэтому я сделал викторины, которые вы сможете решить за несколько минут, но при этом получить от этого много пользы. Вы можете проверить несколько задач прямо сейчас. Но когда список готов, в идеале вы должны пройти его всего за один день.

Я думаю, что это будет огромная экономия времени для людей. Так что, в конце концов, это код утечки — просто большая трата времени. Да, если вы пытаетесь узнать о разработке и создании приложений, утечка кода, вероятно, не поможет вам в этом. Но люди потратят тысячи часов на получение степени в области информатики, чтобы получить достойную оплачиваемую работу, но не будут тратить лишние 100 часов, чтобы получить большую компенсацию. Это действительно не имеет смысла для меня. Не поймите меня неправильно, код утечки — не самая захватывающая вещь в мире. Но я думаю, что это поможет вам подумать о пограничных случаях и о том, как вы будете тестировать свой код. Это навыки, которые можно применить при разработке приложений. И хотите верьте, хотите нет, но алгоритмы и структуры данных широко используются в промышленности, от механизмов баз данных до компиляторов. Но это правда, что код утечки не научит вас всему.

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

Если вам понравился этот блог и вы хотите помочь ему охватить более широкую аудиторию, нажмите кнопку «Нравится». Мы также хотели бы услышать ваше мнение об этих инструментах искусственного интеллекта от Google. Поэтому не стесняйтесь делиться своим мнением в разделе комментариев.

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

Спасибо.