Тестовые задания по Python

Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио

стэк>
Компания>
Сложность>

AppBooster • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по Python от компании AppBooster

Тестовое задание: backend Мы создаём мобильные приложения и иногда для тестирования гипотез приходится запускать AB-тесты. Для этого нам нужна система, представляющая собой простейшее REST API, состоящее из одного эндпойнта. API и распределение Мобильное приложение при запуске генерирует некоторый уникальный ID клиента (который сохраняется между сессиями) и запрашивает список экспериментов, добавляя HTTP-заголовок `Device-Token`. В ответ сервер отдаёт список экспериментов. Для каждого эксперимента клиент получает: * Ключ: имя эксперимента. В клиенте есть код, который будет изменять какое-то поведение в зависимости от значения этого ключа * Значение: строка, одна из возможных опций (см. ниже) Важно, чтобы девайс попадал в одну группу и всегда оставался в ней. Эксперименты 1. Цвет кнопки У нас есть гипотеза, что цвет кнопки «купить» влияет на конверсию в покупку * Ключ: `button_color` * Опции: * `#FF0000` → 33.3% * `#00FF00` → 33.3% * `#0000FF` → 33.3% Так после 600 запросов к API с различными `DeviceToken` каждый цвет должны получить по 200 девайсов 2. Стоимость покупки У нас есть гипотеза, что изменение стоимости покупки в приложении может повлять на нашу маржинальную прибыль. Но чтобы не терять деньги в случае неудачного эксперимента, 75% юзеров будут получать старую цену и только на малой части аудитории мы протестируем изменение: * Ключ `price` * Опции: * `10` → 75% * `20` → 10% * `50` → 5% * `5` → 10% Требования и ограничения 1. Если девайс однажды получил значение, то он всегда будет получать только его 1. Эксперимент проводится только для новых девайсов: если эксперимент создан после первого запроса от девайса, то девайс не должен ничего знать об этом эксперименте Задание 1. Спроектируйте, опишите и реализуйте API 2. Добавьте эксперименты (1) и (2) в приложение 3. Создайте страницу для статистики: простая таблица со списком экспериментов, общее количество девайсов, участвующих в эксперименте и их распределение между опциями Можно использовать любые тенхологии и библиотеки Плюсом будет: * Наличие тестов * Задеплоенная версия приложения * Скорость ответа от сервера <100ms

AvitoTech • Лёгкая сложность

Лёгкий уровень сложности - 1 звезда

Тестовое задание по Python от компании AvitoTech

Тестовое задание по python Условие Необходимо реализовать Python-библиотеку, которая осуществляет получение квадратной матрицы (NxN) с удалённого сервера и возвращает её пользователю в виде `List[int]`. Этот список должен содержать результат обхода полученной матрицы по спирали: против часовой стрелки, начиная с левого верхнего угла (см. test case ниже). Пример исходной матрицы: ``` +-----+-----+-----+-----+ | 10 | 20 | 30 | 40 | +-----+-----+-----+-----+ | 50 | 60 | 70 | 80 | +-----+-----+-----+-----+ | 90 | 100 | 110 | 120 | +-----+-----+-----+-----+ | 130 | 140 | 150 | 160 | +-----+-----+-----+-----+ ``` Матрица гарантированно содержит целые неотрицательные числа. Форматирование границ иными символами не предполагается. Требования к выполнению и оформлению - Библиотека содержит функцию со следующим интерфейсом: ```python async def get_matrix(url: str) -> List[int]: ... ``` - Функция единственным аргументом получает URL для загрузки матрицы с сервера по протоколу HTTP(S). - Функция возвращает список, содержащий результат обхода полученной матрицы по спирали: против часовой стрелки, начиная с левого верхнего угла. - Взаимодействие с сервером должно быть реализовано асинхронно - посредством aiohttp, httpx или другого компонента на asyncio. - Библиотека должна корректно обрабатывать ошибки сервера и сетевые ошибки (5xx, Connection Timeout, Connection Refused, ...). - В дальнейшем размерность матрицы может быть изменена с сохранением форматирования. Библиотека должна сохранить свою работоспособность на квадратных матрицах другой размерности. - Решение задачи необходимо разместить на одном из публичных git-хостингов (GitHub, GitLab, Bitbucket). Можно также выслать решение в виде архива (zip, tar). Загружать библиотеку в PyPi или другие репозитории не требуется. Проверка решения - Для самостоятельной проверки можно использовать следующий test case: ```python SOURCE_URL = './backend/Python/AvitoTech/matrix.txt' TRAVERSAL = [ 10, 50, 90, 130, 140, 150, 160, 120, 80, 40, 30, 20, 60, 100, 110, 70, ] def test_get_matrix(): assert asyncio.run(get_matrix(SOURCE_URL)) == TRAVERSAL ``` При проверке мы также будем обращать внимание на тесты, type hints, структуру решения и общее качество кода. Удачи в выполнении задачи и не забывайте о [The Zen of Python](https://www.python.org/dev/peps/pep-0020/#the-zen-of-python)! :)

AvitoTech • Средняя сложность

Средний уровень сложности - 2 звезды

Тестовое задание по Python от компании AvitoTech

Тестовое задание на позицию стажера/junior бекенд разработчика в юнит Авто Задача: Нужно сделать HTTP сервис для сокращения URL наподобие [Bitly](https://bitly.com/) и других сервисов. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность: - сохранить короткое представление заданного URL - перейти по сохраненному ранее короткому представлению и получить redirect на соответствующий исходный URL Требования: - Язык программирования: Go/Python/PHP/Java/JavaScript - Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой [`docker-compose up`](https://docs.docker.com/compose/) - Требований к используемым технологиям нет - можно использовать любую БД для персистентности - Код нужно выложить на github (просьба не делать форк этого репозитория, чтобы не плодить плагиат) Усложнения: - Написаны тесты (постарайтесь достичь покрытия в 70% и больше) - Добавлена валидация URL с проверкой корректности ссылки - Добавлена возможность задавать кастомные ссылки, чтобы пользователь мог сделать их человекочитаемыми - [http://bit.ly/avito-auto-be](http://bit.ly/avito-auto-be) - Проведено нагрузочное тестирование с целью понять, какую нагрузку на чтение может выдержать наш сервис - Если вдруг будет желание, можно слепить простой UI и выложить сервис на бесплатный хостинг - Google Cloud, AWS и подобные.

Ivelum • Средняя сложность

Средний уровень сложности - 2 звезды

Тестовое задание по Python от компании Ivelum

Обратите внимание Перед решением тестового задания заполните, пожалуйста, небольшую форму отклика для интересующей вас вакансии по адресу: https://job.ivelum.com После заполнения анкеты мы свяжемся с вами, ответим на ваши вопросы по вакансии и расскажем подробнее о наших проектах. По результатам этого общения мы можем предложить вам попробовать сделать тестовое задание, которое описано ниже. Присылайте ваше решение на адрес [job@ivelum.com](mailto:job@ivelum.com). Hacker™ News proxy Реализовать простой http-прокси-сервер, запускаемый локально, который показывает содержимое страниц [Hacker News](https://news.ycombinator.com). Прокси должен модицифировать текст на страницах следующим образом: после каждого слова из шести букв должен стоять значок «™». Пример™: Исходный текст: https://news.ycombinator.com/item?id=13713480 ``` The visual description of the colliding files, at http://shattered.io/static/pdf_format.png, is not very helpful in understanding how they produced the PDFs, so I took apart the PDFs and worked it out. Basically, each PDF contains a single large (421,385-byte) JPG image, followed by a few PDF commands to display the JPG. The collision lives entirely in the JPG data - the PDF format is merely incidental here. Extracting out the two images shows two JPG files with different contents (but different SHA-1 hashes since the necessary prefix is missing). Each PDF consists of a common prefix (which contains the PDF header, JPG stream descriptor and some JPG headers), and a common suffix (containing image data and PDF display commands). ``` Через ваш прокси™: http://127.0.0.1:8232/item?id=13713480 ``` The visual™ description of the colliding files, at http://shattered.io/static/pdf_format.png, is not very helpful in understanding how they produced the PDFs, so I took apart the PDFs and worked™ it out. Basically, each PDF contains a single™ large (421,385-byte) JPG image, followed by a few PDF commands to display the JPG. The collision lives entirely in the JPG data - the PDF format™ is merely™ incidental here. Extracting out the two images™ shows two JPG files with different contents (but different SHA-1 hashes™ since the necessary prefix™ is missing). Each PDF consists of a common™ prefix™ (which contains the PDF header™, JPG stream™ descriptor and some JPG headers), and a common™ suffix™ (containing image data and PDF display commands). ``` Условия: * последняя версия™ Python™ * страницы должны™ отображаться и работать полностью корректно, в точности так, как и оригинальные (за исключением модифицированного текста™); * при навигации по ссылкам, которые ведут на другие™ страницы HN, браузер должен™ оставаться на адресе™ вашего™ прокси™; * можно использовать любые общедоступные библиотеки, которые сочтёте нужным™; * чем меньше™ кода, тем лучше. PEP8 — обязательно; * если в условиях вам не хватает каких-то данных™, опирайтесь на здравый смысл. Если задачу™ удалось сделать быстро™, и у вас еще остался энтузиазм - как насчет™ написания тестов™? Присылайте ваше решение в виде ссылки™ на gist или на публичный репозиторий на GitHub™. Обратите внимание Напомним порядок действий: 1. Пожалуйста, заполните форму отклика на сайте https://job.ivelum.com; 2. Мы свяжемся с вами, ответим на ваши вопросы по вакансии и расскажем про наши проекты. По результатам этого общения мы можем предложить вам попробовать сделать тестовое задание, которое описано выше; 3. Присылайте ваше решение на [job@ivelum.com](mailto:job@ivelum.com).

Получите доступ более чем к 500 тестовым заданиям
Сервис можно использовать бесплатно,
без ограничений. Чтобы получить полный доступ,
вам необходимо зарегистрироваться.
где найти тестовые задания для практики
пример тестового задания junior
тестовые задания для junior python
практические задачи по python
решение тестового задания python