Ответ вслух Middle Офлайн и синхронизация спрашивают часто обновлено

Как сделать offline-first приложение

Вопрос

Как вы спроектируете мобильное приложение, которое полноценно работает без сети?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Основа: локальная база как единственный источник правды. Экраны подписаны на неё, а сеть только обновляет базу.

Что должно прозвучать в ответе

  • Локальная база как единственный источник правды для UI

  • Чтение: показать кеш сразу, обновить из сети фоном

  • Запись: локально и в outbox, оптимистичный UI

  • Синхронизатор: системный планировщик, ретраи, идемпотентность

  • Дельта-синхронизация с курсором и удалениями

  • Конфликты и статус синхронизации для пользователя

Что могут спросить следом

  • Что делать, если outbox вырос до тысяч операций?
  • Как мигрировать схему базы с неотправленными изменениями?

Разбор

Основа: локальная база как единственный источник правды. Экраны подписаны на неё, а сеть только обновляет базу. На чтение показываю то, что есть, и параллельно запрашиваю свежие данные с курсором синхронизации, сервер отдаёт изменения и удаления. На запись меняю базу сразу, чтобы UI отреагировал мгновенно, и в той же транзакции кладу операцию в outbox с ключом идемпотентности. Синхронизатор запускается системным планировщиком (WorkManager, BGTaskScheduler), при старте приложения и при появлении сети, отправляет операции по порядку с экспоненциальной задержкой. Конфликты решаю по типу данных: версии записи и ответ 409, слияние по полям, где-то побеждает сервер. Пользователю показываю статус: что ещё не отправлено и что не удалось.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.