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

Потоки, Fiber и Ractor

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Как изменится состояние программы после выполнения кода по теме «Планирование»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Планирование
# Проследите выполнение и выберите точный результат.
started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
threads = 2.times.map { Thread.new { sleep 0.1 } }
threads.each(&:join)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
p elapsed
Вопрос 2 из 30
Как изменится состояние программы после выполнения кода по теме «Общий доступ»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Общий доступ
# Проследите выполнение и выберите точный результат.
count = 0
lock = Mutex.new
threads = 4.times.map do
  Thread.new { 1_000.times { lock.synchronize { count += 1 } } }
end
threads.each(&:join)
p count
Вопрос 3 из 30
Какой вариант верно описывает состояние объектов после выполнения кода «Изоляция»? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Изоляция
# Проследите выполнение и выберите точный результат.
message = 'ready'.freeze
worker = Ractor.new(message) { |value| value.upcase }
p worker.value
Вопрос 4 из 30
Какой вариант верно описывает состояние объектов после выполнения кода «Синхронизация»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Синхронизация
# Проследите выполнение и выберите точный результат.
queue = Queue.new
producer = Thread.new { queue << :task }
consumer = Thread.new { p queue.pop }
[producer, consumer].each(&:join)
Вопрос 5 из 30
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Проверка корректности»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Проверка корректности
# Проследите выполнение и выберите точный результат.
ready = Queue.new
release = Queue.new
values = []
2.times.map do
  Thread.new do
    snapshot = values.length
    ready << true
    release.pop
    values << snapshot
  end
end.tap do |threads|
  2.times { ready.pop }
  2.times { release << true }
  threads.each(&:join)
end
p values
Вопрос 6 из 30
Разберите выражения по порядку. Как завершится фрагмент из раздела «Устойчивость к сбоям»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Устойчивость к сбоям
# Проследите выполнение и выберите точный результат.
worker = Thread.new { raise 'boom' }
begin
  worker.value
rescue => e
  p [e.class, e.message]
end
Вопрос 7 из 30
Какой дефект может проявиться на границе показанного сценария «Планирование»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Планирование
# Обычный запуск проходит. Найдите скрытый риск.
started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
threads = 2.times.map { Thread.new { sleep 0.1 } }
threads.each(&:join)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
p elapsed
Вопрос 8 из 30
Почему успешный пример ещё не доказывает надёжность решения «Общий доступ»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Общий доступ
# Обычный запуск проходит. Найдите скрытый риск.
count = 0
lock = Mutex.new
threads = 4.times.map do
  Thread.new { 1_000.times { lock.synchronize { count += 1 } } }
end
threads.each(&:join)
p count
Вопрос 9 из 30
Что может сломаться при переносе этого решения «Изоляция» в рабочую систему? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Изоляция
# Обычный запуск проходит. Найдите скрытый риск.
message = 'ready'.freeze
worker = Ractor.new(message) { |value| value.upcase }
p worker.value
Вопрос 10 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Синхронизация»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Синхронизация
# Обычный запуск проходит. Найдите скрытый риск.
queue = Queue.new
producer = Thread.new { queue << :task }
consumer = Thread.new { p queue.pop }
[producer, consumer].each(&:join)
Вопрос 11 из 30
Какое допущение делает этот код по теме «Проверка корректности» ненадёжным? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Проверка корректности
# Обычный запуск проходит. Найдите скрытый риск.
ready = Queue.new
release = Queue.new
values = []
2.times.map do
  Thread.new do
    snapshot = values.length
    ready << true
    release.pop
    values << snapshot
  end
end.tap do |threads|
  2.times { ready.pop }
  2.times { release << true }
  threads.each(&:join)
end
p values
Вопрос 12 из 30
Какой дефект может проявиться на границе показанного сценария «Устойчивость к сбоям»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Устойчивость к сбоям
# Обычный запуск проходит. Найдите скрытый риск.
worker = Thread.new { raise 'boom' }
begin
  worker.value
rescue => e
  p [e.class, e.message]
end
Вопрос 13 из 30
Почему показанный фрагмент «Планирование» ведёт себя именно так? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 14 из 30
Какое свойство Ruby или Rails определяет результат примера «Общий доступ»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 15 из 30
Какое правило Ruby или Rails объясняет поведение в теме «Изоляция»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 16 из 30
Как сформулировать правило блока «Синхронизация» без лишних обещаний? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 17 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Проверка корректности»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 18 из 30
Какое свойство Ruby или Rails определяет результат примера «Устойчивость к сбоям»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 19 из 30
Какой вариант правки выдержит граничный сценарий темы «Планирование»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Планирование
# Выберите изменение, которое исправляет причину.
started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
threads = 2.times.map { Thread.new { sleep 0.1 } }
threads.each(&:join)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
p elapsed
Вопрос 20 из 30
Какое исправление уменьшает риск, не скрывая исходное поведение «Общий доступ»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Общий доступ
# Выберите изменение, которое исправляет причину.
count = 0
lock = Mutex.new
threads = 4.times.map do
  Thread.new { 1_000.times { lock.synchronize { count += 1 } } }
end
threads.each(&:join)
p count
Вопрос 21 из 30
Какой рефакторинг делает контракт блока «Изоляция» явным и проверяемым? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Изоляция
# Выберите изменение, которое исправляет причину.
message = 'ready'.freeze
worker = Ractor.new(message) { |value| value.upcase }
p worker.value
Вопрос 22 из 30
Какой вариант правки выдержит граничный сценарий темы «Синхронизация»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Синхронизация
# Выберите изменение, которое исправляет причину.
queue = Queue.new
producer = Thread.new { queue << :task }
consumer = Thread.new { p queue.pop }
[producer, consumer].each(&:join)
Вопрос 23 из 30
Какой рефакторинг делает контракт блока «Проверка корректности» явным и проверяемым? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Проверка корректности
# Выберите изменение, которое исправляет причину.
ready = Queue.new
release = Queue.new
values = []
2.times.map do
  Thread.new do
    snapshot = values.length
    ready << true
    release.pop
    values << snapshot
  end
end.tap do |threads|
  2.times { ready.pop }
  2.times { release << true }
  threads.each(&:join)
end
p values
Вопрос 24 из 30
Что следует изменить в решении «Устойчивость к сбоям», чтобы закрыть исходный риск? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Устойчивость к сбоям
# Выберите изменение, которое исправляет причину.
worker = Thread.new { raise 'boom' }
begin
  worker.value
rescue => e
  p [e.class, e.message]
end
Вопрос 25 из 30
Какую границу контракта «Планирование» нужно закрепить отдельным тестом? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 26 из 30
Какой тест даст новую информацию о надёжности решения «Общий доступ»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 27 из 30
Какой контрпример проверит реальную границу механизма «Изоляция»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 28 из 30
Какую границу контракта «Синхронизация» нужно закрепить отдельным тестом? Правильным считается только полностью согласованное утверждение.
Вопрос 29 из 30
Какую проверку стоит добавить, чтобы не ограничиться счастливым путём «Проверка корректности»? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 30 из 30
Какой тест даст новую информацию о надёжности решения «Устойчивость к сбоям»? Оценивайте ответ целиком: обе части утверждения должны быть точными.

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

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

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

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