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

Производительность и параллельные вычисления

Каждый блок соединяет поведение языка с качеством последующего анализа. В тесте «Производительность и параллельные вычисления» рассматриваются Векторизация, Профилирование, data.table-подход, Параллельные вычисления, Проверка допущений и качества и Воспроизводимость и интерпретация. Нужно предсказывать структуру результата, находить скрытые риски, выбирать исправление и доказывать его проверкой. Из 30 вопросов 18 содержат код; остальные описывают ситуации, в которых синтаксически допустимое решение может привести к неверному аналитическому выводу.

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. Читайте код построчно, учитывайте типы, атрибуты, пропуски и допущения анализа. После завершения откроются общий процент, 6 тематических шкал и объяснение к каждому заданию.
Вопрос 1 из 30
Ситуация: Цикл добавляет миллион значений в растущий вектор, и время увеличивается быстрее объёма данных. Что является главным техническим основанием для разбора?
RФрагмент R
n <- 10000
result <- numeric(n)
for (i in seq_len(n)) result[i] <- i^2
result[1:3]
Вопрос 2 из 30
Ситуация: Цикл добавляет миллион значений в растущий вектор, и время увеличивается быстрее объёма данных. Что именно может сломаться при новых данных?
RФрагмент R
n <- 10000
result <- numeric(n)
for (i in seq_len(n)) result[i] <- i^2
result[1:3]
Вопрос 3 из 30
Ситуация: Цикл добавляет миллион значений в растущий вектор, и время увеличивается быстрее объёма данных. Какое изменение устраняет именно причину проблемы?
Вопрос 4 из 30
Ситуация: Цикл добавляет миллион значений в растущий вектор, и время увеличивается быстрее объёма данных. Какой контроль отличит исправление от случайно удачного результата?
Вопрос 5 из 30
Ситуация: Цикл добавляет миллион значений в растущий вектор, и время увеличивается быстрее объёма данных. Какое заключение останется верным и на новых данных?
RФрагмент R
n <- 10000
result <- numeric(n)
for (i in seq_len(n)) result[i] <- i^2
result[1:3]
Вопрос 6 из 30
Ситуация: Команда ускорила арифметику на наносекунды, но отчёт по-прежнему ждёт чтение гигабайтного файла. Какой принцип непосредственно относится к этому коду?
RФрагмент R
tmp <- tempfile(); write.csv(mtcars,tmp,row.names=FALSE)
Rprof(); result <- read.csv(tmp); Rprof(NULL)
result <- summaryRprof()$by.total[1:3,]
result
Вопрос 7 из 30
Ситуация: Команда ускорила арифметику на наносекунды, но отчёт по-прежнему ждёт чтение гигабайтного файла. Какой риск здесь остаётся главным, даже если результат выглядит правдоподобно?
RФрагмент R
tmp <- tempfile(); write.csv(mtcars,tmp,row.names=FALSE)
Rprof(); result <- read.csv(tmp); Rprof(NULL)
result <- summaryRprof()$by.total[1:3,]
result
Вопрос 8 из 30
Ситуация: Команда ускорила арифметику на наносекунды, но отчёт по-прежнему ждёт чтение гигабайтного файла. Какая правка делает решение устойчивым, а не просто удобным на текущем примере?
Вопрос 9 из 30
Ситуация: Команда ускорила арифметику на наносекунды, но отчёт по-прежнему ждёт чтение гигабайтного файла. Что нужно проверить после правки?
Вопрос 10 из 30
Ситуация: Команда ускорила арифметику на наносекунды, но отчёт по-прежнему ждёт чтение гигабайтного файла. Какой итог разбора не смешивает правило языка с впечатлением от результата?
RФрагмент R
tmp <- tempfile(); write.csv(mtcars,tmp,row.names=FALSE)
Rprof(); result <- read.csv(tmp); Rprof(NULL)
result <- summaryRprof()$by.total[1:3,]
result
Вопрос 11 из 30
Ситуация: Функция должна вернуть расширенную копию таблицы, но добавляет столбец и в объект вызывающего кода. Какое правило нужно применить к этому фрагменту прежде всего?
RФрагмент R
library(data.table)
dt1 <- data.table(x=1:3)
dt2 <- dt1
dt2[, y := x*2]
result <- dt1
result
Вопрос 12 из 30
Ситуация: Функция должна вернуть расширенную копию таблицы, но добавляет столбец и в объект вызывающего кода. Что в этой ситуации способно исказить вывод без явной синтаксической ошибки?
RФрагмент R
library(data.table)
dt1 <- data.table(x=1:3)
dt2 <- dt1
dt2[, y := x*2]
result <- dt1
result
Вопрос 13 из 30
Ситуация: Функция должна вернуть расширенную копию таблицы, но добавляет столбец и в объект вызывающего кода. Что следует изменить в коде или процессе?
Вопрос 14 из 30
Ситуация: Функция должна вернуть расширенную копию таблицы, но добавляет столбец и в объект вызывающего кода. Какой тест лучше всего ловит повтор этой ошибки?
Вопрос 15 из 30
Ситуация: Функция должна вернуть расширенную копию таблицы, но добавляет столбец и в объект вызывающего кода. Как сформулировать вывод без лишних обобщений?
RФрагмент R
library(data.table)
dt1 <- data.table(x=1:3)
dt2 <- dt1
dt2[, y := x*2]
result <- dt1
result
Вопрос 16 из 30
Ситуация: Четыре микроскопические задачи запускают на десятках процессов, и большая часть времени уходит на создание workers. Какой механизм точнее всего объясняет связь кода с ситуацией?
RФрагмент R
library(parallel)
cl <- makeCluster(2)
result <- parLapply(cl, 1:4, function(i) sum((1:1e5)^i))
stopCluster(cl)
result
Вопрос 17 из 30
Ситуация: Четыре микроскопические задачи запускают на десятках процессов, и большая часть времени уходит на создание workers. Какой дефект нужно искать в первую очередь?
RФрагмент R
library(parallel)
cl <- makeCluster(2)
result <- parLapply(cl, 1:4, function(i) sum((1:1e5)^i))
stopCluster(cl)
result
Вопрос 18 из 30
Ситуация: Четыре микроскопические задачи запускают на десятках процессов, и большая часть времени уходит на создание workers. Какой вариант исправления сохраняет смысл анализа?
Вопрос 19 из 30
Ситуация: Четыре микроскопические задачи запускают на десятках процессов, и большая часть времени уходит на создание workers. Какая проверка относится к исходному риску, а не к внешнему виду результата?
Вопрос 20 из 30
Ситуация: Четыре микроскопические задачи запускают на десятках процессов, и большая часть времени уходит на создание workers. Какое заключение лучше всего выдерживает проверку?
RФрагмент R
library(parallel)
cl <- makeCluster(2)
result <- parLapply(cl, 1:4, function(i) sum((1:1e5)^i))
stopCluster(cl)
result
Вопрос 21 из 30
Ситуация: После векторизации итог немного отличается, а downstream-порог превращает малую разницу в другую категорию. На какое свойство R здесь следует опереться?
RФрагмент R
x <- runif(1000)
a <- sum(x)
b <- Reduce(`+`, x)
result <- all.equal(a,b,tolerance=1e-12)
result
Вопрос 22 из 30
Ситуация: После векторизации итог немного отличается, а downstream-порог превращает малую разницу в другую категорию. Почему успешный запуск ещё не доказывает корректность?
RФрагмент R
x <- runif(1000)
a <- sum(x)
b <- Reduce(`+`, x)
result <- all.equal(a,b,tolerance=1e-12)
result
Вопрос 23 из 30
Ситуация: После векторизации итог немного отличается, а downstream-порог превращает малую разницу в другую категорию. Какая правка лучше локальной заплатки?
Вопрос 24 из 30
Ситуация: После векторизации итог немного отличается, а downstream-порог превращает малую разницу в другую категорию. Как подтвердить корректность на граничном случае?
Вопрос 25 из 30
Ситуация: После векторизации итог немного отличается, а downstream-порог превращает малую разницу в другую категорию. Какой вывод точнее всего связывает механизм и главный риск?
RФрагмент R
x <- runif(1000)
a <- sum(x)
b <- Reduce(`+`, x)
result <- all.equal(a,b,tolerance=1e-12)
result
Вопрос 26 из 30
Ситуация: Параллельные симуляции на Windows и Linux дают разные ответы, хотя установлен один seed. Какое утверждение лучше всего объясняет показанный фрагмент?
RФрагмент R
RNGkind("L'Ecuyer-CMRG")
set.seed(14)
result <- .Random.seed[1:6]
result
Вопрос 27 из 30
Ситуация: Параллельные симуляции на Windows и Linux дают разные ответы, хотя установлен один seed. Какое скрытое допущение здесь опаснее остальных?
RФрагмент R
RNGkind("L'Ecuyer-CMRG")
set.seed(14)
result <- .Random.seed[1:6]
result
Вопрос 28 из 30
Ситуация: Параллельные симуляции на Windows и Linux дают разные ответы, хотя установлен один seed. Что нужно сделать, чтобы ошибка не вернулась на следующем наборе данных?
Вопрос 29 из 30
Ситуация: Параллельные симуляции на Windows и Linux дают разные ответы, хотя установлен один seed. Какая проверка непосредственно подтверждает, что дефект устранён?
Вопрос 30 из 30
Ситуация: Параллельные симуляции на Windows и Linux дают разные ответы, хотя установлен один seed. Что стоит написать в технической рецензии к этому фрагменту?
RФрагмент R
RNGkind("L'Ecuyer-CMRG")
set.seed(14)
result <- .Random.seed[1:6]
result

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

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

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

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