💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 2 из 25
Первый пример подтверждает основной путь. Что проверить отдельно? Ищется граничное следствие правила из раздела «Фазы запроса».
Lua Lua · Фазы запроса · разбор 2 Копировать
local function reproduce_case()
local token = ngx.var.http_authorization
if not token then
return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
ngx.ctx.authenticated = true
end
reproduce_case()
Граничный тест раздела «Фазы запроса» должен показать: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Граничный тест раздела «Фазы запроса» должен показать: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Граничный тест раздела «Фазы запроса» должен показать: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Граничный тест раздела «Фазы запроса» должен показать: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Граничный тест раздела «Фазы запроса» должен показать: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Вопрос 4 из 25
Решение по разделу «Фазы запроса» должно пережить обновление зависимости. Что фиксировать в контракте? Ответ должен выражать проверяемое следствие раздела «Фазы запроса».
Надёжный интерфейс раздела «Фазы запроса» исходит из условия: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Надёжный интерфейс раздела «Фазы запроса» исходит из условия: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Надёжный интерфейс раздела «Фазы запроса» исходит из условия: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Надёжный интерфейс раздела «Фазы запроса» исходит из условия: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Надёжный интерфейс раздела «Фазы запроса» исходит из условия: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Вопрос 5 из 25
Какой вывод о разделе «Фазы запроса» останется верным после смены реализации? Ответ должен охватывать весь раздел «Фазы запроса».
Механизм и граница раздела «Фазы запроса» описываются так: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Механизм и граница раздела «Фазы запроса» описываются так: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Механизм и граница раздела «Фазы запроса» описываются так: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Механизм и граница раздела «Фазы запроса» описываются так: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Механизм и граница раздела «Фазы запроса» описываются так: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Вопрос 11 из 25
Какое правило точнее всего описывает происходящее в строке «local red=redis:new(); red:set_timeout(200)»? Ответ должен описывать основной механизм раздела «Неблокирующие сокеты OpenResty».
Lua Lua · Неблокирующие сокеты OpenResty · разбор 1 Копировать
local redis=require("resty.redis")
local red=redis:new(); red:set_timeout(200)
local ok,err=red:connect("127.0.0.1",6379)
if not ok then return ngx.exit(503) end
local value=assert(red:get(key))
red:set_keepalive(10000,100)
Результат кода в разделе «Неблокирующие сокеты OpenResty» объясняет утверждение: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Результат кода в разделе «Неблокирующие сокеты OpenResty» объясняет утверждение: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Результат кода в разделе «Неблокирующие сокеты OpenResty» объясняет утверждение: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости.
Результат кода в разделе «Неблокирующие сокеты OpenResty» объясняет утверждение: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Результат кода в разделе «Неблокирующие сокеты OpenResty» объясняет утверждение: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью.
Вопрос 12 из 25
Что не видно по одному успешному запуску этого кода? Ищется граничное следствие правила из раздела «Неблокирующие сокеты OpenResty».
Lua Lua · Неблокирующие сокеты OpenResty · разбор 2 Копировать
local function reproduce_case()
local redis=require("resty.redis")
local red=redis:new(); red:set_timeout(200)
local ok,err=red:connect("127.0.0.1",6379)
if not ok then return ngx.exit(503) end
local value=assert(red:get(key))
red:set_keepalive(10000,100)
end
reproduce_case()
Для раздела «Неблокирующие сокеты OpenResty» отдельным тестом подтверждают: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью.
Для раздела «Неблокирующие сокеты OpenResty» отдельным тестом подтверждают: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Для раздела «Неблокирующие сокеты OpenResty» отдельным тестом подтверждают: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости.
Для раздела «Неблокирующие сокеты OpenResty» отдельным тестом подтверждают: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Для раздела «Неблокирующие сокеты OpenResty» отдельным тестом подтверждают: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Вопрос 13 из 25
Код переписывают без изменения внешнего поведения. Какой контракт должен сохраниться? Речь идёт о центральном правиле раздела «Неблокирующие сокеты OpenResty».
Lua Lua · Неблокирующие сокеты OpenResty · разбор 3 Копировать
do
local redis=require("resty.redis")
local red=redis:new(); red:set_timeout(200)
local ok,err=red:connect("127.0.0.1",6379)
if not ok then return ngx.exit(503) end
local value=assert(red:get(key))
red:set_keepalive(10000,100)
end
Эквивалентный рефакторинг раздела «Неблокирующие сокеты OpenResty» сохраняет следующее: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Эквивалентный рефакторинг раздела «Неблокирующие сокеты OpenResty» сохраняет следующее: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости.
Эквивалентный рефакторинг раздела «Неблокирующие сокеты OpenResty» сохраняет следующее: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Эквивалентный рефакторинг раздела «Неблокирующие сокеты OpenResty» сохраняет следующее: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Эквивалентный рефакторинг раздела «Неблокирующие сокеты OpenResty» сохраняет следующее: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью.
Вопрос 16 из 25
Что нельзя заменить привычкой из другого языка при чтении этого кода? Выберите основное правило раздела «Кэширование».
Lua Lua · Кэширование · разбор 1 Копировать
local dict=ngx.shared.tokens
local value=dict:get(key)
if not value then
value=load_token(key)
dict:set(key,value,30)
end
return value
Строку из раздела «Кэширование» нужно читать так: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Строку из раздела «Кэширование» нужно читать так: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Строку из раздела «Кэширование» нужно читать так: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Строку из раздела «Кэширование» нужно читать так: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Строку из раздела «Кэширование» нужно читать так: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Вопрос 17 из 25
Какой риск останется незамеченным, если выполнить код только один раз? Выберите именно проверяемую границу раздела «Кэширование».
Lua Lua · Кэширование · разбор 2 Копировать
local function reproduce_case()
local dict=ngx.shared.tokens
local value=dict:get(key)
if not value then
value=load_token(key)
dict:set(key,value,30)
end
return value
end
reproduce_case()
Для раздела «Кэширование» отдельным тестом подтверждают: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Для раздела «Кэширование» отдельным тестом подтверждают: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Для раздела «Кэширование» отдельным тестом подтверждают: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Для раздела «Кэширование» отдельным тестом подтверждают: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Для раздела «Кэширование» отдельным тестом подтверждают: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Вопрос 18 из 25
Что нужно проверить после замены реализации? Выберите гарантию, определяющую раздел «Кэширование».
Lua Lua · Кэширование · разбор 3 Копировать
do
local dict=ngx.shared.tokens
local value=dict:get(key)
if not value then
value=load_token(key)
dict:set(key,value,30)
end
return value
end
При замене внутренних шагов раздела «Кэширование» остаётся гарантия: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
При замене внутренних шагов раздела «Кэширование» остаётся гарантия: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
При замене внутренних шагов раздела «Кэширование» остаётся гарантия: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
При замене внутренних шагов раздела «Кэширование» остаётся гарантия: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
При замене внутренних шагов раздела «Кэширование» остаётся гарантия: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Вопрос 19 из 25
Какое решение по разделу «Кэширование» упростит и проверку, и расследование сбоя? Ответ должен выражать проверяемое следствие раздела «Кэширование».
Проверяемое решение раздела «Кэширование» признаёт следующее: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Проверяемое решение раздела «Кэширование» признаёт следующее: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Проверяемое решение раздела «Кэширование» признаёт следующее: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Проверяемое решение раздела «Кэширование» признаёт следующее: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Проверяемое решение раздела «Кэширование» признаёт следующее: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Вопрос 20 из 25
Какое утверждение о разделе «Кэширование» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Кэширование».
Для раздела «Кэширование» верно: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Для раздела «Кэширование» верно: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Для раздела «Кэширование» верно: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Для раздела «Кэширование» верно: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.
Для раздела «Кэширование» верно: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Вопрос 25 из 25
Что следует считать рабочим контрактом раздела «Выбор компромисса»? Ответ должен охватывать весь раздел «Выбор компромисса».
Раздел «Выбор компромисса» корректно описывает утверждение: ngx.var, ngx.req, ngx.header и ngx.ctx имеют разные стоимость и область жизни; ngx.ctx относится к запросу и не заменяет общую память между воркерами.
Раздел «Выбор компромисса» корректно описывает утверждение: Выбор между подзапросом, cosocket и проксированием зависит от фаз, потоковой передачи, повторного использования соединений и наблюдаемости; самый короткий Lua-код не всегда дешевле для Nginx.
Раздел «Выбор компромисса» корректно описывает утверждение: Кэш между запросами строят через lua_shared_dict, внешний сервис или worker-local структуру с ясной согласованностью; обычная модульная таблица не разделяется между воркерами.
Раздел «Выбор компромисса» корректно описывает утверждение: Cosocket даёт неблокирующий интерфейс только в поддерживаемом контексте; обычный LuaSocket или блокирующая C-функция останавливают весь worker Nginx.
Раздел «Выбор компромисса» корректно описывает утверждение: Код OpenResty выполняется в конкретной фазе запроса; доступность API и допустимость yield зависят от фазы, поэтому перенос вызова между init, rewrite, access, content и filter требует проверки.