💻 Coding interviews in a nutshell
6.86K subscribers
24 photos
214 links
Разбор задач для собеседований, по одной каждую неделю.

У микрофона Виктор @vitkarpov. ex-Amazon, ex-Yandex
Download Telegram
Happy quarantine! 👋 Задача на этой неделе — проверить можно ли сделать массив неубывающим изменив не более 1 элемента. (https://bit.ly/34idii3).
Первая неделя 30-Day LeetCoding Challenge закончена. Учавствуете? Если хотите обсудить решения задач (любых 😉) — добро пожаловать в чат для (лит)кодеров: https://t.me/joinchat/BM7LSxcZZGr0YlLbBT-ixQ
Happy Monday! 👋
На этой неделе будем сливать бинарные деревья — https://bit.ly/34AFtsW
Рассмотрим рекурсивный и итеративный варианты решения. Stackoverflow это не только сайт, но и исключение 😉, поэтому итеративный вариант может оказаться полезным.
Хочу порекомендовать канал Фёдора Меньшикова, автора книги «Олимпиадные задачи по программированию». Фёдор ведёт канал на YouTube «3.5 задачи в неделю», где разбирает в прямом эфире (с чатиком) по одной задаче раз в 2 дня. Я сам занимался с Федей индивидуально, когда активно готовился к собеседованиям. https://t.me/it_interviews
Happy Monday! 👋
Продолжаем решать задачи по списку, на этой неделе разбираем — Can Place Flower (https://bit.ly/34Tx43J). Я даже не знаю как это перевести чтобы не смешно было (но в статье всё равно сделал это) 🙂
Мой хороший друг и бывший коллега в Яндексе, Олег Громов, завёл Telegram-канал. У Олега необычный путь в разработке: Яндекс, учёба в США, удалённая работа в Америке и переезд в Швецию, а теперь вот и работа в Facebook в Лондоне. Про разработку, свои проекты, жизнь — подписывайтесь, должно быть интересно!
Как вообще можно попасть на собеседование в Microsoft, Amazon, Google или Facebook?

Хочу поделиться лайфхаком, который работал для меня.

Во-первых, оформляем резюме на LinkedIn. Уже на этом этапе вы можете попасть на радары рекрутеров, в какой-то момент астрологи объявляют месяц найма и рекрутеры особенно активизируются.

Ну а что делать если никто не пишет, не ждать же у моря погоды, верно? И вот он лайфхак. Находим на LinkedIn людей, которые работают в нужных вам компаниях и пересекаются с вами каким-то образом: скажем бывшие коллеги, или учились в одном вузе, ну или наконец просто тоже русскоговорящие — тут главное, чтобы было с чего начать разговор.

В моем случае я нашёл бывших коллег из Яндекса, с которыми лично не знаком, но все равно было легко добавиться в друзья, поспрашивать как там работается, и, в итоге, попросить рекомендацию (рефер). Это значит, что сотрудник компании рекомендует вас рекрутеру напрямую, передавая резюме. Правда, это никак не влияет на сами собеседования далее. Обычно люди охотно делятся реферами, в случае вашего найма — им премия 🙂

Через несколько дней рекрутер вам напишет, в том числе и с отказом, если ваше резюме не подходит, т.е. в любом случае вы получаете обратную связь. Отправляя заявку через форму на сайте, обычно ответа не дождаться.
Happy Monday! 👋

На этой неделе ищем поддеревья — https://bit.ly/3bJPDKy
Рассказываю про сериализацию, подробнее про сложение строк (спойлер: это не O(1)) и рекурсивный вариант решения.

PS. У канала есть чат, если хочется обсудить прочитанное и не только (работает кнопка "discuss").
Как правильно читать Cracking the Coding Interview

Недавно услышал следующее: «я прочитал весь Cracking the Coding Interview год назад и сейчас уже ничего не помню, открыл LeetCode на днях и не смог решить ни одной задачки». Не правильно вы читаете, дядя Фёдор.

В какой-то момент, для себя, я выработал следующий алгоритм «как правильно читать Cracking the Coding Interview» и он же подходит и для подготовки на LeetCode:

- сперва попробую решить сам;
- если совсем ничего не придумывается через полчаса — смотрю подсказку;
- если не получается ещё через полчаса — смотрю решение.

Есть некоторые общие принципы, техники, структуры данных, и надо научиться определять «что будет работать в данной задаче». Понимание приходит после некоторых мучений над задачей, пока наконец не наступает «aha moment».

По-моему, прогресс на втором шаге: когда уже полчаса помучился, получил инсайт и догадался до полного решения сам.

Если решаешь сразу сам, то задачки слишком простые — планку надо поднимать. Если приходится смотреть чужой код — планку надо опускать, рано для таких задач. Как я уже сказал, по-моему, прогресс где-то между.

А вы как «читаете LeetCode», помните свои aha-моменты? 🙂
Happy Monday! 👋
Задача этой недели — развернуть слова в строке (https://bit.ly/2z4w6py), без дополнительной памяти.
Разберём in-place решение и какие нужно сделать допущения для решения на JavaScript.
Happy Monday! 👋
На этой неделе будем искать пропущенные числа в массиве — https://bit.ly/2zog22e
Показываю постепенный переход от простого решения к решению без дополнительной памяти, стараюсь показать ход мыслей, который, на мой взгляд, соответствует реальному интервью.
PS. Нас ровно 2^8 человек, совпадение? Не думаю! 😉 Спасибо, что читаете.
Happy Monday! 👋
На этой неделе будем двигать битики, складывая два числа не используя операторы + и - → https://bit.ly/2LPwjQN
Поговорим про & и ^ в JavaScript и немного про 2s-complement представление отрицательных чисел.
Happy Monday! 👋
На этой неделе складываем слова из букв — https://bit.ly/2TyEncG
Немного затрагиваю ASCII и separation of concerns (читаем код как книгу).
Happy Monday! 👋
На этой неделе ищем «пик» в массиве — https://bit.ly/2ZRDLD7
Говорим про правильные вопросы которые помогают понять задачу и пишем бинарный поиск.
Happy Monday! 👋
На этой неделе пишем HashSet с нуля — https://bit.ly/3dDuTF7
Как работают хэш-таблицы (наши любимые словари под капотом), что такое хэш-функции и коллизии.
Постарался рассказать как можно практичнее, без «рассмотрим 10 лемм прежде чем перейти к теореме».
Happy Monday! 👋
Задача этой недели – K-й наибольший элемент в потоке (https://bit.ly/3cZpKGd)
Плавно переходим к решению с кучей и сравниваем с наивным решением через сортировку, разница на порядок.