💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 3 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Выберите гарантию, определяющую раздел «JIT-компиляция».
Lua Lua · JIT-компиляция · разбор 3 Копировать
do
local jit=require("jit")
local util=require("jit.util")
for i=1,100000 do hot_path(i%3) end
print(jit.status(),util.traceinfo(1))
end
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: Критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: FFI тесно связан с LuaJIT и ABI платформы; код на стандартном Lua, другой архитектуре или Windows может потребовать иной путь реализации.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Вопрос 5 из 30
Что помогает не переносить в раздел «JIT-компиляция» привычки из другого языка или среды? Нужна полная формулировка раздела «JIT-компиляция».
При проектировании раздела «JIT-компиляция» нужно помнить: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
При проектировании раздела «JIT-компиляция» нужно помнить: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
При проектировании раздела «JIT-компиляция» нужно помнить: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
При проектировании раздела «JIT-компиляция» нужно помнить: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
При проектировании раздела «JIT-компиляция» нужно помнить: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 6 из 30
Почему этот фрагмент ведёт себя именно так? Нужна именно центральная гарантия раздела «FFI-типы».
Lua Lua · FFI-типы · разбор 1 Копировать
local ffi=require("ffi")
ffi.cdef[[typedef struct { int x; int y; } Point;
int distance2(const Point *p);]]
local lib=ffi.load("geometry")
local p=ffi.new("Point",{3,4})
print(lib.distance2(p))
Центральный механизм раздела «FFI-типы»: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Центральный механизм раздела «FFI-типы»: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Центральный механизм раздела «FFI-типы»: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Центральный механизм раздела «FFI-типы»: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Центральный механизм раздела «FFI-типы»: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 7 из 30
Какой отказ должен быть воспроизводимым в тесте? Выберите именно проверяемую границу раздела «FFI-типы».
Lua Lua · FFI-типы · разбор 2 Копировать
local function reproduce_case()
local ffi=require("ffi")
ffi.cdef[[typedef struct { int x; int y; } Point;
int distance2(const Point *p);]]
local lib=ffi.load("geometry")
local p=ffi.new("Point",{3,4})
print(lib.distance2(p))
end
reproduce_case()
Скрытая граница раздела «FFI-типы» проявляется так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Скрытая граница раздела «FFI-типы» проявляется так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Скрытая граница раздела «FFI-типы» проявляется так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Скрытая граница раздела «FFI-типы» проявляется так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Скрытая граница раздела «FFI-типы» проявляется так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Вопрос 8 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «FFI-типы».
Lua Lua · FFI-типы · разбор 3 Копировать
do
local ffi=require("ffi")
ffi.cdef[[typedef struct { int x; int y; } Point;
int distance2(const Point *p);]]
local lib=ffi.load("geometry")
local p=ffi.new("Point",{3,4})
print(lib.distance2(p))
end
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Вопрос 9 из 30
В проекте пересматривают «FFI-типы». Какое правило лучше выразить в интерфейсе, а не оставлять устной договорённостью? Выберите практическое следствие раздела «FFI-типы».
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 10 из 30
Какой вывод о разделе «FFI-типы» останется верным после смены реализации? Нужна полная формулировка раздела «FFI-типы».
Механизм и граница раздела «FFI-типы» описываются так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Механизм и граница раздела «FFI-типы» описываются так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Механизм и граница раздела «FFI-типы» описываются так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Механизм и граница раздела «FFI-типы» описываются так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Механизм и граница раздела «FFI-типы» описываются так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Вопрос 12 из 30
Что должен поймать отрицательный тест для этого фрагмента? Ищется граничное следствие правила из раздела «Граница C».
Lua Lua · Граница C · разбор 2 Копировать
local function reproduce_case()
local ffi=require("ffi")
ffi.cdef[[void *buffer_new(size_t n); void buffer_free(void *p);]]
local p=ffi.gc(lib.buffer_new(4096),lib.buffer_free)
assert(p~=nil)
use_buffer(p,4096)
p=nil; collectgarbage()
end
reproduce_case()
Отрицательный сценарий для раздела «Граница C» фиксирует: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Отрицательный сценарий для раздела «Граница C» фиксирует: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Отрицательный сценарий для раздела «Граница C» фиксирует: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Отрицательный сценарий для раздела «Граница C» фиксирует: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Отрицательный сценарий для раздела «Граница C» фиксирует: FFI тесно связан с LuaJIT и ABI платформы; код на стандартном Lua, другой архитектуре или Windows может потребовать иной путь реализации.
Вопрос 21 из 30
На каком правиле держится поведение этого кода? Выберите основное правило раздела «Проверка корректности».
Lua Lua · Проверка корректности · разбор 1 Копировать
assert(ffi.sizeof("Point")==8)
local p=ffi.new("Point",{x=-1,y=2147483647})
assert(lib.validate(p)==reference_validate(-1,2147483647))
Центральный механизм раздела «Проверка корректности»: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Центральный механизм раздела «Проверка корректности»: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Центральный механизм раздела «Проверка корректности»: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Центральный механизм раздела «Проверка корректности»: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Центральный механизм раздела «Проверка корректности»: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Вопрос 23 из 30
Какое правило должно остаться наблюдаемым после правки? Речь идёт о центральном правиле раздела «Проверка корректности».
Lua Lua · Проверка корректности · разбор 3 Копировать
do
assert(ffi.sizeof("Point")==8)
local p=ffi.new("Point",{x=-1,y=2147483647})
assert(lib.validate(p)==reference_validate(-1,2147483647))
end
В разделе «Проверка корректности» нельзя потерять правило: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
В разделе «Проверка корректности» нельзя потерять правило: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
В разделе «Проверка корректности» нельзя потерять правило: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
В разделе «Проверка корректности» нельзя потерять правило: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
В разделе «Проверка корректности» нельзя потерять правило: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Вопрос 25 из 30
Какое утверждение о разделе «Проверка корректности» полезно и при чтении кода, и при ревью? Ответ должен охватывать весь раздел «Проверка корректности».
Полная гарантия раздела «Проверка корректности» звучит так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Полная гарантия раздела «Проверка корректности» звучит так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Полная гарантия раздела «Проверка корректности» звучит так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Полная гарантия раздела «Проверка корректности» звучит так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Полная гарантия раздела «Проверка корректности» звучит так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Вопрос 30 из 30
На какое утверждение можно опереться при проектировании раздела «Устойчивость к сбоям»? Нужна полная формулировка раздела «Устойчивость к сбоям».
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.