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 — Границы домена
# Проследите выполнение и выберите точный результат.
module Checkout
  class PlaceOrder
    def initialize(catalog:, payments:)
      @catalog, @payments = catalog, payments
    end
    def call(command)
      # предметная последовательность
    end
  end
end
Вопрос 2 из 30
Какая трассировка кода по теме «Сервисные объекты» не теряет важную деталь? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Сервисные объекты
# Проследите выполнение и выберите точный результат.
result = Orders::Cancel.call(order: order, actor: current_user)
case result
in Success(order:)
  render json: order
in Failure(code:, message:)
  render json: { error: code, message: message }, status: :conflict
end
Вопрос 3 из 30
Какое описание результата точно соответствует показанному коду «Зависимости»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Зависимости
# Проследите выполнение и выберите точный результат.
class PriceImporter
  def initialize(gateway:)
    @gateway = gateway
  end
  def call(sku)
    Price.new(@gateway.fetch(sku))
  end
end
Вопрос 4 из 30
Что произойдёт после последней строки в примере по теме «Модульный монолит»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Модульный монолит
# Проследите выполнение и выберите точный результат.
module Billing
  module Commands; end

  def self.charge(order_id:, amount_cents:)
    Commands::Charge.call(order_id:, amount_cents:)
  end
  private_constant :Commands
end
Вопрос 5 из 30
Как следует прочитать результат показанного примера «Контроль ресурсов»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Контроль ресурсов
# Проследите выполнение и выберите точный результат.
threads_count = Integer(ENV.fetch('RAILS_MAX_THREADS', 5))
db_pool = ActiveRecord::Base.connection_pool.size
abort "DB pool #{db_pool} < threads #{threads_count}" if db_pool < threads_count
p [threads_count, db_pool]
Вопрос 6 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Масштабирование решения»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Масштабирование решения
# Проследите выполнение и выберите точный результат.
key = "report:#{report.id}:v#{report.lock_version}"
Rails.cache.fetch(key, expires_in: 5.minutes) do
  ReportPresenter.new(report).as_json
end
Вопрос 7 из 30
Какой дефект может проявиться на границе показанного сценария «Границы домена»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Границы домена
# Обычный запуск проходит. Найдите скрытый риск.
module Checkout
  class PlaceOrder
    def initialize(catalog:, payments:)
      @catalog, @payments = catalog, payments
    end
    def call(command)
      # предметная последовательность
    end
  end
end
Вопрос 8 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Сервисные объекты»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Сервисные объекты
# Обычный запуск проходит. Найдите скрытый риск.
result = Orders::Cancel.call(order: order, actor: current_user)
case result
in Success(order:)
  render json: order
in Failure(code:, message:)
  render json: { error: code, message: message }, status: :conflict
end
Вопрос 9 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Зависимости»? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Зависимости
# Обычный запуск проходит. Найдите скрытый риск.
class PriceImporter
  def initialize(gateway:)
    @gateway = gateway
  end
  def call(sku)
    Price.new(@gateway.fetch(sku))
  end
end
Вопрос 10 из 30
Какое допущение делает этот код по теме «Модульный монолит» ненадёжным? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Модульный монолит
# Обычный запуск проходит. Найдите скрытый риск.
module Billing
  module Commands; end

  def self.charge(order_id:, amount_cents:)
    Commands::Charge.call(order_id:, amount_cents:)
  end
  private_constant :Commands
end
Вопрос 11 из 30
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Контроль ресурсов»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Контроль ресурсов
# Обычный запуск проходит. Найдите скрытый риск.
threads_count = Integer(ENV.fetch('RAILS_MAX_THREADS', 5))
db_pool = ActiveRecord::Base.connection_pool.size
abort "DB pool #{db_pool} < threads #{threads_count}" if db_pool < threads_count
p [threads_count, db_pool]
Вопрос 12 из 30
Что может сломаться при переносе этого решения «Масштабирование решения» в рабочую систему? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Масштабирование решения
# Обычный запуск проходит. Найдите скрытый риск.
key = "report:#{report.id}:v#{report.lock_version}"
Rails.cache.fetch(key, expires_in: 5.minutes) do
  ReportPresenter.new(report).as_json
end
Вопрос 13 из 30
Какое свойство Ruby или Rails определяет результат примера «Границы домена»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 14 из 30
Как сформулировать правило блока «Сервисные объекты» без лишних обещаний? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 15 из 30
Какой контракт нужно помнить при ревью кода по теме «Зависимости»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 16 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Модульный монолит»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 17 из 30
Какой принцип темы «Контроль ресурсов» переносится на другие примеры того же типа? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 18 из 30
Почему показанный фрагмент «Масштабирование решения» ведёт себя именно так? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 19 из 30
Какое изменение устраняет причину проблемы в теме «Границы домена», а не маскирует симптом? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Границы домена
# Выберите изменение, которое исправляет причину.
module Checkout
  class PlaceOrder
    def initialize(catalog:, payments:)
      @catalog, @payments = catalog, payments
    end
    def call(command)
      # предметная последовательность
    end
  end
end
Вопрос 20 из 30
Какое инженерное решение лучше всего соответствует механизму «Сервисные объекты»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Сервисные объекты
# Выберите изменение, которое исправляет причину.
result = Orders::Cancel.call(order: order, actor: current_user)
case result
in Success(order:)
  render json: order
in Failure(code:, message:)
  render json: { error: code, message: message }, status: :conflict
end
Вопрос 21 из 30
Какой вариант решения «Зависимости» останется понятным при сопровождении? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Зависимости
# Выберите изменение, которое исправляет причину.
class PriceImporter
  def initialize(gateway:)
    @gateway = gateway
  end
  def call(sku)
    Price.new(@gateway.fetch(sku))
  end
end
Вопрос 22 из 30
Какое исправление уменьшает риск, не скрывая исходное поведение «Модульный монолит»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Модульный монолит
# Выберите изменение, которое исправляет причину.
module Billing
  module Commands; end

  def self.charge(order_id:, amount_cents:)
    Commands::Charge.call(order_id:, amount_cents:)
  end
  private_constant :Commands
end
Вопрос 23 из 30
Как исправить реализацию «Контроль ресурсов» без новой скрытой зависимости? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Контроль ресурсов
# Выберите изменение, которое исправляет причину.
threads_count = Integer(ENV.fetch('RAILS_MAX_THREADS', 5))
db_pool = ActiveRecord::Base.connection_pool.size
abort "DB pool #{db_pool} < threads #{threads_count}" if db_pool < threads_count
p [threads_count, db_pool]
Вопрос 24 из 30
Какой вариант решения «Масштабирование решения» останется понятным при сопровождении? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Масштабирование решения
# Выберите изменение, которое исправляет причину.
key = "report:#{report.id}:v#{report.lock_version}"
Rails.cache.fetch(key, expires_in: 5.minutes) do
  ReportPresenter.new(report).as_json
end
Вопрос 25 из 30
Какой сценарий проверит не только результат, но и побочный эффект решения «Границы домена»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 26 из 30
Что нужно воспроизвести отдельно перед выпуском изменения «Сервисные объекты»? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 27 из 30
Какую границу контракта «Зависимости» нужно закрепить отдельным тестом? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 28 из 30
Какой контрпример проверит реальную границу механизма «Модульный монолит»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 29 из 30
Какую границу контракта «Контроль ресурсов» нужно закрепить отдельным тестом? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 30 из 30
Что следует добавить в набор проверок по теме «Масштабирование решения», чтобы поймать редкий отказ? Нужен вариант без логического разрыва между первой и второй частью.

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

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

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

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