Тестовые задания по Python
Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио
OstrovokTech • Лёгкая сложность
Тестовое задание по Python от компании OstrovokTech
Тестовые задания для Python Задача 1: Что может быть проще SQL? Вам дана таблица в postgres, которая представляет из себя список сотрудников с их зарплатами и отделами. Необходимо написать запрос, который будет выбирать человека с максимальной зарплатой из каждого отдела. В качестве тестовых данных можете использовать [дамп таблицы](employee.sql), пример схемы: ``` postgres=# \d employee Table "public.employee" Column | Type | Modifiers ------------+-----------------------+----------- id | integer | not null name | character varying(30) | department | character varying(30) | salary | integer | Indexes: "employee_pkey" PRIMARY KEY, btree (id) ``` Если нам нужна информация о всех сотрудниках, имеющих максимальную зарплату в отделе(в случае, когда она одинаковая): ``` SELECT m.name, m.department, t.mx FROM (SELECT department, max(salary) as mx from employee GROUP BY department) t JOIN employee m on m.department = t.department and t.mx = m.salary; ``` Если достаточно информации о любом из сотрудников с максимальной зарплатой: ``` SELECT DISTINCT ON (department) department, name, salary from employee ORDER BY department, salary DESC; ``` Запустить запросы, посмотреть результ: ``` make sql ``` Задача 2: Smashing Wallpaper Downloader Есть прекрасный сайт Smashing Magazine, который каждый месяц выкладывает отличные обои для десктопа. Заходить каждый месяц и проверять, что там нового дело не благородное, поэтому давайте попробуем автоматизировать эту задачу. Требуется написать cli утилиту, которая будет качать все обои в требуемом разрешение за указанный месяц-год в текущую директорию пользователя. Вот [тут](https://www.smashingmagazine.com/tag/wallpapers/) находятся все обои, а [здесь](https://www.smashingmagazine.com/2017/04/desktop-wallpaper-calendars-may-2017/) находятся обои за май 2017. Условия: * Python 3.5+ * Любые сторонние библиотеки * PEP8 * Если останется время, то можете покрыть её тестами с помощью py.test (: Подготовить среду, установить зависимости(откроет консоль внутри контейнера) ``` make getwallpapers_env ``` Запустить скрипт загрузки обоев в консоли из предыдущей команды: ``` ./getwallpapers.py 022018 640x480 ``` Запустить тесты ``` make getwallpapers_test ``` Особенности: * Если обои доступны в вариантах с календарём и без, утилита скачает оба. * Не все обои доступны во всех разрешениях, если конкретных обоев запрошенного разрешения нет, утилита их пропустит.
Aviasales • Средняя сложность
Тестовое задание по Python от компании Aviasales
Тестовое задание в команду ассистеда (Python/Go) В папке два XML – это ответы на поисковые запросы, сделанные к одному из наших партнёров. [RS_Via-3.xml](/backend/Python/Aviasales/RS_Via-3.xml) [RS_ViaOW.xml](/backend/Python/Aviasales/RS_ViaOW.xml) В ответах лежат варианты перелётов (тег `Flights`) со всей необходимой информацией, чтобы отобразить билет на Aviasales. На основе этих данных, нужно сделать вебсервис, в котором есть эндпоинты, отвечающие на следующие запросы: * Какие варианты перелёта из DXB в BKK мы получили? * Самый дорогой/дешёвый, быстрый/долгий и оптимальный варианты * В чём отличия между результатами двух запросов (изменение маршрутов/условий)? Язык реализации: `Go` Формат ответа: `json` По возможности использовать стандартную библиотеку. Язык реализации: `python3` Формат ответа: `json` Используемые библиотеки и инструменты — всё на твой выбор. Оценивать будем умение выполнять задачу имея неполные данные о ней, умение самостоятельно принимать решения и качество кода.
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
ООО МСтрой • Лёгкая сложность
Тестовое задание по Python от компании ООО МСтрой
ЗАДАНИЕ Есть массив объектов, которые имеют поля id и parent, через которые их можно связать в дерево и некоторые произвольные поля. Нужно написать класс, который принимает в конструктор массив этих объектов и реализует 4 метода: - getAll() Должен возвращать изначальный массив элементов. - getItem(id) Принимает id элемента и возвращает сам объект элемента; - getChildren(id) Принимает id элемента и возвращает массив элементов, являющихся дочерними для того элемента, чей id получен в аргументе. Если у элемента нет дочерних, то должен возвращаться пустой массив; - getAllParents(id) Принимает id элемента и возвращает массив из цепочки родительских элементов, начиная от самого элемента, чей id был передан в аргументе и до корневого элемента, т.е. должен получиться путь элемента наверх дерева через цепочку родителей к корню дерева. Порядок элементов важен! Требования: максимальное быстродействие, следовательно, минимальное количество обходов массива при операциях, в идеале, прямой доступ к элементам без поиска их в массиве. Исходные данные: ``` class TreeStore: pass items = [ {"id": 1, "parent": "root"}, {"id": 2, "parent": 1, "type": "test"}, {"id": 3, "parent": 1, "type": "test"}, {"id": 4, "parent": 2, "type": "test"}, {"id": 5, "parent": 2, "type": "test"}, {"id": 6, "parent": 2, "type": "test"}, {"id": 7, "parent": 4, "type": None}, {"id": 8, "parent": 4, "type": None} ] ts = TreeStore(items) ``` Примеры использования: ``` - ts.getAll() // [{"id":1,"parent":"root"},{"id":2,"parent":1,"type":"test"},{"id":3,"parent":1,"type":"test"},{" id":4,"parent":2,"type":"test"},{"id":5,"parent":2,"type":"test"},{"id":6,"parent":2,"type":"t est"},{"id":7,"parent":4,"type":None},{"id":8,"parent":4,"type":None}]# - ts.getItem(7) // {"id":7,"parent":4,"type":None} - ts.getChildren(4) // [{"id":7,"parent":4,"type":None},{"id":8,"parent":4,"type":None}] - ts.getChildren(5) // [] - ts.getAllParents(7) // [{"id":4,"parent":2,"type":"test"},{"id":2,"parent":1,"type":"test"},{"id":1,"parent":"root"}] ```
без ограничений.
Чтобы получить полный доступ,
вам необходимо зарегистрироваться.