Виртуальное собеседование на позицию ML Engineer
Спасибо всем, кто поучаствовал в нашем 1 этапе виртуального собеседования. Попробовали свои силы 70 человек, из которых 20 его успешно преодолели! Я надеюсь это было интересно и хоть немного позновательно.
Дальнейшие туры предполагают больший акцент на беседу, поэтому больше такого интерактива как в первом туре у нас не получится. Тем не менее, я подготовил пул задач, используемых во время очного этапа собеседования (60-90 минут). Спустя неделю или две я приведу их решения, а пока можете взять листочек с бумагой и вновь проверить свои силы!
1) Комбинаторика и ТВ (с @m1ckyro5a)
- посчитайте вероятность того, что среди 5 подбрасываний честной монетки будет ровно 1 орел.
- посчитайте вероятность того, что первый орел выпадет на четном подбрасывании
- оцените вероятность что сумма чисел после броска 2 игральных кубиков будет 5
- Оценка максимального правдоподобия:
Дано распределение
X = alpha / x^alpha
и наблюдения 3,4,5
Оцените параметр альфа методом максимального правдоподобия
2) Метрики и ТВ (с @m1ckyro5a)
- На острове буйствует загадочный вирус, которым болеют 10% населения острова. Местные предприниматели подготовили прибор, который с ошибается с 10% вероятностью (как для болеющих - так и для не болеющих). Какая вероятность того, что пациент реально болен, если прибор показал положительный результат?
- Какие метрики качества вы бы предложили для оценки эффективности данного прибора?
3.1) Алгоритмы джуниор-миддл (с неким @sneddy)
Есть 2 строки, посчитайте сколько минимум символов нужно добавить или убавить, чтобы они стали анаграммами
На выходе ожидается функция, принимающая 2 строки и выдающая ответ за разумные асимптотики по времени
3.2) Алгоритмы синьор (с неким @sneddy)
Напишите класс, который при инициализации получает число n и поддерживает команды
- put(self, a:float) -> None - добавить число в структуру
- get() -> float - выдать текущее произведение последних n добавленных чисел
Follow-up:
Напишите класс, который поддерживает команды
- put(self, a:float) -> None - добавить число в структуру
- get(self, k) -> float - выдать текущее произведение последних k добавленных чисел
На выходе ожидаются структуры с разумными асимптотиками на время и память, корректно работающие на различных корнер кейсах
Решения в комментариях приветствуются! Но большая просьба не забыть поставить спойлер:
- Ctrl + Shift + P
- или правой кнопкой мыши Formatting -> Spoiler)
Обещаю давать фидбек в течение суток)