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

Типовая стабильность и производительность

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 30
Какой механизм Julia определяет поведение строки `value = flag ? 1 : 1.0`?
R(T)=\operatorname{infer}(f,T)
JuliaJulia · Вывод типов компилятором
function unstable(flag)
    value = flag ? 1 : 1.0
    return value + 2
end
function stable(flag)
    value = flag ? 1.0 : 1.0
    return value + 2
end
@show unstable(true) unstable(false)
Вопрос 2 из 30
Какую проверку стоит добавить для участка с `value = flag ? 1 : 1.0`?
JuliaJulia · Вывод типов компилятором
function unstable(flag)
    value = flag ? 1 : 1.0
    return value + 2
end
function stable(flag)
    value = flag ? 1.0 : 1.0
    return value + 2
end
@show unstable(true) unstable(false)
Вопрос 3 из 30
Что должно остаться истинным после рефакторинга участка с `value = flag ? 1 : 1.0`?
JuliaJulia · Вывод типов компилятором
function unstable(flag)
    value = flag ? 1 : 1.0
    return value + 2
end
function stable(flag)
    value = flag ? 1.0 : 1.0
    return value + 2
end
@show unstable(true) unstable(false)
Вопрос 4 из 30
Как проверить, что новая реализация `value = flag ? 1 : 1.0` не изменила обещанное пользователю поведение?
R(T)=\operatorname{infer}(f,T)
Вопрос 5 из 30
Что следует сообщить пользователю библиотеки о поведении `value = flag ? 1 : 1.0`?
Вопрос 6 из 30
Как нужно интерпретировать `@code_warntype summarize([1.0, -2.0, 3.0])`, не добавляя к коду лишних гарантий?
\operatorname{warntype}(f,x)
JuliaJulia · Диагностика через @code_warntype
function summarize(xs)
    s = zero(eltype(xs))
    for x in xs
        s += x > 0 ? x : zero(x)
    end
    return s
end
@code_warntype summarize([1.0, -2.0, 3.0])
Вопрос 7 из 30
Какой эксперимент отличит настоящий механизм `@code_warntype summarize([1.0, -2.0, 3.0])` от случайного результата одного запуска?
JuliaJulia · Диагностика через @code_warntype
function summarize(xs)
    s = zero(eltype(xs))
    for x in xs
        s += x > 0 ? x : zero(x)
    end
    return s
end
@code_warntype summarize([1.0, -2.0, 3.0])
Вопрос 8 из 30
Какое требование к `@code_warntype summarize([1.0, -2.0, 3.0])` важнее удобной детали текущей реализации?
JuliaJulia · Диагностика через @code_warntype
function summarize(xs)
    s = zero(eltype(xs))
    for x in xs
        s += x > 0 ? x : zero(x)
    end
    return s
end
@code_warntype summarize([1.0, -2.0, 3.0])
Вопрос 9 из 30
При переносе кода с `@code_warntype summarize([1.0, -2.0, 3.0])` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
\operatorname{warntype}(f,x)
Вопрос 10 из 30
Какое утверждение о `@code_warntype summarize([1.0, -2.0, 3.0])` является переносимым правилом, а не особенностью одного запуска?
Вопрос 11 из 30
Что именно следует из фрагмента с `weight::Real`?
field::T\;\text{с конкретным }T
JuliaJulia · Абстрактные поля
struct SlowModel
    weight::Real
end
struct FastModel{T<:Real}
    weight::T
end
predict(m, x) = m.weight * x
@show predict(SlowModel(2.0), 3.0) predict(FastModel(2.0), 3.0)
Вопрос 12 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `weight::Real`?
JuliaJulia · Абстрактные поля
struct SlowModel
    weight::Real
end
struct FastModel{T<:Real}
    weight::T
end
predict(m, x) = m.weight * x
@show predict(SlowModel(2.0), 3.0) predict(FastModel(2.0), 3.0)
Вопрос 13 из 30
Какое решение устраняет риск вокруг `Real`, не меняя поведение на допустимых данных?
JuliaJulia · Абстрактные поля
struct SlowModel
    weight::Real
end
struct FastModel{T<:Real}
    weight::T
end
predict(m, x) = m.weight * x
@show predict(SlowModel(2.0), 3.0) predict(FastModel(2.0), 3.0)
Вопрос 14 из 30
Как проверить, что новая реализация `Real` не изменила обещанное пользователю поведение?
field::T\;\text{с конкретным }T
Вопрос 15 из 30
Как сформулировать границу механизма `weight::Real` без чрезмерного обещания?
Вопрос 16 из 30
Что именно следует из фрагмента с `s = zero(eltype(xs))`?
f=g\circ h\;\text{с типостабильным }g
JuliaJulia · Барьер функций
function kernel(xs, threshold)
    s = zero(eltype(xs))
    @inbounds for x in xs
        x > threshold && (s += x)
    end
    return s
end
function report(raw, threshold)
    xs = Float64.(raw)
    return kernel(xs, Float64(threshold))
end
@show report(1:10, 5)
Вопрос 17 из 30
Что нужно подтвердить отдельным примером для `s = zero(eltype(xs))`?
JuliaJulia · Барьер функций
function kernel(xs, threshold)
    s = zero(eltype(xs))
    @inbounds for x in xs
        x > threshold && (s += x)
    end
    return s
end
function report(raw, threshold)
    xs = Float64.(raw)
    return kernel(xs, Float64(threshold))
end
@show report(1:10, 5)
Вопрос 18 из 30
Какое требование к `s = zero(eltype(xs))` важнее удобной детали текущей реализации?
JuliaJulia · Барьер функций
function kernel(xs, threshold)
    s = zero(eltype(xs))
    @inbounds for x in xs
        x > threshold && (s += x)
    end
    return s
end
function report(raw, threshold)
    xs = Float64.(raw)
    return kernel(xs, Float64(threshold))
end
@show report(1:10, 5)
Вопрос 19 из 30
Какой результат приёмочного теста подтвердит корректность участка с `s = zero(eltype(xs))`?
f=g\circ h\;\text{с типостабильным }g
Вопрос 20 из 30
Что следует сообщить пользователю библиотеки о поведении `s = zero(eltype(xs))`?
Вопрос 21 из 30
Какой механизм Julia определяет поведение строки `x = rand(100_000)`?
T_{steady}=\operatorname{median}(t_i)
JuliaJulia · Наблюдаемость и диагностика
using BenchmarkTools, Profile
x = rand(100_000)
f(x) = sum(sin, x)
trial = @benchmark f($x) samples=30
Profile.clear(); @profile for _ in 1:20; f(x); end
@show median(trial).time median(trial).memory length(Profile.fetch())
Вопрос 22 из 30
Какой эксперимент отличит настоящий механизм `x = rand(100_000)` от случайного результата одного запуска?
JuliaJulia · Наблюдаемость и диагностика
using BenchmarkTools, Profile
x = rand(100_000)
f(x) = sum(sin, x)
trial = @benchmark f($x) samples=30
Profile.clear(); @profile for _ in 1:20; f(x); end
@show median(trial).time median(trial).memory length(Profile.fetch())
Вопрос 23 из 30
Какое решение устраняет риск вокруг `x = rand(100_000)`, не меняя поведение на допустимых данных?
JuliaJulia · Наблюдаемость и диагностика
using BenchmarkTools, Profile
x = rand(100_000)
f(x) = sum(sin, x)
trial = @benchmark f($x) samples=30
Profile.clear(); @profile for _ in 1:20; f(x); end
@show median(trial).time median(trial).memory length(Profile.fetch())
Вопрос 24 из 30
Две реализации участка с `x = rand(100_000)` совпадают на обычных данных. Что необходимо проверить перед выпуском?
T_{steady}=\operatorname{median}(t_i)
Вопрос 25 из 30
Какое ограничение стоит прямо указать в документации к участку с `x = rand(100_000)`?
Вопрос 26 из 30
Какое утверждение точнее всего объясняет участок с `steady = @belapsed pipeline($x)`?
T_{user}=T_{compile}+T_{run}
JuliaJulia · Надёжность в эксплуатации
using BenchmarkTools
function pipeline(x)
    y = @. sin(x) + x^2
    return sum(y)
end
x = rand(1_000_000)
first = @elapsed pipeline(x)
steady = @belapsed pipeline($x)
@show first steady
Вопрос 27 из 30
Что нужно подтвердить отдельным примером для `steady = @belapsed pipeline($x)`?
JuliaJulia · Надёжность в эксплуатации
using BenchmarkTools
function pipeline(x)
    y = @. sin(x) + x^2
    return sum(y)
end
x = rand(1_000_000)
first = @elapsed pipeline(x)
steady = @belapsed pipeline($x)
@show first steady
Вопрос 28 из 30
Какой контракт следует закрепить при переработке строки `steady = @belapsed pipeline($x)`?
JuliaJulia · Надёжность в эксплуатации
using BenchmarkTools
function pipeline(x)
    y = @. sin(x) + x^2
    return sum(y)
end
x = rand(1_000_000)
first = @elapsed pipeline(x)
steady = @belapsed pipeline($x)
@show first steady
Вопрос 29 из 30
Две реализации участка с `steady = @belapsed pipeline($x)` совпадают на обычных данных. Что необходимо проверить перед выпуском?
T_{user}=T_{compile}+T_{run}
Вопрос 30 из 30
Какой тезис о `steady = @belapsed pipeline($x)` можно честно закрепить в справке?

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

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

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

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