💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 2 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
Julia Julia · Выбрасывание исключений через throw Копировать
function positive_sqrt(x)
x >= 0 || throw(DomainError(x, "nonnegative value required"))
return sqrt(x)
end
@show positive_sqrt(4.0)
Проверить на отдельном примере, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Проверить на отдельном примере, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Проверить на отдельном примере, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Проверить на отдельном примере, что для маршрутизации ошибок обычно хватает строкового сообщения, а собственный тип исключения меняет лишь способ его печати.
Проверить на отдельном примере, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Вопрос 4 из 20
Какой результат приёмочного теста подтвердит корректность участка с `x >= 0 || throw(DomainError(x, "nonnegative value required"))`?
f(x)\uparrow e
Приёмка должна подтвердить, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Приёмка должна подтвердить, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Приёмка должна подтвердить, что для маршрутизации ошибок обычно хватает строкового сообщения, а собственный тип исключения меняет лишь способ его печати.
Приёмка должна подтвердить, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Приёмка должна подтвердить, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Вопрос 7 из 20
Что нужно подтвердить отдельным примером для `try`?
Julia Julia · Обработка и очистка 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
Проверить на отдельном примере, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Проверить на отдельном примере, что `finally` выполняется лишь после перехваченного исключения и пропускается при обычном `return` из блока `try`.
Проверить на отдельном примере, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Проверить на отдельном примере, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Проверить на отдельном примере, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Вопрос 9 из 20
Как проверить, что новая реализация `try` не изменила обещанное пользователю поведение?
\mathrm{finally}\;\forall\text{ путей выхода}
Приёмка должна подтвердить, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Приёмка должна подтвердить, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Приёмка должна подтвердить, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Приёмка должна подтвердить, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Приёмка должна подтвердить, что `finally` выполняется лишь после перехваченного исключения и пропускается при обычном `return` из блока `try`.
Вопрос 11 из 20
Какое утверждение точнее всего объясняет участок с `struct InvalidMeasurement <: Exception`?
e=(\mathrm{type},\mathrm{context})
Julia Julia · Собственные ошибки Копировать
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))")
Текст собственного исключения удобнее структурированных полей, потому что обработчик может надёжно разобрать его регулярным выражением.
`try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
`throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Вопрос 12 из 20
Какую проверку стоит добавить для участка с `struct InvalidMeasurement <: Exception`?
Julia Julia · Собственные ошибки Копировать
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))")
Проверить на отдельном примере, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Проверить на отдельном примере, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Проверить на отдельном примере, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Проверить на отдельном примере, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Проверить на отдельном примере, что текст собственного исключения удобнее структурированных полей, потому что обработчик может надёжно разобрать его регулярным выражением.
Вопрос 14 из 20
Какой результат приёмочного теста подтвердит корректность участка с `struct InvalidMeasurement <: Exception`?
e=(\mathrm{type},\mathrm{context})
Приёмка должна подтвердить, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Приёмка должна подтвердить, что текст собственного исключения удобнее структурированных полей, потому что обработчик может надёжно разобрать его регулярным выражением.
Приёмка должна подтвердить, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Приёмка должна подтвердить, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Приёмка должна подтвердить, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Вопрос 17 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `result = with_lock(ReentrantLock()) do`?
Julia Julia · Освобождение ресурсов Копировать
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
Проверить на отдельном примере, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Проверить на отдельном примере, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.
Проверить на отдельном примере, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Проверить на отдельном примере, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Проверить на отдельном примере, что файл можно оставить открытым после функции: сборщик мусора закрывает его до следующей операции ввода-вывода.
Вопрос 19 из 20
После обновления Julia или пакета поведение участка с `result = with_lock(ReentrantLock()) do` изменилось. Какой критерий приёмки остаётся корректным?
\mathrm{acquire}\Rightarrow\mathrm{release}
Приёмка должна подтвердить, что `throw` прерывает обычный поток и передаёт объект исключения; тип исключения должен помогать вызывающему коду отличать нарушение входа от отказа среды.
Приёмка должна подтвердить, что `try`, `catch`, `else` и `finally` разделяют обработку ошибки, успешный путь и обязательную очистку; `finally` не должен затмевать исходное исключение.
Приёмка должна подтвердить, что файлы, блокировки и внешние дескрипторы освобождают в `do`-блоке или `finally`; ожидание сборщика мусора не задаёт надёжный момент закрытия ресурса.
Приёмка должна подтвердить, что файл можно оставить открытым после функции: сборщик мусора закрывает его до следующей операции ввода-вывода.
Приёмка должна подтвердить, что собственный тип ошибки обычно наследуется от `Exception` и хранит структурированные данные, чтобы обработчик не разбирал текст сообщения.