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

Шаблоны конкурентных конвейеров

Разбирает fan-out, fan-in, обратное давление, отмену и жизненный цикл каналов в многосоставных конкурентных конвейерах. В тесте 30 вопросов, из них 18 требуют чтения кода, команд или диагностических фрагментов. Задания опираются на устойчивые правила современного Go; если поведение зависит от версии, это оговорено в самом вопросе.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 6 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 30
Перед публикацией кода по теме «Распределение работы fan-out» нужно уточнить контракт. Что увидит вызывающий код после выполнения?
GoРаспределение работы fan-out: результат выполнения
// Фрагмент для трассировки.
package main
func worker(in <-chan int,out chan<- int){for x:=range in{out<-x*x}}
func main(){}
Вопрос 2 из 30
В рабочем примере по теме «Распределение работы fan-out» важно отделить гарантию от догадки. Как подготовить этот код к реальному использованию?
GoРаспределение работы fan-out: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func worker(in <-chan int,out chan<- int){for x:=range in{out<-x*x}}
func main(){}
Вопрос 3 из 30
Фрагмент относится к теме «Распределение работы fan-out». Какой контракт определяет результат показанного кода?
GoРаспределение работы fan-out: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func worker(in <-chan int,out chan<- int){for x:=range in{out<-x*x}}
func main(){}
Вопрос 4 из 30
На ревью разбирают тему «Распределение работы fan-out». Какое допущение здесь чаще всего оказывается ложным?
Вопрос 5 из 30
В разделе «Распределение работы fan-out» показан конкретный случай. Какое замечание о цене решения будет точным?
Вопрос 6 из 30
В рабочем примере по теме «Объединение потоков fan-in» важно отделить гарантию от догадки. Что гарантированно произойдёт в показанной последовательности операций?
GoОбъединение потоков fan-in: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
func merge(cs ...<-chan int)<-chan int{out:=make(chan int);var wg sync.WaitGroup;wg.Add(len(cs));for _,c:=range cs{go func(c <-chan int){defer wg.Done();for v:=range c{out<-v}}(c)};go func(){wg.Wait();close(out)}();return out}
func main(){}
Вопрос 7 из 30
Фрагмент относится к теме «Объединение потоков fan-in». Какой вариант исправления соответствует обычной практике Go?
GoОбъединение потоков fan-in: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
func merge(cs ...<-chan int)<-chan int{out:=make(chan int);var wg sync.WaitGroup;wg.Add(len(cs));for _,c:=range cs{go func(c <-chan int){defer wg.Done();for v:=range c{out<-v}}(c)};go func(){wg.Wait();close(out)}();return out}
func main(){}
Вопрос 8 из 30
На ревью разбирают тему «Объединение потоков fan-in». Какой принцип языка объясняет результат полностью?
GoОбъединение потоков fan-in: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
func merge(cs ...<-chan int)<-chan int{out:=make(chan int);var wg sync.WaitGroup;wg.Add(len(cs));for _,c:=range cs{go func(c <-chan int){defer wg.Done();for v:=range c{out<-v}}(c)};go func(){wg.Wait();close(out)}();return out}
func main(){}
Вопрос 9 из 30
В разделе «Объединение потоков fan-in» показан конкретный случай. Какой предел контракта важен для вызывающего кода?
Вопрос 10 из 30
Команда проверяет решение по теме «Объединение потоков fan-in». Как решение скажется на тестировании и дальнейших изменениях?
Вопрос 11 из 30
Фрагмент относится к теме «Обратное давление». Какое наблюдение о работе кода будет верным?
GoОбратное давление: результат выполнения
// Фрагмент для трассировки.
package main
func produce(out chan<- int){for i:=0;i<100;i++{out<-i}}
func main(){ch:=make(chan int,10);go produce(ch);_=ch}
Вопрос 12 из 30
На ревью разбирают тему «Обратное давление». Какую правку разумнее внести до объединения изменений?
GoОбратное давление: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func produce(out chan<- int){for i:=0;i<100;i++{out<-i}}
func main(){ch:=make(chan int,10);go produce(ch);_=ch}
Вопрос 13 из 30
В разделе «Обратное давление» показан конкретный случай. Какое правило Go непосредственно объясняет поведение фрагмента?
GoОбратное давление: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func produce(out chan<- int){for i:=0;i<100;i++{out<-i}}
func main(){ch:=make(chan int,10);go produce(ch);_=ch}
Вопрос 14 из 30
Команда проверяет решение по теме «Обратное давление». Где заканчивается гарантия показанного приёма?
Вопрос 15 из 30
Перед публикацией кода по теме «Обратное давление» нужно уточнить контракт. Когда этот приём помогает, а когда начинает мешать?
Вопрос 16 из 30
На ревью разбирают тему «Отмена». Каков наблюдаемый результат этого кода?
GoОтмена: результат выполнения
// Фрагмент для трассировки.
package main
import "context"
func stage(ctx context.Context,in <-chan int)<-chan int{out:=make(chan int);go func(){defer close(out);for v:=range in{select{case out<-v*2:case <-ctx.Done():return}}}();return out}
func main(){}
Вопрос 17 из 30
В разделе «Отмена» показан конкретный случай. Какое изменение лучше всего укрепит контракт этого фрагмента?
GoОтмена: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "context"
func stage(ctx context.Context,in <-chan int)<-chan int{out:=make(chan int);go func(){defer close(out);for v:=range in{select{case out<-v*2:case <-ctx.Done():return}}}();return out}
func main(){}
Вопрос 18 из 30
Команда проверяет решение по теме «Отмена». Какое утверждение точнее всего описывает действующую гарантию?
GoОтмена: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "context"
func stage(ctx context.Context,in <-chan int)<-chan int{out:=make(chan int);go func(){defer close(out);for v:=range in{select{case out<-v*2:case <-ctx.Done():return}}}();return out}
func main(){}
Вопрос 19 из 30
Перед публикацией кода по теме «Отмена» нужно уточнить контракт. Что может изменить вывод при небольшом изменении условий?
Вопрос 20 из 30
В рабочем примере по теме «Отмена» важно отделить гарантию от догадки. Как решение влияет на читаемость и надёжность?
Вопрос 21 из 30
В разделе «Тестирование и наблюдаемость» показан конкретный случай. Что увидит вызывающий код после выполнения?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package sample
// Тест: получить первый результат, вызвать cancel, дождаться закрытия out с таймаутом.
func main(){}
Вопрос 22 из 30
Команда проверяет решение по теме «Тестирование и наблюдаемость». Как подготовить этот код к реальному использованию?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package sample
// Тест: получить первый результат, вызвать cancel, дождаться закрытия out с таймаутом.
func main(){}
Вопрос 23 из 30
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт. Какой контракт определяет результат показанного кода?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package sample
// Тест: получить первый результат, вызвать cancel, дождаться закрытия out с таймаутом.
func main(){}
Вопрос 24 из 30
В рабочем примере по теме «Тестирование и наблюдаемость» важно отделить гарантию от догадки. Какое допущение здесь чаще всего оказывается ложным?
Вопрос 25 из 30
Фрагмент относится к теме «Тестирование и наблюдаемость». Какое замечание о цене решения будет точным?
Вопрос 26 из 30
Команда проверяет решение по теме «Конкурентность и эксплуатация». Что гарантированно произойдёт в показанной последовательности операций?
GoКонкурентность и эксплуатация: результат выполнения
// Фрагмент для трассировки.
package main
const workers=16
const queue=64
func main(){ _=make(chan int,queue); _=workers }
Вопрос 27 из 30
Перед публикацией кода по теме «Конкурентность и эксплуатация» нужно уточнить контракт. Какой вариант исправления соответствует обычной практике Go?
GoКонкурентность и эксплуатация: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
const workers=16
const queue=64
func main(){ _=make(chan int,queue); _=workers }
Вопрос 28 из 30
В рабочем примере по теме «Конкурентность и эксплуатация» важно отделить гарантию от догадки. Какой принцип языка объясняет результат полностью?
GoКонкурентность и эксплуатация: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
const workers=16
const queue=64
func main(){ _=make(chan int,queue); _=workers }
Вопрос 29 из 30
Фрагмент относится к теме «Конкурентность и эксплуатация». Какой предел контракта важен для вызывающего кода?
Вопрос 30 из 30
На ревью разбирают тему «Конкурентность и эксплуатация». Как решение скажется на тестировании и дальнейших изменениях?

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

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

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

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