Мок-собеседование по проектированию Android-сервиса аудиокниг: от требований и ролей до API, фоновой загрузки, безопасности и модульной архитектуры. В конце дан подробный разбор предложенного решения.
Это учебное мок-интервью по system design для позиции Senior Android Developer: участники проектируют первое приближение сервиса аудиокниг без написания кода. Они уточняют сценарии гостя, слушателя, автора и publisher, модели данных, витрину, статистику, покупки, загрузку крупных файлов, офлайн-доступ и защиту контента. В финале интервьюер разбирает решение: отмечает сильное выяснение требований и коммуникацию, но указывает, что чанкинг загрузки добавляет заметную сложность и для MVP может быть избыточным.
Начинать дизайн следует с ограничения огромной задачи пользовательскими сценариями: поиск и прослушивание книги, загрузка контента publisher’ом, просмотр статистики создателем.
Для первой версии согласованы два типа книг — бесплатные и покупаемые поштучно; подписка сознательно исключена как отдельный набор требований.
Гостю доступен каталог бесплатных книг, а авторизованному пользователю — библиотека, покупки и сохранённый контент; это влияет на модель прав и экранов.
Для витрины достаточно облегчённого списка аудиокниг, а полные данные запрашиваются на экране деталей; в обсуждении REST признан достаточным при небольшом числе запросов, GraphQL оставлен необязательной альтернативой.
Публикацию книги предлагается разбить на создание записи с метаданными и статусом загрузки, затем передачу файла и обложки; только после успешной загрузки контент становится доступным.
Для крупных файлов кандидат предложил хранить локальное состояние загрузки, повторять неуспешные попытки и запускать фоновую работу через WorkManager. В фидбэке отмечено, что разбиение на чанки оправдано возобновлением загрузки, но существенно усложняет MVP.
Офлайн-копии и потоковое воспроизведение требуют разграничения прав на бесплатный и купленный контент; обсуждались шифрование файлов и отказ от постоянных публичных ссылок.
Перед оценкой сроков нужно декомпозировать функции и дать каждой диапазон оптимистичной и пессимистичной оценки, а не одну точную цифру.