Загрузка…
Загрузка…
backend / senior / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_week
Длительность
—
01
Код
Даны два массива: [1, 2, 3, 2, 0] и [5, 1, 2, 7, 3, 2]. Нужно вернуть пересечение с учётом повторения элементов: [1, 2, 2, 3] (порядок неважен). Решить без стандартной библиотеки (без set.intersection, collections.Counter и т.п.).
Интервью 1. Первое решение через set.intersection отклонили — требовали ручную реализацию. У интервьюеров есть эталонное решение, к которому подталкивают.
02
Теория
Какова сложность (Big O) вашего алгоритма?
Интервью 1, follow-up к задаче на пересечение массивов.
03
Код
Дана строка (возможно, пустая) из букв A-Z, например AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB. Написать функцию RLE, которая вернёт строку вида A4B3C2XYZD4E3F3A6B28 и сгенерирует ошибку при невалидном входе. Если символ встречается 1 раз — остаётся без изменений; если более 1 раза — добавляется количество повторений.
Интервью 1. Решать без стандартной библиотеки (itertools.groupby нельзя). Код не запускается — интервьюер проверяет в голове и указывает на нерабочие случаи.
Заметки
Ретро-статья о найме в Яндекс.Лавку (Яндекс), кандидат — senior Python-разработчик, вышли через внешнего рекрутера (цепочка рекрутеров между кандидатом и интервьюерами). Пройдено 4 онлайн-интервью в Zoom подряд, все целиком из алгоритмических задач (10 задач) в Яндекс.Код («яндекс.блокнот») без возможности запуска кода — интервьюер проверяет решения в уме. Запрещалась стандартная библиотека Python. Перед интервью прислали методичку, в которой упоминались «вопросы на C++» (для питониста). Вопросов про опыт, проекты, HTTP/REST/Django ORM/SQL/Docker/многопоточность не было вообще. У интервьюеров есть эталонные решения, к которым подталкивают. Интервьюеры между собой не делятся контекстом — один и тот же вопрос про сложность сортировки задали дважды. На момент написания статьи фидбек по итогам 4-го интервью ещё не получен. Автор критикует процесс: задачи оторваны от реальности, сложность неупорядочена, время кандидата не уважается.
Подготовка
Рекрутер от имени Яндекса настоятельно советовал потренироваться на задачках с leetcode. Перед процессом присылают методичку о том, что ждёт на интервью и как готовиться. По опыту автора: все этапы — алгоритмические задачи без стандартной библиотеки, полезно знать сложность алгоритмов (Big O), сложность сортировки, уметь работать со словарями/хеш-таблицами, интервалами и строками; код нужно писать в онлайн-блокноте без запуска, поэтому важно уметь проверять граничные случаи в голове.
Стиль интервьюера
Рекрутеры и интервьюеры вежливые и приятные в общении, очень корректные: спрашивают разрешения на присутствие стажёра-наблюдателя и на ведение заметок. Принимают рабочие решения, но подталкивают к эталонным, особенно если сложность решения хуже эталонной. Дают намёки и подсказки по ходу решения. Код интерпретируют в голове и указывают на нерабочие случаи. Интервьюеры не знают контекст предыдущих этапов кандидата. На 4-м интервью интервьюер, по косвенным признакам, был больше C-разработчиком, чем питонистом, хотя собеседовал Python-кандидата.
04
Код
Дан список интов без повторяющихся элементов. Преобразовать его в строку, сворачивая соседние по числовому ряду числа в диапазоны. Примеры: [1,4,5,2,3,9,8,11,0] => "0-5,8-9,11"; [1,4,3,2] => "1-4"; [1,4] => "1,4".
Интервью 1, третья задача того же класса.
05
Код
Дан массив из нулей и единиц. Определить, какой максимальный по длине подинтервал единиц можно получить, удалив ровно один элемент массива. Пример входа: [1, 1, 0].
Интервью 2.
06
Код
Даны даты заезда и отъезда каждого гостя (заезд строго раньше отъезда; в пределах одного дня сначала выезжают старые гости, затем въезжают новые). Найти максимальное число постояльцев, одновременно проживавших в гостинице (измерение в конце дня). Пример: [(1, 2), (1, 3), (2, 4), (2, 3)].
Интервью 2. Решено не без подсказки интервьюера.
07
Теория
Какая сложность у сортировки?
Интервью 2 (упомянуто в нарративе): кандидат не знал ответ, интервьюер подсказал.
08
Код
Сгруппировать слова по «общим буквам» (анаграммы). Sample Input: ["eat", "tea", "tan", "ate", "nat", "bat"]. Sample Output: [["ate", "eat", "tea"], ["nat", "tan"], ["bat"]].
Интервью 3. Классическая задача с leetcode (Group Anagrams).
09
Теория
Какая сложность у сортировки?
Интервью 3, follow-up к задаче на группировку анаграмм. Тот же вопрос, что и на интервью 2, — кандидат уже знал ответ.
10
Код
Слияние отрезков. Вход: [1, 3] [100, 200] [2, 4]. Выход: [1, 4] [100, 200].
Интервью 3. Классическая задача (Merge Intervals).
11
Код
Дан массив точек с целочисленными координатами (x, y). Определить, существует ли вертикальная прямая, делящая точки на 2 симметричных относительно этой прямой множества. Точку можно представлять как объект {x, y}.
Интервью 3. Интервьюер ожидал другое (эталонное) решение.
12
Код
Даны две строки. Написать функцию, которая вернёт True, если из первой строки можно получить вторую, совершив не более 1 изменения (удаление / замена символа).
Интервью 4. Классическая задача (One Edit Distance). Интервьюер проверял решение, прогоняя тесты в уме.
13
Код
Дан список интов и число-цель. Найти такой range (непрерывный подотрезок), чтобы сумма его элементов давала число-цель. Пример: elements = [1, -3, 4, 5], target = 9, result = range(2, 4), т.к. elements[2] + elements[3] == target.
Интервью 4. Кандидат не успел дописать код по времени, озвучил идею решения.
14
Теория
А можно решить эту задачу быстрее (с меньшей сложностью)?
Интервью 4, follow-up к задаче про поиск range с суммой, равной цели. Время интервью вышло до ответа.