LU Lua  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

OpenResty и Lua в Nginx

Тест по теме «OpenResty и Lua в Nginx» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 25 вопросов, из них 14 содержат фрагменты Lua для OpenResty. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
В чём ключ к разбору строки «local token = ngx.var.http_authorization»? Ответ должен описывать основной механизм раздела «Фазы запроса».
LuaLua · Фазы запроса · разбор 1
local token = ngx.var.http_authorization
if not token then
  return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
ngx.ctx.authenticated = true
Вопрос 2 из 25
Первый пример подтверждает основной путь. Что проверить отдельно? Ищется граничное следствие правила из раздела «Фазы запроса».
LuaLua · Фазы запроса · разбор 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()
Вопрос 3 из 25
Что здесь является частью контракта, а не случайностью текущей записи? Речь идёт о центральном правиле раздела «Фазы запроса».
LuaLua · Фазы запроса · разбор 3
do
  local token = ngx.var.http_authorization
  if not token then
    return ngx.exit(ngx.HTTP_UNAUTHORIZED)
  end
  ngx.ctx.authenticated = true
end
Вопрос 4 из 25
Решение по разделу «Фазы запроса» должно пережить обновление зависимости. Что фиксировать в контракте? Ответ должен выражать проверяемое следствие раздела «Фазы запроса».
Вопрос 5 из 25
Какой вывод о разделе «Фазы запроса» останется верным после смены реализации? Ответ должен охватывать весь раздел «Фазы запроса».
Вопрос 6 из 25
Что нельзя заменить привычкой из другого языка при чтении этого кода? Выберите основное правило раздела «Интерфейс ngx».
LuaLua · Интерфейс ngx · разбор 1
local request_id=ngx.var.request_id
ngx.ctx.started_at=ngx.now()
ngx.header["X-Request-Id"]=request_id
ngx.log(ngx.INFO,"start ",request_id)
Вопрос 7 из 25
Что должен поймать отрицательный тест для этого фрагмента? Выберите именно проверяемую границу раздела «Интерфейс ngx».
LuaLua · Интерфейс ngx · разбор 2
local function reproduce_case()
  local request_id=ngx.var.request_id
  ngx.ctx.started_at=ngx.now()
  ngx.header["X-Request-Id"]=request_id
  ngx.log(ngx.INFO,"start ",request_id)
end
reproduce_case()
Вопрос 8 из 25
Какая гарантия важнее сохранения точной формы кода? Речь идёт о центральном правиле раздела «Интерфейс ngx».
LuaLua · Интерфейс ngx · разбор 3
do
  local request_id=ngx.var.request_id
  ngx.ctx.started_at=ngx.now()
  ngx.header["X-Request-Id"]=request_id
  ngx.log(ngx.INFO,"start ",request_id)
end
Вопрос 9 из 25
Команда сокращает код в разделе «Интерфейс ngx». Как не потерять важное граничное поведение? Выберите практическое следствие раздела «Интерфейс ngx».
Вопрос 10 из 25
Какое описание раздела «Интерфейс ngx» выдерживает и обычный, и граничный сценарий? Ответ должен охватывать весь раздел «Интерфейс ngx».
Вопрос 11 из 25
Какое правило точнее всего описывает происходящее в строке «local red=redis:new(); red:set_timeout(200)»? Ответ должен описывать основной механизм раздела «Неблокирующие сокеты OpenResty».
LuaLua · Неблокирующие сокеты 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)
Вопрос 12 из 25
Что не видно по одному успешному запуску этого кода? Ищется граничное следствие правила из раздела «Неблокирующие сокеты OpenResty».
LuaLua · Неблокирующие сокеты 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()
Вопрос 13 из 25
Код переписывают без изменения внешнего поведения. Какой контракт должен сохраниться? Речь идёт о центральном правиле раздела «Неблокирующие сокеты OpenResty».
LuaLua · Неблокирующие сокеты 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
Вопрос 14 из 25
Команда меняет раздел «Неблокирующие сокеты OpenResty» в рабочем модуле. На какое решение можно опереться при повторном запуске и отказе зависимости? Ответ должен выражать проверяемое следствие раздела «Неблокирующие сокеты OpenResty».
Вопрос 15 из 25
Какой вывод о разделе «Неблокирующие сокеты OpenResty» останется верным после смены реализации? Выберите описание, объединяющее механизм и границу раздела «Неблокирующие сокеты OpenResty».
Вопрос 16 из 25
Что нельзя заменить привычкой из другого языка при чтении этого кода? Выберите основное правило раздела «Кэширование».
LuaLua · Кэширование · разбор 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
Вопрос 17 из 25
Какой риск останется незамеченным, если выполнить код только один раз? Выберите именно проверяемую границу раздела «Кэширование».
LuaLua · Кэширование · разбор 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()
Вопрос 18 из 25
Что нужно проверить после замены реализации? Выберите гарантию, определяющую раздел «Кэширование».
LuaLua · Кэширование · разбор 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
Вопрос 19 из 25
Какое решение по разделу «Кэширование» упростит и проверку, и расследование сбоя? Ответ должен выражать проверяемое следствие раздела «Кэширование».
Вопрос 20 из 25
Какое утверждение о разделе «Кэширование» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Кэширование».
Вопрос 21 из 25
На каком правиле держится поведение этого кода? Нужна именно центральная гарантия раздела «Выбор компромисса».
LuaLua · Выбор компромисса · разбор 1
local res=ngx.location.capture("/internal/user",{args={id=id}})
if res.status~=200 then return ngx.exit(res.status) end
ngx.header.content_type="application/json"
ngx.print(res.body)
Вопрос 22 из 25
Что здесь важнее проверить, чем само отсутствие ошибки? Ищется граничное следствие правила из раздела «Выбор компромисса».
LuaLua · Выбор компромисса · разбор 2
local function reproduce_case()
  local res=ngx.location.capture("/internal/user",{args={id=id}})
  if res.status~=200 then return ngx.exit(res.status) end
  ngx.header.content_type="application/json"
  ngx.print(res.body)
end
reproduce_case()
Вопрос 23 из 25
Внутреннюю реализацию меняют. Что обязано остаться верным снаружи? Речь идёт о центральном правиле раздела «Выбор компромисса».
Вопрос 24 из 25
Команда меняет раздел «Выбор компромисса» в рабочем модуле. На какое решение можно опереться при повторном запуске и отказе зависимости? Выберите практическое следствие раздела «Выбор компромисса».
Вопрос 25 из 25
Что следует считать рабочим контрактом раздела «Выбор компромисса»? Ответ должен охватывать весь раздел «Выбор компромисса».

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

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

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

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