Офлайн-режим в мобильном приложении
Вопрос
Спроектируйте офлайн-режим для приложения списка задач: что храним, как синхронизируем.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Локальная база (SQLite/WatermelonDB) как источник правды для UI
Изменения применяются локально сразу и пишутся в постоянную очередь
Отправка очереди по порядку при появлении сети, повторы с задержкой, идемпотентность
Получение изменений с сервера (дельта по времени или версии) и разрешение конфликтов
Индикация состояния синхронизации пользователю
Токены в защищённом хранилище, данные пользователя чистятся при выходе
Что могут спросить следом
- Как получить с сервера только изменённые задачи?
- Что показать пользователю, если операция окончательно не прошла?
- Как тестировать офлайн-сценарии?
Разбор
Образцовый ответ: «UI читает данные из локальной базы, например SQLite через WatermelonDB, поэтому без сети всё работает. Любое изменение сразу применяется локально и записывается в очередь операций в той же базе, с ключом идемпотентности. Синхронизатор при появлении сети отправляет операции по порядку: успех удаляет из очереди, сетевая ошибка останавливает и повторяет позже с растущей задержкой, ошибка валидации помечает операцию и показывает пользователю. Затем забираю изменения с сервера с момента последней синхронизации по версии. Конфликты решаю по версиям: сервер отвечает 409, я сливаю поля или прошу пользователя выбрать. В интерфейсе показываю, что есть неотправленные изменения. При выходе чищу локальные данные»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.