LU Lua  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Байткод и загрузка модулей

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Результат здесь задаёт не соглашение проекта, а правило языка. Какое? Выберите основное правило раздела «Компиляция чанка».
LuaLua · Компиляция чанка · разбор 1
local env={math=math,print=print}
local chunk,err=load(source,"plugin","t",env)
assert(chunk,err)
local ok,result=pcall(chunk)
print(ok,result)
Вопрос 2 из 30
Какой риск останется незамеченным, если выполнить код только один раз? Ищется граничное следствие правила из раздела «Компиляция чанка».
LuaLua · Компиляция чанка · разбор 2
local function reproduce_case()
  local env={math=math,print=print}
  local chunk,err=load(source,"plugin","t",env)
  assert(chunk,err)
  local ok,result=pcall(chunk)
  print(ok,result)
end
reproduce_case()
Вопрос 3 из 30
Что нужно проверить после замены реализации? Речь идёт о центральном правиле раздела «Компиляция чанка».
LuaLua · Компиляция чанка · разбор 3
do
  local env={math=math,print=print}
  local chunk,err=load(source,"plugin","t",env)
  assert(chunk,err)
  local ok,result=pcall(chunk)
  print(ok,result)
end
Вопрос 4 из 30
Что стоит зафиксировать до расширения функциональности раздела «Компиляция чанка»? Ответ должен выражать проверяемое следствие раздела «Компиляция чанка».
Вопрос 5 из 30
Какое утверждение о разделе «Компиляция чанка» полезно и при чтении кода, и при ревью? Нужна полная формулировка раздела «Компиляция чанка».
Вопрос 6 из 30
Какое правило останется верным на другом входе этого же фрагмента? Выберите основное правило раздела «Совместимость версий».
LuaLua · Совместимость версий · разбор 1
local blob=read_file("module.luac")
local chunk,err=load(blob,"module","b",env)
if not chunk then return nil,{runtime=_VERSION,cause=err} end
Вопрос 7 из 30
Что следует изменить во входе, чтобы проверить скрытое ограничение? Ищется граничное следствие правила из раздела «Совместимость версий».
LuaLua · Совместимость версий · разбор 2
local function reproduce_case()
  local blob=read_file("module.luac")
  local chunk,err=load(blob,"module","b",env)
  if not chunk then return nil,{runtime=_VERSION,cause=err} end
end
reproduce_case()
Вопрос 8 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «Совместимость версий».
LuaLua · Совместимость версий · разбор 3
do
  local blob=read_file("module.luac")
  local chunk,err=load(blob,"module","b",env)
  if not chunk then return nil,{runtime=_VERSION,cause=err} end
end
Вопрос 9 из 30
В модуле меняют «Совместимость версий» и хотят сохранить диагностируемость. Какой подход надёжнее? Нужна эксплуатационная граница раздела «Совместимость версий».
Вопрос 10 из 30
Что помогает не переносить в раздел «Совместимость версий» привычки из другого языка или среды? Нужна полная формулировка раздела «Совместимость версий».
Вопрос 11 из 30
Какой механизм показан в строке «local restored=assert(load(dumped,"scale","b",{}))»? Ответ должен описывать основной механизм раздела «Дамп функций».
LuaLua · Дамп функций · разбор 1
local factor=3
local function scale(x) return x*factor end
local dumped=string.dump(scale,true)
local restored=assert(load(dumped,"scale","b",{}))
-- upvalue restored separately before call
Вопрос 12 из 30
Какое наблюдение нужно зафиксировать при повторном вызове? Ищется граничное следствие правила из раздела «Дамп функций».
LuaLua · Дамп функций · разбор 2
local function reproduce_case()
  local factor=3
  local function scale(x) return x*factor end
  local dumped=string.dump(scale,true)
  local restored=assert(load(dumped,"scale","b",{}))
  -- upvalue restored separately before call
end
reproduce_case()
Вопрос 13 из 30
Какой инвариант нельзя потерять при упрощении этого фрагмента? Речь идёт о центральном правиле раздела «Дамп функций».
LuaLua · Дамп функций · разбор 3
do
  local factor=3
  local function scale(x) return x*factor end
  local dumped=string.dump(scale,true)
  local restored=assert(load(dumped,"scale","b",{}))
  -- upvalue restored separately before call
end
Вопрос 14 из 30
В ревью обсуждают «Дамп функций». Какое утверждение действительно влияет на надёжность решения? Нужна эксплуатационная граница раздела «Дамп функций».
Вопрос 15 из 30
Какое описание раздела «Дамп функций» выдерживает и обычный, и граничный сценарий? Нужна полная формулировка раздела «Дамп функций».
Вопрос 16 из 30
Какой механизм показан в строке «local chunk,err=load(untrusted,"upload","t",sandbox)»? Нужна именно центральная гарантия раздела «Риски загрузки».
LuaLua · Риски загрузки · разбор 1
local chunk,err=load(untrusted,"upload","t",sandbox)
if not chunk then return reject(err) end
return run_with_limits(chunk)
Вопрос 17 из 30
Какой крайний случай важнее всего добавить к проверке? Нужен отрицательный сценарий для раздела «Риски загрузки».
LuaLua · Риски загрузки · разбор 2
local function reproduce_case()
  local chunk,err=load(untrusted,"upload","t",sandbox)
  if not chunk then return reject(err) end
  return run_with_limits(chunk)
end
reproduce_case()
Вопрос 18 из 30
Что должно пережить замену вспомогательных функций и имён переменных? Речь идёт о центральном правиле раздела «Риски загрузки».
LuaLua · Риски загрузки · разбор 3
do
  local chunk,err=load(untrusted,"upload","t",sandbox)
  if not chunk then return reject(err) end
  return run_with_limits(chunk)
end
Вопрос 19 из 30
Новый интерфейс скрывает детали раздела «Риски загрузки». Что всё равно должно быть явно проверяемо? Ответ должен выражать проверяемое следствие раздела «Риски загрузки».
Вопрос 20 из 30
Какое утверждение о разделе «Риски загрузки» точно и не обещает лишнего? Нужна полная формулировка раздела «Риски загрузки».
Вопрос 21 из 30
Что нужно знать о Lua, прежде чем предсказывать результат этого кода? Ответ должен описывать основной механизм раздела «Границы применимости».
LuaLua · Границы применимости · разбор 1
local started=clock()
local chunk=assert(loadfile(path,"t",env))
local compile_ms=(clock()-started)*1000
started=clock(); chunk(); local init_ms=(clock()-started)*1000
print(compile_ms,init_ms)
Вопрос 22 из 30
Какую границу стоит сделать явной в регрессионной проверке? Выберите именно проверяемую границу раздела «Границы применимости».
LuaLua · Границы применимости · разбор 2
local function reproduce_case()
  local started=clock()
  local chunk=assert(loadfile(path,"t",env))
  local compile_ms=(clock()-started)*1000
  started=clock(); chunk(); local init_ms=(clock()-started)*1000
  print(compile_ms,init_ms)
end
reproduce_case()
Вопрос 23 из 30
Какое правило должно остаться наблюдаемым после правки? Речь идёт о центральном правиле раздела «Границы применимости».
LuaLua · Границы применимости · разбор 3
do
  local started=clock()
  local chunk=assert(loadfile(path,"t",env))
  local compile_ms=(clock()-started)*1000
  started=clock(); chunk(); local init_ms=(clock()-started)*1000
  print(compile_ms,init_ms)
end
Вопрос 24 из 30
Решение по разделу «Границы применимости» должно пережить обновление зависимости. Что фиксировать в контракте? Выберите практическое следствие раздела «Границы применимости».
Вопрос 25 из 30
Какое правило раздела «Границы применимости» стоит закрепить в тестах? Выберите описание, объединяющее механизм и границу раздела «Границы применимости».
Вопрос 26 из 30
Что нельзя заменить привычкой из другого языка при чтении этого кода? Нужна именно центральная гарантия раздела «Сопровождение проекта».
LuaLua · Сопровождение проекта · разбор 1
build = {lua_version=_VERSION,compiler_hash=sha256(luac_path),
         source_hash=sha256(source),strip_debug=true}
write_json("module.luac.meta.json",build)
write_file("module.luac",string.dump(assert(load(source)),true))
Вопрос 27 из 30
Какое допущение здесь опасно оставлять без повторного запуска? Ищется граничное следствие правила из раздела «Сопровождение проекта».
LuaLua · Сопровождение проекта · разбор 2
local function reproduce_case()
  build = {lua_version=_VERSION,compiler_hash=sha256(luac_path),
           source_hash=sha256(source),strip_debug=true}
  write_json("module.luac.meta.json",build)
  write_file("module.luac",string.dump(assert(load(source)),true))
end
reproduce_case()
Вопрос 28 из 30
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Сопровождение проекта».
LuaLua · Сопровождение проекта · разбор 3
do
  build = {lua_version=_VERSION,compiler_hash=sha256(luac_path),
           source_hash=sha256(source),strip_debug=true}
  write_json("module.luac.meta.json",build)
  write_file("module.luac",string.dump(assert(load(source)),true))
end
Вопрос 29 из 30
Код по разделу «Сопровождение проекта» уходит в эксплуатацию. Какое ограничение нельзя прятать внутри реализации? Ответ должен выражать проверяемое следствие раздела «Сопровождение проекта».
Вопрос 30 из 30
Какое правило лучше всего описывает границы раздела «Сопровождение проекта»? Ответ должен охватывать весь раздел «Сопровождение проекта».

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

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

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

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