Тестовые задания по Python
Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио
ItGlobal • Средняя сложность
Тестовое задание по Python от компании ItGlobal
Необходимо разработать бекенд (серверную часть) веб-приложения, демонстрирующего расписание рейсовых автобусов. Автобусы двигаются по маршрутам от конечной до конечной в прямом и обратном направлении. В разных направлениях может быть разный набор остановочных пунктов. Фронтенд приложения получает данные с сервера через REST API, необходимо реализовать следующие методы этого API: 1. /api/find-bus Описание: Возвращает автобусы, маршрут которых включает отрезок от одной остановки к другой, с тремя ближайшими к текущему времени вариантами времени прибытия на исходную остановку. Параметры запроса: * from: id исходной остановки. * to: id конечной остановки. Пример ответа: ``` { "from": "ул. Пушкина", "to": "ул. Ленина", "buses": [ { "route": "Автобус No11 в сторону ост. Попова", // указывается конечная остановка маршрута "next_arrivals": ["08:15", "08:40", "09:15"] }, { "route": "Автобус No21 в сторону ост.Ленина", "next_arrivals": ["08:30", "09:04", "09:30"] } ] } ``` 2. Методы (или метод) предоставляющие механизм редактирования маршрутов, т.е. набора остановок на пути следования автобуса (без указания времени). Входный параметры и формат ответа продумать самостоятельно. Требования к реализации: 1. Язык программирования: PHP (версия 7+). 2. Использование фреймворка: допускается использование фреймворка на выбор: Laravel, Symfony, Yii2 или чистый PHP. 3. База данных: PostgreSQL. 4. Использование подхода ООП Оцениваться будут архитектура решения, качество кода, соответствие REST принципам и тестируемость. Будет плюсом если проект будет запускаться в docker. Результат представить в виде ссылки на публичный репозиторий на bitbucket.org. Он должен включать в себя php файлы проекта, sql дамп базы, схему структуры базы данных в виде изображения и инструкцию по запуску проекта.
Ivelum • Средняя сложность
Тестовое задание по 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).
Python • Высокая сложность
Тестовое задание по Python от компании Python
Тестовое задание в Контент В Контенте мы занимаемся агрегацией отелей поставщиков (supplier), объединяя одинаковые отели от разных поставщиков в единую сущность (мета-отель). В этом задании мы предлагаем реализовать базовый сервис (API) для работы с отелями. Для дополнительного контекста и перспективы, представьте что это ключевой сервис в вашем тревел стартапе. Функциональность Список API, которые должны быть покрыты в этом задании: - Создать отель поставщика - Объединить 1 и более отелей поставщиков в один мета-отель - Получить список мета-отелей и входящих в них отелей - Перепривязать отель к другому мета-отелю - Получить историю привязки отеля (к каким мета-отелям в какой момент времени он был привязан) Требования и ограничения - Авторизация/аутентификация не нужна - Отель может быть привязан только к одному мета-отелю в один момент времени - В мета-отеле должен быть минимум один отель - Отель можно отвязать от мета-отеля и привязать к другому Пример данных Мета-отель: ``` id: mercure_pattaya id: windways ``` Отель: ``` id: 1 name: Mercure Pattaya supplier_id: AAA id: 2 name: Mercure Pattaya supplier_id: BBB id: 3 name: Windways Hotel supplier_id: AAA ``` Оценка Цель этого тестового задания - увидеть ваш лучший/самый идиоматичный код на Python/Django. Мы ожидаем увидеть: - Документацию API - README с описанием как запустить проект, запустить тесты и т.д - Чистую архитектуру, с корректной связанностью кода (decoupling), complexity isolation - Аккуратный, понятный, поддерживаемый код, с наличием комментариев к коду (если нужны) - Код на публичной платформе (github/gitlab/bitbucket) - Отсутствие "мертвого" кода (т.е пустые модули, неиспользуемые функции и параметры и т.д) - Тесты (доказательство работоспособности кода) - Реализация на Django + любой REST или RPC фреймворк, с которым вам комфортно - PostgreSQL в качестве БД (помните про блокировки, транзакции, race conditions) - Сервис корректно работает, если запущен в нескольких экземплярах (инстансах) - Проект должен запускаться через docker-compose Вопросы и сроки Cтрогих сроков нет, но мы хотели бы получить от вас примерную оценку времени. Не стесняйтесь задавать вопросы по заданию, если таковые возникнут.
Appstorespy • Средняя сложность
Тестовое задание по Python от компании Appstorespy
Какие знания нужны junior backend developer в 2023 У нас в [Appstorespy.com](https://appstorespy.com/) постоянно открыты вакансии для backend и frontend разработчиков, в том числе и на позиции уровня junior.~~ Успешное выполнение задания подтверждает наличие у вас минимальных базовых знаний, необходимых для самостоятельной работы над backend проектом начального уровня в 2023 году. Данное задание не оплачивается, не является офертой, не гарантирует трудоустройства, не требует использования всех перечисленных технологий и не предусматривает единственно верного решения. Затруднения при реализации задания свидетельствуют о наличии пробелов в знаниях и требуют дополнительной проработки. Нет ни одного образовательного курса, который бы охватывал весь необходимый стек, но отдельно по каждой теме имеется избыточная информация, включая видео и туториалы. **Начальный стек технологий backend: Python 3, Django 3, MySQL/PostgreSQL, MongoDB, Redis, Memcached, RabbitMQ, Celery, Elasticsearch, REST, GraphQL.** Обязательно нужно иметь хорошие знания основ программирования и самого языка, ООП, Style Guide, PEP8, уметь гуглить и находить нужную информацию, знать последние версии основных инструментов, базовые навыки работы с Git, virtualenv, pip, уметь развернуть и запустить рабочий проект на сервере под gunicorn. Задача Необходимо написать бекенд для работы с приложением React, которое позволяет пользователю зарегистрироваться и загрузить файл на сервер для обработки. После асинхронной обработки пользователь сможет посмотреть информацию о своем файле. Непринципиально какая именно обработка файла: сервер может посчитать количество строк в файле, обрезать видео файл и т.д. Приложение React общается с бекендом по GraphQL. Соответственно нужны методы для регистрации, логина, логаута пользователей, аплоада файла и просмотра информации о нем. Написание собственного кода при наличии готовых проверенных open source библиотек может быть рассмотрено как неумение пользоваться поиском, оценивать собственные трудозатраты и выставлять приоритеты задач. Нам ваши велосипеды не нужны. Проверка результата выполнения задания: тесты, Postman. Рекомендуемый выбор технологий в порядке увеличения сложности Фреймворк: Django, Flask Файловое хранилище: локально, S3 Реляционная БД: MySQL, PostgreSQL NoSQL БД: MongoDB, Redis, Elasticsearch Кеширование: Memcached, Redis Регистрация пользователей: Email, Google Авторизация пользователей: Токены(JWT), Auth0, Keycloak Distributed tasks: RabbitMQ/Redis+Celery, Kafka Поиск: Elasticsearch
без ограничений.
Чтобы получить полный доступ,
вам необходимо зарегистрироваться.