Irbisa · Шпаргалка
System Design на Flutter
Раунд проектирования: ленты, чат, offline-first и конфликты, обновления в реальном времени, медиа, фоновые загрузки, server-driven UI
На мобильный system design дали 45 минут: на что их потратить и что на самом деле оценивает интервьюер?
Какие мобильные ограничения вы поднимаете на system design (нестабильная сеть, смерть процесса, батарея, старые версии приложения) и как каждое меняет дизайн?
Главный экран Flutter-приложения ждёт пять эндпоинтов через
Future.waitи пуст, пока не ответят все. Что вы поменяете в приложении и что попросите у бэкенда?Поллинг, long polling, server-sent events, WebSocket или пуш: как выбрать транспорт для живых обновлений во Flutter-приложении?
Как бы вы спроектировали offline-first Flutter-приложение: что читают экраны, куда уходит запись без сети и что показывает UI, пока сервер не подтвердил?
// The row and its pending operation commit together or not at all.Future<void> renameNote(Database db, String id, String title) { final payload = jsonEncode({'title': title}); return db.transaction((txn) async { await txn.rawUpdate( "UPDATE notes SET title = ?, sync_state = 'pending' WHERE id = ?",…Два устройства правят одну заметку офлайн и позже синхронизируются. Как разрешить конфликт (last write wins, слияние по полям, CRDT) и чего стоит каждый вариант?
typedef Fields = Map<String, Object?>; /// Three-way merge of one record with scalar fields: a field changed on one/// side only takes that side's value; changed differently on both, a conflict.(Fields merged, Set<String> conflicts) mergeRecord({ required Fields base, // the version both edits started from…Приложение для торговых представителей должно искать офлайн по каталогу из 50 000 товаров. Как спроектировать первую загрузку, дельта-обновления и локальный поисковый индекс?
Спроектируйте ленту приложения вроде Instagram на Flutter: API и пагинация, локальный кэш, загрузка картинок и плавный скролл, который сохраняет позицию после перезапуска.
Спроектируйте вертикальную видеоленту в стиле TikTok на Flutter: предзагрузка следующих роликов, пул плееров, ограничения памяти и поведение на медленной сети.
Спроектируйте мессенджер вроде Telegram на Flutter: транспорт, статусы сообщений (отправляется, отправлено, прочитано), офлайн-очередь отправки и пагинация по истории за годы.
Спроектируйте пуш-уведомления для мессенджера: что шлёт сервер, как не показывать пуш открытого чата, как группировать по чатам и убирать прочитанное на другом устройстве.
Спроектируйте отслеживание курьера на карте: как обновления координат доходят до приложения клиента, как маркер движется плавно и что показывает экран, когда обновления пропали.
Спроектируйте резервное копирование фото, которое загружает тысячи снимков в фоне, переживает убийство приложения и бережёт батарею и мобильный трафик.
Спроектируйте ежедневные напоминания для трекера привычек: локальные уведомления по местному времени, которые переживают смену часового пояса, перезагрузку и недели без открытия приложения.
// Runs after tz.initializeTimeZones(). Store the returned zone: on launch and// resume, reschedule every reminder if the device zone has changed.Future<String> scheduleDaily( FlutterLocalNotificationsPlugin plugin, { required int id, required int hour,…Экран трейдинга получает тысячи обновлений цен в секунду по 500 инструментам. Как спроектировать путь от сокета до виджетов, чтобы UI держал 60 fps?
typedef Quote = ({String symbol, double price}); /// Thousands of ticks a second in, at most ten updates a second per row out.class QuoteBoard { QuoteBoard(Stream<List<Quote>> batches) { // a newer tick replaces one that nobody has seen yet…Как встроить аналитику и логирование в большое Flutter-приложение, чтобы события переживали офлайн, уважали согласие пользователя, а вендора можно было сменить, не трогая код фич?
Продукт хочет перекраивать главный экран без релиза в стор. Когда server-driven UI во Flutter окупается, как его построить и где он начинает вредить?