20

На пути к FAANG - мысли о LeetCode, Educative и списках

Серия На пути к FAANG

Прошлый пост заминусили, а меня обвинили в рекламе (поверьте мне, если бы я был достаточно заметной персоной, чтобы меня заметили в LeetCode, моей первой репликой было бы "возьмите меня к себе работать", но никак не предложение рекламировать их на Пикабу). Тем не менее, на меня подписались восемь человек, и я вроде как чувствую своим долгом выложить отчет.

Итак, прошла неделя. Я неплохо продвинулся по курсу Grokking Coding Interview Patterns in Java (сейчас завершено 17% курса против 4% неделю назад). Когда я только-только начинал его, то думал, что вряд ли после 4 месяцев на LeetCode узнаю что-то принципиально новое для себя. Но теперь понимаю, что без этого курса мне бы вообще ничего не светило даже в теории. Подача информации там гораздо более структурированная и адаптированная конкретно под прохождение собесов в эти ваши FAANG'и. Ну вот условный паттерн "Fast and Slow Pointer". Я уже использовал его, чтобы решать задачки на поиск loop'ов в связанных списках. Но как оказалось, его можно также использовать для поиска k'th элемента в списке (например, середины), k'th элемента с конца и т.д. А паттерн "Sliding Window" я вообще если и использовал, то чисто интуитивно, даже не догадываясь о его существовании. Короче, курс оказался дико полезным, хоть и местами сложноватым. Сейчас учусь реверсить связанные списки in-place. Забавный факт - всегда использовал для этого колхозную реализацию через рекурсию с новым первым нодом, а тут оказалось, что можно сделать это в обычном цикле на 4 строчки.

Параллельно с этим продолжаю решать алгоритмы на LeetCode, чисто для тренировки. Решил послушать мудрых людей и отказаться от прорешивания алгоритмов уровня Hard (как я понял, их довольно редко дают на собеседованиях, а если и дают, то не ждут полного решения) и Easy (решаются за 2-3 минуты + еще 3 на подумать, как добиться идеальной производительности). Соответственно, сконцентрировался на Medium. Статистика пока далеко от идеала, бывают алгоритмы, которые даются за 10 минут с решением на O(n), бывают такие, которые занимают пару часов. От знакомого в Meta знаю, что показатель готовности к интервью - 15 минут на алгоритм + 15 минут на тесты и вопросы. В общем, знания дико неровные, что наверное характерно для самоучек.

Зато прям хорошо пошел английский. Даже не знаю, что поменялось, просто чувствую, что речь стала более грамотной и в то же время более гладко. Наконец-то начали уходить проблемы с артиклями - это была моя личная боль, успешно прогулял эту тему в универе 10 лет назад, и с тех пор в основном обходился вообще без них. Насколько я понимаю своего преподавателя - мы довольно близко к B2. Цель все та же - сдать IELTS к концу года на случай, если буду идти на иммиграционные программы Канады.

При этом всю неделю я бегал, словно белка в колесе и не знал, за что хвататься. С одной стороны нихреновый завал на работе, где все поуходили в отпуска на майские, с другой домашние задания по английскому и словарь раздутый до 120 слов, с третьей - дедлайн в сентябре на начало собесов в FAANG, с четвертой - жена, домашние дела и кот. В итоге получилось разрулить - попросил уменьшить домашние по английскому, начал вести списки (много списков), чтобы ничего не забывать. С этим начались серьезные проблемы - вплоть до минутных затыков "что же я хотел" у холодильника. Также строго урезал время на один алгоритм (до часа, потом лезу в решение, смотрю логику и пытаюсь воспроизвести у себя). Благодаря всему этому освободилось время на семью. Ну и продал Xbox SX нафиг, вместо него купил читалку - помогает успокоить нервную систему под вечер. По итогу все нормализовалось - привык и вроде как даже начал получать удовольствие от жизни. Ну и в фитнес-зал вернулся - как ни странно, тренировка с утра бодрит лучше, чем кофе (от кофеина полностью отказался два месяца назад).

Цель на следующую неделю - закрыть курс на 30% и прорешать минимум 7 Medium алгоритмов в LeetCode.

Короткое summary:

  1. Списки - наше все

  2. При обучении алгоритмам стоит помнить, что цель - научиться проходить интервью, а не круто решать алгоритмы

  3. Лучше делать по два часа, но каждый день, чем потратить 7 часов на учебу, и потом ходить с головной болью

  4. Тратить больше часа на один алгоритм означает просто впустую потратить это время. Как правило, за это время решение раздувается, глаз замыливается, а на мониторе написано уже 5 if-ов, чтобы пройти хоть часть тестов. Вероятность, что получится написать читабельный алгоритм на O(n) или O(log n)в таких условиях стремится к нулю. Проще посмотреть решение и понять, что ты делал не так.

Увидимся через неделю-две.

Лига программистов

2.2K поста11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества