💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 2 из 30
Что следует изменить во входе, чтобы проверить скрытое ограничение? Нужен отрицательный сценарий для раздела «Планировщик».
Lua Lua · Планировщик · разбор 2 Копировать
local function reproduce_case()
local ready={}
local function spawn(fn) ready[#ready+1]=coroutine.create(fn) end
while #ready>0 do
local co=table.remove(ready,1)
local ok,reason=coroutine.resume(co)
if not ok then report(reason) elseif coroutine.status(co)~="dead" then ready[#ready+1]=co end
end
end
reproduce_case()
Второй запуск раздела «Планировщик» нужен, чтобы увидеть: Возможность yield не уменьшает полномочия функции, доступной из окружения.
Второй запуск раздела «Планировщик» нужен, чтобы увидеть: Большое число корутин дешево лишь при коротком состоянии и дисциплине ожиданий.
Второй запуск раздела «Планировщик» нужен, чтобы увидеть: Корутина, которая долго не yield, блокирует весь кооперативный цикл.
Второй запуск раздела «Планировщик» нужен, чтобы увидеть: Ошибка внутри корутины должна попасть владельцу задачи с traceback и контекстом.
Второй запуск раздела «Планировщик» нужен, чтобы увидеть: Ожидание события связывают с регистрацией продолжения и однократным пробуждением.
Вопрос 11 из 30
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Выберите основное правило раздела «Отмена».
Lua Lua · Отмена · разбор 1 Копировать
local task={state="running",cleanups={}}
function task:cancel()
if self.state~="running" then return false end
self.state="cancelled"
for i=#self.cleanups,1,-1 do self.cleanups[i]() end
return true
end
Для фрагмента из раздела «Отмена» верно: Производительность оценивают по длине очередей, задержке пробуждения и объёму работы между yield.
Для фрагмента из раздела «Отмена» верно: Отмена — отдельный переход состояния: задача должна снять таймеры и подписки, закрыть ресурсы и не быть возобновлена поздним событием.
Для фрагмента из раздела «Отмена» верно: Ошибка внутри корутины должна попасть владельцу задачи с traceback и контекстом; проглатывание неуспешного resume оставляет зависшие ожидания и неполное состояние.
Для фрагмента из раздела «Отмена» верно: Планировщик обязан ограничивать источники событий и данные, если задачи недоверенные; возможность yield не уменьшает полномочия функции, доступной из окружения.
Для фрагмента из раздела «Отмена» верно: Планировщик корутин должен явно владеть очередью готовых задач и правилом справедливости; корутина, которая долго не yield, блокирует весь кооперативный цикл.
Вопрос 13 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Выберите гарантию, определяющую раздел «Отмена».
Lua Lua · Отмена · разбор 3 Копировать
do
local task={state="running",cleanups={}}
function task:cancel()
if self.state~="running" then return false end
self.state="cancelled"
for i=#self.cleanups,1,-1 do self.cleanups[i]() end
return true
end
end
При замене внутренних шагов раздела «Отмена» остаётся гарантия: Отмена — отдельный переход состояния: задача должна снять таймеры и подписки, закрыть ресурсы и не быть возобновлена поздним событием.
При замене внутренних шагов раздела «Отмена» остаётся гарантия: Производительность оценивают по длине очередей, задержке пробуждения и объёму работы между yield.
При замене внутренних шагов раздела «Отмена» остаётся гарантия: Планировщик корутин должен явно владеть очередью готовых задач и правилом справедливости; корутина, которая долго не yield, блокирует весь кооперативный цикл.
При замене внутренних шагов раздела «Отмена» остаётся гарантия: Ошибка внутри корутины должна попасть владельцу задачи с traceback и контекстом; проглатывание неуспешного resume оставляет зависшие ожидания и неполное состояние.
При замене внутренних шагов раздела «Отмена» остаётся гарантия: Планировщик обязан ограничивать источники событий и данные, если задачи недоверенные; возможность yield не уменьшает полномочия функции, доступной из окружения.