GraphLMS

Go
0/32 решеноНачать
ТопикиТопик 06

Code Review

0/2 решено0%

О чём этот блок

Писать конкурентный код — это половина работы. Вторая половина — читать чужой код и находить в нём баги до того, как они доедут до прода. Гонки данных, утечки горутин, aliasing переиспользуемого буфера, дописывание в общий слайс без синхронизации — эти ошибки компилируются, проходят беглый просмотр и взрываются только под нагрузкой или под -race. Этот блок переключает вас из режима «автор» в режим «ревьюер»: вам дают рабочий на вид, но багованный код, и задача — увидеть дефект, объяснить его и предложить починку.

Навык ревью конкурентного кода — один из самых ценных на собеседовании уровня middle+ и senior. Интервьюер проверяет не синтаксис, а вашу модель памяти: понимаете ли вы, где именно нарушен happens-before и почему запись из одной горутины может быть потеряна.

Что вы научитесь делать

  • Находить data race глазами: общий слайс/мапа, в которые пишут несколько горутин без синхронизации.
  • Распознавать aliasing буфера: слайс передан в фоновую горутину и тут же перезаписывается отправителем.
  • Видеть утечки горутин: фоновый цикл, который никто не останавливает.
  • Формулировать диагноз и минимальную корректную правку (мьютекс, копия буфера, done-канал, отмена).
  • Опираться на race detector и модель памяти как на инструменты доказательства.

Карта задач

  • 21 · Сервис агрегации метрик — багованный батч-агрегатор: гонка данных, утечка фоновой горутины и aliasing слайса-буфера, который одновременно передан в Save и перезаписывается. Найти все три и починить.
  • 22 · Параллельный HTTP-воркер с кэшированием — воркеры дописывают в общий слайс results без синхронизации: классическая гонка, падающая под -race. Локализовать и устранить.

Связанные главы учебника

// Типичный баг ревью: запись в общий слайс из нескольких горутин.
go func(id int) {
    results = append(results, fetch(id)) // ГОНКА: нет синхронизации
}(id)
// Лечение: mu.Lock()/Unlock() вокруг append или сбор через канал.

Задачи топика 2

21Сервис агрегации метрикreviewhard22Параллельный HTTP-воркер с кэшированиемreviewmedium