DT Dart  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Платформенные различия Android, iOS и Web

Тест по теме «Платформенные различия Android, iOS и Web» охватывает «Условный код», «Разрешения», «Жизненный цикл», «Единый интерфейс», «Разбор отказов» и «Восстановление системы». В 30 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 18; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 30
На ревью спорят, достаточно ли одного сквозного теста для «Условный код». Какой набор действительно раскрывает границы поведения?
DartDart · Условный код · границы
import 'share_stub.dart'
  if (dart.library.io) 'share_io.dart'
  if (dart.library.js_interop) 'share_web.dart';

ShareGateway createShareGateway() => platformShareGateway();

// Контекст задания: анализ граничных входов.
Вопрос 2 из 30
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Условный код»?
DartDart · Условный код · семантика
import 'share_stub.dart'
  if (dart.library.io) 'share_io.dart'
  if (dart.library.js_interop) 'share_web.dart';

ShareGateway createShareGateway() => platformShareGateway();

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 30
Какое изменение показанного кода исправляет правило «Условный код», а не маскирует один его симптом?
DartDart · Условный код · исправление
import 'share_stub.dart'
  if (dart.library.io) 'share_io.dart'
  if (dart.library.js_interop) 'share_web.dart';

ShareGateway createShareGateway() => platformShareGateway();

// Контекст задания: выбор места исправления.
Вопрос 4 из 30
Какой сценарий должен стать постоянной проверкой после исправления «Условный код»?
Вопрос 5 из 30
Что должно оставаться неизменным при замене реализации темы «Условный код»?
Вопрос 6 из 30
Что в поведении этого кода гарантировано правилами темы «Разрешения», а не случайно совпало в одном запуске?
DartDart · Разрешения · семантика
Future<LocationResult> requestLocation() async {
  final status = await permissions.location.status;
  if (status.isDenied) await permissions.location.request();
  final current = await permissions.location.status;
  return current.isGranted ? location.read() : const LocationResult.denied();
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 7 из 30
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Разрешения» отвечает этому требованию?
DartDart · Разрешения · исправление
Future<LocationResult> requestLocation() async {
  final status = await permissions.location.status;
  if (status.isDenied) await permissions.location.request();
  final current = await permissions.location.status;
  return current.isGranted ? location.read() : const LocationResult.denied();
}

// Контекст задания: выбор места исправления.
Вопрос 8 из 30
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Разрешения» нельзя проверять одним общим ожиданием?
DartDart · Разрешения · границы
Future<LocationResult> requestLocation() async {
  final status = await permissions.location.status;
  if (status.isDenied) await permissions.location.request();
  final current = await permissions.location.status;
  return current.isGranted ? location.read() : const LocationResult.denied();
}

// Контекст задания: анализ граничных входов.
Вопрос 9 из 30
Какой контракт по теме «Разрешения» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 10 из 30
Какой сценарий должен стать постоянной проверкой после исправления «Разрешения»?
Вопрос 11 из 30
Какое утверждение о показанном фрагменте и теме «Жизненный цикл» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Жизненный цикл · семантика
class SessionLifecycle with WidgetsBindingObserver {
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.inactive || state == AppLifecycleState.paused) {
      sessions.persistDraft();
    }
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 12 из 30
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Жизненный цикл» всё ещё нужно проверить раздельно?
DartDart · Жизненный цикл · границы
class SessionLifecycle with WidgetsBindingObserver {
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.inactive || state == AppLifecycleState.paused) {
      sessions.persistDraft();
    }
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 13 из 30
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Жизненный цикл» отвечает этому требованию?
DartDart · Жизненный цикл · исправление
class SessionLifecycle with WidgetsBindingObserver {
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.inactive || state == AppLifecycleState.paused) {
      sessions.persistDraft();
    }
  }
}

// Контекст задания: выбор места исправления.
Вопрос 14 из 30
Перед обновлением зависимости нужно защитить исправление «Жизненный цикл». Какая проверка подходит лучше всего?
Вопрос 15 из 30
Какой контракт по теме «Жизненный цикл» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 16 из 30
Какой вариант правки убирает источник дефекта «Единый интерфейс» и не заставляет клиентов дублировать защиту?
DartDart · Единый интерфейс · исправление
abstract interface class BackgroundSync {
  bool get isAvailable;
  Future<SyncResult> schedule(SyncRequest request);
}

// Контекст задания: выбор места исправления.
Вопрос 17 из 30
Код проходит обычный сценарий. Какие проверки по теме «Единый интерфейс» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Единый интерфейс · границы
abstract interface class BackgroundSync {
  bool get isAvailable;
  Future<SyncResult> schedule(SyncRequest request);
}

// Контекст задания: анализ граничных входов.
Вопрос 18 из 30
Что в поведении этого кода гарантировано правилами темы «Единый интерфейс», а не случайно совпало в одном запуске?
DartDart · Единый интерфейс · семантика
abstract interface class BackgroundSync {
  bool get isAvailable;
  Future<SyncResult> schedule(SyncRequest request);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 19 из 30
Как сформулировать публичное обещание темы «Единый интерфейс», не привязывая клиента к конкретному классу?
Вопрос 20 из 30
Перед обновлением зависимости нужно защитить исправление «Единый интерфейс». Какая проверка подходит лучше всего?
Вопрос 21 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Разбор отказов»?
DartDart · Разбор отказов · исправление
void reportPlatformFailure(Object error, StackTrace stack) {
  diagnostics.record(
    error,
    stack,
    tags: {'platform': platform.name, 'osVersion': platform.version, 'buildMode': buildMode.name},
  );
}

// Контекст задания: выбор места исправления.
Вопрос 22 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Разбор отказов»?
DartDart · Разбор отказов · семантика
void reportPlatformFailure(Object error, StackTrace stack) {
  diagnostics.record(
    error,
    stack,
    tags: {'platform': platform.name, 'osVersion': platform.version, 'buildMode': buildMode.name},
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 23 из 30
Код проходит обычный сценарий. Какие проверки по теме «Разбор отказов» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Разбор отказов · границы
void reportPlatformFailure(Object error, StackTrace stack) {
  diagnostics.record(
    error,
    stack,
    tags: {'platform': platform.name, 'osVersion': platform.version, 'buildMode': buildMode.name},
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 24 из 30
Ручная проверка по теме «Разбор отказов» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 25 из 30
Как сформулировать публичное обещание темы «Разбор отказов», не привязывая клиента к конкретному классу?
Вопрос 26 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Восстановление системы» должен появиться рядом?
DartDart · Восстановление системы · границы
Future<void> restoreApplication() async {
  await plugins.initializeOnce();
  final draft = await drafts.loadLatest();
  await router.restore(draft?.route);
  await pendingOperations.resumeIdempotently();
}

// Контекст задания: анализ граничных входов.
Вопрос 27 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Восстановление системы»?
DartDart · Восстановление системы · исправление
Future<void> restoreApplication() async {
  await plugins.initializeOnce();
  final draft = await drafts.loadLatest();
  await router.restore(draft?.route);
  await pendingOperations.resumeIdempotently();
}

// Контекст задания: выбор места исправления.
Вопрос 28 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Восстановление системы»?
DartDart · Восстановление системы · семантика
Future<void> restoreApplication() async {
  await plugins.initializeOnce();
  final draft = await drafts.loadLatest();
  await router.restore(draft?.route);
  await pendingOperations.resumeIdempotently();
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 29 из 30
Две реализации решают задачу «Восстановление системы» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 30 из 30
Ручная проверка по теме «Восстановление системы» прошла. Как превратить её в полезную автоматическую регрессию?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу