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

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

Тест «Расследование сбоя Ruby-сервиса» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 30 вопросов, 18 заданий с Ruby-кодом и 6 тематических шкал.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Разберите выражения по порядку. Как завершится фрагмент из раздела «Симптомы»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Симптомы
# Проследите выполнение и выберите точный результат.
errors = events.group_by { |e| [e[:route], e[:error_class]] }
summary = errors.transform_values(&:count)
p summary.sort_by { |_, count| -count }.first(5)
Вопрос 2 из 30
Какой вариант верно описывает состояние объектов после выполнения кода «Сбор фактов»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Сбор фактов
# Проследите выполнение и выберите точный результат.
snapshot = {
  release: ENV['APP_REVISION'],
  monotonic_s: Process.clock_gettime(Process::CLOCK_MONOTONIC).round,
  pid: Process.pid,
  rss_kb: `ps -o rss= -p #{Process.pid}`.to_i,
  threads: Thread.list.count,
  gc: GC.stat.slice(:heap_live_slots, :major_gc_count)
}
p snapshot
Вопрос 3 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Локализация причины»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Локализация причины
# Проследите выполнение и выберите точный результат.
if Feature.enabled?(:new_cache, request_id)
  NewCache.fetch(key) { compute.call }
else
  compute.call
end
Вопрос 4 из 30
Как следует прочитать результат показанного примера «Безопасное исправление»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Безопасное исправление
# Проследите выполнение и выберите точный результат.
scope.find_in_batches(batch_size: 500) do |batch|
  Exporter.write(batch)
end
Вопрос 5 из 30
Что произойдёт после последней строки в примере по теме «Технический долг»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Технический долг
# Проследите выполнение и выберите точный результат.
require 'date'
follow_up = {
  owner: 'reporting-team',
  due: Date.today + 14,
  action: 'add queue age SLO and idempotency regression test',
  evidence: incident_id
}
p follow_up
Вопрос 6 из 30
Как следует прочитать результат показанного примера «Эволюция архитектуры»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Эволюция архитектуры
# Проследите выполнение и выберите точный результат.
decision = {
  problem: 'report generation saturates web memory',
  options: %w[streaming bounded_job separate_service],
  metrics: %w[rss_mb queue_age_seconds failure_rate],
  review_after: '30d'
}
p decision
Вопрос 7 из 30
Обычный сценарий проходит. Какой риск остаётся в теме «Симптомы»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Симптомы
# Обычный запуск проходит. Найдите скрытый риск.
errors = events.group_by { |e| [e[:route], e[:error_class]] }
summary = errors.transform_values(&:count)
p summary.sort_by { |_, count| -count }.first(5)
Вопрос 8 из 30
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Сбор фактов»? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Сбор фактов
# Обычный запуск проходит. Найдите скрытый риск.
snapshot = {
  release: ENV['APP_REVISION'],
  monotonic_s: Process.clock_gettime(Process::CLOCK_MONOTONIC).round,
  pid: Process.pid,
  rss_kb: `ps -o rss= -p #{Process.pid}`.to_i,
  threads: Thread.list.count,
  gc: GC.stat.slice(:heap_live_slots, :major_gc_count)
}
p snapshot
Вопрос 9 из 30
Какое допущение делает этот код по теме «Локализация причины» ненадёжным? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Локализация причины
# Обычный запуск проходит. Найдите скрытый риск.
if Feature.enabled?(:new_cache, request_id)
  NewCache.fetch(key) { compute.call }
else
  compute.call
end
Вопрос 10 из 30
Какое скрытое условие делает фрагмент «Безопасное исправление» хрупким? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Безопасное исправление
# Обычный запуск проходит. Найдите скрытый риск.
scope.find_in_batches(batch_size: 500) do |batch|
  Exporter.write(batch)
end
Вопрос 11 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Технический долг»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Технический долг
# Обычный запуск проходит. Найдите скрытый риск.
require 'date'
follow_up = {
  owner: 'reporting-team',
  due: Date.today + 14,
  action: 'add queue age SLO and idempotency regression test',
  evidence: incident_id
}
p follow_up
Вопрос 12 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Эволюция архитектуры»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Эволюция архитектуры
# Обычный запуск проходит. Найдите скрытый риск.
decision = {
  problem: 'report generation saturates web memory',
  options: %w[streaming bounded_job separate_service],
  metrics: %w[rss_mb queue_age_seconds failure_rate],
  review_after: '30d'
}
p decision
Вопрос 13 из 30
Какой принцип темы «Симптомы» переносится на другие примеры того же типа? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 14 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Сбор фактов»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 15 из 30
Что является технической причиной наблюдаемого поведения «Локализация причины»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 16 из 30
Какой контракт нужно помнить при ревью кода по теме «Безопасное исправление»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 17 из 30
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Технический долг»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 18 из 30
Какое общее правило связывает результат и риск в разделе «Эволюция архитектуры»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 19 из 30
Что нужно поменять, чтобы ошибка «Симптомы» не возвращалась при следующем изменении? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Симптомы
# Выберите изменение, которое исправляет причину.
errors = events.group_by { |e| [e[:route], e[:error_class]] }
summary = errors.transform_values(&:count)
p summary.sort_by { |_, count| -count }.first(5)
Вопрос 20 из 30
Какое изменение устраняет причину проблемы в теме «Сбор фактов», а не маскирует симптом? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Сбор фактов
# Выберите изменение, которое исправляет причину.
snapshot = {
  release: ENV['APP_REVISION'],
  monotonic_s: Process.clock_gettime(Process::CLOCK_MONOTONIC).round,
  pid: Process.pid,
  rss_kb: `ps -o rss= -p #{Process.pid}`.to_i,
  threads: Thread.list.count,
  gc: GC.stat.slice(:heap_live_slots, :major_gc_count)
}
p snapshot
Вопрос 21 из 30
Какое инженерное решение лучше всего соответствует механизму «Локализация причины»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Локализация причины
# Выберите изменение, которое исправляет причину.
if Feature.enabled?(:new_cache, request_id)
  NewCache.fetch(key) { compute.call }
else
  compute.call
end
Вопрос 22 из 30
Какой вариант правки выдержит граничный сценарий темы «Безопасное исправление»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Безопасное исправление
# Выберите изменение, которое исправляет причину.
scope.find_in_batches(batch_size: 500) do |batch|
  Exporter.write(batch)
end
Вопрос 23 из 30
Что следует изменить в решении «Технический долг», чтобы закрыть исходный риск? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Технический долг
# Выберите изменение, которое исправляет причину.
require 'date'
follow_up = {
  owner: 'reporting-team',
  due: Date.today + 14,
  action: 'add queue age SLO and idempotency regression test',
  evidence: incident_id
}
p follow_up
Вопрос 24 из 30
Какой подход сохраняет намерение кода и устраняет дефект в теме «Эволюция архитектуры»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Эволюция архитектуры
# Выберите изменение, которое исправляет причину.
decision = {
  problem: 'report generation saturates web memory',
  options: %w[streaming bounded_job separate_service],
  metrics: %w[rss_mb queue_age_seconds failure_rate],
  review_after: '30d'
}
p decision
Вопрос 25 из 30
Какую проверку стоит добавить, чтобы не ограничиться счастливым путём «Симптомы»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 26 из 30
Какой тест даст новую информацию о надёжности решения «Сбор фактов»? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 27 из 30
Чем дополнить базовый тест, чтобы проверить ограничение темы «Локализация причины»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 28 из 30
Какой сценарий должен падать на старой реализации и проходить после исправления «Безопасное исправление»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 29 из 30
Какой случай покажет, что исправление «Технический долг» не держится на удачном входе? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 30 из 30
Чем дополнить базовый тест, чтобы проверить ограничение темы «Эволюция архитектуры»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.

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

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

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

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