💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 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 не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
На другом входе раздела «Компиляция чанка» нужно проверить: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
На другом входе раздела «Компиляция чанка» нужно проверить: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
На другом входе раздела «Компиляция чанка» нужно проверить: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
На другом входе раздела «Компиляция чанка» нужно проверить: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
Вопрос 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 как готовых значений и может удалить отладочную информацию.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Результат кода в разделе «Совместимость версий» объясняет утверждение: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
Вопрос 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()
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Регрессионная проверка раздела «Совместимость версий» наблюдает следующее: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Вопрос 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
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
При замене внутренних шагов раздела «Совместимость версий» остаётся гарантия: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
Вопрос 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
Для этого кода в разделе «Дамп функций» нужно учитывать: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию.
Для этого кода в разделе «Дамп функций» нужно учитывать: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку.
Для этого кода в разделе «Дамп функций» нужно учитывать: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию.
Для этого кода в разделе «Дамп функций» нужно учитывать: Отдельное окружение нужно передать до выполнения, иначе chunk получает доступ к нежелательным глобальным значениям.
Для этого кода в разделе «Дамп функций» нужно учитывать: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел.
Вопрос 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)
Для этого кода в разделе «Риски загрузки» нужно учитывать: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Для этого кода в разделе «Риски загрузки» нужно учитывать: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Для этого кода в разделе «Риски загрузки» нужно учитывать: Загрузка байткода из недоверенного источника опасна: проверка 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()
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Второй запуск раздела «Риски загрузки» нужен, чтобы увидеть: Байткод 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))
Строку из раздела «Сопровождение проекта» нужно читать так: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Строку из раздела «Сопровождение проекта» нужно читать так: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Строку из раздела «Сопровождение проекта» нужно читать так: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Строку из раздела «Сопровождение проекта» нужно читать так: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
Строку из раздела «Сопровождение проекта» нужно читать так: Загрузка байткода из недоверенного источника опасна: проверка 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()
Повторный запуск в разделе «Сопровождение проекта» должен выявить: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
Повторный запуск в разделе «Сопровождение проекта» должен выявить: Байткод 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
В разделе «Сопровождение проекта» нельзя потерять правило: Предкомпиляция сокращает часть времени разбора, но не загрузку зависимостей и инициализацию; выгоду измеряют на холодном старте конкретной системы.
В разделе «Сопровождение проекта» нельзя потерять правило: string.dump сохраняет функцию без её upvalues как готовых значений и может удалить отладочную информацию; восстановленной функции требуется заново предоставить окружение и внешнее состояние.
В разделе «Сопровождение проекта» нельзя потерять правило: Байткод Lua не является переносимым форматом между версиями, сборками, архитектурами и настройками чисел; распространять его как универсальный модуль нельзя.
В разделе «Сопровождение проекта» нельзя потерять правило: Загрузка байткода из недоверенного источника опасна: проверка mode="t" запрещает бинарный chunk, а криптографическая проверка происхождения нужна для артефактов выпуска.
В разделе «Сопровождение проекта» нельзя потерять правило: Сопровождение байткода требует хранить исходники, версию компилятора и воспроизводимую сборку; бинарный файл без трассировки и карты версии затрудняет расследование.