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

Взаимодействие с нативным кодом

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 30
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Платформенные каналы»?
DartDart · Платформенные каналы · исправление
const channel = MethodChannel('app.example/battery');

Future<int> batteryLevel() async {
  final value = await channel.invokeMethod<int>('level', {'protocol': 2});
  if (value == null) throw const PlatformException(code: 'empty-result');
  return value;
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 30
Что в поведении этого кода гарантировано правилами темы «Платформенные каналы», а не случайно совпало в одном запуске?
DartDart · Платформенные каналы · семантика
const channel = MethodChannel('app.example/battery');

Future<int> batteryLevel() async {
  final value = await channel.invokeMethod<int>('level', {'protocol': 2});
  if (value == null) throw const PlatformException(code: 'empty-result');
  return value;
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 30
На ревью спорят, достаточно ли одного сквозного теста для «Платформенные каналы». Какой набор действительно раскрывает границы поведения?
DartDart · Платформенные каналы · границы
const channel = MethodChannel('app.example/battery');

Future<int> batteryLevel() async {
  final value = await channel.invokeMethod<int>('level', {'protocol': 2});
  if (value == null) throw const PlatformException(code: 'empty-result');
  return value;
}

// Контекст задания: анализ граничных входов.
Вопрос 4 из 30
Перед обновлением зависимости нужно защитить исправление «Платформенные каналы». Какая проверка подходит лучше всего?
Вопрос 5 из 30
Какой контракт по теме «Платформенные каналы» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 6 из 30
Команда хочет сократить набор проверок для «Взаимодействие через FFI» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Взаимодействие через FFI · границы
typedef NativeHash = Uint64 Function(Pointer<Uint8>, IntPtr);
typedef DartHash = int Function(Pointer<Uint8>, int);

final hash = library.lookupFunction<NativeHash, DartHash>('hash_bytes');

// Контекст задания: анализ граничных входов.
Вопрос 7 из 30
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Взаимодействие через FFI»?
DartDart · Взаимодействие через FFI · исправление
typedef NativeHash = Uint64 Function(Pointer<Uint8>, IntPtr);
typedef DartHash = int Function(Pointer<Uint8>, int);

final hash = library.lookupFunction<NativeHash, DartHash>('hash_bytes');

// Контекст задания: выбор места исправления.
Вопрос 8 из 30
Что в поведении этого кода гарантировано правилами темы «Взаимодействие через FFI», а не случайно совпало в одном запуске?
DartDart · Взаимодействие через FFI · семантика
typedef NativeHash = Uint64 Function(Pointer<Uint8>, IntPtr);
typedef DartHash = int Function(Pointer<Uint8>, int);

final hash = library.lookupFunction<NativeHash, DartHash>('hash_bytes');

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 30
Как сформулировать публичное обещание темы «Взаимодействие через FFI», не привязывая клиента к конкретному классу?
Вопрос 10 из 30
Перед обновлением зависимости нужно защитить исправление «Взаимодействие через FFI». Какая проверка подходит лучше всего?
Вопрос 11 из 30
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Типы данных»?
DartDart · Типы данных · границы
final class NativePoint extends Struct {
  @Double() external double x;
  @Double() external double y;
}

final Pointer<NativePoint> point = calloc<NativePoint>();

// Контекст задания: анализ граничных входов.
Вопрос 12 из 30
Какое утверждение корректно связывает показанный код с семантикой темы «Типы данных»?
DartDart · Типы данных · семантика
final class NativePoint extends Struct {
  @Double() external double x;
  @Double() external double y;
}

final Pointer<NativePoint> point = calloc<NativePoint>();

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 30
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Типы данных»?
DartDart · Типы данных · исправление
final class NativePoint extends Struct {
  @Double() external double x;
  @Double() external double y;
}

final Pointer<NativePoint> point = calloc<NativePoint>();

// Контекст задания: выбор места исправления.
Вопрос 14 из 30
Ручная проверка по теме «Типы данных» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 15 из 30
Как сформулировать публичное обещание темы «Типы данных», не привязывая клиента к конкретному классу?
Вопрос 16 из 30
Что здесь следует считать правилом «Обработка ошибок границы», а что — лишь деталью текущей реализации?
DartDart · Обработка ошибок границы · семантика
Future<LocationResult> readLocation() async {
  try {
    final raw = await channel.invokeMapMethod<String, Object?>('readLocation');
    return LocationResult.fromPlatform(raw);
  } on PlatformException catch (error) {
    return LocationResult.failed(code: error.code, message: error.message);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 17 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Обработка ошибок границы»?
DartDart · Обработка ошибок границы · исправление
Future<LocationResult> readLocation() async {
  try {
    final raw = await channel.invokeMapMethod<String, Object?>('readLocation');
    return LocationResult.fromPlatform(raw);
  } on PlatformException catch (error) {
    return LocationResult.failed(code: error.code, message: error.message);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 30
Команда хочет сократить набор проверок для «Обработка ошибок границы» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Обработка ошибок границы · границы
Future<LocationResult> readLocation() async {
  try {
    final raw = await channel.invokeMapMethod<String, Object?>('readLocation');
    return LocationResult.fromPlatform(raw);
  } on PlatformException catch (error) {
    return LocationResult.failed(code: error.code, message: error.message);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 19 из 30
Две реализации решают задачу «Обработка ошибок границы» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 20 из 30
Ручная проверка по теме «Обработка ошибок границы» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 21 из 30
Какое описание семантики показанного решения по теме «Проверка корректности» является точным?
DartDart · Проверка корректности · семантика
test('native checksum matches reference implementation', () {
  final samples = <Uint8List>[Uint8List(0), Uint8List.fromList([0, 1, 255])];
  for (final bytes in samples) {
    expect(nativeChecksum(bytes), referenceChecksum(bytes));
  }
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 22 из 30
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Проверка корректности» должен появиться рядом?
DartDart · Проверка корректности · границы
test('native checksum matches reference implementation', () {
  final samples = <Uint8List>[Uint8List(0), Uint8List.fromList([0, 1, 255])];
  for (final bytes in samples) {
    expect(nativeChecksum(bytes), referenceChecksum(bytes));
  }
});

// Контекст задания: анализ граничных входов.
Вопрос 23 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Проверка корректности»?
DartDart · Проверка корректности · исправление
test('native checksum matches reference implementation', () {
  final samples = <Uint8List>[Uint8List(0), Uint8List.fromList([0, 1, 255])];
  for (final bytes in samples) {
    expect(nativeChecksum(bytes), referenceChecksum(bytes));
  }
});

// Контекст задания: выбор места исправления.
Вопрос 24 из 30
Какая регрессия для «Проверка корректности» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 25 из 30
Две реализации решают задачу «Проверка корректности» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 26 из 30
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Устойчивость к сбоям»?
DartDart · Устойчивость к сбоям · исправление
Future<CodecResult> decodeSafely(Uint8List bytes) async {
  if (!featureFlags.nativeCodec) return dartCodec.decode(bytes);
  try {
    return await nativeCodecProcess.decode(bytes);
  } on NativeProcessCrashed {
    featureFlags.disableNativeCodec();
    return dartCodec.decode(bytes);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 27 из 30
Обычный путь в коде зелёный. Как построить проверку «Устойчивость к сбоям», чтобы не пропустить различия между отказами?
DartDart · Устойчивость к сбоям · границы
Future<CodecResult> decodeSafely(Uint8List bytes) async {
  if (!featureFlags.nativeCodec) return dartCodec.decode(bytes);
  try {
    return await nativeCodecProcess.decode(bytes);
  } on NativeProcessCrashed {
    featureFlags.disableNativeCodec();
    return dartCodec.decode(bytes);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 28 из 30
Что здесь следует считать правилом «Устойчивость к сбоям», а что — лишь деталью текущей реализации?
DartDart · Устойчивость к сбоям · семантика
Future<CodecResult> decodeSafely(Uint8List bytes) async {
  if (!featureFlags.nativeCodec) return dartCodec.decode(bytes);
  try {
    return await nativeCodecProcess.decode(bytes);
  } on NativeProcessCrashed {
    featureFlags.disableNativeCodec();
    return dartCodec.decode(bytes);
  }
}

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

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

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

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

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