JL Julia  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Исключения и гарантии очистки

Проверяет базовое понимание темы «Исключения и гарантии очистки»: чтение фрагментов, выбор корректной конструкции и объяснение результата без опоры на угадывание. Вопросы требуют читать код, находить границу применимости, выбирать проверяемую правку и отличать свойства Julia от поведения конкретного пакета. В тесте 20 вопросов: 12 заданий с кодом и 8 заданий с математической записью. Все формулировки рассчитаны на Julia 1.12.6; для сторонних библиотек используется явно названный API.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 20
Что именно следует из фрагмента с `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
f(x)\uparrow e
JuliaJulia · Выбрасывание исключений через throw
function positive_sqrt(x)
    x >= 0 || throw(DomainError(x, "nonnegative value required"))
    return sqrt(x)
end
@show positive_sqrt(4.0)
Вопрос 2 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
JuliaJulia · Выбрасывание исключений через throw
function positive_sqrt(x)
    x >= 0 || throw(DomainError(x, "nonnegative value required"))
    return sqrt(x)
end
@show positive_sqrt(4.0)
Вопрос 3 из 20
Какой контракт следует закрепить при переработке строки `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
JuliaJulia · Выбрасывание исключений через throw
function positive_sqrt(x)
    x >= 0 || throw(DomainError(x, "nonnegative value required"))
    return sqrt(x)
end
@show positive_sqrt(4.0)
Вопрос 4 из 20
Какой результат приёмочного теста подтвердит корректность участка с `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
f(x)\uparrow e
Вопрос 5 из 20
Как сформулировать границу механизма `x >= 0 || throw(DomainError(x, "nonnegative value required"))` без чрезмерного обещания?
Вопрос 6 из 20
Какой механизм Julia определяет поведение строки `try`?
\mathrm{finally}\;\forall\text{ путей выхода}
JuliaJulia · Обработка и очистка try/catch/finally
function read_first(path)
    io = open(path, "r")
    try
        return readline(io)
    catch err
        @error "read failed" exception=(err, catch_backtrace())
        rethrow()
    finally
        close(io)
    end
end
Вопрос 7 из 20
Что нужно подтвердить отдельным примером для `try`?
JuliaJulia · Обработка и очистка try/catch/finally
function read_first(path)
    io = open(path, "r")
    try
        return readline(io)
    catch err
        @error "read failed" exception=(err, catch_backtrace())
        rethrow()
    finally
        close(io)
    end
end
Вопрос 8 из 20
Что должно остаться истинным после рефакторинга участка с `try`?
JuliaJulia · Обработка и очистка try/catch/finally
function read_first(path)
    io = open(path, "r")
    try
        return readline(io)
    catch err
        @error "read failed" exception=(err, catch_backtrace())
        rethrow()
    finally
        close(io)
    end
end
Вопрос 9 из 20
Как проверить, что новая реализация `try` не изменила обещанное пользователю поведение?
\mathrm{finally}\;\forall\text{ путей выхода}
Вопрос 10 из 20
Как сформулировать границу механизма `try` без чрезмерного обещания?
Вопрос 11 из 20
Какое утверждение точнее всего объясняет участок с `struct InvalidMeasurement <: Exception`?
e=(\mathrm{type},\mathrm{context})
JuliaJulia · Собственные ошибки
struct InvalidMeasurement <: Exception
    row::Int
    value::Any
    reason::String
end
Base.showerror(io::IO, e::InvalidMeasurement) =
    print(io, "row $(e.row): $(e.reason), value=$(repr(e.value))")
Вопрос 12 из 20
Какую проверку стоит добавить для участка с `struct InvalidMeasurement <: Exception`?
JuliaJulia · Собственные ошибки
struct InvalidMeasurement <: Exception
    row::Int
    value::Any
    reason::String
end
Base.showerror(io::IO, e::InvalidMeasurement) =
    print(io, "row $(e.row): $(e.reason), value=$(repr(e.value))")
Вопрос 13 из 20
Какое требование к `struct InvalidMeasurement <: Exception` важнее удобной детали текущей реализации?
JuliaJulia · Собственные ошибки
struct InvalidMeasurement <: Exception
    row::Int
    value::Any
    reason::String
end
Base.showerror(io::IO, e::InvalidMeasurement) =
    print(io, "row $(e.row): $(e.reason), value=$(repr(e.value))")
Вопрос 14 из 20
Какой результат приёмочного теста подтвердит корректность участка с `struct InvalidMeasurement <: Exception`?
e=(\mathrm{type},\mathrm{context})
Вопрос 15 из 20
Какой тезис о `struct InvalidMeasurement <: Exception` можно честно закрепить в справке?
Вопрос 16 из 20
Какое утверждение точнее всего объясняет участок с `result = with_lock(ReentrantLock()) do`?
\mathrm{acquire}\Rightarrow\mathrm{release}
JuliaJulia · Освобождение ресурсов
function with_lock(lock, f)
    Base.lock(lock)
    try
        return f()
    finally
        Base.unlock(lock)
    end
end
result = with_lock(ReentrantLock()) do
    sum(1:10)
end
Вопрос 17 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `result = with_lock(ReentrantLock()) do`?
JuliaJulia · Освобождение ресурсов
function with_lock(lock, f)
    Base.lock(lock)
    try
        return f()
    finally
        Base.unlock(lock)
    end
end
result = with_lock(ReentrantLock()) do
    sum(1:10)
end
Вопрос 18 из 20
Какое требование к `result = with_lock(ReentrantLock()) do` важнее удобной детали текущей реализации?
JuliaJulia · Освобождение ресурсов
function with_lock(lock, f)
    Base.lock(lock)
    try
        return f()
    finally
        Base.unlock(lock)
    end
end
result = with_lock(ReentrantLock()) do
    sum(1:10)
end
Вопрос 19 из 20
После обновления Julia или пакета поведение участка с `result = with_lock(ReentrantLock()) do` изменилось. Какой критерий приёмки остаётся корректным?
\mathrm{acquire}\Rightarrow\mathrm{release}
Вопрос 20 из 20
Какое утверждение о `result = with_lock(ReentrantLock()) do` является переносимым правилом, а не особенностью одного запуска?

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

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

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

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