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

Авария в JavaScript-приложении

Итоговый профессиональный тест моделирует реальные аварии: белый экран после выпуска, рост ошибок, зависание интерфейса, утечку памяти и гонку запросов. Нужно собрать симптомы, воспроизвести сбой, найти первопричину, выбрать безопасное исправление и подтвердить восстановление без создания второй аварии.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов и 85 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 6 тематических шкал и объяснение каждого решения.
Вопрос 1 из 30
После выпуска вырос ClientError. Какой первый срез полезнее?
JavaScript
captureException(error, {
  tags: { build: BUILD_ID, route, browser },
  extra: { requestId }
});
Вопрос 2 из 30
Почему нельзя отправлять state целиком в систему ошибок?
JavaScript
report(error, { state: appStore.getState() });
Вопрос 3 из 30
Что указывает, что TypeError — каскадный симптом?
JavaScript
await loadConfig().catch(() => {});
render(config.theme);
Вопрос 4 из 30
Почему абсолютное число ошибок без denominator вводит в заблуждение?
Вопрос 5 из 30
Какая временная линия полезна?
Вопрос 6 из 30
Ошибка возникает только при быстром вводе. Как сделать её воспроизводимой?
JavaScript
const a = deferred();
const b = deferred();
api.search.mockReturnValueOnce(a.promise).mockReturnValueOnce(b.promise);
Вопрос 7 из 30
Белый экран только у старых пользователей. Какой эксперимент сильнее?
JavaScript
const raw = localStorage.getItem("prefs");
console.log(raw?.slice(0, 100), APP_SCHEMA_VERSION);
Вопрос 8 из 30
Как проверить гипотезу о конкретном браузере?
JavaScript
console.log({ ua: navigator.userAgent, hasFeature: "structuredClone" in globalThis });
Вопрос 9 из 30
Почему production dump нельзя просто вставить в локальный тест?
Вопрос 10 из 30
Что доказывает, что регрессия появилась между версиями A и B?
Вопрос 11 из 30
Где искать first bad state?
JavaScript
assert(order.items.every(item => item.price >= 0), "negative price after merge");
Вопрос 12 из 30
Source map показывает неверные строки. Наиболее вероятно?
JavaScript
console.log({ build: BUILD_ID, script: document.currentScript?.src });
Вопрос 13 из 30
Как найти причину роста памяти после открытия/закрытия панели?
JavaScript
for (let i = 0; i < 20; i++) { mountPanel(); unmountPanel(); }
Вопрос 14 из 30
404 у API появился после смены base URL. Что проверять?
JavaScript
const url = new URL("users", API_BASE);
console.log(url.href);
Вопрос 15 из 30
Почему корреляция «после новой библиотеки» ещё не причина?
Вопрос 16 из 30
Когда rollback лучше срочного сложного patch?
BashКоманда выпуска
deploy --version previous-known-good
Вопрос 17 из 30
Почему catch { return [] } опасен как аварийное исправление?
JavaScript
async function loadOrders() {
  try { return await api.orders(); }
  catch { return []; }
}
Вопрос 18 из 30
Как исправить гонку ответов минимально?
JavaScript
async function updateSearch(query) {
  const id = ++lastRequest;
  const data = await search(query);
  if (id !== lastRequest) return;
  show(data);
}
Вопрос 19 из 30
Почему feature flag полезен при рискованном исправлении?
JavaScriptПостепенное включение исправления
function runSearch(query) {
  if (flags.searchRaceFix) {
    return runGuardedSearch(query);
  }
  return runLegacySearch(query);
}
Вопрос 20 из 30
Что делать, если исправление требует миграции localStorage?
Вопрос 21 из 30
Какой тест обязателен после исправления?
JavaScript
it("не применяет устаревший ответ", async () => {
  // контролируем завершение B раньше A
});
Вопрос 22 из 30
Что наблюдать на canary после patch?
JavaScript
metrics.count("search.stale_response");
metrics.histogram("search.latency", duration);
Вопрос 23 из 30
Почему падение ошибки до нуля сразу может быть подозрительным?
Вопрос 24 из 30
Когда закрывать временный подробный лог?
Вопрос 25 из 30
Что должно войти в post-incident action?
Вопрос 26 из 30
Как ограничить очередь клиентских запросов при быстром вводе?
JavaScript
function searchLatest(q) {
  currentController?.abort("superseded");
  currentController = new AbortController();
  return search(q, { signal: currentController.signal });
}
Вопрос 27 из 30
Почему retry без budget усугубляет аварию сервиса?
JavaScript
async function requestForever() {
  for (;;) {
    try {
      return await request();
    } catch {
      await delay(100);
    }
  }
}
Вопрос 28 из 30
Что даёт circuit breaker?
Вопрос 29 из 30
Почему postmortem без обвинений полезнее поиска виноватого?
Вопрос 30 из 30
Какой архитектурный вывод из аварии из-за неверного API-ответа сильнее?

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

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

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

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