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

Создание предметного DSL

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Какой фактический результат даст этот фрагмент по теме «Внутренний DSL»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Внутренний DSL
# Проследите выполнение и выберите точный результат.
routes = RouteSet.build do
  get '/health', to: :health
  post '/orders', to: :create_order
end
p routes.entries
Вопрос 2 из 30
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Блок конфигурации»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Блок конфигурации
# Проследите выполнение и выберите точный результат.
config = ClientConfig.new
config.configure do |c|
  c.timeout = 2
  c.retries = 3
end
p [config.timeout, config.retries]
Вопрос 3 из 30
Какая трассировка кода по теме «Контекст выполнения» не теряет важную деталь? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Контекст выполнения
# Проследите выполнение и выберите точный результат.
limit = 10
context = RuleContext.new
result = context.instance_exec(7) do |value|
  allowed?(value, limit)
end
p result
Вопрос 4 из 30
Какой фактический результат даст этот фрагмент по теме «Проверка ошибок»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Проверка ошибок
# Проследите выполнение и выберите точный результат.
class SchemaDsl
  TYPES = %i[string integer].freeze
  def field(name, type:)
    raise DomainDslError, "unknown type: #{type}" unless TYPES.include?(type)
    # сохранить поле
  end
end
Вопрос 5 из 30
Не запуская пример, выберите точный итог для блока «Риски безопасности». Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Риски безопасности
# Проследите выполнение и выберите точный результат.
require 'json'
raw = JSON.parse(File.read('rules.json'), symbolize_names: true)
allowed = %i[name threshold]
unknown = raw.keys - allowed
raise "unknown keys: #{unknown.join(', ')}" unless unknown.empty?
Вопрос 6 из 30
Как изменится состояние программы после выполнения кода по теме «Контроль производительности»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Контроль производительности
# Проследите выполнение и выберите точный результат.
SCHEMA = SchemaDsl.build do
  field :email, type: :string
  field :age, type: :integer
end.freeze

p SCHEMA.validate(email: 'a@b', age: 30)
Вопрос 7 из 30
Какой рабочий сбой вероятнее всего связан именно с механизмом «Внутренний DSL»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Внутренний DSL
# Обычный запуск проходит. Найдите скрытый риск.
routes = RouteSet.build do
  get '/health', to: :health
  post '/orders', to: :create_order
end
p routes.entries
Вопрос 8 из 30
Что в реализации по теме «Блок конфигурации» требует исправления прежде всего? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Блок конфигурации
# Обычный запуск проходит. Найдите скрытый риск.
config = ClientConfig.new
config.configure do |c|
  c.timeout = 2
  c.retries = 3
end
p [config.timeout, config.retries]
Вопрос 9 из 30
Почему успешный пример ещё не доказывает надёжность решения «Контекст выполнения»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Контекст выполнения
# Обычный запуск проходит. Найдите скрытый риск.
limit = 10
context = RuleContext.new
result = context.instance_exec(7) do |value|
  allowed?(value, limit)
end
p result
Вопрос 10 из 30
Какое скрытое условие делает фрагмент «Проверка ошибок» хрупким? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Проверка ошибок
# Обычный запуск проходит. Найдите скрытый риск.
class SchemaDsl
  TYPES = %i[string integer].freeze
  def field(name, type:)
    raise DomainDslError, "unknown type: #{type}" unless TYPES.include?(type)
    # сохранить поле
  end
end
Вопрос 11 из 30
Обычный сценарий проходит. Какой риск остаётся в теме «Риски безопасности»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Риски безопасности
# Обычный запуск проходит. Найдите скрытый риск.
require 'json'
raw = JSON.parse(File.read('rules.json'), symbolize_names: true)
allowed = %i[name threshold]
unknown = raw.keys - allowed
raise "unknown keys: #{unknown.join(', ')}" unless unknown.empty?
Вопрос 12 из 30
Какой риск не исчезает после успешного запуска кода «Контроль производительности»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Контроль производительности
# Обычный запуск проходит. Найдите скрытый риск.
SCHEMA = SchemaDsl.build do
  field :email, type: :string
  field :age, type: :integer
end.freeze

p SCHEMA.validate(email: 'a@b', age: 30)
Вопрос 13 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Внутренний DSL»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 14 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Блок конфигурации»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 15 из 30
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Контекст выполнения»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 16 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Проверка ошибок»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 17 из 30
Какое общее правило связывает результат и риск в разделе «Риски безопасности»? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 18 из 30
Какой контракт нужно помнить при ревью кода по теме «Контроль производительности»? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 19 из 30
Какой рефакторинг делает контракт блока «Внутренний DSL» явным и проверяемым? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Внутренний DSL
# Выберите изменение, которое исправляет причину.
routes = RouteSet.build do
  get '/health', to: :health
  post '/orders', to: :create_order
end
p routes.entries
Вопрос 20 из 30
Какой вариант правки выдержит граничный сценарий темы «Блок конфигурации»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Блок конфигурации
# Выберите изменение, которое исправляет причину.
config = ClientConfig.new
config.configure do |c|
  c.timeout = 2
  c.retries = 3
end
p [config.timeout, config.retries]
Вопрос 21 из 30
Какой вариант решения «Контекст выполнения» останется понятным при сопровождении? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Контекст выполнения
# Выберите изменение, которое исправляет причину.
limit = 10
context = RuleContext.new
result = context.instance_exec(7) do |value|
  allowed?(value, limit)
end
p result
Вопрос 22 из 30
Какой подход сохраняет намерение кода и устраняет дефект в теме «Проверка ошибок»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Проверка ошибок
# Выберите изменение, которое исправляет причину.
class SchemaDsl
  TYPES = %i[string integer].freeze
  def field(name, type:)
    raise DomainDslError, "unknown type: #{type}" unless TYPES.include?(type)
    # сохранить поле
  end
end
Вопрос 23 из 30
Что нужно поменять, чтобы ошибка «Риски безопасности» не возвращалась при следующем изменении? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Риски безопасности
# Выберите изменение, которое исправляет причину.
require 'json'
raw = JSON.parse(File.read('rules.json'), symbolize_names: true)
allowed = %i[name threshold]
unknown = raw.keys - allowed
raise "unknown keys: #{unknown.join(', ')}" unless unknown.empty?
Вопрос 24 из 30
Какой рефакторинг переводит правило «Контроль производительности» из договорённости в проверяемый контракт? Правильным считается только полностью согласованное утверждение.
RubyRuby — Контроль производительности
# Выберите изменение, которое исправляет причину.
SCHEMA = SchemaDsl.build do
  field :email, type: :string
  field :age, type: :integer
end.freeze

p SCHEMA.validate(email: 'a@b', age: 30)
Вопрос 25 из 30
Что нужно воспроизвести отдельно перед выпуском изменения «Внутренний DSL»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 26 из 30
Какой граничный сценарий лучше всего проверит решение по теме «Блок конфигурации»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 27 из 30
Что нужно воспроизвести отдельно перед выпуском изменения «Контекст выполнения»? Правильным считается только полностью согласованное утверждение.
Вопрос 28 из 30
Что нужно воспроизвести отдельно перед выпуском изменения «Проверка ошибок»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 29 из 30
Что нужно воспроизвести отдельно перед выпуском изменения «Риски безопасности»? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 30 из 30
Какой сценарий проверит не только результат, но и побочный эффект решения «Контроль производительности»? Оценивайте ответ целиком: обе части утверждения должны быть точными.

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

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

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

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