💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Какой фактический результат даст этот фрагмент по теме «Жизненный цикл фонового задания»? Нужен вариант без логического разрыва между первой и второй частью.
Ruby Ruby — Жизненный цикл фонового задания Копировать
# Проследите выполнение и выберите точный результат.
class ReceiptJob < ApplicationJob
def perform(order_id)
order = Order.find_by(id: order_id)
return unless order
ReceiptSender.call(order)
end
end
Передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта. Это объясняется тем, что жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Это объясняется тем, что жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта. Это объясняется тем, что очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток. Это объясняется тем, что жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта. Это объясняется тем, что наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 2 из 25
Как следует прочитать результат показанного примера «Повторные попытки»? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Повторные попытки Копировать
# Проследите выполнение и выберите точный результат.
class SyncJob < ApplicationJob
retry_on Net::ReadTimeout, wait: :polynomially_longer, attempts: 5
discard_on ActiveRecord::RecordNotFound
def perform(id)
RemoteSync.call(Model.find(id))
end
end
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Причина такого результата: retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток. Причина такого результата: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток. Причина такого результата: retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта. Причина такого результата: retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток. Причина такого результата: идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти.
Вопрос 4 из 25
Не запуская пример, выберите точный итог для блока «Наблюдаемость». Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Наблюдаемость Копировать
# Проследите выполнение и выберите точный результат.
def perform(order_id)
Rails.logger.info(
event: 'receipt_job_started',
job_id: job_id,
order_id: order_id,
executions: executions
)
end
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Механизм результата таков: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании. Механизм результата таков: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Структурный контекст связывает job_id, order_id и attempt без записи полного объекта. Механизм результата таков: жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Структурный контекст связывает job_id, order_id и attempt без записи полного объекта. Механизм результата таков: очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Структурный контекст связывает job_id, order_id и attempt без записи полного объекта. Механизм результата таков: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 5 из 25
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Выбор компромисса»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Ruby Ruby — Выбор компромисса Копировать
# Проследите выполнение и выберите точный результат.
report = Report.create!(status: :pending)
GenerateReportJob.perform_later(report.id)
render json: { id: report.id, status: report.status }, status: :accepted
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Наблюдение согласуется с тем, что очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Наблюдение согласуется с тем, что жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании. Наблюдение согласуется с тем, что очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток. Наблюдение согласуется с тем, что очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта. Наблюдение согласуется с тем, что наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 6 из 25
Какой рабочий сбой вероятнее всего связан именно с механизмом «Жизненный цикл фонового задания»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Ruby Ruby — Жизненный цикл фонового задания Копировать
# Обычный запуск проходит. Найдите скрытый риск.
class ReceiptJob < ApplicationJob
def perform(order_id)
order = Order.find_by(id: order_id)
return unless order
ReceiptSender.call(order)
end
end
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. Причина — жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Перенос критичной проверки прав или списания в фон может вернуть успех до того, как операция вообще стала допустимой. Причина — жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
К моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние. Причина — наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
К моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние. Причина — очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
К моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние. Причина — жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Вопрос 7 из 25
Обычный сценарий проходит. Какой риск остаётся в теме «Повторные попытки»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Ruby Ruby — Повторные попытки Копировать
# Обычный запуск проходит. Найдите скрытый риск.
class SyncJob < ApplicationJob
retry_on Net::ReadTimeout, wait: :polynomially_longer, attempts: 5
discard_on ActiveRecord::RecordNotFound
def perform(id)
RemoteSync.call(Model.find(id))
end
end
Повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину. Этот риск связан с тем, что retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину. Этот риск связан с тем, что идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти.
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. Этот риск связан с тем, что retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Проверка `sent?` перед отправкой подвержена гонке: два worker одновременно увидят false. Этот риск связан с тем, что retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток.
Повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину. Этот риск связан с тем, что наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 8 из 25
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Идемпотентность»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Ruby Ruby — Идемпотентность Копировать
# Обычный запуск проходит. Найдите скрытый риск.
Delivery.create_or_find_by!(delivery_key: "receipt:#{order.id}") do |d|
d.order_id = order.id
end
# unique index on deliveries.delivery_key
Повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину. Уязвимое место возникает потому, что идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти.
Проверка `sent?` перед отправкой подвержена гонке: два worker одновременно увидят false. Уязвимое место возникает потому, что идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти.
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. Уязвимое место возникает потому, что идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти.
Проверка `sent?` перед отправкой подвержена гонке: два worker одновременно увидят false. Уязвимое место возникает потому, что очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Проверка `sent?` перед отправкой подвержена гонке: два worker одновременно увидят false. Уязвимое место возникает потому, что наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 9 из 25
Какое допущение делает этот код по теме «Наблюдаемость» ненадёжным? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Ruby Ruby — Наблюдаемость Копировать
# Обычный запуск проходит. Найдите скрытый риск.
def perform(order_id)
Rails.logger.info(
event: 'receipt_job_started',
job_id: job_id,
order_id: order_id,
executions: executions
)
end
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. К такому сбою приводит правило: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. К такому сбою приводит правило: очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. К такому сбою приводит правило: жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину. К такому сбою приводит правило: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
К моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние. К такому сбою приводит правило: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Вопрос 10 из 25
Какое скрытое условие делает фрагмент «Выбор компромисса» хрупким? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Ruby Ruby — Выбор компромисса Копировать
# Обычный запуск проходит. Найдите скрытый риск.
report = Report.create!(status: :pending)
GenerateReportJob.perform_later(report.id)
render json: { id: report.id, status: report.status }, status: :accepted
К моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние. Источник риска: очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Перенос критичной проверки прав или списания в фон может вернуть успех до того, как операция вообще стала допустимой. Источник риска: жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз».
Перенос критичной проверки прав или списания в фон может вернуть успех до того, как операция вообще стала допустимой. Источник риска: очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Перенос критичной проверки прав или списания в фон может вернуть успех до того, как операция вообще стала допустимой. Источник риска: наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed».
Журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload. Источник риска: очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа.
Вопрос 11 из 25
Как сформулировать правило блока «Жизненный цикл фонового задания» без лишних обещаний? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Поэтому передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта.
Жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз». Поэтому timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток.
Жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз». Поэтому передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Поэтому передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта.
Жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз». Поэтому создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Вопрос 12 из 25
Какой контракт нужно помнить при ревью кода по теме «Повторные попытки»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Из этого следует, что timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток.
Идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти. Из этого следует, что timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток.
Retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток. Из этого следует, что создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток. Из этого следует, что timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток.
Retry подходит для временных ошибок и требует задержки с jitter; постоянная ошибка данных не исправится от числа попыток. Из этого следует, что передача идентификатора записи позволяет worker заново загрузить актуальное состояние вместо сериализации целого объекта.
Вопрос 13 из 25
Что является технической причиной наблюдаемого поведения «Идемпотентность»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти. Наблюдаемое следствие: структурный контекст связывает job_id, order_id и attempt без записи полного объекта.
Идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти. Наблюдаемое следствие: уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Наблюдаемое следствие: уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Наблюдаемое следствие: уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании.
Идемпотентное задание при повторном выполнении приводит к тому же допустимому состоянию; уникальный ключ эффекта обычно надёжнее флага в памяти. Наблюдаемое следствие: создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Вопрос 14 из 25
Какой механизм объясняет и обычный, и граничный сценарий «Наблюдаемость»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Именно поэтому структурный контекст связывает job_id, order_id и attempt без записи полного объекта.
Жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз». Именно поэтому структурный контекст связывает job_id, order_id и attempt без записи полного объекта.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Именно поэтому создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Именно поэтому уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Именно поэтому структурный контекст связывает job_id, order_id и attempt без записи полного объекта.
Вопрос 15 из 25
На какой контракт языка или библиотеки опирается результат блока «Выбор компромисса»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Это правило даёт такой результат: timeout внешнего сервиса повторяется по политике, а ошибка валидации должна завершиться без бесконечных попыток.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Это правило даёт такой результат: уникальная запись `delivery_key` не позволяет дважды создать одну доставку при повторном задании.
Очередь разгружает запрос, но добавляет задержку, повторную доставку и операционную сложность; синхронное выполнение лучше для короткого обязательного ответа. Это правило даёт такой результат: создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Наблюдаемость очереди требует времени ожидания, длительности, числа попыток, причин отказа и корреляционного идентификатора, а не только строки «job failed». Это правило даёт такой результат: создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Жизненный цикл задания включает постановку, сериализацию аргументов, получение исполнителем, выполнение и подтверждение; доставка обычно не означает «ровно один раз». Это правило даёт такой результат: создание отчёта переносится в фон, а клиент получает идентификатор состояния вместо ожидания всего расчёта.
Вопрос 16 из 25
Какое исправление уменьшает риск, не скрывая исходное поведение «Жизненный цикл фонового задания»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Жизненный цикл фонового задания Копировать
# Выберите изменение, которое исправляет причину.
class ReceiptJob < ApplicationJob
def perform(order_id)
order = Order.find_by(id: order_id)
return unless order
ReceiptSender.call(order)
end
end
Передавать небольшие стабильные идентификаторы, явно решать поведение для отсутствующей/изменившейся записи и версионировать формат аргументов. Так закрывается риск: к моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние.
Разделить обязательную синхронную фиксацию команды и отложенные побочные эффекты; сообщать клиенту реальное промежуточное состояние. Так закрывается риск: к моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние.
Передавать небольшие стабильные идентификаторы, явно решать поведение для отсутствующей/изменившейся записи и версионировать формат аргументов. Так закрывается риск: журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload.
Передавать небольшие стабильные идентификаторы, явно решать поведение для отсутствующей/изменившейся записи и версионировать формат аргументов. Так закрывается риск: перенос критичной проверки прав или списания в фон может вернуть успех до того, как операция вообще стала допустимой.
Определить небольшой стабильный набор полей, маскировать чувствительные данные и построить метрики возраста очереди и доли окончательных отказов. Так закрывается риск: к моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние.
Вопрос 17 из 25
Какой рефакторинг переводит правило «Повторные попытки» из договорённости в проверяемый контракт? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Повторные попытки Копировать
# Выберите изменение, которое исправляет причину.
class SyncJob < ApplicationJob
retry_on Net::ReadTimeout, wait: :polynomially_longer, attempts: 5
discard_on ActiveRecord::RecordNotFound
def perform(id)
RemoteSync.call(Model.find(id))
end
end
Классифицировать ошибки на временные и постоянные, ограничивать попытки и отправлять исчерпанные задания в наблюдаемое хранилище. Это изменение устраняет проблему: журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload.
Разделить обязательную синхронную фиксацию команды и отложенные побочные эффекты; сообщать клиенту реальное промежуточное состояние. Это изменение устраняет проблему: повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину.
Передавать небольшие стабильные идентификаторы, явно решать поведение для отсутствующей/изменившейся записи и версионировать формат аргументов. Это изменение устраняет проблему: повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину.
Классифицировать ошибки на временные и постоянные, ограничивать попытки и отправлять исчерпанные задания в наблюдаемое хранилище. Это изменение устраняет проблему: повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину.
Классифицировать ошибки на временные и постоянные, ограничивать попытки и отправлять исчерпанные задания в наблюдаемое хранилище. Это изменение устраняет проблему: проверка `sent?` перед отправкой подвержена гонке: два worker одновременно увидят false.
Вопрос 19 из 25
Какой подход сохраняет намерение кода и устраняет дефект в теме «Наблюдаемость»? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Наблюдаемость Копировать
# Выберите изменение, которое исправляет причину.
def perform(order_id)
Rails.logger.info(
event: 'receipt_job_started',
job_id: job_id,
order_id: order_id,
executions: executions
)
end
Определить небольшой стабильный набор полей, маскировать чувствительные данные и построить метрики возраста очереди и доли окончательных отказов. Решение адресует следующий дефект: повтор без верхней границы создаёт шторм запросов и удерживает очередь, скрывая первичную причину.
Определить небольшой стабильный набор полей, маскировать чувствительные данные и построить метрики возраста очереди и доли окончательных отказов. Решение адресует следующий дефект: журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload.
Разделить обязательную синхронную фиксацию команды и отложенные побочные эффекты; сообщать клиенту реальное промежуточное состояние. Решение адресует следующий дефект: журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload.
Передавать небольшие стабильные идентификаторы, явно решать поведение для отсутствующей/изменившейся записи и версионировать формат аргументов. Решение адресует следующий дефект: журналирование аргументов целиком может раскрыть персональные данные и раздувать журналы большими payload.
Определить небольшой стабильный набор полей, маскировать чувствительные данные и построить метрики возраста очереди и доли окончательных отказов. Решение адресует следующий дефект: к моменту выполнения запись может быть удалена или изменена, поэтому аргумент id не гарантирует прежнее состояние.