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

Безопасность мобильного приложения

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

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

Future<AccessToken> signIn(AuthCode code) {
  return backend.exchange(code: code, clientId: publicClientId);
}
// No permanent client secret is embedded in the application.

// Контекст задания: проверка семантики фрагмента.
Вопрос 2 из 30
Код проходит обычный сценарий. Какие проверки по теме «Секреты» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Секреты · границы
const publicClientId = String.fromEnvironment('PUBLIC_CLIENT_ID');

Future<AccessToken> signIn(AuthCode code) {
  return backend.exchange(code: code, clientId: publicClientId);
}
// No permanent client secret is embedded in the application.

// Контекст задания: анализ граничных входов.
Вопрос 3 из 30
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Секреты»?
DartDart · Секреты · исправление
const publicClientId = String.fromEnvironment('PUBLIC_CLIENT_ID');

Future<AccessToken> signIn(AuthCode code) {
  return backend.exchange(code: code, clientId: publicClientId);
}
// No permanent client secret is embedded in the application.

// Контекст задания: выбор места исправления.
Вопрос 4 из 30
Какой тест действительно поймает возврат дефекта в теме «Секреты»?
Вопрос 5 из 30
Одна реализация темы «Секреты» заменяется другой. Что внешний код вправе ожидать после замены?
Вопрос 6 из 30
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Хранилище ключей»?
DartDart · Хранилище ключей · исправление
Future<void> saveSession(Session session) async {
  await secureStorage.write(key: 'access_token', value: session.accessToken);
  await secureStorage.write(key: 'expires_at', value: session.expiresAt.toIso8601String());
}

// Контекст задания: выбор места исправления.
Вопрос 7 из 30
Команда хочет сократить набор проверок для «Хранилище ключей» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Хранилище ключей · границы
Future<void> saveSession(Session session) async {
  await secureStorage.write(key: 'access_token', value: session.accessToken);
  await secureStorage.write(key: 'expires_at', value: session.expiresAt.toIso8601String());
}

// Контекст задания: анализ граничных входов.
Вопрос 8 из 30
Какое утверждение о показанном фрагменте и теме «Хранилище ключей» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Хранилище ключей · семантика
Future<void> saveSession(Session session) async {
  await secureStorage.write(key: 'access_token', value: session.accessToken);
  await secureStorage.write(key: 'expires_at', value: session.expiresAt.toIso8601String());
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 30
Внутреннее устройство решения «Хранилище ключей» меняется. Какой внешний договор обязан сохраниться?
Вопрос 10 из 30
Какой тест действительно поймает возврат дефекта в теме «Хранилище ключей»?
Вопрос 11 из 30
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Проверка сертификата»?
DartDart · Проверка сертификата · исправление
final class PinSet {
  const PinSet({required this.current, required this.backup, required this.expiresAt});
  final String current;
  final String backup;
  final DateTime expiresAt;
}

// Контекст задания: выбор места исправления.
Вопрос 12 из 30
Какой тезис о коде «Проверка сертификата» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Проверка сертификата · семантика
final class PinSet {
  const PinSet({required this.current, required this.backup, required this.expiresAt});
  final String current;
  final String backup;
  final DateTime expiresAt;
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 30
Команда хочет сократить набор проверок для «Проверка сертификата» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Проверка сертификата · границы
final class PinSet {
  const PinSet({required this.current, required this.backup, required this.expiresAt});
  final String current;
  final String backup;
  final DateTime expiresAt;
}

// Контекст задания: анализ граничных входов.
Вопрос 14 из 30
После исправления темы «Проверка сертификата» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 15 из 30
Внутреннее устройство решения «Проверка сертификата» меняется. Какой внешний договор обязан сохраниться?
Вопрос 16 из 30
Обычный путь в коде зелёный. Как построить проверку «Защита данных», чтобы не пропустить различия между отказами?
DartDart · Защита данных · границы
Future<void> saveEncrypted(File file, Uint8List plaintext, SecretKey key) async {
  final nonce = randomBytes(12);
  final box = await cipher.encrypt(plaintext, secretKey: key, nonce: nonce);
  await writeAtomically(file, [...nonce, ...box.cipherText, ...box.mac.bytes]);
}

// Контекст задания: анализ граничных входов.
Вопрос 17 из 30
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Защита данных»?
DartDart · Защита данных · исправление
Future<void> saveEncrypted(File file, Uint8List plaintext, SecretKey key) async {
  final nonce = randomBytes(12);
  final box = await cipher.encrypt(plaintext, secretKey: key, nonce: nonce);
  await writeAtomically(file, [...nonce, ...box.cipherText, ...box.mac.bytes]);
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 30
Какой тезис о коде «Защита данных» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Защита данных · семантика
Future<void> saveEncrypted(File file, Uint8List plaintext, SecretKey key) async {
  final nonce = randomBytes(12);
  final box = await cipher.encrypt(plaintext, secretKey: key, nonce: nonce);
  await writeAtomically(file, [...nonce, ...box.cipherText, ...box.mac.bytes]);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 19 из 30
Какой договор позволяет тестировать «Защита данных» через результат, а не через приватные детали?
Вопрос 20 из 30
После исправления темы «Защита данных» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 21 из 30
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Риски безопасности» нельзя проверять одним общим ожиданием?
DartDart · Риски безопасности · границы
Future<ApiResponse> transfer(Transfer command) {
  return api.post(
    '/transfers',
    body: command.toJson(),
    headers: {'Idempotency-Key': command.idempotencyKey.value},
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 22 из 30
Какое описание семантики показанного решения по теме «Риски безопасности» является точным?
DartDart · Риски безопасности · семантика
Future<ApiResponse> transfer(Transfer command) {
  return api.post(
    '/transfers',
    body: command.toJson(),
    headers: {'Idempotency-Key': command.idempotencyKey.value},
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 23 из 30
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Риски безопасности»?
DartDart · Риски безопасности · исправление
Future<ApiResponse> transfer(Transfer command) {
  return api.post(
    '/transfers',
    body: command.toJson(),
    headers: {'Idempotency-Key': command.idempotencyKey.value},
  );
}

// Контекст задания: выбор места исправления.
Вопрос 24 из 30
Что добавить в набор тестов, чтобы ошибка по теме «Риски безопасности» не вернулась незаметно?
Вопрос 25 из 30
Какой договор позволяет тестировать «Риски безопасности» через результат, а не через приватные детали?
Вопрос 26 из 30
Какой вывод о фрагменте «Контроль производительности» останется верным после безопасного рефакторинга?
DartDart · Контроль производительности · семантика
Future<CryptoBudget> measureUnlock() async {
  final cold = await measure(() => vault.unlock());
  final repeated = await measureMany(20, () => vault.readToken());
  return CryptoBudget(coldStart: cold, repeatedRead: repeated);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 27 из 30
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Контроль производительности»?
DartDart · Контроль производительности · исправление
Future<CryptoBudget> measureUnlock() async {
  final cold = await measure(() => vault.unlock());
  final repeated = await measureMany(20, () => vault.readToken());
  return CryptoBudget(coldStart: cold, repeatedRead: repeated);
}

// Контекст задания: выбор места исправления.
Вопрос 28 из 30
Обычный путь в коде зелёный. Как построить проверку «Контроль производительности», чтобы не пропустить различия между отказами?
DartDart · Контроль производительности · границы
Future<CryptoBudget> measureUnlock() async {
  final cold = await measure(() => vault.unlock());
  final repeated = await measureMany(20, () => vault.readToken());
  return CryptoBudget(coldStart: cold, repeatedRead: repeated);
}

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

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

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

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

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