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 — Профилирование
# Проследите выполнение и выберите точный результат.
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
result = Report.call(input)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
p [result.class, elapsed]
Вопрос 2 из 30
Какое описание результата точно соответствует показанному коду «Аллокации»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Аллокации
# Проследите выполнение и выберите точный результат.
values = (1..10_000)
result = values.filter_map do |n|
  n * 2 if n.even?
end
p result.length
Вопрос 3 из 30
Как изменится состояние программы после выполнения кода по теме «Сборка мусора»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Сборка мусора
# Проследите выполнение и выберите точный результат.
cache = []
1_000.times { cache << 'x' * 1_000 }
before = cache.length
GC.start
after = cache.length
p [before, after, cache.sum(&:bytesize)]
Вопрос 4 из 30
Не запуская пример, выберите точный итог для блока «Кэширование». В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Кэширование
# Проследите выполнение и выберите точный результат.
key = ['user-card', user.cache_key_with_version, locale]
card = Rails.cache.fetch(key, expires_in: 10.minutes) do
  UserCard.build(user, locale: locale)
end
Вопрос 5 из 30
Разберите выражения по порядку. Как завершится фрагмент из раздела «Границы применимости»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Границы применимости
# Проследите выполнение и выберите точный результат.
require 'set'
allowed = ids.to_set
selected = records.select { |record| allowed.include?(record.id) }
p selected.length
Вопрос 6 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Сопровождение проекта»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Сопровождение проекта
# Проследите выполнение и выберите точный результат.
queries = SqlCounter.capture do
  get '/dashboard'
end
raise "too many queries: #{queries}" if queries > 8
Вопрос 7 из 30
Что может сломаться при переносе этого решения «Профилирование» в рабочую систему? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Профилирование
# Обычный запуск проходит. Найдите скрытый риск.
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
result = Report.call(input)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
p [result.class, elapsed]
Вопрос 8 из 30
Какое скрытое условие делает фрагмент «Аллокации» хрупким? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Аллокации
# Обычный запуск проходит. Найдите скрытый риск.
values = (1..10_000)
result = values.filter_map do |n|
  n * 2 if n.even?
end
p result.length
Вопрос 9 из 30
Какое допущение делает этот код по теме «Сборка мусора» ненадёжным? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Сборка мусора
# Обычный запуск проходит. Найдите скрытый риск.
cache = []
1_000.times { cache << 'x' * 1_000 }
before = cache.length
GC.start
after = cache.length
p [before, after, cache.sum(&:bytesize)]
Вопрос 10 из 30
Что в реализации по теме «Кэширование» требует исправления прежде всего? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Кэширование
# Обычный запуск проходит. Найдите скрытый риск.
key = ['user-card', user.cache_key_with_version, locale]
card = Rails.cache.fetch(key, expires_in: 10.minutes) do
  UserCard.build(user, locale: locale)
end
Вопрос 11 из 30
Какой дефект может проявиться на границе показанного сценария «Границы применимости»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Границы применимости
# Обычный запуск проходит. Найдите скрытый риск.
require 'set'
allowed = ids.to_set
selected = records.select { |record| allowed.include?(record.id) }
p selected.length
Вопрос 12 из 30
Что может сломаться при переносе этого решения «Сопровождение проекта» в рабочую систему? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Сопровождение проекта
# Обычный запуск проходит. Найдите скрытый риск.
queries = SqlCounter.capture do
  get '/dashboard'
end
raise "too many queries: #{queries}" if queries > 8
Вопрос 13 из 30
Какое общее правило связывает результат и риск в разделе «Профилирование»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 14 из 30
Как сформулировать правило блока «Аллокации» без лишних обещаний? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 15 из 30
Как сформулировать правило блока «Сборка мусора» без лишних обещаний? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 16 из 30
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Кэширование»? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 17 из 30
Какое свойство Ruby или Rails определяет результат примера «Границы применимости»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 18 из 30
Какой принцип темы «Сопровождение проекта» переносится на другие примеры того же типа? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 19 из 30
Как исправить реализацию «Профилирование» без новой скрытой зависимости? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Профилирование
# Выберите изменение, которое исправляет причину.
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
result = Report.call(input)
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
p [result.class, elapsed]
Вопрос 20 из 30
Какой подход сохраняет намерение кода и устраняет дефект в теме «Аллокации»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Аллокации
# Выберите изменение, которое исправляет причину.
values = (1..10_000)
result = values.filter_map do |n|
  n * 2 if n.even?
end
p result.length
Вопрос 21 из 30
Какое инженерное решение лучше всего соответствует механизму «Сборка мусора»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Сборка мусора
# Выберите изменение, которое исправляет причину.
cache = []
1_000.times { cache << 'x' * 1_000 }
before = cache.length
GC.start
after = cache.length
p [before, after, cache.sum(&:bytesize)]
Вопрос 22 из 30
Какой рефакторинг переводит правило «Кэширование» из договорённости в проверяемый контракт? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Кэширование
# Выберите изменение, которое исправляет причину.
key = ['user-card', user.cache_key_with_version, locale]
card = Rails.cache.fetch(key, expires_in: 10.minutes) do
  UserCard.build(user, locale: locale)
end
Вопрос 23 из 30
Какое действие добавляет недостающую гарантию в блоке «Границы применимости»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Границы применимости
# Выберите изменение, которое исправляет причину.
require 'set'
allowed = ids.to_set
selected = records.select { |record| allowed.include?(record.id) }
p selected.length
Вопрос 24 из 30
Какой вариант правки выдержит граничный сценарий темы «Сопровождение проекта»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Сопровождение проекта
# Выберите изменение, которое исправляет причину.
queries = SqlCounter.capture do
  get '/dashboard'
end
raise "too many queries: #{queries}" if queries > 8
Вопрос 25 из 30
Что следует добавить в набор проверок по теме «Профилирование», чтобы поймать редкий отказ? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 26 из 30
Какой тест даст новую информацию о надёжности решения «Аллокации»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 27 из 30
Какой сценарий должен падать на старой реализации и проходить после исправления «Сборка мусора»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 28 из 30
Какой случай покажет, что исправление «Кэширование» не держится на удачном входе? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 29 из 30
Какой тест даст новую информацию о надёжности решения «Границы применимости»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 30 из 30
Что следует добавить в набор проверок по теме «Сопровождение проекта», чтобы поймать редкий отказ? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.

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

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

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

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