Вопросы на собеседовании: Flutter-разработчик
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior Flutter-разработчик.
Смотреть пример резюме: Flutter-разработчик →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я бы построил граф пакетов по фичам с единой точкой композиции приложения и проверял его связи в CI.
- Каждая бизнес-фича публикует небольшой пакет api, а виджеты, провайдеры Riverpod или BLoC, репозитории и DTO держит в пакете реализации, за который отвечает одна команда.
- Общие доменные типы Dart находятся в редко меняющихся core-пакетах, а код Swift, Kotlin и плагинов скрыт за platform-пакетом, поэтому фичи не импортируют детали хоста.
- CODEOWNERS и проверка графа зависимостей запрещают импорты между реализациями, а тесты затронутых пакетов удерживают p95 проверки pull request ниже 12 минут.
- Дополнительные модели на границах оправданы только там, где они позволяют 5 командам выпускать изменения без правок чужой реализации.
Зачем это спрашивают: Вопрос проверяет, умеет ли кандидат превратить масштаб и командную ответственность в контролируемые границы Flutter-пакетов.
Я бы разорвал циклы через узкие контракты, а затем оптимизировал измеренные пакеты с большим числом зависимых модулей, не объединяя всё подряд.
- Я бы составил карту импортов и частоты изменений, затем вынес контракты маршрутов, результатов и домена из минимальной стабильной границы, разрывающей каждый из 11 циклов.
- Часто меняющиеся общие UI- и utility-пакеты разделил бы по владельцам либо вернул потребителям; более 15 зависимых пакетов допустимы только у стабильных примитивов.
- Проверка графа в CI запрещала бы циклы, недопустимые связи между фичами и публичные импорты каталога src другого пакета.
- Новая схема принимается только при отсутствии циклов и инкрементальном анализе затронутой фичи быстрее 90 секунд.
Зачем это спрашивают: Сильный ответ опирается на граф зависимостей и измеримые результаты сборки, а не считает большее число пакетов безусловным улучшением.
Я бы назначил одного ответственного владельца checkout и заменил правки чужих реализаций контрактами, сформированными под потребителей.
- Команда checkout владеет состоянием, UI, аналитикой и оркестрацией, а платежи, идентификация и каталог публикуют узкие возможности с явными владельцами и тестами совместимости.
- CODEOWNERS требует владельца для изменений реализации, но для контракта достаточно одного ревьюера от потребителя и одного от поставщика вместо всех 5 команд.
- Ежеквартальный отчет отслеживает пакеты без владельца, задержку согласований и межкомандные правки с целью не более одного внешнего согласования для обычного изменения checkout.
- Общий код получает платформенного владельца лишь после того, как минимум 3 фичам понадобится одинаковое стабильное поведение, а не просто похожий синтаксис.
Зачем это спрашивают: Вопрос оценивает, снижают ли границы ответственности стоимость координации и не создают ли бесхозный общий слой.
Я бы держал типизированные маршруты в API-пакетах, а конкретные builders разрешал в оболочке приложения.
- Каждая фича публикует sealed-типы Dart 3 для входных данных маршрута и типизированных результатов со стабильными ID, но без классов Widget, экземпляров GoRouter и типов репозиториев.
- Точка композиции приложения регистрирует все 24 обработчика и направляет 8 проверенных deep links через тот же парсер маршрутов с учетом аутентификации и предварительных условий.
- Контрактные тесты проверяют сериализацию маршрута, неизвестные версии, поведение Back и однозначное разрешение каждой регистрации.
- Проверка графа пакетов гарантирует отсутствие связей между реализациями, а централизованная сборка принимается ради прозрачной навигации.
Зачем это спрашивают: Типизированные маршруты изолируют фичи, а единая точка композиции согласует внутреннюю и внешнюю навигацию.
Я бы начал с обычного пакета, а отложенную доставку или плагин выбрал только при наличии измеримой границы, но не ради одной лишь независимости команд.
- Плагин оправдан, когда фича владеет API на Swift или Kotlin; он не дает независимого развертывания Dart-кода и добавляет работу с версиями платформ.
- Отложенные компоненты Android могут сократить базовую загрузку, но на iOS код всё равно входит в приложение, поэтому я измерю размер и p95 первого открытия отдельно по платформам.
- Микрофронтенд в рантайме добавляет отказы маршрутизации, зависимостей, наблюдаемости и совместимости, не обеспечивая доставку iOS-кода в обход App Store.
- Я вынесу фичу в отложенную доставку только при p95 первого открытия ниже 4 секунд, иначе уменьшу ресурсы или включу ее в приложение.
Зачем это спрашивают: Ответ должен отвергать модную архитектуру, если ограничения платформы не позволяют получить обещанную пользу.
Я бы опубликовал единый Dart-контракт возможностей, а обе нативные реализации скрыл за границей федеративного плагина.
- Пакет для приложения определяет типизированные команды камеры, результаты, ошибки и состояния жизненного цикла без типов AVFoundation или CameraX.
- Пакеты Swift и Kotlin реализуют контракт и отвечают за переключение потоков, разрешения, освобождение ресурсов и нативные тестовые фикстуры.
- Dart-адаптер унифицирует только обязательное общее поведение, а платформенные возможности оставляет явными, не сводя их к ложному общему знаменателю.
- Интеграционные бенчмарки измеряют p95 полного цикла команды ниже 50 мс на обеих платформах, включая сериализацию и переключение на главный поток.
Зачем это спрашивают: Вопрос проверяет, сохраняет ли абстракция общий контракт, не скрывая существенных различий iOS и Android.
Я бы выбрал Pigeon, потому что сгенерированные типизированные интерфейсы лучше выполняют требование compile-time контракта, чем написанные вручную карты MethodChannel.
- Схема Pigeon задает nullable-поля, enum, структурированные ошибки и асинхронные host-методы, а CI генерирует согласованный код Dart, Swift и Kotlin.
- Тонкий адаптер не пропускает сгенерированные типы в доменный слой, поэтому обновление схемы не расходится по 14 местам вызова.
- MethodChannel подходит для одного небольшого экспериментального вызова, но строковые имена методов и динамические карты переносят ошибки в рантайм.
- CI повторно генерирует код и падает при diff, а тесты совместимости запускают предыдущий Dart-клиент с текущим нативным хостом.
Зачем это спрашивают: Интервьюер проверяет выбор канала по типобезопасности, стоимости поддержки и совместимости, а не по привычке.
Я бы разделил нативное состояние передачи и частоту обновления UI, явно задав срок жизни подписки.
- Нативный код отправляет типизированные снимки с ID файла, монотонным номером, числом байтов и конечным состоянием в одной последовательной очереди, а не создает канал на каждый тик.
- Dart-адаптер объединяет обновления каждого файла до частоты не более 10 в секунду, но всегда доставляет завершение и ошибку.
- onListen регистрирует одного наблюдателя, onCancel удаляет его, а повторная подписка возвращает последний снимок, чтобы пересоздание view не сбрасывало прогресс.
- Тест длительностью 60 секунд проверяет ограниченную память, отсутствие потерянных конечных событий и возраст UI-данных ниже 150 мс для всех 20 файлов.
Зачем это спрашивают: Сильный ответ отдельно решает обратное давление, надежность конечных событий и жизненный цикл канала.
Я бы использовал FFI для горячего синхронного пути буфера, а платформенные каналы оставил для сервисов операционной системы.
- FFI устраняет повторную сериализацию кодеком, а NativeCallable или узкий C ABI сохраняет стабильную границу для оберток Swift, Kotlin и Dart.
- Буферы имеют явное владение и переиспользуют нативные области памяти; каждое выделение и освобождение покрывается нагрузочными тестами и AddressSanitizer в нативных сборках.
- Вызовы выполняются вне UI isolate, если могут превысить бюджет кадра, потому что сам по себе FFI не делает CPU-работу асинхронной.
- Нативная сложность принимается только при p95 полного цикла ниже 16,7 мс и отсутствии роста памяти после 100 000 вызовов.
Зачем это спрашивают: Вопрос оценивает понимание того, что FFI сокращает накладные расходы на данные, но добавляет ответственность за память и планирование.
Я бы версионировал контракт возможностей отдельно от пакета плагина и явно моделировал переходы жизненного цикла.
- Dart-интерфейс согласует версию контракта и возможности, отклоняет неподдерживаемую major-версию и допускает добавочные optional-поля внутри одной major-линии.
- Android привязывает ресурсы к ActivityAware callbacks и освобождает их при detachment из-за конфигурации; iOS реагирует на активацию и отключение сцен, не предполагая одно глобальное окно.
- При потере хоста незавершенные вызовы получают типизированный результат unavailable или cancelled, а повторное подключение восстанавливает наблюдателей без дублей.
- Перед публикацией матрица проверяет 3 линии Flutter, пересоздание Activity, 2 сцены iOS и совместимость старого Dart-клиента с новым хостом.
Зачем это спрашивают: Ответ должен сочетать семантическую совместимость и правильное владение нативными ресурсами при смене жизненного цикла хоста.
Я бы считал 16,7 мс полным интервалом кадра и отдельно профилировал UI- и raster-работу, поскольку любая из них может пропустить vsync.
- Графики кадров DevTools в profile- или release-сборке показывают, где задержка: build, layout, paint, растеризация или отправка команд GPU.
- Я бы удерживал p95 UI- и raster-длительности примерно ниже 8 мс каждую, оставляя запас планировщику, а не отдавая одной стороне весь интервал.
- Timeline-события вокруг анимации связывают конкретное взаимодействие с затратами shader, декодирования изображения, saveLayer или layout на целевом устройстве.
- Изменение проходит проверку только при доле медленных кадров ниже 2 процентов в 20 одинаковых прогонах, а не при одном улучшении среднего.
Зачем это спрашивают: Вопрос проверяет практическое понимание параллельной UI- и raster-нагрузки Flutter и бюджетов по процентилям.
Я бы сузил обновление конфигурации на уровне element и инвалидацию рисования на уровне render, не оптимизируя вслепую всё дерево.
- Неизменяемые widgets описывают конфигурацию, elements сохраняют идентичность и состояние, а render objects выполняют layout и paint, поэтому стабильные keys и const-поддеревья сокращают лишние обновления elements.
- Значение счетчика выбирается у самого узкого потребителя через Riverpod select или точечный ListenableBuilder, оставляя конфигурации остальных 599 виджетов неизменными.
- RepaintBoundary изолирует анимированную область, только если визуализация repaint в DevTools подтверждает перерисовку окружающих пикселей; избыток границ расходует слои и память.
- Я сравню число build и время raster на 100 обновлениях, требуя перестройки только поддерева счетчика и p95 paint ниже 4 мс.
Зачем это спрашивают: Сильный ответ различает rebuild, relayout и repaint, а не считает их одной и той же затратой.
Я бы составил ленивые slivers и сохранил стабильную идентичность элементов, чтобы viewport создавал только ближайшие строки.
- CustomScrollView объединяет SliverPersistentHeader для месяцев со SliverList или SliverVariedExtentList, если размеры можно дешево узнать, без shrinkWrap и вложенных прокручиваемых списков.
- Строки используют стабильные backend ID, готовые presentation-модели и ограниченный keep-alive только для тех контролов, которым действительно нужно локальное UI-состояние.
- Пагинация удерживает окно вокруг viewport, а декодированные изображения удаляются через image cache вместо хранения render-детей для всех 50 000 моделей.
- Бенчмарк прокрутки должен удерживать peak RSS ниже 120 МБ и p95 кадра ниже 16,7 мс на самом слабом поддерживаемом устройстве.
Зачем это спрашивают: Интервьюер оценивает ленивую композицию slivers, идентичность и память для действительно большой коллекции.
Я бы создал собственный RenderObject лишь после доказательства, что готовые slivers не обеспечивают двухосевую виртуализацию в заданном бюджете.
- Render object вычисляет видимые диапазоны строк и столбцов по constraints и смещениям прокрутки, затем раскладывает только ячейки viewport и небольшого cache extent.
- Он отделяет layout-входы от изменений выделения, требующих только paint, реализует hit testing и semantics и не делает intrinsic measurement всех 2 000 ячеек.
- Сначала я проверю готовые примитивы двухмерной прокрутки, потому что собственный layout несет долг по accessibility, жестам и обновлениям фреймворка.
- Собственная реализация принимается только при p95 layout ниже 8 мс и semantics-тестах навигации с клавиатурой и screen reader.
Зачем это спрашивают: Вопрос проверяет, оправдан ли кастомный рендеринг измеримыми требованиями геометрии и учтены ли обязанности, скрытые за widgets.
Я бы профилировал путь Impeller и нагрузку ресурсов, не предполагая, что все задержки, связанные с shaders, исчезли автоматически.
- Profile-сборка с Perfetto и Flutter timeline разделяет Dart-работу, загрузку текстур, создание pipeline, raster-время и завершение GPU во время первой анимации.
- Я упрощу неподдерживаемые или дорогие эффекты, сокращу большие области saveLayer и прогрею лишь небольшой предсказуемый путь анимации, если главным фактором доказано создание pipeline.
- Все 3 модели GPU останутся в матрице бенчмарков, потому что драйверы и лимиты текстур могут различаться даже при модели предварительно скомпилированных shaders в Impeller.
- Релиз требует p95 первого запуска ниже 16,7 мс либо осознанный fallback с reduced motion без визуальных расхождений в golden- или screenshot-проверках.
Зачем это спрашивают: Сильный ответ рассматривает Impeller как архитектуру рендеринга с измеримыми затратами GPU, а не как универсальный переключатель производительности.
Я бы отделил стабильный дорогой контент от движущихся маркеров и оставил только те границы, для которых измерена экономия raster-работы.
- Статичные метки и оформление карты могут делить один RepaintBoundary, если не меняются при обновлении маркеров, а анимированные маркеры рисуются в отдельном легком слое.
- Я проверю записи raster cache и repaint rainbow, удалив отдельные границы меток, чьи кэшированные текстуры дороже повторного рисования простого текста.
- Большие изображения декодируются близко к размеру показа и переиспользуются по ключу кэша, а временные трансформированные слои не кэшируются принудительно без окупаемости на повторных кадрах.
- Цель: рост raster cache менее 15 МБ и p95 raster-времени ниже 8 мс за 60 секунд анимации.
Зачем это спрашивают: Вопрос оценивает экономику кэша и изоляцию слоев, а не механическое добавление RepaintBoundary повсюду.
Я бы разделил модель сцены, преобразование viewport, слой взаимодействия и семантическое представление, чтобы они обновлялись с разной частотой.
- CustomPainter или render object рисует видимые узлы из пространственного индекса, а рамки выделения и курсоры перерисовываются отдельно без перестройки модели из 500 узлов.
- События указателя, клавиатуры и focus поступают в один детерминированный reducer с sealed actions Dart 3 и записями undo, а не напрямую изменяют объекты canvas.
- Semantics представляет выбранные и ближайшие узлы как доступные controls, хотя визуальный canvas кастомный, а reduced-motion отключает необязательные переходы.
- Бенчмарки pan, zoom, множественного выбора и undo требуют p95 кадра ниже 16,7 мс и задержки hit test ниже 50 мс.
Зачем это спрашивают: Ответ должен объединять эффективный рендеринг, архитектуру взаимодействия и accessibility сложного кастомного UI.
Я бы измерял путь от запуска процесса до первого пригодного для работы кадра и оптимизировал только подтвержденную трассировкой критическую цепочку.
- Flutter integration- или нативные macrobenchmarks выполняют минимум 30 холодных запусков в profile- или release-режиме с одинаковым состоянием устройства, разделяя запуск engine, инициализацию Dart, регистрацию плагинов и первый кадр.
- Синхронно остаются только crash reporting и критичная для запуска конфигурация; аналитика, remote config, прогрев БД и не начальные маршруты инициализируются при первом использовании.
- Первый экран использует небольшие локальные ресурсы и не блокируется сетью, а startup-код Dart 3 не создает заранее весь граф провайдеров.
- Gate требует p95 ниже 1,5 секунды и не допускает ухудшения p95 теплого старта более чем на 5 процентов.
Зачем это спрашивают: Вопрос проверяет, измеряется ли запуск как критическая цепочка с явным и воспроизводимым release gate.
Я бы разделил утечки удерживаемых объектов, нагрузку декодированных изображений и нативные allocations до изменения лимитов кэша.
- Heap snapshots и retaining paths в DevTools сравнивают посещения 2 и 10, а Android Studio или Instruments показывает, находится ли пропавшая память в Dart, GPU-текстурах или нативных плагинах.
- Controllers, подписки streams и Riverpod auto-dispose scopes должны освобождаться вместе с маршрутом; повторный тест требует ноль удерживаемых владельцев галереи после сборки мусора.
- Для декодированных изображений задается измеренный лимит ImageCache в байтах и декодирование до целевого размера с допустимыми повторами ради peak RSS ниже 210 МБ.
- Цикл по галерее длительностью 15 минут проходит, только если память после GC возвращается в пределах 10 МБ от уровня второго посещения и процесс не завершается из-за OOM.
Зачем это спрашивают: Сильный ответ отличает утечки от ограниченных кэшей и проверяет как Dart-, так и нативную память.
Я бы запрашивал, декодировал и кэшировал thumbnails в размере показа, а не пропускал 12 МП изображения через UI-путь.
- CDN отдает варианты по ширине, формату и качеству, а cacheWidth или ResizeImage ограничивает локальное декодирование, если серверного варианта нет.
- Список предзагружает лишь небольшое окно viewport, ограничивает параллельные загрузки и отменяет работу для строк, ушедших из окна до декодирования.
- Memory cache хранит декодированные thumbnails в рамках байтового бюджета, disk cache хранит сжатые ответы, а полное разрешение загружается только на detail-экране.
- Бенчмарки требуют первые видимые thumbnails за 500 мс, peak RSS ниже 220 МБ и не более 8 одновременных декодирований.
Зачем это спрашивают: Вопрос оценивает полный цикл выбора размера, concurrency и разделения кэшей, а не отдельный widget.
Закрытые вопросы
- 21
Android App Bundle занимает 92 МБ, а загрузка iOS 118 МБ при целевых значениях 65 и 85 МБ. Как вы создадите бюджет размера приложения?
- 22
Flutter-релиз содержит 40 feature-пакетов, 6 реестров, похожих на reflection, и 18 МБ предположительно недостижимого Dart-кода. Как вы проверите tree shaking?
tree-shakingapp-sizeflutter - 23
Flutter-приложение обслуживает 1 млн MAU, но телеметрия производительности может добавлять лишь 0,5 процента CPU и 200 КБ на сессию. Какую наблюдаемость вы внедрите?
active-usersobservabilityperformance - 24
Пять команд используют Riverpod в 35 фичах, а изменение login сейчас инвалидирует 120 провайдеров. Как вы перестроите владение состоянием?
state-managementownership - 25
В checkout на BLoC есть 16 состояний, 22 события и 4 параллельных side effects. Как сохранить детерминизм для 6 продуктовых команд?
state-management - 26
В profile flow есть 7 экранов, 3 черновика и восстановление процесса, но команды спорят, где хранить состояние: в widgets, Riverpod или repositories. Какие правила владения вы бы задали?
conflictownershipwidgets - 27
Telemetry BLoC получает 5 000 событий в минуту от 200 устройств. Для каждого устройства порядок обязателен, а независимые устройства должны обрабатываться параллельно. Как бы вы спроектировали keyed concurrency и детерминированное состояние?
concurrencydesignstate-management - 28
Офлайн-приложение для выездных сотрудников редактирует 10 000 записей, может быть без связи 72 часа и не допускает тихой перезаписи. Как вы спроектируете консистентность?
designconsistency - 29
Flutter-клиент должен поддерживать API версий 3 и 4 в течение 90 дней для 25 endpoints без принудительного обновления. Как вы построите клиентский контракт?
endpointsflutter - 30
Приложение на Dart 3 должно разобрать JSON размером 40 МБ менее чем за 600 мс, не блокируя взаимодействие на 60 Гц. Как вы используете isolates?
concurrencydart - 31
Приложение выполняет до 50 CPU-задач в минуту длительностью от 80 до 300 мс, а создание isolate занимает 20 мс. Как бы вы спроектировали compute pool?
concurrencydesign - 32
Пользователь отменяет задачу isolate длительностью 3 секунды, а UI должен остановиться за 100 мс без завершения несвязанной работы. Как вы реализуете отмену?
concurrencyresilience - 33
Плагин камеры отправляет в Dart кадры по 25 МБ 20 раз в секунду, а копирование поднимает память выше 300 МБ. Как вы перестроите передачу бинарных данных?
memorydart - 34
В очереди синхронизации 50 000 ожидающих изменений, а обычная синхронизация занимает 10 минут, но iOS обычно дает около 30 секунд background time, а Android может завершить процесс. Какой возобновляемый background-контракт и архитектуру вы бы пообещали?
promisesconcurrencydata-structures - 35
Пяти командам нужна Flutter design system с 60 компонентами и окном миграции 6 месяцев. Как вы определите ее архитектуру?
componentsdesign-systemflutter - 36
Checkout должен соответствовать WCAG 2.2 AA, поддерживать масштаб текста 200 процентов и оставаться доступным для switch control. Что вы потребуете?
a11yscaling - 37
Flutter-приложение поддерживает 12 locales, включая арабскую, а переводы могут быть длиннее на 40 процентов. Как вы организуете localization?
flutter - 38
Продукт требует нативного поведения iOS и Android на 30 общих экранах, но отличаются только 8 взаимодействий. Как вы адаптируете UI без его разветвления?
- 39
Пять команд создают golden tests на 3 операционных системах, и 14 процентов тестов сейчас падают из-за различий шрифтов или renderer. Какую стратегию вы зададите?
golden-testssystem-designiac - 40
В Flutter-репозитории есть 4 окружения, а 7 разработчиков могут исследовать клиентский binary. Где должны находиться API secrets?
flutterapisecrets - 41
Банковское приложение хранит refresh tokens и локальный ключ шифрования 256 бит на iOS и Android. Как вы примените secure storage?
encryptiontokens - 42
Mobile API обрабатывает платежи, а security-команда предлагает TLS pinning с сертификатами на 30 дней и SLA ротации 24 часа. Вы одобрите решение?
tlsapi - 43
Sentry собирает 2 процента сессий health-приложения, а события могут содержать email, текст диагноза и access tokens. Как бы вы спроектировали границу PII?
tokenssessionspii - 44
Threat model включает root на Android, jailbreak на iPhone, 7 разработчиков с доступом к исследованию binary и контролируемый атакующим local storage. Какую границу безопасности вы заявите?
formsthreat-modeling - 45
Flutter-приложение содержит 40 пакетов, pull request ограничен 8 минутами, а ночью доступны 2 модели физических устройств. Как бы вы определили test architecture?
flutterarchitecture - 46
Нативное приложение со 120 экранами должно внедрить Flutter add-to-app для 15 экранов за 4 релиза без смены владельца аутентификации и навигации. Какую границу вы используете?
decision-makingownershipflutter - 47
Две нативные команды планируют заменить 80 экранов на Flutter за 12 месяцев, продолжая ежемесячные релизы. Как вы выстроите миграцию?
fluttermigrations - 48
Flutter-монорепозиторий выпускается еженедельно в оба store, а pull requests должны завершаться за 10 минут. Какие CI/CD gates вы введете?
ci-cdmonorepocode-review - 49
Релиз распространяется на 1, 10, 25, 50 и 100 процентов аудитории в 1 млн MAU. Какие сигналы Sentry будут управлять каждым этапом?
active-users - 50
RFC предлагает заменить BLoC на Riverpod в 28 фичах, а 3 инженера не согласны после 2-недельного прототипа. Как вы примете решение и проведете команду через него?
conflictmentoringdecision-making - 51
После выхода релиза 9.4 на 20% аудитории доля медленных кадров в ленте на 60 Гц выросла с 3,2% до 18,7%, p95 UI-потока достиг 31 мс, а p95 raster-потока остался 7 мс. Что вы диагностируете, как локализуете проблему и чего потребуете перед продолжением раскатки?
concurrency - 52
Анимация графика на устройствах 120 Гц показывает p95 raster-потока 19 мс, 27% пропущенных кадров и p95 UI-потока 4 мс после раскатки на 35%. Как вы локализуете нагрузку на GPU и принимаете решение об откате?
concurrencyanimationrollback - 53
После переключения Android-рендерера на Impeller у 15% пользователей доля медленных кадров анимации оплаты выросла с 4% до 22% только на 2 семействах Mali GPU, p99 raster достиг 46 мс, а Dart-код не менялся. Какие доказательства и решение вам нужны?
renderinganimationdart - 54
Онлайн-аукцион пересоздаёт ключи для 600 строк при 10 тиках в секунду, что вызывает около 1800 монтирований элементов на каждом тике, паузы сборщика мусора по 24 мс и потерю состояния строк. Как вы диагностируете и локализуете проблему и чем докажете исправление?
churn - 55
На Android-устройствах с 512 МБ просмотр 24 фотографий повышает RSS со 118 до 472 МБ и вызывает 1,6% OOM-завершений; снимки heap показывают 48 декодированных изображений 4000x3000. Что вы локализуете и меняете?
snapshotdata-structures - 56
После 30 открытий и закрытий сканера Dart heap растёт с 82 до 244 МБ, а 30 объектов State остаются доступны через подписку на поток камеры. Как вы докажете и устраните утечку?
data-structuresdart - 57
Холодное время до первого кадра выросло с 1,6 до 3,9 секунды после добавления 3 SDK, причём 1,4 секунды проходят до runApp и 700 мс занимают синхронные чтения настроек. Что вы отложите и как проверите восстановление?
- 58
Доля заметных пользователю ANR на Android выросла с 0,24% до 0,93% при раскатке на 25%, а трассы показывают, что Flutter-плагин блокирует platform thread на 6,2 секунды во время миграции базы. Какова последовательность восстановления?
databasemigrationsconcurrency - 59
Обновление Flutter увеличило размер загрузки Android с 38 до 61 МБ, а размер установки iOS с 92 до 134 МБ, нарушив лимит 50 МБ для мобильной сети. Как вы найдёте регрессию в 23 МБ и решите, что выпускать?
flutter - 60
Кастомный RenderObject вышел на 10% и в 14% сессий вызывает повторяющийся layout, 900 проходов за 2 секунды и иногда пустые карточки после поворота. Как вы локализуете и диагностируете проблему?
custom-renderingsessions - 61
После выхода Riverpod-рефакторинга на 30% изменение одного аккаунта перестраивает данные всех 80 аккаунтов и запускает 240 API-запросов за 1 минуту. Как вы найдёте ошибку инвалидирования и восстановитесь?
refactoringapistate-management - 62
500 заказов создают 6000 событий статуса в минуту. Полностью последовательная обработка даёт задержку 90 секунд, а полностью параллельная меняет порядок событий одного заказа. Какую политику конкурентности BLoC вы выберете и как докажете сохранение порядка?
state-managementconcurrency - 63
Профиль загружает ревизию 42 за 180 мс, но старый запрос ревизии 41 завершается через 1,2 секунды и перезаписывает её в 3,8% сессий. Как вы остановите устаревший async commit?
sessionsasync - 64
После посещения 120 товаров память растёт со 110 до 390 МБ, а Riverpod сообщает о 120 живых family providers, потому что каждый вызвал keepAlive. Как ограничить удержание, не сломав возврат назад?
state-managementnavigationmemory - 65
Импорт 12 файлов запускает 12 изолятов, загружает 8-ядерные устройства до 100% CPU, задерживает UI-кадры до p95 74 мс и увеличивает завершение с 40 до 67 секунд. Что вы измените?
concurrency - 66
Передача Uint8List размером 180 МБ в изолят обработки изображений временно удваивает RSS до 620 МБ и вызывает OOM на устройствах с 1 ГБ, хотя самой обработке нужно только 220 МБ. Как вы проверите и примените TransferableTypedData?
concurrency - 67
Пользователь уходит с экрана отчёта через 300 мс, но 18-секундный экспорт продолжается, удерживает 140 МБ и записывает поздний success state в 6% переходов. Как сделать отмену настоящей?
navigationresilience - 68
Фоновая синхронизация записывает контрольную точку до фиксации локальной транзакции. ОС завершает процесс в 22% запусков, и после перезапуска пропускаются 18000 элементов. Как вы остановите потерю данных и перестроите синхронизацию для атомарного восстановления?
transactionsconcurrency - 69
После 50 циклов logout-login остаются 50 потоковых подписок Riverpod, и каждое обновление баланса дублируется 50 раз. Какая граница ownership нарушена и как доказать исправление?
ownershipstate-management - 70
BLoC восстановил 400 событий checkout после перезапуска процесса и отправил 17 дублированных заказов до включения kill switch. Как локализовать инцидент и изменить replay?
concurrencydata-structuresincidents - 71
Основной API возвращает 503 в течение 18 минут для 2 миллионов мобильных сессий, успешность checkout падает с 96% до 41%, а кеш каталога устарел на 20 минут. Что делает приложение во время восстановления?
sessionsapicaching - 72
Сбой на 90 секунд заставляет 600 000 клиентов повторять запрос каждую 1 секунду, повышая нагрузку backend после восстановления с 8000 до 140 000 запросов в секунду. Как остановить retry storm?
zero-to-oneresilience - 73
4 отдельно созданных клиента Dio обходят существующий координатор обновления токена. Когда 80 запросов сталкиваются с истёкшим токеном, возникают ошибки invalid_grant и пользователь выходит из аккаунта. Как вы диагностируете и локализуете сбой и восстановите единственный центр обновления?
tokens - 74
После потери сети на 4 минуты 300 000 WebSocket-клиентов переподключаются за 2 секунды, каждый получает 1200 пропущенных событий, а 7% балансов отображаются дважды. Как безопасно восстановиться?
websockets - 75
GraphQL-запрос главного экрана вырос со 180 КБ до 4,8 МБ, p95 парсинга достиг 1,6 секунды, а 9% устройств с 2 ГБ завершаются под давлением памяти. Как снизить влияние, не скрыв drift схемы?
queriesschemagraphql - 76
Два offline-устройства редактируют одну инспекцию из 35 полей, и last-write-wins удаляет 12 фотографий и 4 часа заметок при переподключении. Как локализовать потерю данных и изменить обработку конфликтов?
incidents - 77
Потеря питания во время записи кеша оставляет JSON-файл размером 26 МБ обрезанным, и 14% следующих запусков падают при его декодировании. Какова политика восстановления и повреждения?
caching - 78
Загрузка видео размером 2,4 ГБ падает на 93% при переключении мобильной сети и начинается с байта 0, расходуя у пользователя 4,8 ГБ трафика. Как добавить безопасное возобновление при лимите памяти 50 МБ?
memory - 79
После включения Firebase messaging одновременно в native и Dart слоях 18% пользователей получают каждое уведомление о заказе дважды, а у 2% открываются два checkout routes. Как локализовать и дедуплицировать это?
queriesdart - 80
Релиз телеметрии на 40% отправил в аналитику 3200 полных поисковых запросов и 74 access tokens до обнаружения, нарушив требования о нуле токенов и удалении за 24 часа. Что вы делаете первым и что меняете?
queriestokens - 81
Нажатие biometric login замораживает iOS на 4,7 секунды в 6% сессий; handler MethodChannel работает на main и вызывает DispatchQueue.main.sync до ответа. Как устранить риск deadlock?
lockingsessionsplatform-channels - 82
При раскатке на 15% crash-free users падает с 99,86% до 98,94%; Swift падает на force-cast null аргумента канала, а Kotlin пишет 420 NumberFormatException для того же payload. Что вы исправите первым?
fundamentals - 83
Обновление Flutter SDK позволяет payment plugin собраться на Android, но 32% iOS archives падают с undefined symbol, а plugin не выпускался 18 месяцев. Вы сделаете fork, замену или rollback?
flutterfundamentalsrollback - 84
На beta следующей Android OS 28% экранов уходят под системные панели, back gestures закрывают checkout в 4% тестов, а до релиза 21 день. Как вы проводите triage обновления ОС?
interactionsystem-designtesting - 85
После выхода изменения permission flow на 50% завершение импорта фото падает с 72% до 39%, а 61% сбоев происходят при limited-library access на iOS. Что вы диагностируете и меняете?
- 86
Вредоносное приложение перехватило custom scheme и захватило 240 ссылок сброса пароля до остановки Android-раскатки на 10%. Как локализовать deep-link hijack и безопасно восстановиться?
passwords - 87
Срок iOS distribution certificate истекает через 36 часов, активны 6 релизных веток, и CI больше не подписывает emergency build, потому что provisioning profile ссылается на старый сертификат. Каков план восстановления?
distributionsrecovery - 88
На 8% phased rollout crash-free sessions падают с 99,91% до 99,28% только на Android 12, а конверсия растёт на 3%. Вы продолжите, остановите или откатите раскатку?
sessionsrollback - 89
Apple отклоняет версию 7.2 за 12 часов до запуска, потому что 2 SDK используют required-reason APIs без полных privacy manifests, а их удаление ломает attribution. Что вы выпускаете?
api - 90
Транзитивный Dart package с 4,2 миллиона загрузок объявлен скомпрометированным, lockfile содержит затронутую версию 3.1.4, а 65% production-устройств работают с ней. Что вы делаете в первые 6 часов?
packagingdart - 91
Миграция одного Flutter-приложения в 14 feature packages удвоила clean build с 11 до 23 минут, создала 37 циклов зависимостей и заблокировала 4 команды. Вы продолжите или откатите её?
dependenciesrollbackmigrations - 92
Add-to-app checkout на 10% увеличивает cold start нативного приложения на 1,1 секунды, добавляет 96 МБ RSS и ломает первую навигацию в 7% сессий. Как локализовать и решить, остаётся ли Flutter?
flutternavigationsessions - 93
CI недоступен 5 часов, а после восстановления 18% из 1400 Flutter tests падают случайно, в основном golden с разницей 1-3 пикселя. До релиза 9 часов. Что вы делаете?
fluttertesting - 94
Design-system package 6.0 дошёл до 5 продуктовых команд и обрезает текст 14% кнопок на немецком, а tap targets уменьшились с 48 до 36 logical pixels на 22 экранах. Как вы координируете восстановление?
system-designdesign - 95
Checkout-релиз на 25% запирает фокус screen reader в modal, блокирует 100% оплат незрячих пользователей и оставляет 6 controls без labels. Что вы откатываете и как проверяете восстановление?
rollback - 96
Security обнаруживает, что версия 12.1 пишет refresh tokens в логи при 9% неудачных запросов, затронув около 18 000 пользователей за 3 дня. Какова первая реакция и release gate?
tokens - 97
RFC предлагает за 6 недель создать кастомный слой Flutter module federation для 4 команд, но prototype добавляет 38 МБ, ломает hot reload и не имеет rollback после активации module. Вы его одобрите?
rollbacktoolingfederation - 98
Разработчик исправляет 6% double-submit добавлением задержки 2 секунды и глобального Boolean, но 30% оплат обычно занимают 3-8 секунд. Как вы его менторите и заменяете исправление?
mentoring - 99
У 2 инженеров осталось 4 дня до контрактного запуска, но crash-free sessions равны 98,8% при цели 99,7%, а запланированный offline mode требует 8 инженерных дней. Что вы выпускаете?
sessions - 100
Мобильный outage на 23 минуты затронул 480 000 сессий, потому что remote config вернул пустой endpoint, тесты использовали default, а rollback занял 17 минут. Какое postmortem action вы приоритизируете?
prioritizationincidentsconfig