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

Диагностика аварий и утечек

Тест по теме «Диагностика аварий и утечек» охватывает «Трассировки», «Отчёты об авариях», «Удержание объектов», «Минимальный пример», «Контроль ресурсов» и «Масштабирование решения». В 30 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 18; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Трассировки»?
DartDart · Трассировки · исправление
Future<void> refresh() async {
  try {
    await repository.refresh();
  } catch (error, stack) {
    Error.throwWithStackTrace(RefreshFailed(error), stack);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Трассировки»?
DartDart · Трассировки · семантика
Future<void> refresh() async {
  try {
    await repository.refresh();
  } catch (error, stack) {
    Error.throwWithStackTrace(RefreshFailed(error), stack);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 30
Код проходит обычный сценарий. Какие проверки по теме «Трассировки» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Трассировки · границы
Future<void> refresh() async {
  try {
    await repository.refresh();
  } catch (error, stack) {
    Error.throwWithStackTrace(RefreshFailed(error), stack);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 4 из 30
Ручная проверка по теме «Трассировки» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 5 из 30
Как сформулировать публичное обещание темы «Трассировки», не привязывая клиента к конкретному классу?
Вопрос 6 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Отчёты об авариях» должен появиться рядом?
DartDart · Отчёты об авариях · границы
void reportCrash(Object error, StackTrace stack) {
  crashes.record(
    error,
    stack,
    tags: {'appVersion': build.version, 'platform': platform.name, 'screen': route.name},
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 7 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Отчёты об авариях»?
DartDart · Отчёты об авариях · исправление
void reportCrash(Object error, StackTrace stack) {
  crashes.record(
    error,
    stack,
    tags: {'appVersion': build.version, 'platform': platform.name, 'screen': route.name},
  );
}

// Контекст задания: выбор места исправления.
Вопрос 8 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Отчёты об авариях»?
DartDart · Отчёты об авариях · семантика
void reportCrash(Object error, StackTrace stack) {
  crashes.record(
    error,
    stack,
    tags: {'appVersion': build.version, 'platform': platform.name, 'screen': route.name},
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 30
Две реализации решают задачу «Отчёты об авариях» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 10 из 30
Ручная проверка по теме «Отчёты об авариях» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 11 из 30
Обычный путь в коде зелёный. Как построить проверку «Удержание объектов», чтобы не пропустить различия между отказами?
DartDart · Удержание объектов · границы
class _SearchState extends State<Search> {
  Timer? debounce;
  StreamSubscription<Result>? subscription;

  @override
  void dispose() {
    debounce?.cancel();
    subscription?.cancel();
    super.dispose();
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 12 из 30
Что здесь следует считать правилом «Удержание объектов», а что — лишь деталью текущей реализации?
DartDart · Удержание объектов · семантика
class _SearchState extends State<Search> {
  Timer? debounce;
  StreamSubscription<Result>? subscription;

  @override
  void dispose() {
    debounce?.cancel();
    subscription?.cancel();
    super.dispose();
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Удержание объектов»?
DartDart · Удержание объектов · исправление
class _SearchState extends State<Search> {
  Timer? debounce;
  StreamSubscription<Result>? subscription;

  @override
  void dispose() {
    debounce?.cancel();
    subscription?.cancel();
    super.dispose();
  }
}

// Контекст задания: выбор места исправления.
Вопрос 14 из 30
Какая регрессия для «Удержание объектов» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 15 из 30
Две реализации решают задачу «Удержание объектов» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 16 из 30
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Минимальный пример»?
DartDart · Минимальный пример · семантика
Future<void> reproduce() async {
  final repository = InMemoryRepository(seed: failingSeed);
  final service = SearchService(repository);
  await service.search('a');
  await service.search('ab');
  await service.search('abc');
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 17 из 30
Какое изменение показанного кода исправляет правило «Минимальный пример», а не маскирует один его симптом?
DartDart · Минимальный пример · исправление
Future<void> reproduce() async {
  final repository = InMemoryRepository(seed: failingSeed);
  final service = SearchService(repository);
  await service.search('a');
  await service.search('ab');
  await service.search('abc');
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Минимальный пример» должен появиться рядом?
DartDart · Минимальный пример · границы
Future<void> reproduce() async {
  final repository = InMemoryRepository(seed: failingSeed);
  final service = SearchService(repository);
  await service.search('a');
  await service.search('ab');
  await service.search('abc');
}

// Контекст задания: анализ граничных входов.
Вопрос 19 из 30
Что должно оставаться неизменным при замене реализации темы «Минимальный пример»?
Вопрос 20 из 30
Какая регрессия для «Минимальный пример» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 21 из 30
Какой вывод о фрагменте «Контроль ресурсов» останется верным после безопасного рефакторинга?
DartDart · Контроль ресурсов · семантика
final class NativeBuffer implements Finalizable {
  NativeBuffer(this.pointer, this.length) {
    _finalizer.attach(this, pointer.cast(), detach: this);
  }
  final Pointer<Uint8> pointer;
  final int length;
  void dispose() => _finalizer.detach(this);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 22 из 30
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Контроль ресурсов» нельзя проверять одним общим ожиданием?
DartDart · Контроль ресурсов · границы
final class NativeBuffer implements Finalizable {
  NativeBuffer(this.pointer, this.length) {
    _finalizer.attach(this, pointer.cast(), detach: this);
  }
  final Pointer<Uint8> pointer;
  final int length;
  void dispose() => _finalizer.detach(this);
}

// Контекст задания: анализ граничных входов.
Вопрос 23 из 30
Какое изменение показанного кода исправляет правило «Контроль ресурсов», а не маскирует один его симптом?
DartDart · Контроль ресурсов · исправление
final class NativeBuffer implements Finalizable {
  NativeBuffer(this.pointer, this.length) {
    _finalizer.attach(this, pointer.cast(), detach: this);
  }
  final Pointer<Uint8> pointer;
  final int length;
  void dispose() => _finalizer.detach(this);
}

// Контекст задания: выбор места исправления.
Вопрос 24 из 30
Какой сценарий должен стать постоянной проверкой после исправления «Контроль ресурсов»?
Вопрос 25 из 30
Что должно оставаться неизменным при замене реализации темы «Контроль ресурсов»?
Вопрос 26 из 30
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Масштабирование решения»?
DartDart · Масштабирование решения · исправление
String crashFingerprint(CrashEvent event) {
  final topFrames = event.stack.frames.where((f) => f.package == 'client_app').take(5);
  return sha256.convert(utf8.encode('${event.errorType}|${topFrames.join('|')}')).toString();
}

// Контекст задания: выбор места исправления.
Вопрос 27 из 30
На ревью спорят, достаточно ли одного сквозного теста для «Масштабирование решения». Какой набор действительно раскрывает границы поведения?
DartDart · Масштабирование решения · границы
String crashFingerprint(CrashEvent event) {
  final topFrames = event.stack.frames.where((f) => f.package == 'client_app').take(5);
  return sha256.convert(utf8.encode('${event.errorType}|${topFrames.join('|')}')).toString();
}

// Контекст задания: анализ граничных входов.
Вопрос 28 из 30
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Масштабирование решения»?
DartDart · Масштабирование решения · семантика
String crashFingerprint(CrashEvent event) {
  final topFrames = event.stack.frames.where((f) => f.package == 'client_app').take(5);
  return sha256.convert(utf8.encode('${event.errorType}|${topFrames.join('|')}')).toString();
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 29 из 30
Какой контракт по теме «Масштабирование решения» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 30 из 30
Какой сценарий должен стать постоянной проверкой после исправления «Масштабирование решения»?

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

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

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

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