Подготовка к собеседованию на позицию Data Scientist. Часть 1: Live Coding

Привет! Меня зовут Артем. Я работаю Data Scientist’ом в компании МегаФон (платформа для безопасной монетизации данных OneFactor). Мы строим скоринговые (credit scoring), лидогенерационные (lead generation) и антифрод (anti-fraud) модели на телеком данных, а также делаем гео-аналитику (geoanalytics).

В январе 2022 года я создал репозиторий, чтобы хранить там ссылки на материалы по различным темам: подготовка к собеседованиям, computer science, data science, git, математика и многие другие. За все это время репозиторий разросся до таких размеров (и по количеству материалов, и по набору топиков), что я пришел к выводу, что нужно каким-то образом структурировать эту информацию.

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

Типичный процесс интервью глазами Dall-E 3

Типичный процесс интервью глазами Dall-E 3

Обычно собеседование на позицию 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 минут. В некоторых компаниях, например в Яндексе, таких секций может быть несколько.

Если до этого момента вы еще ни разу не проходили данную секцию и не решали алгоритмические задачи, то рекомендую начать со следующих ресурсов:

План подготовки

После того, как вы поняли что такое алгоритмы и как проходят такие секции можно приступить к подготовке. И тут, как мне кажется, есть три основных подхода:

  • Фундаментальный
    Прохождение курсов и чтение книг по алгоритмам и структурам данных.

  • Практический
    Решение задач на различных платформах: LeetCode, Codewars, HackerRank и тд.

  • Гибридный
    Изучение теории и мгновенное применении ее на практике.

Я предпочитаю последний — на нем и сфокусируемся.

Ниже рассмотрим 3 плана действий (roadmap) для изучения алгоритмов (подготовки к алгоритмическому интервью).

План подготовки от NeetCode

Начнем со следующего ⭐ roadmap’а:

NeetCode's roadmap

NeetCode’s roadmap

На изображении выше я выделил блоки и расставил приоритеты — именно в таком порядке автор рекомендует знакомиться с этими темами.

Когда мы нажимаем на один из топиков в roadmap’е, то получаем набор тем для изучения (в данном случае это Dynamic Arrays (динамические массивы), Hash Usage (использование хеширования), Hash Implementation (имплементация хеширования), Prefix Sums (префиксные суммы)), а ниже видим задачи для практики с делением на уровни, видео-объяснением и решением на Python. При этом, если мы нажмем на задачу, то нас перекинет на сайт LeetCode.

Содержание блока Arrays & Hashing

Содержание блока Arrays & Hashing

План подготовки от Владимира Балуна

Алгоритм YouTube несколько месяцев назад предложил мне видео, из которого я узнал про еще один roadmap для подготовки и собрал всю необходимую информацию здесь:

  • Видео: полезные для подготовки видео с канала автора

  • Список задач: преобразовал доску miro (miro board) из видео в удобный список с гиперссылками.

  • Программа курса: прикрепил программу авторского курса, которую мы будем использовать для подготовки.

План подготовки от EDA Academy

Еще один roadmap для изучения алгоритмов от EDAcademy.

Что же со всем этим делать?

Рекомендую сделать файл, в котором вы будете отслеживать свой прогресс и сохранять необходимую информацию.

Я пришел к следующей структуре:

  • Весь файл поделен на уровни (аналогично блокам из плана подготовки от NeetCode)

  • Внутри уровня находятся темы

  • Каждая тема поделена на два раздела

    • Теория
      Сохраняем теорию, чтобы при необходимости повторить

    • Практика
      Сохраняем ссылки на задачи и решение. Для каждой задачи можем коротко описать подход

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

Материалы

Алгоритмы и структуры данных (эх, классика)

В предыдущей секции были разобраны подходы к изучению алгоритмов и структур данных, рассмотрены 3 плана для подготовки и предложен шаблон для создания собственного roadmap’а.

Не хватает только материалов для заполнения персонализированного роадмапа, которые мы рассмотрим ниже в этом разделе.

Задачники

Книги

Подготовка к собеседованию:

  • Elements of Programming Interviews in Python: The Insiders' Guide
    Данная книга содержит более 250 алгоритмических задач с решениями по основным темам, о которых мы говорили выше. Есть версии для C++ и Java.

  • Cracking the Coding Interview
    Отличается от предыдущей более подробным введением и дополнительными вопросами по языкам программирования и поведенческому интервью.

Изучение алгоритмов:

Курсы

  • Основы алгоритмов
    Бесплатный курс (хендбук) от Яндекса. Лучше, чем Яндекс я этот ресурс не резюмирую:
    «С помощью этого хендбука вы научитесь проектировать, оптимизировать, комбинировать и отлаживать алгоритмы — причем без привязки к какому-либо языку программирования. Кроме теории мы собрали и практические задания разного уровня сложности, а также подготовили систему автоматической проверки эффективности алгоритмов — всё это поможет вам закрепить и отточить новые навыки»

  • Алгоритмы: теория и практика: Методы + Структуры данных
    Классные курсы для тех, кто хочет разобраться с алгоритмами и структурами данных, но, по моему мнению, это чересчур для собеседований (кроме Яндекса).

  • Introduction To Algorithms
    Вводный курс, охватывающий элементарные структуры данных (динамические массивы, кучи, сбалансированные двоичные деревья поиска, хеш-таблицы) и алгоритмические подходы к решению классических задач (сортировка, поиск по графам, динамическое программирование). Введение в математическое моделирование вычислительных задач, а также общие алгоритмы, алгоритмические парадигмы и структуры данных, используемые для решения этих задач. Подчеркивает взаимосвязь между алгоритмами и программированием, а также знакомит с основными показателями производительности и методами анализа этих проблем.

  • Материалы от Яндекса:

    Видео с лекциями + домашние задания с разбором

  • Курс «Алгоритмы и структуры данных» (яндекс практикум) paid

  • Подготовься к алгоритмическому собеседованию за 9 недель (balun.courses) paid

  • Алгоритмическое программирование paid
    Курс по олимпиадному программированию от А до Я. Для собеседования избыточно (кроме Яндекса), но первые два уровня могут быть хорошим введением в алгоритмические задачи.

  • Algorithms and Data Structures for Beginners paid + Advanced Algorithms paid
    Курсы от создателя первого плана подготовки (NeetCode). Объясняет простым языком и закрепляет практикой.

  • Алгоритмические задачи с собеседований paid

Разное

Советы:

  • ⭐ Решение алгоритмических задач
    Советы по решению задач. Хорошо дополняет, а где-то и повторяет, бесплатный курс от яндекс практикума, про который я писал в разделе Знакомство. Советую также прочитать всю методичку, а не только этот раздел.

  • Coding Interview Guide
    Советы по прохождению алгоритмической секции.

Структуры данных:

Телеграм каналы:

Репозитории:

  • 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).

Для подготовки к данной секции рекомендую ознакомиться с материалами ниже.

Чистый код

Теория

  • Основы Python
    Хендбук по Python поможет овладеть основным синтаксисом и принципами языка, а также разными подходами к программированию.

  • Программирование на Python
    Вводный курс по Python. Курс посвящен базовым понятиям и элементам языка программирования Python (операторы, числовые и строковые переменные, списки, условия и циклы). Курс является вводным и наиболее подойдет слушателям, не имеющим опыта написания программ ни на одном из языков программирования.

  • Python: основы и применение
    Курс посвящен базовым принципам языка Python и программирования в целом. Подойдет тем, кто уже может писать простейшие программы на Python или тем, кто до этого программировал на других языках.

  • Поколение Python:

    Просто отличные курсы, которые становились лучшими бесплатными/платными курсами на Stepik в течение 2020–2022 годов.

  • CS50«s Introduction to Programming with Python
    Введение в программирование с использованием языка Python от гарвардского университета.

  • Python Tutorial for Beginners (with mini-projects)

Вопросы

Практика

Разное

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:

    Все в этих курсах мне понравилось, кроме того, что они платные и нет теории в виде текста (все в видео формате)

  • 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 задач на работе и/или самостоятельно. В этом вам помогут материалы, которые я указал ниже.

Анализ кода

Практика

Для практики рекомендую делать 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 (топик), добавляете туда материал, который хотите запомнить, например алгоритмические задачи, и повторяете его, когда программа предложит.

Также рекомендую книги:

Эти книги будут полезны всем, кто хочет эффективно усваивать новые знания и использовать их на практике.

Подведем итоги

Основная идея данной статьи заключается в том, чтобы использовать доступные ресурсы в интернете (а именно, планы и программы, курсы, видео, статьи, блог-посты и т.д.) для того, чтобы:

  1. Подготовить собственный план изучения материала
    Свои любимые материалы я выделил ⭐

  2. Наполнить этот план теорией и практикой

  3. Достичь своей цели (изучение алгоритмов / поиск работы), при этом сохранив все материалы на будущее, как reference (все равно придется повторять при устройстве на следующую работу)

Собранные в этой статье материалы будут полезны при подготовке к собеседованиям на различные позиции в Big Data МегаФон.

А если вы только начинаете свою карьеру в Data Science, то обратите внимание на стажировки в крупных компаниях, на которых вы сможете не только прокачать свои знания, но также получить крутой опыт применения теории на практических задачах бизнеса. В МегаФоне пример такой стажировки — это акселератор (пишите на почту с темой письма »стажировка в big data»), с помощью которого ежегодно находят свою первую работу специалисты по работе с данными (Data Scientists), аналитики (Data Analysis) и дата инженеры (Data Engineers).

Что дальше?

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

Актуальные ресурсы для этой серии статей вы сможете найти в репозитории Interview preparation, который будет поддерживаться и обновляться. Также вы можете подписаться на мой телеграм-канал Data Science Weekly, в котором я каждую неделю делюсь интересными и полезными материалами.

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

P.S. Благодарю Дарью Шатько за редактуру и вычитку этого поста!

© Habrahabr.ru