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

Расследование сбоя .NET-сервиса

Моделирует расследование сбоя .NET-сервиса: журналы, метрики, трассы, дампы, откат и проверку восстановления. В каждом сценарии нужно выбрать следующий факт или действие, которое уменьшает неопределённость, а не просто «перезапустить и посмотреть».

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 30
Почему structured logging лучше склейки строки?
C#
log.LogError(ex,
    "Payment failed for order {OrderId} provider {Provider} trace {TraceId}",
    orderId, provider, Activity.Current?.TraceId);
Вопрос 2 из 30
Что нужно для временной линии сбоя?
ТекстФрагмент журнала
2026-07-14T10:00:00Z deploy version=1231
2026-07-14T10:02:10Z pool_wait_ms=4200
2026-07-14T10:02:12Z checkout status=500 trace=abc
Вопрос 3 из 30
Почему log.LogError(ex.Message) недостаточно?
C#
try
{
    await ImportAsync(fileId, token);
}
catch (Exception ex)
{
    log.LogError(ex.Message);
}
Вопрос 4 из 30
Какой уровень для ожидаемого 404 по пользовательскому запросу?
Вопрос 5 из 30
Что делать при разнице часов узлов?
Вопрос 6 из 30
Что входит в RED для сервиса?
ТекстСнимок метрик
requests_total{route="/checkout"} 1200
request_errors_total{route="/checkout"} 96
request_duration_p99_ms{route="/checkout"} 4800
Вопрос 7 из 30
Почему p99 важнее среднего для инцидента хвоста?
Вопрос 8 из 30
Какой label опасен для метрики?
C#
requests.Add(1,
    new KeyValuePair<string, object?>("user_id", userId));
Вопрос 9 из 30
Что означает высокий connection-pool wait при низком DB CPU?
Вопрос 10 из 30
Зачем burn-rate alert?
C#
// Пример идеи: алерт, если расход бюджета одновременно высок
// на окне 5m и подтверждается окном 1h.
Вопрос 11 из 30
Когда dump наиболее полезен?
BashКоманда диагностики
dotnet-dump collect --process-id 1234 --output hang.dmp
# Снимать во время симптома до перезапуска.
Вопрос 12 из 30
Что искать при зависании?
Вопрос 13 из 30
Как снять dump dotnet-процесса?
BashКоманда dotnet-dump
dotnet-dump collect --process-id 1234 \
  --output incident-20260714.dmp
Вопрос 14 из 30
Почему два heap dump полезнее одного при утечке?
Вопрос 15 из 30
Как обращаться с dump?
C#
// Incident storage policy:
// encrypted bucket + least-privilege access + retention + audit trail.
Вопрос 16 из 30
Когда rollback версии приложения может быть небезопасен?
C#
// Новая версия уже записала поле status="paused".
// Старая версия знает только "new" и "done".
await deployment.RollbackAsync(previousVersion);
Вопрос 17 из 30
Что такое expand-contract migration?
C#
// Expand: add nullable new_column, deploy dual-read/write.
// Migrate: backfill.
// Contract: remove old_column в отдельном выпуске.
Вопрос 18 из 30
Почему feature flag полезен при инциденте?
Вопрос 19 из 30
Как проверить успех отката?
Вопрос 20 из 30
Что записывать в incident timeline при откате?
C#
timeline.Add(new IncidentAction(
    AtUtc: clock.UtcNow,
    Action: "disabled new-pricing",
    Expected: "reduce checkout 500s",
    Owner: onCall));
Вопрос 21 из 30
Что делает этот сценарий game day, а не обычным интеграционным тестом?
C#Сценарий учебного сбоя
var plan = new GameDayPlan(
    failure: Inject.HttpStatus("payments", 503),
    duration: TimeSpan.FromMinutes(10),
    successCriteria:
    [
        "alert within 2m",
        "checkout degrades without data loss",
        "on-call follows the runbook",
        "service recovers after injection stops"
    ]);

await exercise.RunAsync(plan, token);
Вопрос 22 из 30
Какой fault injection полезен для HTTP-зависимости?
C#
handler.Enqueue(
    Delay(TimeSpan.FromSeconds(3)),
    Status(HttpStatusCode.ServiceUnavailable),
    Status(HttpStatusCode.OK));
Вопрос 23 из 30
Что должен проверять synthetic monitor?
Вопрос 24 из 30
Когда алерт качественный?
Вопрос 25 из 30
Что добавить после найденной гонки?
C#
await bothWorkersReachedRead.Task;
releaseWrites.SetResult();
await Task.WhenAll(workerA, workerB);
AssertInvariant(state);
Вопрос 26 из 30
Что такое blast radius?
C#
// Один сбой payment provider затронул:
// checkout, refunds, reports и admin panel.
// Это большой blast radius общей зависимости.
Вопрос 27 из 30
Как bulkhead уменьшает радиус?
Вопрос 28 из 30
Что такое graceful degradation?
C#
if (!recommendationsBreaker.PermitCall())
    return page with { Recommendations = Array.Empty<Item>(), IsDegraded = true };
Вопрос 29 из 30
Почему capacity headroom важен?
Вопрос 30 из 30
Какой архитектурный результат должен дать postmortem?
C#
actions = [
    new("limit report concurrency", owner: "platform", due: date),
    new("add pool-wait SLO alert", owner: "observability", due: date),
    new("exercise rollback runbook", owner: "oncall", due: date)
];

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

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

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

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