💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Какой вывод о фрагменте «Файлы» останется верным после безопасного рефакторинга?
Dart Dart · Файлы · семантика Копировать
Future<void> writeAtomically(File target, List<int> bytes) async {
final temp = File('${target.path}.tmp');
await temp.writeAsBytes(bytes, flush: true);
await temp.rename(target.path);
}
// Контекст задания: проверка семантики фрагмента.
Случай «конкурентная замена файла» объявить внутренней деталью «Файлы», даже если клиент видит иной результат. Клиенту «Файлы» предлагают самостоятельно уточнять смысл спорного результата.
Спорный результат «Файлы» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Так внутренняя структура «Файлы» фактически становится частью внешнего обещания.
Для «Файлы» считать случаи «отсутствующий файл, частичная запись, неверная кодировка и конкурентная замена файла» эквивалентными, если программа не завершается аварийно.
Файловая операция может завершиться ошибкой прав, места или конкурентного доступа; запись важного файла делают через временный файл и атомарную замену, когда платформа это поддерживает.
Порядок внутренних вызовов «Файлы» считать публичной гарантией, которую нельзя менять при рефакторинге. Различия между версиями SDK для «Файлы» в этом выводе не учитываются.
Вопрос 6 из 25
Что в поведении этого кода гарантировано правилами темы «Хранилище простых настроек», а не случайно совпало в одном запуске?
Dart Dart · Хранилище простых настроек · семантика Копировать
Future<void> saveThemeMode(SharedPreferences prefs, ThemeMode mode) async {
await prefs.setString('theme_mode', mode.name);
}
ThemeMode readThemeMode(SharedPreferences prefs) {
return ThemeMode.values.byName(prefs.getString('theme_mode') ?? 'system');
}
// Контекст задания: проверка семантики фрагмента.
SharedPreferences подходит для небольших настроек, но не для секретов, больших структур или транзакционных данных; запись может быть асинхронной и не мгновенно устойчивой.
Для «Хранилище простых настроек» считать случаи «отсутствующий ключ, изменение типа значения, большой объём данных и хранение секрета в обычных настройках» эквивалентными, если программа не завершается аварийно.
Случай «хранение секрета в обычных настройках» объявить внутренней деталью «Хранилище простых настроек», даже если клиент видит иной результат.
Порядок внутренних вызовов «Хранилище простых настроек» считать публичной гарантией, которую нельзя менять при рефакторинге.
Спорный результат «Хранилище простых настроек» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Вопрос 12 из 25
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Локальная база SQLite» всё ещё нужно проверить раздельно?
Dart Dart · Локальная база SQLite · границы Копировать
Future<List<Note>> recentNotes(Database db) async {
final rows = await db.query(
'notes',
where: 'archived = ?',
whereArgs: [0],
orderBy: 'updated_at DESC',
limit: 50,
);
return rows.map(Note.fromRow).toList(growable: false);
}
// Контекст задания: анализ граничных входов.
Различать в тестах каждый из случаев: параллельные записи, нарушение ограничения, незакрытая транзакция и запрос без индекса на рабочем объёме.
Автоматизировать обычный путь «Локальная база SQLite», а случай «запрос без индекса на рабочем объёме» оставить в ручном чек-листе выпуска.
Во всех спорных входах «Локальная база SQLite» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Проверить для «Локальная база SQLite» только самый сложный случай «запрос без индекса на рабочем объёме», считая остальные границы косвенно покрытыми.
Объединить «параллельные записи» и «нарушение ограничения» в один тест «Локальная база SQLite» с общим ожидаемым исходом.
Вопрос 13 из 25
Какой вывод о фрагменте «Локальная база SQLite» останется верным после безопасного рефакторинга?
Dart Dart · Локальная база SQLite · семантика Копировать
Future<List<Note>> recentNotes(Database db) async {
final rows = await db.query(
'notes',
where: 'archived = ?',
whereArgs: [0],
orderBy: 'updated_at DESC',
limit: 50,
);
return rows.map(Note.fromRow).toList(growable: false);
}
// Контекст задания: проверка семантики фрагмента.
SQLite даёт запросы и транзакции, но доступ нужно сериализовать по правилам выбранной библиотеки и закрывать соединение на жизненной границе.
Для «Локальная база SQLite» всегда заменять явную ошибку нейтральным значением: `null`, пустой коллекцией или нулём.
Случай «запрос без индекса на рабочем объёме» объявить внутренней деталью «Локальная база SQLite», даже если клиент видит иной результат.
Порядок внутренних вызовов «Локальная база SQLite» считать публичной гарантией, которую нельзя менять при рефакторинге.
Спорный результат «Локальная база SQLite» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.