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

У микрофона Виктор @vitkarpov. ex-Amazon, ex-Yandex
加入频道
Happy Monday! 👋

Задача этой недели — quickselect, или находим k-ю порядковую статистику. Где квикселект, там и квиксорт, поэтому любопытно разобрать в рамках сезона про «разделяй и властвуй». Пожалуй, это уже классическая история.

https://www.youtube.com/watch?v=pf77IP4m3Kw
Leadership Principles

Саша Горин принёс в чатик прекрасный шаблон для подготовки к бехейв-секции в Амазоне (в целом, ответы универсальные).

На каждый принцип есть пример с ответом по методу STAR.

Наш чатик прекрасен 😊

https://www.notion.so/BE-Interview-8adc74cf14ad450fab3083e0633d2821#d4f0576593024ede834e6f2cef5f350e
Фил Ранжин пишет про «людей, которые сами себе проиндексируют - сменой работы» https://yangx.top/myobrechenychannel/349
А мне кажется, что это не так работает.

Собеседоваться — стресс, а ещё отдельный скилл. Не все ходят по собеседованиям и знают свою цену на рынке. Зачастую люди годами сидят с той самой «индексацией в 5%».

Зависимость удовлетворенность-от-работы/сколько-я-зарабатываю сильно нелинейная, логарифм получается. Есть плато на котором «деньги не важны» (шутка из твитера про то, что хочу зарабатывать столько, чтобы говорить всем, что деньги не приносят счастья) и влияют другие факторы: команда, продукт, технологии.

> «Типа, что, вот так взять и поднять человеку зп втрое, потому что бакс скакнул? Да.»

Если речь про компании из РФ, то, скорее всего, и зарабатывают они на русскоязычном рынке, а значит прибыль в три раза не увеличилась. Откуда деньги разработчикам?

Плюс, кажется, что компании в России не конкурируют за разработчиков с компаниями из условной Долины, где нормальная зарплата в пересчете на рубли может приближаться к мульту в месяц. Почему?

Не все знают хорошо английский, готовы к удалённой работе, и вообще знают, что «так можно было». Соответственно, если не поднимать зп, то как бы ничего и не произойдёт — ну какой-то незначительный процент людей заведут трактор, но не все.

Вы как, ходите по собеседованиям чтобы знать текущий курс козули?
Продолжаю читать Programming Pearls. Интересно про перформанс.

Автор рассказывает про Андрея Аппеля, который работал над симуляцией какого-то движения 10K планет. И пришлось ему закопаться в перфоманс и программирование, отвлечься от физики, потому что просто цикл в цикле на три строки работал бы год.

Он сделал табличку с замерами (фотка дальше). Где конкретно и во сколько раз улучшился рантайм.

Переписал самую нагружённую функцию на ассемблере — ускорился в 2.5 раза. Запустили на компе с приблудной для ускорения плавающей точки, заплатив за оборудование кучу денег — ускорился в 2 раза.

Переписал с O(N^2) на O(N * log N) — ускорился в 12 раз 😃 В тему про где закопаны 80% результата. Но у всего есть цена.

Тут же как. Вот есть эти 10K планет и милое дело их все циклом в цикле пробежать. Откуда логарифм у него? Построил дерево поиска. Как? Оно само по себе ниоткуда не возьмётся.

Ему пришлось сделать хорошие предположения о том как можно планеты сгруппировать так, чтобы засунуть все это в дерево — очевидно, симуляция уже как бы не та, то есть не совсем точная. Но он смог показать насколько она не точная в новой модели, по мелочи вышло. Явно стоит того, чтобы не ждать год 😃

Вывод такой, что структуры данных это на самом деле про выдумать хорошую модель и показать, что она довольно точна в определённом случае, то есть про трейдофы. Системы ж не в вакууме существуют, а отражают реальные процессы в жизни.

И олимпиадные задачки на самом деле про это, только в миниатюре. То есть выучил ты алгосики и что с ними дальше делать? Никто не ставит задачу как «напиши мне бинарный поиск», лол, что там писать. А вот построить удачную модель — могут не только лишь все, нужна тренировка (по большей части не пугаться неизвестной задачи и не умереть со скуки пока бьешься головой о задачу).

Если эту мысль продолжать, то «синьорность» тоже где-то рядом. В синьора можно сгрузить неведомую никому херню и на выходе получить модель, с хорошим приближением, и так чтобы можно было запрограммировать (ведь компьютер не понимает «сделать красиво»), в идеале ещё и оценкой куда надо приложить 20% усилий чтобы все заиграло. Красота. Можно нарезать на таски в джире 😊
https://youtu.be/-dI7JaPQCpE

Сергей Сёма из Гугла, автор https://yangx.top/FaangInterview запустил подкаст, где с гостями общается про работу и жизнь в корпорациях. Понравился последний выпуск с Ларисой Агарковой про культуру девопса в Гугле: какие есть мониторинги, что делает дежурный, как пишутся «разборы полетов».
Как стать «синьором»? Спойлер: надо брать на себя ответственность.

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

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

У вас в компании есть ревью, как собирается кейс для повышения?
Зачем нужна секция «дизайн систем»?

Некоторые считают, что нужно начитать всяких базвордов и уметь расставить их в нужные места на диаграмме.

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

Чтобы не было такого, что сеть у нас всегда 100% надежная, latency не существует, а все зависимости (на самом деле написанные на коленке) работают как часы.

Грубо говоря, насколько прагматично человек подходит к дизайну систем, через призму той боли, которую он уже пережил.

Соответсвенно, научиться этому можно только если уже строил такие системы, и набил шишки. Поэтому систем-дизайн нужен чтобы оценить «синьорность». Алгосики — минимум, который все должны сдать, а дальше можно дать оценку только через вот такой разговор на «свободную тему», где правильных ответов нет.

То есть в дизайне всегда есть трейдофы, ограничения. Условно хотим построить систему бронирования отелей, а как данные получать? Будем скрейпить сайт Хилтона пока нас не заблокируют навсегда? Ну нет. Должны быть АПИ. А эти АПИ точно всегда актуальные данные возвращают? Ну нет, мы ж не будем каждую секунду их запрашивать — есть какие-то TPS. Нужен кэш, а что будем делать когда случится рассинхрон, то есть человек комнату забронировал, а на самом деле ее уже нет?

Другая классическая ошибка: отелей много, MySQL не подойдёт. А почему? А сколько всего отеле в мире? Ну не так уж и много, на самом деле! Кроме того, это отели, а значит можно хорошо шардировать (географически, например) то есть разложить их в разные базы и роутить куда надо запросы за данными.


И так далее, с интервьюером продолжаешь раскапывать задачу до дна.
Интересны ли вам стримы по систем-дизайну, с гостями, которые в теме?
Anonymous Poll
62%
Да. Больше, чем алгоритмы.
21%
Да. Меньше, чем алгоритмы.
5%
Нет, не люблю стримы.
11%
Посмотреть ответ.
Как начать и продолжить?

Знакома ли вам то чувство, когда, прочитав очередную историю успеха на литкоде, вы записываетесь на курс Седжвика на Курсере. Проходит неделя-другая, и запал пропадает. Гугл с Фейсбуком уже не такие привлекательные, а уведомления от Курсеры про сроки сдачи начинают успешно игнорироваться.

По моему опыту, важнее всего — цель. Спасибо, кэп. В моем случае, я собеседовался много раз, потому что не было конкретного решения о переезде. Грубо говоря, присматривался и путешествовал за чужой счёт, поэтому и подготовка шла, скажем так, с переменным успехом.

Оглядываясь назад, понимаю, что на это мне сходу бы указал любой психолог. Но, легко быть умным назад, как говорит мой бывший коллега.

Когда решение появилось, то появилась и система подготовки. Какая?

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

Выделил определённое количество часов в неделю на подготовку. Упарывать не нужно. Сидел каждый будний день с утра, когда голова варит лучше всего, занимался. На выходных отдыхал, а то следующая станция — выгорание.

Использовал «помидорки». 25 минут фокусируешься на задаче, потом перерыв. Смотришь подсказку, если задача не даётся, и заводишь таймер на следующие 25 минут.

И так каждый день, на протяжении 5 месяцев. Со временем все начинает устаканиваться в голове, появляется уверенность в себе, которую как раз и надо показать на собеседовании.

У вас есть система, которая помогает в обучении или работе над своими проектами?
Happy Monday! 👋

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

https://www.youtube.com/watch?v=Dpifo9OJpIs
Почему я решил завести YouTube-канал или история про английский

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

Это история получилась довольно захватывающей и реально дала плоды на собеседованиях, потому что словарь довольно специфический. Через пару видосов я, наконец, запомнил на каком слоге ударение в слове array 😄

Мне понравился и сам процесс создания видосов, захотелось научиться делать их нормально — до сих пор вот учусь. Судя по длине просмотра, которая увеличивается, здесь есть прогресс — стараюсь давать информацию плотничком, без воды, формат оттачивается. Это уже не про английский, конечно, но началось всё именно так.

Вы как, учите английский? Поделитесь лайфхаками 😉

https://www.instagram.com/p/B-E9_DmoSFl/
Всем привет 👋
Через час начинаем стрим с Тиной. Спойлер: сегодня будем мучать топологическую сортировку. Присоединяйтесь! 👨🏻‍💻👩‍💻

https://youtu.be/Y42XvA8FHL0
Всем привет! 👋

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

Ссылка на плейлист, если вдруг вам это будет полезно — https://www.youtube.com/playlist?list=PLtRFPaw3fD55Drn11idkIw0mBidrfml29
Happy Monday! 👋

Разборы задач уходят на каникулы 🏖️, до конца лета. Завтра разговорный стрим с Тиной, решать ничего не будем, только болтать. Последний стрим в этом сезоне — приходите с вопросами, набросами и предложениями 😊

https://www.youtube.com/watch?v=VYwF87PKwuo