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

Mutex, WaitGroup и sync

Проверяет взаимное исключение, осторожное чтение под `RWMutex`, счётчик завершения, одноразовую инициализацию и диагностику ошибок синхронизации. В тесте 25 вопросов, из них 15 требуют чтения кода, команд или диагностических фрагментов. Задания опираются на устойчивые правила современного Go; если поведение зависит от версии, это оговорено в самом вопросе.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 5 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 25
Команда проверяет решение по теме «Взаимное исключение Mutex». Как точнее всего описать выполнение фрагмента?
GoВзаимное исключение Mutex: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
type Store struct{ mu sync.Mutex; m map[string]int }
func (s *Store) Put(k string,v int){ s.mu.Lock(); defer s.mu.Unlock(); s.m[k]=v }
func main(){}
Вопрос 2 из 25
Перед публикацией кода по теме «Взаимное исключение Mutex» нужно уточнить контракт. Какая доработка делает поведение явным для вызывающего кода?
GoВзаимное исключение Mutex: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
type Store struct{ mu sync.Mutex; m map[string]int }
func (s *Store) Put(k string,v int){ s.mu.Lock(); defer s.mu.Unlock(); s.m[k]=v }
func main(){}
Вопрос 3 из 25
В рабочем примере по теме «Взаимное исключение Mutex» важно отделить гарантию от догадки. Какое правило достаточно применить для проверки ответа?
GoВзаимное исключение Mutex: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
type Store struct{ mu sync.Mutex; m map[string]int }
func (s *Store) Put(k string,v int){ s.mu.Lock(); defer s.mu.Unlock(); s.m[k]=v }
func main(){}
Вопрос 4 из 25
Фрагмент относится к теме «Взаимное исключение Mutex». Какой граничный случай нужно проверить отдельно?
Вопрос 5 из 25
На ревью разбирают тему «Взаимное исключение Mutex». Какой инженерный компромисс здесь действительно существует?
Вопрос 6 из 25
Перед публикацией кода по теме «Блокировка чтения и записи RWMutex» нужно уточнить контракт. Что именно произойдёт при выполнении показанного фрагмента?
GoБлокировка чтения и записи RWMutex: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
type Cache struct{ mu sync.RWMutex; m map[string]int }
func (c *Cache) Get(k string) int { c.mu.RLock(); defer c.mu.RUnlock(); return c.m[k] }
func main(){}
Вопрос 7 из 25
В рабочем примере по теме «Блокировка чтения и записи RWMutex» важно отделить гарантию от догадки. Как исправить основной риск без ненужной перестройки решения?
GoБлокировка чтения и записи RWMutex: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
type Cache struct{ mu sync.RWMutex; m map[string]int }
func (c *Cache) Get(k string) int { c.mu.RLock(); defer c.mu.RUnlock(); return c.m[k] }
func main(){}
Вопрос 8 из 25
Фрагмент относится к теме «Блокировка чтения и записи RWMutex». Какой принцип позволяет вывести ответ без запуска программы?
GoБлокировка чтения и записи RWMutex: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
type Cache struct{ mu sync.RWMutex; m map[string]int }
func (c *Cache) Get(k string) int { c.mu.RLock(); defer c.mu.RUnlock(); return c.m[k] }
func main(){}
Вопрос 9 из 25
На ревью разбирают тему «Блокировка чтения и записи RWMutex». Какой контрпример разрушит слишком широкое толкование правила?
Вопрос 10 из 25
В разделе «Блокировка чтения и записи RWMutex» показан конкретный случай. Что важно учесть помимо формальной корректности?
Вопрос 11 из 25
В рабочем примере по теме «Ожидание группы WaitGroup» важно отделить гарантию от догадки. Какое описание результата совпадает с правилами Go?
GoОжидание группы WaitGroup: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
func main(){ var wg sync.WaitGroup; wg.Add(3); for i:=0;i<3;i++{ go func(){ defer wg.Done() }() }; wg.Wait() }
Вопрос 12 из 25
Фрагмент относится к теме «Ожидание группы WaitGroup». Какая правка устраняет причину, а не маскирует её проявление?
GoОжидание группы WaitGroup: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
func main(){ var wg sync.WaitGroup; wg.Add(3); for i:=0;i<3;i++{ go func(){ defer wg.Done() }() }; wg.Wait() }
Вопрос 13 из 25
На ревью разбирают тему «Ожидание группы WaitGroup». Что именно гарантирует Go в этой ситуации?
GoОжидание группы WaitGroup: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
func main(){ var wg sync.WaitGroup; wg.Add(3); for i:=0;i<3;i++{ go func(){ defer wg.Done() }() }; wg.Wait() }
Вопрос 14 из 25
В разделе «Ожидание группы WaitGroup» показан конкретный случай. Что нельзя автоматически переносить на похожий код?
Вопрос 15 из 25
Команда проверяет решение по теме «Ожидание группы WaitGroup». Как оценить этот подход для производственного кода?
Вопрос 16 из 25
Фрагмент относится к теме «Однократная инициализация». Какой итог можно предсказать без пробного запуска?
GoОднократная инициализация: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
var once sync.Once
func initValue(){}
func main(){ once.Do(initValue); once.Do(initValue) }
Вопрос 17 из 25
На ревью разбирают тему «Однократная инициализация». Как изменить решение, не ломая его исходную задачу?
GoОднократная инициализация: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
var once sync.Once
func initValue(){}
func main(){ once.Do(initValue); once.Do(initValue) }
Вопрос 18 из 25
В разделе «Однократная инициализация» показан конкретный случай. Какое утверждение остаётся верным на всех поддерживаемых платформах?
GoОднократная инициализация: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
var once sync.Once
func initValue(){}
func main(){ once.Do(initValue); once.Do(initValue) }
Вопрос 19 из 25
Команда проверяет решение по теме «Однократная инициализация». Какое условие нельзя считать выполненным по умолчанию?
Вопрос 20 из 25
Перед публикацией кода по теме «Однократная инициализация» нужно уточнить контракт. Какой вариант честно называет и преимущество, и издержку?
Вопрос 21 из 25
На ревью разбирают тему «Тестирование и наблюдаемость» в тесте «Mutex, WaitGroup и sync». Как точнее всего описать выполнение фрагмента?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package sample
import("sync";"testing")
func TestCount(t *testing.T){ var mu sync.Mutex; n:=0; var wg sync.WaitGroup; wg.Add(100); for i:=0;i<100;i++{go func(){defer wg.Done();mu.Lock();n++;mu.Unlock()}()};wg.Wait();if n!=100{t.Fatal(n)} }
Вопрос 22 из 25
В разделе «Тестирование и наблюдаемость» показан конкретный случай в тесте «Mutex, WaitGroup и sync». Какая доработка делает поведение явным для вызывающего кода?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package sample
import("sync";"testing")
func TestCount(t *testing.T){ var mu sync.Mutex; n:=0; var wg sync.WaitGroup; wg.Add(100); for i:=0;i<100;i++{go func(){defer wg.Done();mu.Lock();n++;mu.Unlock()}()};wg.Wait();if n!=100{t.Fatal(n)} }
Вопрос 23 из 25
Команда проверяет решение по теме «Тестирование и наблюдаемость» в тесте «Mutex, WaitGroup и sync». Какое правило достаточно применить для проверки ответа?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package sample
import("sync";"testing")
func TestCount(t *testing.T){ var mu sync.Mutex; n:=0; var wg sync.WaitGroup; wg.Add(100); for i:=0;i<100;i++{go func(){defer wg.Done();mu.Lock();n++;mu.Unlock()}()};wg.Wait();if n!=100{t.Fatal(n)} }
Вопрос 24 из 25
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт в тесте «Mutex, WaitGroup и sync». Какой граничный случай нужно проверить отдельно?
Вопрос 25 из 25
В рабочем примере по теме «Тестирование и наблюдаемость» важно отделить гарантию от догадки в тесте «Mutex, WaitGroup и sync». Какой инженерный компромисс здесь действительно существует?

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

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

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

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