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

Сериализация конфигурации

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Нужна именно центральная гарантия раздела «Таблицы данных».
LuaLua · Таблицы данных · разбор 1
local config={host="127.0.0.1",port=8080,features={cache=true}}
assert(type(config.host)=="string")
assert(type(config.port)=="number")
Вопрос 2 из 25
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Нужен отрицательный сценарий для раздела «Таблицы данных».
LuaLua · Таблицы данных · разбор 2
local function reproduce_case()
  local config={host="127.0.0.1",port=8080,features={cache=true}}
  assert(type(config.host)=="string")
  assert(type(config.port)=="number")
end
reproduce_case()
Вопрос 3 из 25
Какой результат обязан подтверждать регрессионный тест после правки? Нужен основной контракт раздела «Таблицы данных».
LuaLua · Таблицы данных · разбор 3
do
  local config={host="127.0.0.1",port=8080,features={cache=true}}
  assert(type(config.host)=="string")
  assert(type(config.port)=="number")
end
Вопрос 4 из 25
Команда сокращает код в разделе «Таблицы данных». Как не потерять важное граничное поведение? Выберите практическое следствие раздела «Таблицы данных».
Вопрос 5 из 25
Какой вывод о разделе «Таблицы данных» останется верным после смены реализации? Выберите описание, объединяющее механизм и границу раздела «Таблицы данных».
Вопрос 6 из 25
Какой контракт языка проявляется в этом примере? Нужна именно центральная гарантия раздела «Формат JSON».
LuaLua · Формат JSON · разбор 1
local json=require("cjson.safe")
local raw=json.encode({items={},enabled=true})
local value,err=json.decode(raw)
print(value and value.enabled,err)
Вопрос 7 из 25
Где этот код может повести себя иначе на границе? Нужен отрицательный сценарий для раздела «Формат JSON».
LuaLua · Формат JSON · разбор 2
local function reproduce_case()
  local json=require("cjson.safe")
  local raw=json.encode({items={},enabled=true})
  local value,err=json.decode(raw)
  print(value and value.enabled,err)
end
reproduce_case()
Вопрос 8 из 25
Какой инвариант нельзя потерять при упрощении этого фрагмента? Речь идёт о центральном правиле раздела «Формат JSON».
LuaLua · Формат JSON · разбор 3
do
  local json=require("cjson.safe")
  local raw=json.encode({items={},enabled=true})
  local value,err=json.decode(raw)
  print(value and value.enabled,err)
end
Вопрос 9 из 25
Какой принцип сделает реализацию «Формат JSON» устойчивой, а не просто удачной на одном примере? Ответ должен выражать проверяемое следствие раздела «Формат JSON».
Вопрос 10 из 25
Какое утверждение о разделе «Формат JSON» полезно и при чтении кода, и при ревью? Нужна полная формулировка раздела «Формат JSON».
Вопрос 11 из 25
Какое правило останется верным на другом входе этого же фрагмента? Выберите основное правило раздела «Циклические ссылки».
LuaLua · Циклические ссылки · разбор 1
local function encode(value,seen)
  seen=seen or {}
  if type(value)~="table" then return scalar(value) end
  if seen[value] then error("cycle") end
  seen[value]=true
  local out=encode_table(value,seen)
  seen[value]=nil
  return out
end
Вопрос 12 из 25
Где этот код может повести себя иначе на границе? Ищется граничное следствие правила из раздела «Циклические ссылки».
LuaLua · Циклические ссылки · разбор 2
local function reproduce_case()
  local function encode(value,seen)
    seen=seen or {}
    if type(value)~="table" then return scalar(value) end
    if seen[value] then error("cycle") end
    seen[value]=true
    local out=encode_table(value,seen)
    seen[value]=nil
    return out
  end
end
reproduce_case()
Вопрос 13 из 25
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «Циклические ссылки».
LuaLua · Циклические ссылки · разбор 3
do
  local function encode(value,seen)
    seen=seen or {}
    if type(value)~="table" then return scalar(value) end
    if seen[value] then error("cycle") end
    seen[value]=true
    local out=encode_table(value,seen)
    seen[value]=nil
    return out
  end
end
Вопрос 14 из 25
В ревью обсуждают «Циклические ссылки». Какое утверждение действительно влияет на надёжность решения? Выберите практическое следствие раздела «Циклические ссылки».
Вопрос 15 из 25
Какое описание раздела «Циклические ссылки» выдерживает и обычный, и граничный сценарий? Ответ должен охватывать весь раздел «Циклические ссылки».
Вопрос 16 из 25
Что из перечисленного относится именно к показанному фрагменту? Выберите основное правило раздела «Безопасная загрузка».
LuaLua · Безопасная загрузка · разбор 1
local data,err=json.decode(read_file(path))
assert(data,err)
assert(type(data.timeout)=="number" and data.timeout>=0 and data.timeout<=30)
apply_config(data)
Вопрос 17 из 25
Где этот код может повести себя иначе на границе? Выберите именно проверяемую границу раздела «Безопасная загрузка».
LuaLua · Безопасная загрузка · разбор 2
local function reproduce_case()
  local data,err=json.decode(read_file(path))
  assert(data,err)
  assert(type(data.timeout)=="number" and data.timeout>=0 and data.timeout<=30)
  apply_config(data)
end
reproduce_case()
Вопрос 18 из 25
Внутреннюю реализацию меняют. Что обязано остаться верным снаружи? Нужен основной контракт раздела «Безопасная загрузка».
LuaLua · Безопасная загрузка · разбор 3
do
  local data,err=json.decode(read_file(path))
  assert(data,err)
  assert(type(data.timeout)=="number" and data.timeout>=0 and data.timeout<=30)
  apply_config(data)
end
Вопрос 19 из 25
Какой принцип сделает реализацию «Безопасная загрузка» устойчивой, а не просто удачной на одном примере? Ответ должен выражать проверяемое следствие раздела «Безопасная загрузка».
Вопрос 20 из 25
Какое утверждение о разделе «Безопасная загрузка» полезно и при чтении кода, и при ревью? Ответ должен охватывать весь раздел «Безопасная загрузка».
Вопрос 21 из 25
В чём ключ к разбору строки «assert(allowed[k],"unknown field: "..tostring(k))»? Ответ должен описывать основной механизм раздела «Безопасность данных».
LuaLua · Безопасность данных · разбор 1
local allowed={host=true,port=true,tls=true}
for k in pairs(config) do
  assert(allowed[k],"unknown field: "..tostring(k))
end
assert(#serialized_config < 1024*1024)
Вопрос 22 из 25
Какая проверка отделит устойчивый контракт от удачного совпадения? Выберите именно проверяемую границу раздела «Безопасность данных».
LuaLua · Безопасность данных · разбор 2
local function reproduce_case()
  local allowed={host=true,port=true,tls=true}
  for k in pairs(config) do
    assert(allowed[k],"unknown field: "..tostring(k))
  end
  assert(#serialized_config < 1024*1024)
end
reproduce_case()
Вопрос 23 из 25
Что нельзя считать деталью реализации в этом коде? Выберите гарантию, определяющую раздел «Безопасность данных».
Вопрос 24 из 25
Нужно сделать поведение «Безопасность данных» предсказуемым для следующего разработчика. Что выбрать? Нужна эксплуатационная граница раздела «Безопасность данных».
Вопрос 25 из 25
Какой вариант точнее всего передаёт смысл раздела «Безопасность данных»? Выберите описание, объединяющее механизм и границу раздела «Безопасность данных».

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

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

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

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