Результаты выполнения тестового задания следует опубликовать на GitHub и отправить на почту gocloudcamp@sbercloud.ru до 23:59:59 10 марта 2023 г. Практическое задание состоит из нескольких частей, при этом, даже если вы сделали только одну часть задания - присылайте ее на рассмотрение.
- Опишите самую интересную задачу в программировании, которую вам приходилось решать?
- Расскажите о своем самом большом факапе? Что вы предприняли для решения проблемы?
- Каковы ваши ожидания от участия в буткемпе?
Требуется разработать модуль для обеспечения работы с плейлистом. Модуль должен обладать следующими возможностями:
- Play - начинает воспроизведение
- Pause - приостанавливает воспроизведение
- AddSong - добавляет в конец плейлиста песню
- Next воспроизвести след песню
- Prev воспроизвести предыдущую песню
- Должен быть описан четко определенный интерфейс для взаимодействия с плейлистом
- Плейлист должен быть реализован с использованием двусвязного списка.
- Каждая песня в плейлисте должна иметь свойство Duration.
- Воспроизведение песни не должно блокировать методы управления.
- Метод воспроизведения должен начать воспроизведение с длительностью, ограниченной свойством Duration песни. Воспроизведение должно эмулироваться длительной операцией.
- Следующая песня должна воспроизводиться автоматически после окончания текущей песни.
- Метод Pause должен приостановить текущее воспроизведение, и когда воспроизведение вызывается снова, оно должно продолжаться с момента паузы.
- Метод AddSong должен добавить новую песню в конец списка.
- Вызов метода Next должен начать воспроизведение следущей песни. Таким образом текущее
- спроизведение должно быть остановлено и начато воспроизведение следущей песни
- Вызов метода Prev должен остановить текущее воспроизведение и начать воспроизведение предыдущей песни.
- Реализация метода AddSong должна проводиться с учетом одновременного, конкурентного доступа.
- Следует учитывать, что воспроизведение может быть остановлено извне
- Реализация методов Next/Prev должна проводиться с учетом одновременного, конкурентного доступа.
- Примечание: Все реализации должны быть тщательно протестированы и оптимизированы с точки зрения производительности.
Реализовать сервис, который позволит управлять музыкальным плейлистом. Доступ к сервису должен осуществляться с помощью API, который имеет возможность выполнять CRUD операции с песнями в плейлисте, а также воспроизводить, приостанавливать, переходить к следующему и предыдущему трекам. Конфигурация может храниться в любом источнике данных, будь то файл на диске, либо база данных. Для удобства интеграции с сервисом может быть реализована клиентская библиотека.
- реализация задания может быть выполнена на любом языке программирования
- сервис должен обеспечивать персистентность данных
- сервис должен поддерживать все CRUD операции
- удалять трек допускается только если он не воспроизводится в данный момент
- API должен иметь необходимые методы для взаимодействия с плейлистом.
- API должен возвращать значимые коды ошибок и сообщения в случае ошибок.
- в качестве протокола взаимодействия сервиса с клиентами будете использовать gRPC
- напишите Dockerfile и docker-compose.yml
- покроете проект unit-тестами
- сделаете тестовый пример использования написанного сервиса