💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 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-компиляция» сохраняется при условии: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: Критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами.
Внешнее поведение раздела «JIT-компиляция» сохраняется при условии: FFI тесно связан с LuaJIT и ABI платформы; код на стандартном Lua, другой архитектуре или Windows может потребовать иной путь реализации.
Вопрос 5 из 30
Что помогает не переносить в раздел «JIT-компиляция» привычки из другого языка или среды? Нужна полная формулировка раздела «JIT-компиляция».
При проектировании раздела «JIT-компиляция» нужно помнить: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
При проектировании раздела «JIT-компиляция» нужно помнить: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
При проектировании раздела «JIT-компиляция» нужно помнить: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
При проектировании раздела «JIT-компиляция» нужно помнить: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
При проектировании раздела «JIT-компиляция» нужно помнить: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Вопрос 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-типы»: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Центральный механизм раздела «FFI-типы»: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Центральный механизм раздела «FFI-типы»: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Центральный механизм раздела «FFI-типы»: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Центральный механизм раздела «FFI-типы»: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Вопрос 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 нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Скрытая граница раздела «FFI-типы» проявляется так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Скрытая граница раздела «FFI-типы» проявляется так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Скрытая граница раздела «FFI-типы» проявляется так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Скрытая граница раздела «FFI-типы» проявляется так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 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-типы» остаётся гарантия: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
При замене внутренних шагов раздела «FFI-типы» остаётся гарантия: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 9 из 30
В проекте пересматривают «FFI-типы». Какое правило лучше выразить в интерфейсе, а не оставлять устной договорённостью? Выберите практическое следствие раздела «FFI-типы».
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Рабочий контракт раздела «FFI-типы» делает наблюдаемым: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Вопрос 10 из 30
Какой вывод о разделе «FFI-типы» останется верным после смены реализации? Нужна полная формулировка раздела «FFI-типы».
Механизм и граница раздела «FFI-типы» описываются так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Механизм и граница раздела «FFI-типы» описываются так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Механизм и граница раздела «FFI-типы» описываются так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Механизм и граница раздела «FFI-типы» описываются так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Механизм и граница раздела «FFI-типы» описываются так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Вопрос 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 тесно связан с LuaJIT и ABI платформы; код на стандартном Lua, другой архитектуре или Windows может потребовать иной путь реализации.
Отрицательный сценарий для раздела «Граница C» фиксирует: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Отрицательный сценарий для раздела «Граница C» фиксирует: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Отрицательный сценарий для раздела «Граница C» фиксирует: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 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))
Центральный механизм раздела «Проверка корректности»: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Центральный механизм раздела «Проверка корректности»: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Центральный механизм раздела «Проверка корректности»: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Центральный механизм раздела «Проверка корректности»: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Центральный механизм раздела «Проверка корректности»: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Вопрос 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
В разделе «Проверка корректности» нельзя потерять правило: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
В разделе «Проверка корректности» нельзя потерять правило: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
В разделе «Проверка корректности» нельзя потерять правило: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
В разделе «Проверка корректности» нельзя потерять правило: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
В разделе «Проверка корректности» нельзя потерять правило: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Вопрос 25 из 30
Какое утверждение о разделе «Проверка корректности» полезно и при чтении кода, и при ревью? Ответ должен охватывать весь раздел «Проверка корректности».
Полная гарантия раздела «Проверка корректности» звучит так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Полная гарантия раздела «Проверка корректности» звучит так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Полная гарантия раздела «Проверка корректности» звучит так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.
Полная гарантия раздела «Проверка корректности» звучит так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Полная гарантия раздела «Проверка корректности» звучит так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Вопрос 30 из 30
На какое утверждение можно опереться при проектировании раздела «Устойчивость к сбоям»? Нужна полная формулировка раздела «Устойчивость к сбоям».
Полная гарантия раздела «Устойчивость к сбоям» звучит так: LuaJIT компилирует горячие трассы, но side exit, редкие типы и неподдерживаемые операции могут вернуть выполнение в интерпретатор; оценивать нужно профиль трасс, а не наличие JIT как такового.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Ffi.cdef объявляет C-типы и функции, но не проверяет соответствие фактической библиотеке; неверная сигнатура, размер структуры или calling convention приводят к повреждению памяти.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Корректность FFI проверяют эталонными C-тестами, размерами типов, нулевыми указателями и санитайзерами; совпавший результат одного вызова не доказывает правильную сигнатуру.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: Сбой нативной функции способен завершить весь процесс, минуя pcall; критичные и недоверенные библиотеки изолируют процессом и контролируют версии бинарных зависимостей.
Полная гарантия раздела «Устойчивость к сбоям» звучит так: На границе FFI нужно определить владение указателями, длины буферов и срок жизни Lua-объектов; ffi.gc помогает с освобождением, но не предотвращает use-after-free.