💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Результат здесь задаёт не соглашение проекта, а правило языка. Какое? Выберите основное правило раздела «Компиляция чанка».
Lua Lua · Компиляция чанка · разбор 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)
Строку из раздела «Компиляция чанка» нужно читать так: Бинарный файл без трассировки и карты версии затрудняет расследование.
Строку из раздела «Компиляция чанка» нужно читать так: Восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Строку из раздела «Компиляция чанка» нужно читать так: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Строку из раздела «Компиляция чанка» нужно читать так: load компилирует текстовый или бинарный chunk и возвращает функцию либо ошибку.
Строку из раздела «Компиляция чанка» нужно читать так: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Вопрос 2 из 30
Какой риск останется незамеченным, если выполнить код только один раз? Ищется граничное следствие правила из раздела «Компиляция чанка».
Lua Lua · Компиляция чанка · разбор 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()
На другом входе раздела «Компиляция чанка» нужно проверить: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
На другом входе раздела «Компиляция чанка» нужно проверить: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
На другом входе раздела «Компиляция чанка» нужно проверить: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
На другом входе раздела «Компиляция чанка» нужно проверить: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
На другом входе раздела «Компиляция чанка» нужно проверить: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
Вопрос 3 из 30
Что нужно проверить после замены реализации? Речь идёт о центральном правиле раздела «Компиляция чанка».
Lua Lua · Компиляция чанка · разбор 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
Внешнее поведение раздела «Компиляция чанка» сохраняется при условии: Восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Внешнее поведение раздела «Компиляция чанка» сохраняется при условии: load компилирует текстовый или бинарный chunk и возвращает функцию либо ошибку.
Внешнее поведение раздела «Компиляция чанка» сохраняется при условии: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Внешнее поведение раздела «Компиляция чанка» сохраняется при условии: Бинарный файл без трассировки и карты версии затрудняет расследование.
Внешнее поведение раздела «Компиляция чанка» сохраняется при условии: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Вопрос 6 из 30
Какое правило останется верным на другом входе этого же фрагмента? Выберите основное правило раздела «Совместимость версий».
Lua Lua · Совместимость версий · разбор 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
Результат кода в разделе «Совместимость версий» объясняет утверждение: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Вопрос 7 из 30
Что следует изменить во входе, чтобы проверить скрытое ограничение? Ищется граничное следствие правила из раздела «Совместимость версий».
Lua Lua · Совместимость версий · разбор 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()
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Вопрос 8 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «Совместимость версий».
Lua Lua · Совместимость версий · разбор 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
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
Вопрос 11 из 30
Какой механизм показан в строке «local restored=assert(load(dumped,"scale","b",{}))»? Ответ должен описывать основной механизм раздела «Дамп функций».
Lua Lua · Дамп функций · разбор 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
Для этого кода в разделе «Дамп функций» нужно учитывать: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Для этого кода в разделе «Дамп функций» нужно учитывать: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
Для этого кода в разделе «Дамп функций» нужно учитывать: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
Для этого кода в разделе «Дамп функций» нужно учитывать: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
Для этого кода в разделе «Дамп функций» нужно учитывать: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Вопрос 16 из 30
Какой механизм показан в строке «local chunk,err=load(untrusted,"upload","t",sandbox)»? Нужна именно центральная гарантия раздела «Риски загрузки».
Lua Lua · Риски загрузки · разбор 1 Копировать
local chunk,err=load(untrusted,"upload","t",sandbox)
if not chunk then return reject(err) end
return run_with_limits(chunk)
Для этого кода в разделе «Риски загрузки» нужно учитывать: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Вопрос 17 из 30
Какой крайний случай важнее всего добавить к проверке? Нужен отрицательный сценарий для раздела «Риски загрузки».
Lua Lua · Риски загрузки · разбор 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()
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Вопрос 26 из 30
Что нельзя заменить привычкой из другого языка при чтении этого кода? Нужна именно центральная гарантия раздела «Сопровождение проекта».
Lua Lua · Сопровождение проекта · разбор 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))
Строку из раздела «Сопровождение проекта» нужно читать так: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Строку из раздела «Сопровождение проекта» нужно читать так: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Строку из раздела «Сопровождение проекта» нужно читать так: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Строку из раздела «Сопровождение проекта» нужно читать так: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Строку из раздела «Сопровождение проекта» нужно читать так: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Вопрос 27 из 30
Какое допущение здесь опасно оставлять без повторного запуска? Ищется граничное следствие правила из раздела «Сопровождение проекта».
Lua Lua · Сопровождение проекта · разбор 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()
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Вопрос 28 из 30
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Сопровождение проекта».
Lua Lua · Сопровождение проекта · разбор 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
В разделе «Сопровождение проекта» нельзя потерять правило: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
В разделе «Сопровождение проекта» нельзя потерять правило: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
В разделе «Сопровождение проекта» нельзя потерять правило: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
В разделе «Сопровождение проекта» нельзя потерять правило: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
В разделе «Сопровождение проекта» нельзя потерять правило: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.