💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 2 из 30
Какую проверку стоит добавить для участка с `power(s::Spectrum) = abs2.(s.amplitude)`?
Julia Julia · Публичный 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
Проверить на отдельном примере, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Проверить на отдельном примере, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Проверить на отдельном примере, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Проверить на отдельном примере, что любое имя под `src/` считается публичным API пакета, даже если оно не экспортировано и не документировано.
Проверить на отдельном примере, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Вопрос 4 из 30
Как проверить, что новая реализация `power(s::Spectrum) = abs2.(s.amplitude)` не изменила обещанное пользователю поведение?
API=E\cup X
Приёмка должна подтвердить, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Приёмка должна подтвердить, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Приёмка должна подтвердить, что любое имя под `src/` считается публичным API пакета, даже если оно не экспортировано и не документировано.
Приёмка должна подтвердить, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Приёмка должна подтвердить, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Вопрос 7 из 30
Какой эксперимент отличит настоящий механизм `x >= 0 || throw(DomainError(x))` от случайного результата одного запуска?
Julia Julia · Типы домена Копировать
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)
Проверить на отдельном примере, что доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Проверить на отдельном примере, что доменные типы избыточны: таблица с числовыми столбцами сохраняет единицы и инварианты не хуже отдельной модели.
Проверить на отдельном примере, что глобальный кэш без ограничения улучшает масштабирование, так как повторные расчёты исчезают независимо от объёма данных.
Проверить на отдельном примере, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Проверить на отдельном примере, что любое имя под `src/` считается публичным API пакета, даже если оно не экспортировано и не документировано.
Вопрос 9 из 30
Как проверить, что новая реализация `x >= 0 || throw(DomainError(x))` не изменила обещанное пользователю поведение?
D=(state,unit,invariant)
Приёмка должна подтвердить, что глобальный кэш без ограничения улучшает масштабирование, так как повторные расчёты исчезают независимо от объёма данных.
Приёмка должна подтвердить, что доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Приёмка должна подтвердить, что доменные типы избыточны: таблица с числовыми столбцами сохраняет единицы и инварианты не хуже отдельной модели.
Приёмка должна подтвердить, что любое имя под `src/` считается публичным API пакета, даже если оно не экспортировано и не документировано.
Приёмка должна подтвердить, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Вопрос 11 из 30
Как нужно интерпретировать `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`, не добавляя к коду лишних гарантий?
f(::T_{new})\;\text{при сохранении закона}
Julia Julia · Расширяемость Копировать
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)
Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Вопрос 12 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`?
Julia Julia · Расширяемость Копировать
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)
Проверить на отдельном примере, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Проверить на отдельном примере, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Проверить на отдельном примере, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Проверить на отдельном примере, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Проверить на отдельном примере, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Вопрос 13 из 30
Какую гарантию должна сохранить правка участка с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))`?
Julia Julia · Расширяемость Копировать
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)
Сохранить в реализации правило: Расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Сохранить в реализации правило: Масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Сохранить в реализации правило: Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Сохранить в реализации правило: Публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Сохранить в реализации правило: Файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Вопрос 14 из 30
При переносе кода с `solve(s::AbstractSolver, problem) = throw(MethodError(solve, (s, problem)))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
f(::T_{new})\;\text{при сохранении закона}
Приёмка должна подтвердить, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Приёмка должна подтвердить, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Приёмка должна подтвердить, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Приёмка должна подтвердить, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Приёмка должна подтвердить, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Вопрос 16 из 30
Что именно следует из фрагмента с `doctest=true,`?
doctest(example)=pass
Julia Julia · Документация Копировать
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,
)
Публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Документацию научного пакета можно в основном восстановить из сигнатур; примеры, режимы отказа и точки расширения не требуют отдельного описания и проверки.
Документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Вопрос 17 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `doctest=true,`?
Julia Julia · Документация Копировать
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,
)
Проверить на отдельном примере, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Проверить на отдельном примере, что доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Проверить на отдельном примере, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Проверить на отдельном примере, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Проверить на отдельном примере, что документацию научного пакета можно в основном восстановить из сигнатур; примеры, режимы отказа и точки расширения не требуют отдельного описания и проверки.
Вопрос 18 из 30
Какой контракт следует закрепить при переработке строки `doctest=true,`?
Julia Julia · Документация Копировать
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,
)
Сохранить в реализации правило: Публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Сохранить в реализации правило: Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Сохранить в реализации правило: Доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Сохранить в реализации правило: Документацию научного пакета можно в основном восстановить из сигнатур; примеры, режимы отказа и точки расширения не требуют отдельного описания и проверки.
Сохранить в реализации правило: Документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Вопрос 19 из 30
При переносе кода с `doctest=true,` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
doctest(example)=pass
Приёмка должна подтвердить, что документацию научного пакета можно в основном восстановить из сигнатур; примеры, режимы отказа и точки расширения не требуют отдельного описания и проверки.
Приёмка должна подтвердить, что документация связывает примеры с реальным API через doctest и показывает ошибки и размерности, а не только успешный вызов на игрушечных данных.
Приёмка должна подтвердить, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Приёмка должна подтвердить, что доменные типы выражают единицы, допустимые состояния и структуру задачи, а не просто повторяют таблицу входных данных.
Приёмка должна подтвердить, что публичный API состоит из документированных экспортов и квалифицированных точек расширения; внутренние имена могут меняться без обещания совместимости.
Вопрос 22 из 30
Какой эксперимент отличит настоящий механизм `w.closed && return nothing` от случайного результата одного запуска?
Julia Julia · Контроль ресурсов Копировать
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
Проверить на отдельном примере, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Проверить на отдельном примере, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Проверить на отдельном примере, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Проверить на отдельном примере, что глобальный кэш без ограничения улучшает масштабирование, так как повторные расчёты исчезают независимо от объёма данных.
Проверить на отдельном примере, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Вопрос 24 из 30
Две реализации участка с `w.closed && return nothing` совпадают на обычных данных. Что необходимо проверить перед выпуском?
usage(resource)\le limit
Приёмка должна подтвердить, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Приёмка должна подтвердить, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Приёмка должна подтвердить, что глобальный кэш без ограничения улучшает масштабирование, так как повторные расчёты исчезают независимо от объёма данных.
Приёмка должна подтвердить, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Приёмка должна подтвердить, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Вопрос 26 из 30
Какой механизм Julia определяет поведение строки `return (; values=collect(problem), n=length(problem))`?
core\circ backend
Julia Julia · Масштабирование решения Копировать
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)
Масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Для масштабирования лучше сразу встроить потоки и процессы в вычислительное ядро; отделение ввода-вывода и планировщика лишь усложняет быстрый путь.
Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Вопрос 27 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `return (; values=collect(problem), n=length(problem))`?
Julia Julia · Масштабирование решения Копировать
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)
Проверить на отдельном примере, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Проверить на отдельном примере, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Проверить на отдельном примере, что для масштабирования лучше сразу встроить потоки и процессы в вычислительное ядро; отделение ввода-вывода и планировщика лишь усложняет быстрый путь.
Проверить на отдельном примере, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Проверить на отдельном примере, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Вопрос 28 из 30
Какое требование к `return (; values=collect(problem), n=length(problem))` важнее удобной детали текущей реализации?
Julia Julia · Масштабирование решения Копировать
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)
Сохранить в реализации правило: Файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Сохранить в реализации правило: Пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Сохранить в реализации правило: Для масштабирования лучше сразу встроить потоки и процессы в вычислительное ядро; отделение ввода-вывода и планировщика лишь усложняет быстрый путь.
Сохранить в реализации правило: Расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Сохранить в реализации правило: Масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Вопрос 29 из 30
При переносе кода с `return (; values=collect(problem), n=length(problem))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
core\circ backend
Приёмка должна подтвердить, что файлы, потоки, GPU-память и внешние процессы должны иметь владельца и ограничение; скрытый глобальный кэш превращает библиотеку в непредсказуемого потребителя ресурсов.
Приёмка должна подтвердить, что масштабирование требует отделить вычислительное ядро от ввода-вывода и планировщика, чтобы последовательный, потоковый и распределённый режимы использовали один проверенный контракт.
Приёмка должна подтвердить, что пользователь может безопасно переопределять любую внутреннюю функцию пакета, потому что множественная диспетчеризация делает все точки расширения публичными.
Приёмка должна подтвердить, что расширяемость Julia строится на маленьких функциях и множественной диспетчеризации; пакет должен документировать, какие методы разрешено добавлять и какие свойства они обязаны сохранять.
Приёмка должна подтвердить, что для масштабирования лучше сразу встроить потоки и процессы в вычислительное ядро; отделение ввода-вывода и планировщика лишь усложняет быстрый путь.