Все задачи, которые встретились на собесе ШАДа 2024 года.
1) Дается массив/строка и число k. Найти максимальный по длине подотрезок в котором <=k различных элементов.
Решать нужно за O(n) а памятью O(min(k, количество различных букв)). Также могли спросить как работает словарь если использовали словарь.
2) Дается массив чисел. Вернуть true, если за один swap можно массив сделать отсортированным по возрастанию.
Очень жаль людей, которым попалась эта задача, так как некоторым попадались холявке, а эта я считаю сложной задачей для собеса, так как очень много подводных камней.
3) Даются две строки s, p. Найти все позиции в строке s, что подстрока s[i: i + len(p)] является анаграммой для строки p.
Решать за линию использую словарь. Некоторых спрашивали как работает словарь.
4) Даются два массива a, b. Длина массива b равно k. Найти количество подпоследовательностей массива a, что они равны массиву b.
То есть найти количество различных множеств (i1, i2, ..., ik), что a[i1] = b[0], a[i2] = b[1], ..., a[ik] = b[k-1]
-Решение за квадрат удовлетворит собеседующих.
Хотя-бы одна из этих задача будет и в следующем году, так что рекомендую разобрать все задачи если поступаешь в след году.
(Если вам попалась другая задача то поделитесь условием в комментариях)
1) Дается массив/строка и число k. Найти максимальный по длине подотрезок в котором <=k различных элементов.
Решать нужно за O(n) а памятью O(min(k, количество различных букв)). Также могли спросить как работает словарь если использовали словарь.
2) Дается массив чисел. Вернуть true, если за один swap можно массив сделать отсортированным по возрастанию.
Очень жаль людей, которым попалась эта задача, так как некоторым попадались холявке, а эта я считаю сложной задачей для собеса, так как очень много подводных камней.
3) Даются две строки s, p. Найти все позиции в строке s, что подстрока s[i: i + len(p)] является анаграммой для строки p.
Решать за линию использую словарь. Некоторых спрашивали как работает словарь.
4) Даются два массива a, b. Длина массива b равно k. Найти количество подпоследовательностей массива a, что они равны массиву b.
То есть найти количество различных множеств (i1, i2, ..., ik), что a[i1] = b[0], a[i2] = b[1], ..., a[ik] = b[k-1]
-Решение за квадрат удовлетворит собеседующих.
Хотя-бы одна из этих задача будет и в следующем году, так что рекомендую разобрать все задачи если поступаешь в след году.
(Если вам попалась другая задача то поделитесь условием в комментариях)
❤13🔥7👍1
Какие языки ботать Backend разработчику
Если вы начинающий специалист, то здесь есть некий парадокс.
По-хорошему нужно покопаться в C++ / C, ведь они довольно низкоуровневые и с помощью этих языков можно лучше понять, как устроена память, некоторые процессоры, concurrency, да и немного покопаться в операционных системах. На этих языках можно поперекладывать сырые байтики, поставлять туда ассемблерных вставок, повызывать всякие syscall’ы, почитать код Linux ядрa - часто хорошие учебные курсы тесно связаны с данной парой языков, а выучить какой-либо язык после плюсов не составит труда.
На этих языках было написано много классического и они полезны для изучения и понимания, но на рынке на них довольно сложно найти вакансии, а нормальные вакансии - в особенности. Это касается и стажировок: на плюсах их очень мало. На ум приходят лишь что-то специфичное в духе Kaspersky, Quantitative research. В каком-то сезоне в Тинькофф открыли лишь 5 вакансий. В тот же Яндекс можно попасть, зная лишь С++, но на чистых плюсах вакансий реально немного и поиск может затянуться. Нередко по моим наблюдениям и скромному мнению плюсы используются там, где они не нужны, где легче было бы написать проект на Go.
Также, разработчику когда-нибудь нужно будет настрочить что-нибудь на Python: какой-нибудь тупой скриптец или же написать на нем тесты. Так что знать его тоже полезно. Но на вакансии, где вы будете писать только на Питоне лучше не идти: на нем никогда не будут писаться какие-то серьезные проекты. Если проект и написан на питоне, то скорее всего это либо какой-нибудь вялый питон джанго, либо какой-нибудь легаси проект. На такое не ведитесь — будете ощущать себя макакой!
Как мне кажется один из самых лучший языков для изучения — это Go. Сейчас все новые и крутые проекты пишутся на нем, с ним не так сложно найти работу, как на плюсах, он прост и красив в изучении, также полезен, если разобраться в том, как он устроен изнутри.
Касаемо поиска работа, например, у меня была ученица с питерского ПМИ ФКН, у которой за плечами был лишь годовой курс плюсов. Она быстро прошла все собесы на стажера Яндекс, но долго ждала, когда поставят финальные собесы. По итогу HR увидела на ее гитхабе какой-то скромный пет проект, написанный на Go и предложила попробоваться, сказав "у нас здесь так много вакансий на Go". Затем девушку ждал тупой собес с руководителем и релокейт в Москву.
Также, можно попробовать что-то поклацать на Java. Язык также "старый" и буквально любая микроволновка была написана на нем, поэтому с ним вы точно не пропадете. Если наступят тяжелые времена, то можно начать писать на нем моды для майнкрафта.
Все же, нужно понимать, что язык — это лишь инструмент. Не нужно его выбирать, как жену — одну на всю жизнь! Главное — знания и понимания того, как устроен компьютер и распределенные бекенд системы, инженерия. Всему этому мы уделяем большое внимание на нашем курсе по бэкенд разработке, ведь в основном, языки похожи друг на друга, поэтому перейти на новый язык на хорошем уровне для хорошего инженера— это дело максимум недели, а для выпускников наших курсе— дело двух минут!
Если вы начинающий специалист, то здесь есть некий парадокс.
По-хорошему нужно покопаться в C++ / C, ведь они довольно низкоуровневые и с помощью этих языков можно лучше понять, как устроена память, некоторые процессоры, concurrency, да и немного покопаться в операционных системах. На этих языках можно поперекладывать сырые байтики, поставлять туда ассемблерных вставок, повызывать всякие syscall’ы, почитать код Linux ядрa - часто хорошие учебные курсы тесно связаны с данной парой языков, а выучить какой-либо язык после плюсов не составит труда.
На этих языках было написано много классического и они полезны для изучения и понимания, но на рынке на них довольно сложно найти вакансии, а нормальные вакансии - в особенности. Это касается и стажировок: на плюсах их очень мало. На ум приходят лишь что-то специфичное в духе Kaspersky, Quantitative research. В каком-то сезоне в Тинькофф открыли лишь 5 вакансий. В тот же Яндекс можно попасть, зная лишь С++, но на чистых плюсах вакансий реально немного и поиск может затянуться. Нередко по моим наблюдениям и скромному мнению плюсы используются там, где они не нужны, где легче было бы написать проект на Go.
Также, разработчику когда-нибудь нужно будет настрочить что-нибудь на Python: какой-нибудь тупой скриптец или же написать на нем тесты. Так что знать его тоже полезно. Но на вакансии, где вы будете писать только на Питоне лучше не идти: на нем никогда не будут писаться какие-то серьезные проекты. Если проект и написан на питоне, то скорее всего это либо какой-нибудь вялый питон джанго, либо какой-нибудь легаси проект. На такое не ведитесь — будете ощущать себя макакой!
Как мне кажется один из самых лучший языков для изучения — это Go. Сейчас все новые и крутые проекты пишутся на нем, с ним не так сложно найти работу, как на плюсах, он прост и красив в изучении, также полезен, если разобраться в том, как он устроен изнутри.
Касаемо поиска работа, например, у меня была ученица с питерского ПМИ ФКН, у которой за плечами был лишь годовой курс плюсов. Она быстро прошла все собесы на стажера Яндекс, но долго ждала, когда поставят финальные собесы. По итогу HR увидела на ее гитхабе какой-то скромный пет проект, написанный на Go и предложила попробоваться, сказав "у нас здесь так много вакансий на Go". Затем девушку ждал тупой собес с руководителем и релокейт в Москву.
Также, можно попробовать что-то поклацать на Java. Язык также "старый" и буквально любая микроволновка была написана на нем, поэтому с ним вы точно не пропадете. Если наступят тяжелые времена, то можно начать писать на нем моды для майнкрафта.
Все же, нужно понимать, что язык — это лишь инструмент. Не нужно его выбирать, как жену — одну на всю жизнь! Главное — знания и понимания того, как устроен компьютер и распределенные бекенд системы, инженерия. Всему этому мы уделяем большое внимание на нашем курсе по бэкенд разработке, ведь в основном, языки похожи друг на друга, поэтому перейти на новый язык на хорошем уровне для хорошего инженера— это дело максимум недели, а для выпускников наших курсе— дело двух минут!
❤13👍2🔥1😁1
Forwarded from Поступашки - ШАД, Стажировки и Магистратура
Полный цикл отбора в Яндекс (МЛ 2024)
Сейчас студенты наших прошлых курсов под моим чутким сопровождением ломанулись проходить отборы в Яндекс, поэтому продолжаю радовать вас инсайдами и актуальными вопросами.
Далее представлен слегка отредактированный текст нашего выпускника.
Вступительный контест
Задания нашел тут, просто прорешал заранее и сдал, но зашли только 4 задачи. Первую и пятую мне решил ГПТ, только нужно было поправлять. Шестая просто посчитаит количество вхождений конкретных слов, а потом сортируем. Вторую мне скинул знакомый. Этого хватило, а знакомому хватило трех задач.
Кстати, товарищи, на курсе машинное обучение вы найдете подробный разбор (видео + код) этих задач.
МЛ секция
Сначала дали очень простую задачу на два указателя: в строке найти длину наибольшей подстроки, состоящей не более чем из двух уникальных символов. Я даже растерялся и начала копать не туда. Интервьюер предложил рассмотреть на примере и я сразу сообразил. Потом была простая задача по мл. Она разобрано здесь. И немного поспрашивали базу про классификацию, про линейную регрессию и регуляризацию.
Алгоритмическая секция
Первая задача: сжимать список целых чисел в диапазоны, которые там встречаются. Например, [1, 3, 2, 8, 11, 9, 0] -> "0-3, 8-9, 11".
Вторая задача: для множества точек на плоскости с целыми координатами определить есть ли у них вертикальная ось симметрии.
Для тех, кто в теме, задачи довольно баянистые. Их даже можно найти здесь.
Задачи я решил быстро и еще оставалось время, собеседующий дал мне задачу: написать бинарный поиск.
Дальше ждали собесы с командами.
Собес 1 (Яндекс Доставка)
Лайтово. Спросили просто про опыт, чем занимался. Поговорили про хакатоны, мои пет проекты. Мог только похвастаться кредитным скорингом и рекомендацией фильмов, которые я стырил и адаптировал по заветам Поступашек🙈😎.
Рассказали про себя и чем предстоит заниматься. Нужно выдумывать всякие фичи в катбуст, чтобы в реальном времени предсказывать приедет курьере или нет.
Собес 2 (Яндекс Деньги)
Здесь уже было потновато. Сначала попросили рассказать про случайный лес и градиентный бустинг, уточняющие вопросы по теории. Дальше попросили рассказать в общих чертах про АВ тесты и заострили внимание на ошибке 1го и 2го рода, p-value, мощность. Спрашивали про опыт работы в линуксе и написания скриптов на баше, попросили написать простой SQL запрос в блокнотике (есть табличка - фио, зарплата, отдел, надо вывести людей получающих минимальную зарплату в своем отделе). Затем был мл кейс: какие вопросы (из 100 имеющихся) задавать пользователю для идентификации мошенника. Чем-то подобным и предстоит заниматься в команде: по поведению пользователя на сайте и в приложении научиться понимать, бот это или нет. Поговорили про метрики классификации, а также про реализацию моего решения.
Вообще для подготовки к мл кейсам, помимо бота классической теории, советую смотреть всякие статьи на Хабре, конференции от Яндекса, Тинькофф и тд. Понятно, что в первую очередь смотреть выступления конкретной команды, с которой будет собес, и выступления левых команд, но в той же области.
Собес 3 (Яндекс Музыка)
Было много вопросов про метрики, какие знаю, физический смысл ROC-AUC. Дальше спросили: есть одна фича и один таргет, обучили регрессию, но весь тест лежит правее всего трейна— что выдаст линейная регрессия, KNN и случайный лес? И затем мл кейс, как сделать рекомендации плейлиста на сегодняшний день. Все основные повороты описаны здесь
В итоге три приглоса. На собесах ожидал хоть один вопрос по глубокому обучению, но его не было.
Сейчас студенты наших прошлых курсов под моим чутким сопровождением ломанулись проходить отборы в Яндекс, поэтому продолжаю радовать вас инсайдами и актуальными вопросами.
Далее представлен слегка отредактированный текст нашего выпускника.
Вступительный контест
Задания нашел тут, просто прорешал заранее и сдал, но зашли только 4 задачи. Первую и пятую мне решил ГПТ, только нужно было поправлять. Шестая просто посчитаит количество вхождений конкретных слов, а потом сортируем. Вторую мне скинул знакомый. Этого хватило, а знакомому хватило трех задач.
Кстати, товарищи, на курсе машинное обучение вы найдете подробный разбор (видео + код) этих задач.
МЛ секция
Сначала дали очень простую задачу на два указателя: в строке найти длину наибольшей подстроки, состоящей не более чем из двух уникальных символов. Я даже растерялся и начала копать не туда. Интервьюер предложил рассмотреть на примере и я сразу сообразил. Потом была простая задача по мл. Она разобрано здесь. И немного поспрашивали базу про классификацию, про линейную регрессию и регуляризацию.
Алгоритмическая секция
Первая задача: сжимать список целых чисел в диапазоны, которые там встречаются. Например, [1, 3, 2, 8, 11, 9, 0] -> "0-3, 8-9, 11".
Вторая задача: для множества точек на плоскости с целыми координатами определить есть ли у них вертикальная ось симметрии.
Для тех, кто в теме, задачи довольно баянистые. Их даже можно найти здесь.
Задачи я решил быстро и еще оставалось время, собеседующий дал мне задачу: написать бинарный поиск.
Дальше ждали собесы с командами.
Собес 1 (Яндекс Доставка)
Лайтово. Спросили просто про опыт, чем занимался. Поговорили про хакатоны, мои пет проекты. Мог только похвастаться кредитным скорингом и рекомендацией фильмов, которые я стырил и адаптировал по заветам Поступашек🙈😎.
Рассказали про себя и чем предстоит заниматься. Нужно выдумывать всякие фичи в катбуст, чтобы в реальном времени предсказывать приедет курьере или нет.
Собес 2 (Яндекс Деньги)
Здесь уже было потновато. Сначала попросили рассказать про случайный лес и градиентный бустинг, уточняющие вопросы по теории. Дальше попросили рассказать в общих чертах про АВ тесты и заострили внимание на ошибке 1го и 2го рода, p-value, мощность. Спрашивали про опыт работы в линуксе и написания скриптов на баше, попросили написать простой SQL запрос в блокнотике (есть табличка - фио, зарплата, отдел, надо вывести людей получающих минимальную зарплату в своем отделе). Затем был мл кейс: какие вопросы (из 100 имеющихся) задавать пользователю для идентификации мошенника. Чем-то подобным и предстоит заниматься в команде: по поведению пользователя на сайте и в приложении научиться понимать, бот это или нет. Поговорили про метрики классификации, а также про реализацию моего решения.
Вообще для подготовки к мл кейсам, помимо бота классической теории, советую смотреть всякие статьи на Хабре, конференции от Яндекса, Тинькофф и тд. Понятно, что в первую очередь смотреть выступления конкретной команды, с которой будет собес, и выступления левых команд, но в той же области.
Собес 3 (Яндекс Музыка)
Было много вопросов про метрики, какие знаю, физический смысл ROC-AUC. Дальше спросили: есть одна фича и один таргет, обучили регрессию, но весь тест лежит правее всего трейна— что выдаст линейная регрессия, KNN и случайный лес? И затем мл кейс, как сделать рекомендации плейлиста на сегодняшний день. Все основные повороты описаны здесь
В итоге три приглоса. На собесах ожидал хоть один вопрос по глубокому обучению, но его не было.
👍21❤8
Вот и разбор алгоритмов на стажировку в Яндекс! Обязательно делимся с друзьями. Ждём 5 тыс просмотров на ютуб ролике и выкладываем аналитику.
Смотрим! Смотрим! https://youtu.be/AdfjZ4u8GLg
Смотрим! Смотрим! https://youtu.be/AdfjZ4u8GLg
YouTube
Разбор алгоритмов на стажировку в Яндекс!!
Код и условия: https://news.1rj.ru/str/botalkaaa/38944
Как точно попасть на стажировку: https://news.1rj.ru/str/postypashki_old/1198
Как точно попасть на стажировку: https://news.1rj.ru/str/postypashki_old/1198
❤7🔥1🥱1
Задача для тех кто пишет на С++.
Это одна из задач, которая попалась во время собеседования.
Задача:
Вам приходят запросы двух видов.
1) Добавить в конец элемент 'x'
2) Удалить самое ранее добавленное число.
(По факту у нас очередь)
Вам можно пользоваться только одним std::vector. Но вам известно, что в любой момент времени в очереди могут находиться не более n чисел.
Имея один вектор размера не более n научитесь обрабатывать все запросы.
Решение:
Давайте создадим вектор a размера n. Будем циклически записывать числа в массив.
https://en.wikipedia.org/wiki/Circular_buffer
Вот такое вот решение господа
Думаю будем полезно всем кто будет проходить собес на С++.
Это одна из задач, которая попалась во время собеседования.
Задача:
Вам приходят запросы двух видов.
1) Добавить в конец элемент 'x'
2) Удалить самое ранее добавленное число.
(По факту у нас очередь)
Вам можно пользоваться только одним std::vector. Но вам известно, что в любой момент времени в очереди могут находиться не более n чисел.
Имея один вектор размера не более n научитесь обрабатывать все запросы.
Решение:
Вот такое вот решение господа
Думаю будем полезно всем кто будет проходить собес на С++.
🔥9👍3❤2👏1
Forwarded from Поступашки - ШАД, Стажировки и Магистратура
Эти пет проекты должен сделать каждый ML специалист
Устроиться можно попасть и без проектов, но если у вас их нет, то мл кейсы будут решаться неуверенно и на финалах будете выглядеть слабее других. Никто не ждет гениального проекта с инфраструктурой— реализовать какие-то бейзлайны и понимать специфику задач уже достаточно для стажера и джуна.
Уже делали подобную подборку для аналитиков здесь, советую присмотреться.
1. Кредитный скоринг
Стоит ли давать кредит— довольно популярная задача и отличный выбор для новчиков, чтобы самостоятельно проделать все этапы. Сначала берем любой датасет на kaggle по запросу Credit Scoring. Проводим EDA, генерируем гипотезы, фичи, готовим данные для модели и делаем бейзлайн: логистическая регрессия. Затем уже можно попробовать случайный лес, градиентный бустинг, KNN или еще что по вкусу— сравниваем метрики. И на последок не забываем проанализировать результаты и культурно презентовать. Можно провести АВ тест на смой первой модели.
Все варианты решения и реализации можно найти в интернетах: GitHub, Хабр. Очень полезным будет посмотреть всякие выступления на конференциях по этой теме для вдохновения, да и это очень поможет на мл кейсах.
2. Наивный Байесовский классификатор (НБК)
Для конкретики будем классифицировать письма на спам. Опять же обработаем данные: удаляем числа, знаки препинания, стоп-слова, стемминги, лемматизацию.
Объединяем все методы предварительной обработки и создаём словарь слов и счётчик каждого слова в наборе данных для обучения:
1. Вычисляем вероятность для каждого слова в тексте и отфильтровываем слова со значением вероятности меньше порогового. Такие слова будут нерелевантными.
2. Для каждого слова в словаре создаём вероятность, что это слово окажется в спаме. Определяем условную вероятность для использования её в НБК.
3. Вычисляем прогнозируемый результат с помощью условных вероятностей.
НБК реализовать не сложно. Куда интересней погрузиться во всю теорию, которая за этим стоит, в вероятностные модели. К тому же, кейс фильтрации спама и подобного часто встречается на собесах.
3. MLOps
Можно наладить какой-то минимальный прод для проектов: например телеграм бот или FastAPI. Можно еще автоматизировать пайплайн с помощь AirFlow и попробовать запустить инфраструктуру не только локально, но и облаке. Конечно нужно будет поизучать Docker, Cuber, Hadoop, Spark, HDFS, Kafka. Но на самом деле ничего трудного— после нашего курса дата инженер будете делать такие вещи по щелчку пальцев.
4. Ранжирование и матчинг
Для начала лучше пробежаться глазами по статье и посмотреть, что пишут в интернетах. Можно выделить три подхода к задаче: поточечный, попарный, списочный. Советую начать с первого как самого простого. Для конкретики будем предсказать оценку релевантности для запросов тестового датасета. Здесь можно кстати поучиться парсить web-страниц и собирать сырые данные, размечать их с помощью какого-нибудь Яндекс-Толока. Делаем регрессию, а затем Random Forest Regressor, XGBoost, lightGBM, CatBoost.
Совсем продвинутые могут попробовать языковые модели в духе FastText, Word2Vec, DSSM и более сложные: BERT, можно даже попробовать архитектуру трансформеров.
5. Рекомендашки
Очень популярный кейс на собесах. Для начала лучше пробежаться глазами по этому разделу и посмотреть, что пишут в интернетах. Затем начинаем реализовывать самое простое как бейзлайн, например, content-based рекомендации, KNN. Дальше можно попробовать факторизации матрицы рейтингов по svd разложению или по более эффективной als архитектуре и функции ошибок bpr. Затем можно попробовать W2V подход, чтобы использовать последовательность взаимодействий пользователя для построения рекомендации следующего предмета.
Для знатоков DL можно попробовать DSSM, SasRec/Bert4Rec, MultVAE, Merlin или графовые нейронки: GCN-подобные архитектуры.
Также стоит попробовать обучение с подкреплением: многоруких бандитов.
Ну и конечно рекомендательные системы можно попробовать рассмотреть как задачу ранжирования.
Устроиться можно попасть и без проектов, но если у вас их нет, то мл кейсы будут решаться неуверенно и на финалах будете выглядеть слабее других. Никто не ждет гениального проекта с инфраструктурой— реализовать какие-то бейзлайны и понимать специфику задач уже достаточно для стажера и джуна.
Уже делали подобную подборку для аналитиков здесь, советую присмотреться.
1. Кредитный скоринг
Стоит ли давать кредит— довольно популярная задача и отличный выбор для новчиков, чтобы самостоятельно проделать все этапы. Сначала берем любой датасет на kaggle по запросу Credit Scoring. Проводим EDA, генерируем гипотезы, фичи, готовим данные для модели и делаем бейзлайн: логистическая регрессия. Затем уже можно попробовать случайный лес, градиентный бустинг, KNN или еще что по вкусу— сравниваем метрики. И на последок не забываем проанализировать результаты и культурно презентовать. Можно провести АВ тест на смой первой модели.
Все варианты решения и реализации можно найти в интернетах: GitHub, Хабр. Очень полезным будет посмотреть всякие выступления на конференциях по этой теме для вдохновения, да и это очень поможет на мл кейсах.
2. Наивный Байесовский классификатор (НБК)
Для конкретики будем классифицировать письма на спам. Опять же обработаем данные: удаляем числа, знаки препинания, стоп-слова, стемминги, лемматизацию.
Объединяем все методы предварительной обработки и создаём словарь слов и счётчик каждого слова в наборе данных для обучения:
1. Вычисляем вероятность для каждого слова в тексте и отфильтровываем слова со значением вероятности меньше порогового. Такие слова будут нерелевантными.
2. Для каждого слова в словаре создаём вероятность, что это слово окажется в спаме. Определяем условную вероятность для использования её в НБК.
3. Вычисляем прогнозируемый результат с помощью условных вероятностей.
НБК реализовать не сложно. Куда интересней погрузиться во всю теорию, которая за этим стоит, в вероятностные модели. К тому же, кейс фильтрации спама и подобного часто встречается на собесах.
3. MLOps
Можно наладить какой-то минимальный прод для проектов: например телеграм бот или FastAPI. Можно еще автоматизировать пайплайн с помощь AirFlow и попробовать запустить инфраструктуру не только локально, но и облаке. Конечно нужно будет поизучать Docker, Cuber, Hadoop, Spark, HDFS, Kafka. Но на самом деле ничего трудного— после нашего курса дата инженер будете делать такие вещи по щелчку пальцев.
4. Ранжирование и матчинг
Для начала лучше пробежаться глазами по статье и посмотреть, что пишут в интернетах. Можно выделить три подхода к задаче: поточечный, попарный, списочный. Советую начать с первого как самого простого. Для конкретики будем предсказать оценку релевантности для запросов тестового датасета. Здесь можно кстати поучиться парсить web-страниц и собирать сырые данные, размечать их с помощью какого-нибудь Яндекс-Толока. Делаем регрессию, а затем Random Forest Regressor, XGBoost, lightGBM, CatBoost.
Совсем продвинутые могут попробовать языковые модели в духе FastText, Word2Vec, DSSM и более сложные: BERT, можно даже попробовать архитектуру трансформеров.
5. Рекомендашки
Очень популярный кейс на собесах. Для начала лучше пробежаться глазами по этому разделу и посмотреть, что пишут в интернетах. Затем начинаем реализовывать самое простое как бейзлайн, например, content-based рекомендации, KNN. Дальше можно попробовать факторизации матрицы рейтингов по svd разложению или по более эффективной als архитектуре и функции ошибок bpr. Затем можно попробовать W2V подход, чтобы использовать последовательность взаимодействий пользователя для построения рекомендации следующего предмета.
Для знатоков DL можно попробовать DSSM, SasRec/Bert4Rec, MultVAE, Merlin или графовые нейронки: GCN-подобные архитектуры.
Также стоит попробовать обучение с подкреплением: многоруких бандитов.
Ну и конечно рекомендательные системы можно попробовать рассмотреть как задачу ранжирования.
❤10🔥4👍2
Вот и разбор аналитики на стажировку в Яндекс! Обязательно делимся с друзьями. Ждём 5 тыс просмотров на ютуб ролике и выкладываем МЛ. Советую поторопиться: контест вот-вот обновят.
Смотрим! Смотрим! https://www.youtube.com/watch?v=k4C9aWR6YJ4
Смотрим! Смотрим! https://www.youtube.com/watch?v=k4C9aWR6YJ4
YouTube
Разбор аналитики на стажировку в Яндекс!! (Весна-Лето 2024)
Подробней о курсах: https://news.1rj.ru/str/postypashki_old/1076
Код и условия задач: https://news.1rj.ru/str/botalkaaa/39301
Код и условия задач: https://news.1rj.ru/str/botalkaaa/39301
❤4
Задача Яндекса.
В последние дни все чаще встречается задача:
Дается массив из целых чисел длины n > 1. Вы должны вернуть минимальное произведение, которое можно получить из двух чисел массива. (позиции чисел должны быть уникальны)
Решение:
Конечно нужно решать за линию.
Пусть max1, max2 - два максимальных числа из массива, при этом max1 >= max2.
Пусть min1, min2 - два минимальных числа из массива, при том min1 <= min2.
Если min1 <= 0 и max1 >= 0 то ответом будет min1 * max1
Иначе мы получаем два варианта:
1) Все элементы положительные, в таком случае нужно вернуть min1 * min2
2) Все элементы отрицательные, в таком случае вернем max1 * max2
Именно так лаконично рассмотреть случае.
Частые ошибки:
Не умение находить два максимальных/два минимальных числа за один проход циклом за линию.
Запутаться со случаями, когда в массиве нет отрицательного/положительного числа, но есть ноль.
Время работы алгоритмы O(n)
В последние дни все чаще встречается задача:
Дается массив из целых чисел длины n > 1. Вы должны вернуть минимальное произведение, которое можно получить из двух чисел массива. (позиции чисел должны быть уникальны)
Решение:
Пусть max1, max2 - два максимальных числа из массива, при этом max1 >= max2.
Пусть min1, min2 - два минимальных числа из массива, при том min1 <= min2.
Если min1 <= 0 и max1 >= 0 то ответом будет min1 * max1
Иначе мы получаем два варианта:
1) Все элементы положительные, в таком случае нужно вернуть min1 * min2
2) Все элементы отрицательные, в таком случае вернем max1 * max2
Именно так лаконично рассмотреть случае.
Частые ошибки:
Не умение находить два максимальных/два минимальных числа за один проход циклом за линию.
Запутаться со случаями, когда в массиве нет отрицательного/положительного числа, но есть ноль.
Время работы алгоритмы O(n)
❤29🔥6👏1😁1
Яндекс обновил контест на стажировку осень-зима. Задания уже лежат тут, там же можно их обсудить вместе с админами. И конечно разбор нового контеста будет на наших курсах, так что присмотритесь к ним.
Стажировка в Яндексе - самая крупная стажировка из всех, больше всего мест и их точно хватит на всех. Весьма прозрачный отбор, о котором писали здесь. Для успешного прохождения на собесы обычно достаточно решить 2/3 заданий, а в прошлый раз только половину.
Также не забываем посмотреть полный цикл собесов в Яндекс наших учеников:
Бэкенд
Аналитика
Машинное обучение
Стажировка в Яндексе - самая крупная стажировка из всех, больше всего мест и их точно хватит на всех. Весьма прозрачный отбор, о котором писали здесь. Для успешного прохождения на собесы обычно достаточно решить 2/3 заданий, а в прошлый раз только половину.
Также не забываем посмотреть полный цикл собесов в Яндекс наших учеников:
Бэкенд
Аналитика
Машинное обучение
👍7❤3🔥2
Яндекс собирается выделить ещё больше мест в ШАД, а значит попасть туда станет ещё проще. Лучше начинать потихоньку-понемногу готовиться уже сейчас. Вместе с МА разбираем примерчик из собеса прошлого набора, чтобы вы оценили свои силы!
Смотрим! Решаем! https://youtu.be/DxfV8JdqQlo
Смотрим! Решаем! https://youtu.be/DxfV8JdqQlo
YouTube
ТЕБЯ ВОЗЬМУТ В ЯНДЕКС, ЕСЛИ ТЫ РЕШИШЬ ЭТУ ЗАДАЧУ!
Наш ТГК: https://news.1rj.ru/str/postypashki_old
Наша группа ВК: https://vk.com/postypashki
Наша группа ВК: https://vk.com/postypashki
❤4👍2🔥2
Задача Яндекса.
Новая задача в Яндексе, которая уже попалась 5 моим знакомым. Советую, если в скором времени собираетесь в Яндекс, разобрать эту задачу.
Вот сама задача
Если вкратце то дается набор точек на плоскости и спрашивается, правда ли существует линия параллельная оси 'y', которая симметрично отражает данные точки.
Решение также по ссылке можно увидеть.
Вопросы, которые задают на собеседование:
1) Вот вы поняли что координата прямой через которую делается отражения имеет координату (minX + maxX) / 2, но почему этого деления нету в коде ?
Тут два варианта, либо вам придется писать деление на два в вашем коде и работать с double (может дробями) либо не делить.... Но если вы решаете не делить то надо объяснить почему.
А ответ следующий, если прямая через которую делаем отражение имеет координату s, тогда точка (x, y) отразится в точку (2*s-x, y).
Заметим что мы s умножаем на два!!!
Так что мы могли бы взять s = (minX + maxX) и говорить что точка отражается на позицию (s-x, y).
Если вы все таки решили делить на два в своем коде то это приведет к дополнительным вопросом с eps... Мой вам совет, если есть возможность не делить то лучше не делить.
2) В Яндексе скорее всего попросят учитывать повторы, то есть если две точки лежат на позиции [-1, 1] и одна точка на позиции [1, 1] то ответ False, так как одна точка останется без пары. Вам придется использовать хеш-таблицу вместо set чтобы учесть такой кейс.
Новая задача в Яндексе, которая уже попалась 5 моим знакомым. Советую, если в скором времени собираетесь в Яндекс, разобрать эту задачу.
Вот сама задача
Если вкратце то дается набор точек на плоскости и спрашивается, правда ли существует линия параллельная оси 'y', которая симметрично отражает данные точки.
Решение также по ссылке можно увидеть.
Вопросы, которые задают на собеседование:
Тут два варианта, либо вам придется писать деление на два в вашем коде и работать с double (может дробями) либо не делить.... Но если вы решаете не делить то надо объяснить почему.
А ответ следующий, если прямая через которую делаем отражение имеет координату s, тогда точка (x, y) отразится в точку (2*s-x, y).
Заметим что мы s умножаем на два!!!
Так что мы могли бы взять s = (minX + maxX) и говорить что точка отражается на позицию (s-x, y).
Если вы все таки решили делить на два в своем коде то это приведет к дополнительным вопросом с eps... Мой вам совет, если есть возможность не делить то лучше не делить.
2) В Яндексе скорее всего попросят учитывать повторы, то есть если две точки лежат на позиции [-1, 1] и одна точка на позиции [1, 1] то ответ False, так как одна точка останется без пары. Вам придется использовать хеш-таблицу вместо set чтобы учесть такой кейс.
🔥7❤6👍5👏1
Готовиться в ШАД стало ещё проще: специально для вас подготовили разбор экзамена 2024 года! Смотрим, решаем и голосуем за публикацию на Хабре, если хотите больше таких статей!
https://habr.com/ru/articles/841858/
https://habr.com/ru/articles/841858/
Хабр
Полный разбор экзамена в ШАД 2024 года
Перед тем, как смотреть решение обязательно попробуйте одолеть самостоятельно! Автор решений: телеграм канал "Поступашки — ШАД, Стажировки и Магистратура" . Задача 1 (Линейность) Рассмотрим...
❤4🔥4
Т-банк открыл контест на стажировку осень-зима. Задания уже лежат тут, там же их можно обсудить вместе с админом. И конечно разбор нового контеста будет на наших курсах, так что присмотритесь к ним.
Стажировка в Т-банке - самая крупная стажировка после Яндекса по количеству мест. В целом решает не сколько баллы за экзамены, сколько "ваш социальный рейтинг", анкета — подробней смотрим здесь. После контестов зовут на собес: он дикая халява, если хоть немного пробовали вкатиться в специальность.
Стажировка в Т-банке - самая крупная стажировка после Яндекса по количеству мест. В целом решает не сколько баллы за экзамены, сколько "ваш социальный рейтинг", анкета — подробней смотрим здесь. После контестов зовут на собес: он дикая халява, если хоть немного пробовали вкатиться в специальность.
❤8🔥2
Задача с Тинькофф.
Назовем число хорошим, если число является составным, а количество делителей простое число.
Найти количество хороших чисел на диапазоне [l, r] 1<=l<=r<=10^14.
Решение:
Заметим, что число n называется хорошим, если n=p^a
Где p-простое число и a>1.
Для тех кто не знают тут надо смотреть формулу количество делителей, и подумать в каких ситуациях это выражение простое.
Стоит обратить внимания, что a+1 должно быть простым числом.
Отсюда следует что p<=10^7. Так как a>1.
С помощью решето Эратосфена найдем все простые числа на отрезке [1, 1е7]
Переберем каждое простое число - так мы зафиксируем ‘p’. Осталось найти все такие ‘a’, что
l<=p^a<=r
a>1
a+1=простое число
Если вы будете перебирать ‘a’ в цикле (или раз за разом умножать переменную на p) то у вас будет переполнение типа и получите WA. Например возьмем p=1e7 когда будете возводить в третью степень произойдет переполнение. Да вы могли остановиться заранее и не возводить в степень, но как это понять ?
Нужно поступить иначе, давайте найдем максимальную степень b, что
p^b<=r, для этого мы просто будем делить r на p пока не станет равным нулю, от количество делений мы можем найти b.
Аналогично найдем максимальную степень d, что
p^d<=l-1.
Получаем, что нас интересует в качестве степень ‘a’ все простые числа на [d+1, b]. Благо этот отрезок очень маленький и можно честно перебрать там, проверяю что число простое используя посчитанную решето.
Назовем число хорошим, если число является составным, а количество делителей простое число.
Найти количество хороших чисел на диапазоне [l, r] 1<=l<=r<=10^14.
Решение:
Где p-простое число и a>1.
Для тех кто не знают тут надо смотреть формулу количество делителей, и подумать в каких ситуациях это выражение простое.
Стоит обратить внимания, что a+1 должно быть простым числом.
Отсюда следует что p<=10^7. Так как a>1.
С помощью решето Эратосфена найдем все простые числа на отрезке [1, 1е7]
Переберем каждое простое число - так мы зафиксируем ‘p’. Осталось найти все такие ‘a’, что
l<=p^a<=r
a>1
a+1=простое число
Если вы будете перебирать ‘a’ в цикле (или раз за разом умножать переменную на p) то у вас будет переполнение типа и получите WA. Например возьмем p=1e7 когда будете возводить в третью степень произойдет переполнение. Да вы могли остановиться заранее и не возводить в степень, но как это понять ?
Нужно поступить иначе, давайте найдем максимальную степень b, что
p^b<=r, для этого мы просто будем делить r на p пока не станет равным нулю, от количество делений мы можем найти b.
Аналогично найдем максимальную степень d, что
p^d<=l-1.
Получаем, что нас интересует в качестве степень ‘a’ все простые числа на [d+1, b]. Благо этот отрезок очень маленький и можно честно перебрать там, проверяю что число простое используя посчитанную решето.
🔥17❤5🤔3👍2
ШОК! Админ надел платье, туфельки и пошел в офис Т-банка записывать свой тикток...
Распространяем: https://youtube.com/shorts/99VxC8WiaCo
Распространяем: https://youtube.com/shorts/99VxC8WiaCo
YouTube
Стажировка в Т-банке (Тинькофф Старт)
#shorts #тинькофф #т-банк #стажировки #карьера
🥰9❤3🔥1🤓1💅1
Вот и разбор программирования на стажировку в Тинькофф! Обязательно делимся с друзьями. Очень понравилась ваша активность по прошлому видосу, товарищи, поэтому ждём 9 тыс просмотров на ютуб ролике и выкладываем разбор контеста на стажировку в Яндекс.
Смотрим! Смотрим! https://youtu.be/xwc1gLcCras
Смотрим! Смотрим! https://youtu.be/xwc1gLcCras
YouTube
Разбор программирования на стажировку в Т-банк!!
Задания, обсудить решения: https://news.1rj.ru/str/botalkaaa/44236
Как гарантировано затащить собес: https://news.1rj.ru/str/postypashki_old/1198
Как гарантировано затащить собес: https://news.1rj.ru/str/postypashki_old/1198
❤9🔥2👍1
Задача Яндекса.
За последние два месяца эта задача попадалась много раз.
Дается массив из 0 и 1.
Гарантируется что есть хотя бы один ноль и одна единица. Найти такую позицию нуля, что ближайшее расстояние до единицы максимальная.
Решение:
Во первых поймем, что между двумя единицами нужно выбрать позицию посередине.
…1,0,0,0,0,0,1,…..
Значит мы можем идти слева направо, хранить в переменной last последнюю позицию единицы. Если мы сейчас стоим в позиции i и в этой позиции единица, тогда мы пытаемся поставить единицу в позицию (i+last)/2, расстояния до ближайшей единицы равно min( (i+last)/2-last, i- (i+last)/2)
обновляем ответ если это расстояние больше чем нынешний ответ.
Остается случай, когда последовательность начинается с нуля или заканчивается нулем.
У многих проблема возникает в реализации задачи, так как пытаются фиксировать позицию нуля, потом искать слева ближайшую единицу и справа, что конечно сложнее реализовать.
За последние два месяца эта задача попадалась много раз.
Дается массив из 0 и 1.
Гарантируется что есть хотя бы один ноль и одна единица. Найти такую позицию нуля, что ближайшее расстояние до единицы максимальная.
Решение:
…1,0,0,0,0,0,1,…..
Значит мы можем идти слева направо, хранить в переменной last последнюю позицию единицы. Если мы сейчас стоим в позиции i и в этой позиции единица, тогда мы пытаемся поставить единицу в позицию (i+last)/2, расстояния до ближайшей единицы равно min( (i+last)/2-last, i- (i+last)/2)
обновляем ответ если это расстояние больше чем нынешний ответ.
Остается случай, когда последовательность начинается с нуля или заканчивается нулем.
У многих проблема возникает в реализации задачи, так как пытаются фиксировать позицию нуля, потом искать слева ближайшую единицу и справа, что конечно сложнее реализовать.
🔥21😭9❤4👍1👏1
Вот и интервью с настоящей легендой! У нас в гостях ДиМашина, поступивший на физтех со 127 баллами ЕГЭ. Почему именно физтех? Какие учебные лафхаки работают? Почему нравится бить людей? Ну и прямо на ваших экранах, товарищи, Дмитрий поступит в ШАД!
Смотрим! Смотрим! https://youtu.be/5l7O2ToX1_8
Смотрим! Смотрим! https://youtu.be/5l7O2ToX1_8
YouTube
ДиМашина против ШАД!! (Школа Анализа Данных от Яндекса)
наш телеграм канал: t.me/postypashki_old
телеграм канал Димы: t.me/DiMashinaft
ютуб канал Димы: youtube.com/@DiMashina2005
телеграм канал Димы: t.me/DiMashinaft
ютуб канал Димы: youtube.com/@DiMashina2005
💊23🤣13❤7
Вот и новый ролик вместе с Михаилом Абрамовичем! Разбираем миленькую задачку (решить в силах даже дошкольник) из собеседования в ШАД последнего набора и объясняем, почему ШАД - это лютая база и как туда поступить.
Смотрим! Смотрим! https://youtu.be/Kcli5gW_uAQ
Смотрим! Смотрим! https://youtu.be/Kcli5gW_uAQ
YouTube
Почему ШАД - это БАЗА? Нереально красивая задача!
Наш ТГК: https://news.1rj.ru/str/postypashki_old
❤7
Задача Яндекса/Шада.
Задача набирает обороты, рекомендую обратить на нее внимания всем кто готовится к собеседованию.
Дается два массива a, и b. Найти количество подотрезков в массиве а, что в этих подотрезках существуют подпоследовательности равные массиву b.
Решение:
Условия задачи сложнее чем решение. Не пытайтесь придумать решение быстрее чем за квадрат
Решим за квадрат: Переберем левую границу отрезка l, 0<=l<=n-1. Стартуем с этой позиции циклом i, поддерживая сколько первых элементов смогли собрать из массива b.
Пусть собрали cnt, тогда мы увеличиваем счетчик, если a[i]=b[cnt]. Как только собрали cnt=b.size, для фиксированного l, в качестве правой границы отрезка подойдут i, i+1, …, b.size-1. Мы можем просто в ответ прибавить b.size-i.
Дальше сдвигаем l и применяем тот же алгоритм
Задача набирает обороты, рекомендую обратить на нее внимания всем кто готовится к собеседованию.
Дается два массива a, и b. Найти количество подотрезков в массиве а, что в этих подотрезках существуют подпоследовательности равные массиву b.
Решение:
Решим за квадрат: Переберем левую границу отрезка l, 0<=l<=n-1. Стартуем с этой позиции циклом i, поддерживая сколько первых элементов смогли собрать из массива b.
Пусть собрали cnt, тогда мы увеличиваем счетчик, если a[i]=b[cnt]. Как только собрали cnt=b.size, для фиксированного l, в качестве правой границы отрезка подойдут i, i+1, …, b.size-1. Мы можем просто в ответ прибавить b.size-i.
Дальше сдвигаем l и применяем тот же алгоритм
❤12👍3🔥2👌2👏1
Задача с компании HFT (немогу сказать с какой именно)
Вам дается n строк, где число n четное. Ваша задача найти наибольшее число k, такое что существует способ разделения строк на пары, что в каждой паре хотя бы k первых символов совпадает.
Например:
4
abcd
abbb
efaa
efcd
ответ 2.
Решение:
Самое простое что приходит в голову это забинарить число k, дальше записать в словарь первые k букв всех слов, дальше посмотреть что значения всех ключей в нашей хеш-таблице четное число. Такое решение работает за O(N * logK), где N - сумма длин всех строк, K - максимальная длина строки.
Попросят решить задачу за O(N)
Чтобы решить задачу за линию вам понадобиться знания по структуре БОР. Если вы не знает что такое БОР то приходити на наши курсы мы вас всему научим.
И так давайте запишем все слова в БОР - это займет у нас O(N) времени. Давайте потом пройдемся по бору и обходом dfs и выпишем все значения в терминальных вершинках бора в векторв vt.
Зачем мы так сделали ????
Посмотрите внимательные на строки которые находятся на позициях vt[i] и vt[i-1] (i-четное) вы можете заметить, что для строкм на позиции vt[i-1] лучше всего подходит строка на позиции vt[i], осталные все строки имеют общий префикс меньшей длины.
Так получается чисто из за обхода БОРа с помощью dfs. Если детальнее хотите понять этот момент то приглашаю вас на курсы.
И так вот у вас есть вектор vt, вы просто проходитесь по четным i и смотрите наибольший общий префикс для строк на позиции vt[i] и vt[i-1] обновляете ответ через минимум по всем таким общим префиксам.
Решение за O(N).
Код в комментариях.
Вам дается n строк, где число n четное. Ваша задача найти наибольшее число k, такое что существует способ разделения строк на пары, что в каждой паре хотя бы k первых символов совпадает.
Например:
4
abcd
abbb
efaa
efcd
ответ 2.
Решение:
Попросят решить задачу за O(N)
Чтобы решить задачу за линию вам понадобиться знания по структуре БОР. Если вы не знает что такое БОР то приходити на наши курсы мы вас всему научим.
И так давайте запишем все слова в БОР - это займет у нас O(N) времени. Давайте потом пройдемся по бору и обходом dfs и выпишем все значения в терминальных вершинках бора в векторв vt.
Зачем мы так сделали ????
Посмотрите внимательные на строки которые находятся на позициях vt[i] и vt[i-1] (i-четное) вы можете заметить, что для строкм на позиции vt[i-1] лучше всего подходит строка на позиции vt[i], осталные все строки имеют общий префикс меньшей длины.
Так получается чисто из за обхода БОРа с помощью dfs. Если детальнее хотите понять этот момент то приглашаю вас на курсы.
И так вот у вас есть вектор vt, вы просто проходитесь по четным i и смотрите наибольший общий префикс для строк на позиции vt[i] и vt[i-1] обновляете ответ через минимум по всем таким общим префиксам.
Решение за O(N).
Код в комментариях.
🔥11👍2🤷♂1❤1