💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 20
Какое утверждение точнее всего объясняет участок с `info = (size(A), axes(A), ndims(A), length(A))`?
A\in\mathbb{R}^{n_1\times\cdots\times n_k}
Julia Julia · Размерности Копировать
A = reshape(collect(1:24), 2, 3, 4)
info = (size(A), axes(A), ndims(A), length(A))
@show info A[CartesianIndex(2, 3, 4)]
`size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
`view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Вопрос 2 из 20
Какую проверку стоит добавить для участка с `info = (size(A), axes(A), ndims(A), length(A))`?
Julia Julia · Размерности Копировать
A = reshape(collect(1:24), 2, 3, 4)
info = (size(A), axes(A), ndims(A), length(A))
@show info A[CartesianIndex(2, 3, 4)]
Проверить на отдельном примере, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Проверить на отдельном примере, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Проверить на отдельном примере, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Проверить на отдельном примере, что обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Проверить на отдельном примере, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Вопрос 3 из 20
Какую гарантию должна сохранить правка участка с `info = (size(A), axes(A), ndims(A), length(A))`?
Julia Julia · Размерности Копировать
A = reshape(collect(1:24), 2, 3, 4)
info = (size(A), axes(A), ndims(A), length(A))
@show info A[CartesianIndex(2, 3, 4)]
Сохранить в реализации правило: `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Сохранить в реализации правило: Обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Сохранить в реализации правило: Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Сохранить в реализации правило: Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Сохранить в реализации правило: `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Вопрос 4 из 20
Две реализации участка с `info = (size(A), axes(A), ndims(A), length(A))` совпадают на обычных данных. Что необходимо проверить перед выпуском?
A\in\mathbb{R}^{n_1\times\cdots\times n_k}
Приёмка должна подтвердить, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Приёмка должна подтвердить, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Приёмка должна подтвердить, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Приёмка должна подтвердить, что обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Приёмка должна подтвердить, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Вопрос 5 из 20
Как сформулировать границу механизма `info = (size(A), axes(A), ndims(A), length(A))` без чрезмерного обещания?
Указать в документации: `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Указать в документации: Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Указать в документации: Обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Указать в документации: `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Указать в документации: Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Вопрос 6 из 20
Как нужно интерпретировать `col = A[:, 2]`, не добавляя к коду лишних гарантий?
B=A[I]\;\Rightarrow\;B\not\equiv A
Julia Julia · Срезы Копировать
A = reshape(1:12, 3, 4)
col = A[:, 2]
col[1] = 99
@show A[:, 2] col
Представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
`copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Срез матрицы хранит ссылку на исходные элементы, и запись в срез по умолчанию изменяет родительский массив.
Вопрос 7 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `col = A[:, 2]`?
Julia Julia · Срезы Копировать
A = reshape(1:12, 3, 4)
col = A[:, 2]
col[1] = 99
@show A[:, 2] col
Проверить на отдельном примере, что срез матрицы хранит ссылку на исходные элементы, и запись в срез по умолчанию изменяет родительский массив.
Проверить на отдельном примере, что представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Проверить на отдельном примере, что обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Проверить на отдельном примере, что `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Проверить на отдельном примере, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Вопрос 8 из 20
Какое требование к `col = A[:, 2]` важнее удобной детали текущей реализации?
Julia Julia · Срезы Копировать
A = reshape(1:12, 3, 4)
col = A[:, 2]
col[1] = 99
@show A[:, 2] col
Сохранить в реализации правило: Обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Сохранить в реализации правило: Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Сохранить в реализации правило: `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Сохранить в реализации правило: Представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Сохранить в реализации правило: Срез матрицы хранит ссылку на исходные элементы, и запись в срез по умолчанию изменяет родительский массив.
Вопрос 9 из 20
Как проверить, что новая реализация `col = A[:, 2]` не изменила обещанное пользователю поведение?
B=A[I]\;\Rightarrow\;B\not\equiv A
Приёмка должна подтвердить, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Приёмка должна подтвердить, что обычный срез вроде `A[:, 2]` создаёт новый массив, поэтому последующая запись в него не меняет исходную матрицу.
Приёмка должна подтвердить, что `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Приёмка должна подтвердить, что представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Приёмка должна подтвердить, что срез матрицы хранит ссылку на исходные элементы, и запись в срез по умолчанию изменяет родительский массив.
Вопрос 11 из 20
Что именно следует из фрагмента с `col = @view A[:, 2]`?
V=\operatorname{view}(A,I)\;\Rightarrow\;V\sim A
Julia Julia · Представления без копирования (views) Копировать
A = reshape(collect(1:12), 3, 4)
col = @view A[:, 2]
col .*= 10
@show A col
`view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
`size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Вопрос 12 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `col = @view A[:, 2]`?
Julia Julia · Представления без копирования (views) Копировать
A = reshape(collect(1:12), 3, 4)
col = @view A[:, 2]
col .*= 10
@show A col
Проверить на отдельном примере, что представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Проверить на отдельном примере, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Проверить на отдельном примере, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Проверить на отдельном примере, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Проверить на отдельном примере, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Вопрос 13 из 20
Что должно остаться истинным после рефакторинга участка с `col = @view A[:, 2]`?
Julia Julia · Представления без копирования (views) Копировать
A = reshape(collect(1:12), 3, 4)
col = @view A[:, 2]
col .*= 10
@show A col
Сохранить в реализации правило: Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Сохранить в реализации правило: `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Сохранить в реализации правило: Представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Сохранить в реализации правило: Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Сохранить в реализации правило: `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Вопрос 14 из 20
При переносе кода с `col = @view A[:, 2]` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
V=\operatorname{view}(A,I)\;\Rightarrow\;V\sim A
Приёмка должна подтвердить, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Приёмка должна подтвердить, что представление из `view` отделяет данные при первой записи, поэтому его изменение не влияет на исходный массив.
Приёмка должна подтвердить, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Приёмка должна подтвердить, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Приёмка должна подтвердить, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Вопрос 16 из 20
Какой механизм Julia определяет поведение строки `b = copy(a)`?
b=a\Rightarrow\operatorname{storage}(b)=\operatorname{storage}(a)
Julia Julia · Изменяемость Копировать
inner = [1, 2]
a = [inner, [3, 4]]
b = copy(a)
push!(b[1], 9)
push!(b, [5])
@show a b
`view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
`size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
`copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Вопрос 17 из 20
Какую проверку стоит добавить для участка с `b = copy(a)`?
Julia Julia · Изменяемость Копировать
inner = [1, 2]
a = [inner, [3, 4]]
b = copy(a)
push!(b[1], 9)
push!(b, [5])
@show a b
Проверить на отдельном примере, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Проверить на отдельном примере, что `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Проверить на отдельном примере, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Проверить на отдельном примере, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Проверить на отдельном примере, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Вопрос 18 из 20
Какую гарантию должна сохранить правка участка с `b = copy(a)`?
Julia Julia · Изменяемость Копировать
inner = [1, 2]
a = [inner, [3, 4]]
b = copy(a)
push!(b[1], 9)
push!(b, [5])
@show a b
Сохранить в реализации правило: Массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Сохранить в реализации правило: `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.
Сохранить в реализации правило: Большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Сохранить в реализации правило: `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Сохранить в реализации правило: `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Вопрос 19 из 20
После обновления Julia или пакета поведение участка с `b = copy(a)` изменилось. Какой критерий приёмки остаётся корректным?
b=a\Rightarrow\operatorname{storage}(b)=\operatorname{storage}(a)
Приёмка должна подтвердить, что `size`, `axes` и `ndims` описывают форму массива; код, рассчитанный на произвольные массивы, не должен без причины предполагать индексацию только `1:n`.
Приёмка должна подтвердить, что `view` и `@view` создают представление общей памяти: запись через представление меняет исходный массив, а время жизни данных связано с владельцем.
Приёмка должна подтвердить, что большинство массивов Julia индексируются от единицы и имеют непрерывные целые оси, поэтому `axes` полезен только для отладки.
Приёмка должна подтвердить, что массивы изменяемы, присваивание копирует ссылку, а `copy` выполняет лишь неглубокое копирование; вложенные изменяемые элементы могут оставаться общими.
Приёмка должна подтвердить, что `copy` рекурсивно копирует все вложенные массивы и словари, исключая общее изменяемое состояние.