Материалы для подготовки к собеседованию на позицию Data Scientist. Часть 1: Live Coding
Привет! Меня зовут Артем. Я работаю Data Scientist'ом в компании МегаФон (платформа для безопасной монетизации данных OneFactor). Мы строим скоринговые (credit scoring), лидогенерационные (lead generation) и антифрод (anti-fraud) модели на телеком данных, а также делаем гео-аналитику (geoanalytics).
В январе 2022 года я создал репозиторий, чтобы хранить там ссылки на материалы по различным темам: подготовка к собеседованиям, computer science, data science, git, математика и многие другие. За все это время репозиторий разросся до таких размеров (и по количеству материалов, и по набору топиков), что я пришел к выводу, что нужно каким-то образом структурировать эту информацию.
В итоге, блок с материалами для подготовки к собеседованиям я решил выделить в отдельный репозиторий, а для того, чтобы было понятно как эти материалы использовать, было решено написать серию статей, первую из которых вы читаете прямо сейчас.
Обычно собеседование на позицию Data Scientist состоит из следующих секций (порядок может быть разным):
Live Coding
Дизайн систем машинного обучения (middle+/senior)
Поведенческое интервью (middle+/senior)
В данной статье разберемся что такое live coding интервью и как к нему готовиться.
Материал в первую очередь будет полезен Data Scientist'ам и ML инженерам, при этом некоторые разделы, например, Алгоритмы и структуры данных подойдут всем IT специалистам, которым предстоит пройти секцию live coding.
Замечания
Я буду указывать ссылки на материалы не только на русском языке, но и на английском. Если у одного и того же ресурса есть версия на русском и на английском языке, то я буду указывать обе, чтобы читатель сам смог выбрать подходящий вариант.
Большое количество ресурсов будет на английском, поэтому знание английского это must have не только для работы по IT специальности, но и для подготовки к собеседованию. Зачастую оригинальная версия (на английском) проще читается, чем перевод, потому что содержит в себе много терминов и названий, которые устоялись и при плохом переводе только путают читателя.
Для книг я буду прикладывать ссылки на издательства (по возможности), чтобы вы сами смогли выбрать где их приобрести. Для технической литературы рекомендую использовать электронные версии книг, потому что в них всегда можно выделить важный отрывок, оставить комментарий и быстро найти нужную информацию.
По умолчанию, ресурсы на русском языке идут раньше ресурсов на английском (там, где они есть).
Большинство материалов в этой статье - бесплатные, но есть несколько платных (помечены paid
). Рекомендую покупать их только, если четко понимаете, что не хотите или не можете тратить свое личное время на самостоятельный поиск информации.
Содержание
Подготовка к алгоритмическому интервью
В рамках live coding секции на собеседовании у вас могут проверить знание:
Алгоритмов и структур данных
Программирования
SQL
Решения практических Data Science задач
Алгоритмическое интервью - один из наиболее распространенных форматов live coding этапа в западных BigTech компаниях и теперь повсеместно встречается в российском "бигтехе", поэтому в этом разделе мы более подробно остановимся на нем. Про другие форматы можно почитать в разделе Материалы.
Знакомство
В течение одной алгоритмической секции от вас будет ожидаться решение 1-2 алгоритмических задач (примеры таких задач можно найти на LeetCode) за 60 - 90 минут. В некоторых компаниях, например в Яндексе, таких секций может быть несколько.
Если до этого момента вы еще ни разу не проходили данную секцию и не решали алгоритмические задачи, то рекомендую начать со следующих ресурсов:
⭐ «Подготовка к алгоритмическому собеседованию» от Яндекс Практикума.
Он позволит:Понять структуру алгоритмических собеседований, требования и критерии оценки.
Проверить свой уровень знаний алгоритмов и структур данных.
Попрактиковаться на реальных задачах с собеседований.
Грокаем алгоритмы. Иллюстрированное пособие для программистов / Grokking Algorithms. An illustrated guide for programmers and other curious people
Данная книга является очень простым и дружелюбным введением в алгоритмы. Я бы не стал опираться на нее в подготовке к собеседованию, но как введение в тему вполне подойдет. Читая эту книгу, я замечал в ней много ошибок, поэтому стоит сверяться со своей интуицией на сайте автора в разделе Errata.
План подготовки
После того, как вы поняли что такое алгоритмы и как проходят такие секции можно приступить к подготовке. И тут, как мне кажется, есть три основных подхода:
Фундаментальный
Прохождение курсов и чтение книг по алгоритмам и структурам данных.Практический
Решение задач на различных платформах: LeetCode, Codewars, HackerRank и тд.Гибридный
Изучение теории и мгновенное применении ее на практике.
Я предпочитаю последний - на нем и сфокусируемся.
Ниже рассмотрим 3 плана действий (roadmap) для изучения алгоритмов (подготовки к алгоритмическому интервью).
План подготовки от NeetCode
Начнем со следующего ⭐ roadmap'а:
На изображении выше я выделил блоки и расставил приоритеты - именно в таком порядке автор рекомендует знакомиться с этими темами.
Когда мы нажимаем на один из топиков в roadmap'е, то получаем набор тем для изучения (в данном случае это Dynamic Arrays (динамические массивы), Hash Usage (использование хеширования), Hash Implementation (имплементация хеширования), Prefix Sums (префиксные суммы)), а ниже видим задачи для практики с делением на уровни, видео-объяснением и решением на Python. При этом, если мы нажмем на задачу, то нас перекинет на сайт LeetCode.
План подготовки от Владимира Балуна
Алгоритм YouTube несколько месяцев назад предложил мне видео, из которого я узнал про еще один roadmap для подготовки и собрал всю необходимую информацию здесь:
Видео: полезные для подготовки видео с канала автора
⭐ Список задач: преобразовал доску miro (miro board) из видео в удобный список с гиперссылками.
⭐ Программа курса: прикрепил программу авторского курса, которую мы будем использовать для подготовки.
План подготовки от EDA Academy
Еще один roadmap для изучения алгоритмов от EDAcademy.
Что же со всем этим делать?
Рекомендую сделать файл, в котором вы будете отслеживать свой прогресс и сохранять необходимую информацию.
Я пришел к следующей структуре:
Весь файл поделен на уровни (аналогично блокам из плана подготовки от NeetCode)
Внутри уровня находятся темы
Каждая тема поделена на два раздела
Теория
Сохраняем теорию, чтобы при необходимости повторитьПрактика
Сохраняем ссылки на задачи и решение. Для каждой задачи можем коротко описать подход
В качестве примера прикладываю шаблон с первыми двумя блоками, который можно дублировать и использовать.
Материалы
Алгоритмы и структуры данных (эх, классика)
В предыдущей секции были разобраны подходы к изучению алгоритмов и структур данных, рассмотрены 3 плана для подготовки и предложен шаблон для создания собственного roadmap'а.
Не хватает только материалов для заполнения персонализированного роадмапа, которые мы рассмотрим ниже в этом разделе.
Задачники
⭐ Leetcode Patterns
Список вопросов с делением по темам, сложности и компаниям (которые спрашивают эти вопросы на собеседовании) + советы насчет того, какой алгоритм выбрать при первом взгляде на условия задачи.LeetCode Explore
Мини-курсы по алгоритмам (и другим темам) от LeetCode
Задачи проекта "Школа программиста" красноярского краевого дворца пионеров
Задачи московского центра непрерывного математического образования
Книги
Подготовка к собеседованию:
Elements of Programming Interviews in Python: The Insiders' Guide
Данная книга содержит более 250 алгоритмических задач с решениями по основным темам, о которых мы говорили выше. Есть версии для C++ и Java.Cracking the Coding Interview
Отличается от предыдущей более подробным введением и дополнительными вопросами по языкам программирования и поведенческому интервью.
Изучение алгоритмов:
Томас Кормен. Алгоритмы: построение и анализ / Introduction to Algorithms
Классический труд по алгоритмам.Дасгупта С., Пападимитриу Х., Вазирани У. Алгоритмы / S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani. Algorithms
Другие:
Никлаус Вирт. Алгоритмы и структуры данных.
Дж. Макконнелл. Основы современных алгоритмов.
Седжвик Роберт. Алгоритмы на C++ / Седжвик Роберт, Уэйн Кевин. Алгоритмы на Java
Альфред Ахо, Джон Хопкрофт, Джеффри Ульман. Структуры данных и алгоритмы
Курсы
Основы алгоритмов
Бесплатный курс (хендбук) от Яндекса. Лучше, чем Яндекс я этот ресурс не резюмирую:
"С помощью этого хендбука вы научитесь проектировать, оптимизировать, комбинировать и отлаживать алгоритмы — причем без привязки к какому-либо языку программирования. Кроме теории мы собрали и практические задания разного уровня сложности, а также подготовили систему автоматической проверки эффективности алгоритмов — всё это поможет вам закрепить и отточить новые навыки"Алгоритмы: теория и практика: Методы + Структуры данных
Классные курсы для тех, кто хочет разобраться с алгоритмами и структурами данных, но, по моему мнению, это чересчур для собеседований (кроме Яндекса).Introduction To Algorithms
Вводный курс, охватывающий элементарные структуры данных (динамические массивы, кучи, сбалансированные двоичные деревья поиска, хеш-таблицы) и алгоритмические подходы к решению классических задач (сортировка, поиск по графам, динамическое программирование). Введение в математическое моделирование вычислительных задач, а также общие алгоритмы, алгоритмические парадигмы и структуры данных, используемые для решения этих задач. Подчеркивает взаимосвязь между алгоритмами и программированием, а также знакомит с основными показателями производительности и методами анализа этих проблем.Материалы от Яндекса:
Видео с лекциями + домашние задания с разбором
Подготовься к алгоритмическому собеседованию за 9 недель (balun.courses)
paid
Алгоритмическое программирование
paid
Курс по олимпиадному программированию от А до Я. Для собеседования избыточно (кроме Яндекса), но первые два уровня могут быть хорошим введением в алгоритмические задачи.Algorithms and Data Structures for Beginners
paid
+ Advanced Algorithmspaid
Курсы от создателя первого плана подготовки (NeetCode). Объясняет простым языком и закрепляет практикой.
Разное
Советы:
⭐ Решение алгоритмических задач
Советы по решению задач. Хорошо дополняет, а где-то и повторяет, бесплатный курс от яндекс практикума, про который я писал в разделе Знакомство. Советую также прочитать всю методичку, а не только этот раздел.Coding Interview Guide
Советы по прохождению алгоритмической секции.
Структуры данных:
Data Structures Reference
Краткий справочник затрат по Big O («O» большое) нотации и основных свойств каждой структуры данных.An Executable Data Structures Cheat Sheet for Interviews
Справочник по структурам данных с реализацией на разных языках программирования и оценкой сложности.
Телеграм каналы:
Алгоритмы - Собеседования, Олимпиады, ШАД
Телеграм канал, в котором выкладывают алгоритмические задачи (с решениями).
Репозитории:
Leetcode company-wise questions
Репозиторий, содержащий список вопросов (в разрезе компаний), доступных на премиум-версии Leetcode.The Algorithms
Репозитории для изучения структур данных и алгоритмов и их реализации на любом языке программирования.
Остальное:
Алгоритмы и структуры данных простыми словами
Подборка материалов для изучения алгоритмов и структур данных + видео на тему мотивации для их изучения.Алгоритмика
Материалы различных CS-курсов, проводящихся в Tinkoff Generation (анализ алгоритмов, структуры данных, динамическое программирование, математика, графы, геометрия, строки, разное).Algorithmic concepts
Шпаргалка с теорией по алгоритмам и структурам данных.⭐ Algorithmic Thinking
В статьях на этом сайте рассматриваются различные подходы к изучению алгоритмов. Все они проиллюстрированы с помощью задач с LeetCode'а, причем указаны не только решения, но и объяснения ПОЧЕМУ решение работает и КАК вы тоже можете его понять.
Программирование на Python (куда же без него)
Для Data Scientist'а язык программирования Python (иногда R) - это рабочий инструмент, с помощью которого проводится анализ данных, поэтому важно хорошо в нем разбираться, чтобы писать "чистый" и оптимальный код.
Чтобы проверить эти знания, на собеседовании вас могут спросить такие базовые теоретические вопросы, как:
Какие типы данных есть в Python?
Какие структуры данных есть в Python?
Отличия типов и структур данных
Асимптотика основных операций в Python
Также нередко предлагают оценить что будет выведено после выполнения ячейки кода/функции.
Например:
# Что выведет код?
D = {}
A = D
B = D.copy()
B[ 'b' ] = 2
A[ 'b' ] = 3
print(D, B, A)
Во время ответа на этот вопрос собеседуемый должен проявить свои знания о способах копирования объектов в Python и различиях между ними (shallow vs deep copy), а также о изменяемости типов данных в Python (mutable vs immutable).
Для подготовки к данной секции рекомендую ознакомиться с материалами ниже.
Чистый код
⭐ Мартин Р. Чистый код: создание, анализ и рефакторинг / Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship
Стив Макконнелл. Совершенный код. Мастер-класс / Steve McConnell. Code Complete: A Practical Handbook of Software Construction
Теория
Основы Python
Хендбук по Python поможет овладеть основным синтаксисом и принципами языка, а также разными подходами к программированию.Программирование на Python
Вводный курс по Python. Курс посвящен базовым понятиям и элементам языка программирования Python (операторы, числовые и строковые переменные, списки, условия и циклы). Курс является вводным и наиболее подойдет слушателям, не имеющим опыта написания программ ни на одном из языков программирования.Python: основы и применение
Курс посвящен базовым принципам языка Python и программирования в целом. Подойдет тем, кто уже может писать простейшие программы на Python или тем, кто до этого программировал на других языках.Поколение Python:
Просто отличные курсы, которые становились лучшими бесплатными/платными курсами на Stepik в течение 2020-2022 годов.
CS50’s Introduction to Programming with Python
Введение в программирование с использованием языка Python от гарвардского университета.
Вопросы
Python: вопросы на собеседовании:
Python вопросы с собеседований
Вопросы по Python + алгоритмические задачи.
Практика
Задачи по Python и машинному обучению
Каждый день в канале выкладываются различные задачи со звездочкой, которые заставляют подумать.
Разное
Efficient Python Tricks and Tools for Data Scientists
Классная онлайн-книга, содержащая различные методы и инструменты для более эффективного использования Python.
SQL (тоже нужно)
Владение SQL (Pandas/PySpark) также часто проверяется во время live coding интервью, потому что это необходимый навык для специалиста по данным.
В рамках этой секции на собеседовании вам могут задать теоретические вопросы, например:
Что делает
Union
?В чем разница между
INNER JOIN
иLEFT
/RIGHT JOIN
?Что за
NoSQL
базы данных? В чем их принципиальное отличие отSQL
?Что такое под-запрос и для чего они нужны?
Также могут предложить решить 1 или 2 задачи на написание SQL запроса (или совершение аналогичных преобразований в Pandas
/PySpark
/name_your_framework
), например:
Дана таблица transactions:
id | date | income |
1 | 2021-04-01 | 22000 |
2 | 2021-04-02 | 11100 |
3 | 2021-04-11 | 64000 |
4 | 2021-05-04 | 23000 |
5 | 2021-06-17 | 20000 |
6 | 2021-06-18 | 7900 |
7 | 2021-06-19 | 32000 |
8 | 2021-07-12 | 17000 |
9 | 2021-07-23 | 14600 |
10 | 2021-01-12 | 26300 |
11 | 2021-08-11 | 10000 |
Для текущего месяца посчитайте скользящее среднее дохода за 3 предыдущих месяца.
Во время ответа на этот вопрос собеседуемый должен проявить свои знания о группировке данных с помощью оператора GROUP BY
, функциях MONTH
/SUM
/AVG
, оконных функциях и вариантах ограничения фрейма ROWS BETWEEN
.
Для подготовки к данному типу интервью рекомендую ознакомиться с материалами ниже.
Курсы
Интерактивный тренажер по SQL
Минимально необходимые теоретические выкладки + много практики. Из минусов могу отметить большое количество запросов на корректировку данных (CREATE TABLE
,INSERT INTO
,UPDATE
,DELETE
), которые необходимо написать для успешного завершения курса.⭐ Пакет SQL курсов
paid
:Основы SQL
paid
Продвинутый SQL
paid
Все в этих курсах мне понравилось, кроме того, что они платные и нет теории в виде текста (все в видео формате)
PostgreSQL Tutorial for Beginners
Вводный курс в PostgreSQL. Кажется, что он сильно проще, чем курсы выше. Также из минусов стоит отметить отсутствие практики.Оконные функции SQL
paid
18 уроков и 56 практических заданий на оконные функции. Минус - курс платный.SQL Tutorial
Огромный туториал/гайд с теорией и практикой.The Ultimate SQL Guide
Красивый туториал с теорией для изучения/повторения основ SQL.
Практика
⭐ Онлайн тренажер SQL Academy
Удобный и бесплатный тренажер с большим количеством практических задач.Ace the SQL Interview
37 задач на SQL, которые встречались на собеседованиях в топовые компании.⭐ Симулятор SQL
Бесплатный симулятор SQL (более 120 задач).Другие тренажеры:
Решение практической Data Science задачи (а что так можно было?)
Иногда в рамках данной секции вместо решения алгоритмической задачи или написания SQL вопроса предлагается более практическое задание, а именно решение прикладной задачи по анализу данных:
End-to-end: Начиная от EDA (Exploratory Data Analysis, разведочный анализ данных), до построения модели.
Обычно такую задачу дают в виде тестового задания, потому что она предполагает от нескольких часов до нескольких дней на решение.Укороченный формат:
Предлагается код (предположим, код для построения модели), который нужно проанализировать, найти ошибки и предложить улучшения.
Предлагается решить одну из частей полной задачи по анализу данных, например, провести EDA или feature engineering (создание и модификация признакового пространства).
Данный формат не занимает много времени, поэтому используется во время собеседования.
Подготовкой к данному виду live coding собеседования является практика решения Data Science задач на работе и/или самостоятельно. В этом вам помогут материалы, которые я указал ниже.
Анализ кода
⭐ Annotated Research Paper Implementations: Transformers, StyleGAN, Stable Diffusion, DDPM/DDIM, LayerNorm, Nucleus Sampling and more
Коллекция реализаций нейросетевых архитектур на PyTorch с комментариями.Библиотеки
Нужна насмотренность, поэтому читаем документацию и пытаемся понять реализацию алгоритмов в популярных ML/DL библиотеках:⭐ PEP 8 – Style Guide for Python Code + How to Write Beautiful Python Code With PEP 8
Гид по стилю программ на Python, чтобы ваш код было приятно читать и легко поддерживать.
Практика
Для практики рекомендую делать pet-проекты (начать можно с этой статьи - Data Science Pet Projects. FAQ).
⭐ Kaggle Learn
Kaggle бесплатно предоставляет доступ к своим коротким, но интересным курсам. Вот лишь некоторые из них:Kaggle Competitions
Можно участвовать, как в учебных соревнованиях, направленных на тренировку и развитие навыков, так и в соревнованиях, за победу в которых дают призы.⭐ The Kaggle Book
Внутри книги подробно описан анализ соревнований, примеры кода, end-to-end пайплайны, а также все идеи, предложения, лучшие практики, советы и рекомендации, которые Лука Массарон с Конрадом Банахевичом собрали за годы соревнований на Kaggle (более 22 лет).Симулятор ML
paid
Платный практико-ориентированный курс, на котором можно решить большое количество ML задач.
Гибрид (все, везде и сразу)
На собеседовании, например, вас могут попросить решить:
Несколько алгоритмических задач
Одну алгоритмическую задачу и одну на SQL
Дать тестовое задание, связанное с ML и SQL
И так далее
Поэтому при подготовке советую не пренебрегать ни одним из пунктов, указанных выше.
Learning How to Learn
Чтобы надолго запомнить всю эту информацию и не сойти с ума можно использовать технику интервального повторения, а для реализации этой техники программу ⭐ Anki.
Создаете deck (топик), добавляете туда материал, который хотите запомнить, например алгоритмические задачи, и повторяете его, когда программа предложит.
Также рекомендую книги:
⭐ Марк Макдэниэл, Генри Рёдигер, Питер Браун. Запомнить все. Усвоение знаний без скуки и зубрежки / Make it Stick: The Science of Successful Learning by Peter C. Brown, Henry L. Roediger, III, and Mark A. McDaniel
Барбара Оакли, Бет Роговски, Терренс Джей Сейновски. Научить невозможному. Как помочь ученикам освоить любой предмет и не бояться экзаменов / Uncommon Sense Teaching. Practical Insights in Brain Science to Help Students Learn by Barbara Oakley PhD, Beth Rogowsky EdD, Terrence J. Sejnowski
Эти книги будут полезны всем, кто хочет эффективно усваивать новые знания и использовать их на практике.
Подведем итоги
Основная идея данной статьи заключается в том, чтобы использовать доступные ресурсы в интернете (а именно, планы и программы, курсы, видео, статьи, блог-посты и т.д.) для того, чтобы:
Подготовить собственный план изучения материала
Свои любимые материалы я выделил ⭐Наполнить этот план теорией и практикой
Достичь своей цели (изучение алгоритмов / поиск работы), при этом сохранив все материалы на будущее, как reference (все равно придется повторять при устройстве на следующую работу)
Собранные в этой статье материалы будут полезны при подготовке к собеседованиям на различные позиции в Big Data МегаФон.
А если вы только начинаете свою карьеру в Data Science, то обратите внимание на стажировки в крупных компаниях, на которых вы сможете не только прокачать свои знания, но также получить крутой опыт применения теории на практических задачах бизнеса. В МегаФоне пример такой стажировки - это акселератор (пишите на почту с темой письма "стажировка в big data"), с помощью которого ежегодно находят свою первую работу специалисты по работе с данными (Data Scientists), аналитики (Data Analysis) и дата инженеры (Data Engineers).
Что дальше?
В следующей статье разберем материалы для подготовки к секции по классическому машинному обучению.
Актуальные ресурсы для этой серии статей вы сможете найти в репозитории Data Science Resources, который будет поддерживаться и обновляться. Также вы можете подписаться на мой телеграм-канал Data Science Weekly, в котором я каждую неделю делюсь интересными и полезными материалами.
Если вы знаете какие-нибудь классные ресурсы, которые я не включил в этот список, то прошу написать о них в комментариях.
P.S. Благодарю Дарью Шатько за редактуру и вычитку этого поста!