PS PowerShell  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Задания и параллельность

Задания и параллельность: практический тест по PowerShell с чтением кода, поиском причины ошибки и выбором надёжного решения. Темы: Фоновые задания, Потоковые задания, Параллельный ForEach-Object, Сбор результатов, Диагностика: параллельное выполнение. Базовая линия — PowerShell 7.6.3; Windows-зависимые команды и отличия Windows PowerShell 5.1 отмечены в условиях.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Start-Job запускает отдельный процесс PowerShell. Какое действие не создаст новой скрытой зависимости?
PowerShellStart-Job запускает отдельный процесс PowerShell
$j=Start-Job { $PID }
"local=$PID remote=$(Receive-Job -Wait $j)"
Remove-Job $j
Вопрос 2 из 25
Receive-Job вызывается дважды без -Keep. На каком правиле основан результат?
PowerShellReceive-Job вызывается дважды без -Keep
$j=Start-Job {1,2}
Wait-Job $j|Out-Null
Receive-Job $j
Receive-Job $j
Вопрос 3 из 25
Задание завершено, но объект Job остаётся. Что точнее всего описывает поведение?
PowerShellЗадание завершено, но объект Job остаётся
$result = Get-Job | Receive-Job -Wait -AutoRemoveJob
$items = @($result)
[pscustomobject]@{ Count=$items.Count; First=$items | Select-Object -First 1; IsNull=($null -eq $result) }
Вопрос 4 из 25
Локальная переменная используется внутри Start-Job. Как исправить причину, а не только симптом?
Вопрос 5 из 25
Ошибки задания считаются исключениями родительского кода. Как следует читать этот фрагмент?
Вопрос 6 из 25
Start-ThreadJob возвращает тот же PID. Как PowerShell обработает этот случай?
PowerShellStart-ThreadJob возвращает тот же PID
$j=Start-ThreadJob { $PID }
Receive-Job -Wait $j
$PID
Вопрос 7 из 25
Изменяемый потокобезопасный объект передан через $using:. Какая граница между этими средствами важна?
PowerShellИзменяемый потокобезопасный объект передан через $using:
$bag=[Collections.Concurrent.ConcurrentBag[int]]::new()
1..4|ForEach-Object{$n=$_;Start-ThreadJob {$using:bag.Add($using:n)}}|Receive-Job -Wait
Вопрос 8 из 25
Обычный List[T] изменяется несколькими thread jobs. Где заканчивается гарантия этого механизма?
PowerShellОбычный List[T] изменяется несколькими thread jobs
$list=[Collections.Generic.List[int]]::new()
$valueType = if($null -eq $list){'<null>'}else{$list.GetType().FullName}
[pscustomobject]@{ Value=$list; Type=$valueType; Count=@($list).Count }
Вопрос 9 из 25
Модуль с глобальным состоянием загружается в нескольких runspace. Какое решение здесь надёжнее?
Вопрос 10 из 25
ThreadJob выбран для изоляции недоверенного кода. Какое условие нужно проверить отдельно?
Вопрос 11 из 25
ThrottleLimit ограничивает одновременно работающие итерации. Какое скрытое допущение делает решение ненадёжным?
PowerShellThrottleLimit ограничивает одновременно работающие итерации
$result = & { 1..20 | ForEach-Object -Parallel { Start-Sleep -Milliseconds 50; $_ } -ThrottleLimit 4 }
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 12 из 25
Переменная передаётся через $using:. На каком правиле основан результат?
PowerShellПеременная передаётся через $using:
$factor=3
1..4|ForEach-Object -Parallel { $_*$using:factor }
Вопрос 13 из 25
-AsJob сочетается с -Parallel. Какое решение здесь надёжнее?
PowerShell-AsJob сочетается с -Parallel
$j=1..5|ForEach-Object -Parallel {$_*2} -AsJob
Receive-Job -Wait $j
Вопрос 14 из 25
Параллельность применяется к пяти миллисекундным операциям. Какое объяснение точнее?
Вопрос 15 из 25
Итерации пишут в один файл. Какой вариант точнее выражает контракт?
Вопрос 16 из 25
Результаты нескольких jobs нужно связать с входными узлами. Какое утверждение верно для этого случая?
PowerShellРезультаты нескольких jobs нужно связать с входными узлами
$result = & { $servers|ForEach-Object -Parallel {[pscustomobject]@{Server=$_;Ok=$true;At=Get-Date}} }
$summary = [ordered]@{ IsNull=($null -eq $result); Count=@($result).Count }
if($null -ne $result){$summary.Type=$result.GetType().FullName};[pscustomobject]$summary
Вопрос 17 из 25
Receive-Job -Wait получает результаты и ждёт завершения. Как поступить, чтобы поведение осталось предсказуемым?
PowerShellReceive-Job -Wait получает результаты и ждёт завершения
$result = Receive-Job -Job $jobs -Wait -AutoRemoveJob
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 18 из 25
Один job завершился Failed. Какое объяснение точнее?
PowerShellОдин job завершился Failed
$result = & { Get-Job | Select-Object Name,State,@{n="Reason";e={$_.JobStateInfo.Reason.Message}} }
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 19 из 25
Нужна исходная последовательность результатов. Как следует читать этот фрагмент?
Вопрос 20 из 25
Результаты слишком велики для памяти. Почему локальный успех ещё ничего не доказывает?
Вопрос 21 из 25
Некоторые итерации пропали. Какой принцип PowerShell здесь работает?
PowerShellНекоторые итерации пропали
$result = $jobs|Group-Object State|Select-Object Name,Count
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 22 из 25
Параллельный код даёт разные суммы. Какое объяснение точнее?
PowerShellПараллельный код даёт разные суммы
$result = 1..100|ForEach-Object -Parallel {1}|Measure-Object -Sum
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 23 из 25
Задания зависли. Какое объяснение не зависит от случайностей окружения?
PowerShellЗадания зависли
$jobs = @(Get-Job -State Running)
$finished = $jobs | Wait-Job -Timeout 15
$stuck = $jobs | Where-Object Id -notin $finished.Id
$stuck | Stop-Job
$jobs | Receive-Job -Keep -ErrorAction Continue
$jobs | Select-Object Id, Name, State, HasMoreData
Вопрос 24 из 25
Производительность хуже последовательной. Какое ограничение здесь нельзя упустить?
Вопрос 25 из 25
Ошибка воспроизводится только в ThreadJob. Какой вариант точнее выражает контракт?

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

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

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

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