JL Julia  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Архитектура научного пакета Julia

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 30
Какое утверждение точнее всего объясняет участок с `power(s::Spectrum) = abs2.(s.amplitude)`?
API=E\cup X
JuliaJulia · Публичный API
module SignalTools
export Spectrum, power, normalize
struct Spectrum{T<:Real}
    frequency::Vector{T}
    amplitude::Vector{T}
end
power(s::Spectrum) = abs2.(s.amplitude)
normalize(s::Spectrum) = Spectrum(s.frequency, s.amplitude ./ maximum(abs, s.amplitude))
end
Вопрос 2 из 30
Какую проверку стоит добавить для участка с `power(s::Spectrum) = abs2.(s.amplitude)`?
JuliaJulia · Публичный API
module SignalTools
export Spectrum, power, normalize
struct Spectrum{T<:Real}
    frequency::Vector{T}
    amplitude::Vector{T}
end
power(s::Spectrum) = abs2.(s.amplitude)
normalize(s::Spectrum) = Spectrum(s.frequency, s.amplitude ./ maximum(abs, s.amplitude))
end
Вопрос 3 из 30
Что должно остаться истинным после рефакторинга участка с `power(s::Spectrum) = abs2.(s.amplitude)`?
JuliaJulia · Публичный API
module SignalTools
export Spectrum, power, normalize
struct Spectrum{T<:Real}
    frequency::Vector{T}
    amplitude::Vector{T}
end
power(s::Spectrum) = abs2.(s.amplitude)
normalize(s::Spectrum) = Spectrum(s.frequency, s.amplitude ./ maximum(abs, s.amplitude))
end
Вопрос 4 из 30
Как проверить, что новая реализация `power(s::Spectrum) = abs2.(s.amplitude)` не изменила обещанное пользователю поведение?
API=E\cup X
Вопрос 5 из 30
Что следует сообщить пользователю библиотеки о поведении `power(s::Spectrum) = abs2.(s.amplitude)`?
Вопрос 6 из 30
Какое утверждение точнее всего объясняет участок с `x >= 0 || throw(DomainError(x))`?
D=(state,unit,invariant)
JuliaJulia · Типы домена
struct Length{T<:Real}
    meters::T
    function Length(x::T) where {T<:Real}
        x >= 0 || throw(DomainError(x))
        new{T}(x)
    end
end
Base.:+(a::Length, b::Length) = Length(a.meters + b.meters)
Вопрос 7 из 30
Какой эксперимент отличит настоящий механизм `x >= 0 || throw(DomainError(x))` от случайного результата одного запуска?
JuliaJulia · Типы домена
struct Length{T<:Real}
    meters::T
    function Length(x::T) where {T<:Real}
        x >= 0 || throw(DomainError(x))
        new{T}(x)
    end
end
Base.:+(a::Length, b::Length) = Length(a.meters + b.meters)
Вопрос 8 из 30
Какое решение устраняет риск вокруг `x >= 0 || throw(DomainError(x))`, не меняя поведение на допустимых данных?
JuliaJulia · Типы домена
struct Length{T<:Real}
    meters::T
    function Length(x::T) where {T<:Real}
        x >= 0 || throw(DomainError(x))
        new{T}(x)
    end
end
Base.:+(a::Length, b::Length) = Length(a.meters + b.meters)
Вопрос 9 из 30
Как проверить, что новая реализация `x >= 0 || throw(DomainError(x))` не изменила обещанное пользователю поведение?
D=(state,unit,invariant)
Вопрос 10 из 30
Как сформулировать границу механизма `x >= 0 || throw(DomainError(x))` без чрезмерного обещания?
Вопрос 11 из 30
Как нужно интерпретировать `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`, не добавляя к коду лишних гарантий?
f(::T_{new})\;\text{при сохранении закона}
JuliaJulia · Расширяемость
abstract type AbstractSolver end
solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))
struct EulerSolver <: AbstractSolver
    step::Float64
end
solve(s::EulerSolver, problem) = problem(s.step)
@show solve(EulerSolver(0.1), h -> 1/h)
Вопрос 12 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`?
JuliaJulia · Расширяемость
abstract type AbstractSolver end
solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))
struct EulerSolver <: AbstractSolver
    step::Float64
end
solve(s::EulerSolver, problem) = problem(s.step)
@show solve(EulerSolver(0.1), h -> 1/h)
Вопрос 13 из 30
Какую гарантию должна сохранить правка участка с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`?
JuliaJulia · Расширяемость
abstract type AbstractSolver end
solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))
struct EulerSolver <: AbstractSolver
    step::Float64
end
solve(s::EulerSolver, problem) = problem(s.step)
@show solve(EulerSolver(0.1), h -> 1/h)
Вопрос 14 из 30
При переносе кода с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
f(::T_{new})\;\text{при сохранении закона}
Вопрос 15 из 30
Что следует сообщить пользователю библиотеки о поведении `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`?
Вопрос 16 из 30
Что именно следует из фрагмента с `doctest=true,`?
doctest(example)=pass
JuliaJulia · Документация
using Documenter
module MyPackage
export square
"Return the square of x."
square(x) = x^2
end
DocMeta.setdocmeta!(MyPackage, :DocTestSetup, :(using Main.MyPackage); recursive=true)
makedocs(
    modules=[MyPackage],
    sitename="MyPackage.jl",
    doctest=true,
    strict=true,
)
Вопрос 17 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `doctest=true,`?
JuliaJulia · Документация
using Documenter
module MyPackage
export square
"Return the square of x."
square(x) = x^2
end
DocMeta.setdocmeta!(MyPackage, :DocTestSetup, :(using Main.MyPackage); recursive=true)
makedocs(
    modules=[MyPackage],
    sitename="MyPackage.jl",
    doctest=true,
    strict=true,
)
Вопрос 18 из 30
Какой контракт следует закрепить при переработке строки `doctest=true,`?
JuliaJulia · Документация
using Documenter
module MyPackage
export square
"Return the square of x."
square(x) = x^2
end
DocMeta.setdocmeta!(MyPackage, :DocTestSetup, :(using Main.MyPackage); recursive=true)
makedocs(
    modules=[MyPackage],
    sitename="MyPackage.jl",
    doctest=true,
    strict=true,
)
Вопрос 19 из 30
При переносе кода с `doctest=true,` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
doctest(example)=pass
Вопрос 20 из 30
Какое ограничение стоит прямо указать в документации к участку с `doctest=true,`?
Вопрос 21 из 30
Как нужно интерпретировать `w.closed && return nothing`, не добавляя к коду лишних гарантий?
usage(resource)\le limit
JuliaJulia · Контроль ресурсов
mutable struct Workspace{T}
    buffer::Vector{T}
    closed::Bool
end
function close!(w::Workspace)
    w.closed && return nothing
    empty!(w.buffer)
    w.closed = true
    return nothing
end
Вопрос 22 из 30
Какой эксперимент отличит настоящий механизм `w.closed && return nothing` от случайного результата одного запуска?
JuliaJulia · Контроль ресурсов
mutable struct Workspace{T}
    buffer::Vector{T}
    closed::Bool
end
function close!(w::Workspace)
    w.closed && return nothing
    empty!(w.buffer)
    w.closed = true
    return nothing
end
Вопрос 23 из 30
Какую гарантию должна сохранить правка участка с `w.closed && return nothing`?
JuliaJulia · Контроль ресурсов
mutable struct Workspace{T}
    buffer::Vector{T}
    closed::Bool
end
function close!(w::Workspace)
    w.closed && return nothing
    empty!(w.buffer)
    w.closed = true
    return nothing
end
Вопрос 24 из 30
Две реализации участка с `w.closed && return nothing` совпадают на обычных данных. Что необходимо проверить перед выпуском?
usage(resource)\le limit
Вопрос 25 из 30
Какое утверждение о `w.closed && return nothing` является переносимым правилом, а не особенностью одного запуска?
Вопрос 26 из 30
Какой механизм Julia определяет поведение строки `return (; values=collect(problem), n=length(problem))`?
core\circ backend
JuliaJulia · Масштабирование решения
function prepare(problem)
    return (; values=collect(problem), n=length(problem))
end
function execute end
finalize(problem, result) = (; result, source_length=length(problem))
function compute(problem, backend)
    prepared = prepare(problem)
    result = execute(backend, prepared)
    return finalize(problem, result)
end
@show methods(execute)
Вопрос 27 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `return (; values=collect(problem), n=length(problem))`?
JuliaJulia · Масштабирование решения
function prepare(problem)
    return (; values=collect(problem), n=length(problem))
end
function execute end
finalize(problem, result) = (; result, source_length=length(problem))
function compute(problem, backend)
    prepared = prepare(problem)
    result = execute(backend, prepared)
    return finalize(problem, result)
end
@show methods(execute)
Вопрос 28 из 30
Какое требование к `return (; values=collect(problem), n=length(problem))` важнее удобной детали текущей реализации?
JuliaJulia · Масштабирование решения
function prepare(problem)
    return (; values=collect(problem), n=length(problem))
end
function execute end
finalize(problem, result) = (; result, source_length=length(problem))
function compute(problem, backend)
    prepared = prepare(problem)
    result = execute(backend, prepared)
    return finalize(problem, result)
end
@show methods(execute)
Вопрос 29 из 30
При переносе кода с `return (; values=collect(problem), n=length(problem))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
core\circ backend
Вопрос 30 из 30
Какое ограничение стоит прямо указать в документации к участку с `return (; values=collect(problem), n=length(problem))`?

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

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

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

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