Как устроен процесс code review
Что проверяют
Как вы работаете в команде: умеете ли давать и принимать замечания, что считаете важным в чужом коде и видите ли в ревью инструмент, а не формальность. Следом часто просят пример спора на ревью и рассказать, чем он закончился.
Как отвечать
Опишите процесс, который был у вас, с конкретикой по Go:
- до ревью: pull request в GitHub или merge request в GitLab с описанием «что и зачем», ссылкой на задачу и способом проверки. CI прогоняет
gofmtилиgoimports,go vet,golangci-lintиgo test -race, и человек не тратит время на то, что ловит автоматика; - размер: небольшие изменения, до нескольких сотен строк, большой рефакторинг режется на серию PR;
- кто смотрит: ревьюеры назначаются через
CODEOWNERS, для слияния нужен один или два апрува, есть договорённость о сроке, например ответ в течение рабочего дня; - на что смотрит ревьюер в Go: обработка ошибок и обёртка через
%wс проверкойerrors.Isиerrors.As, утечки горутин и отмена черезcontext.Context, закрытие ресурсов черезdefer, гонки на общих данных, маленькие интерфейсы на стороне потребителя, имена по Go Code Review Comments; - формат комментариев: пометка
nit:для необязательного, отдельно блокирующие замечания, вопрос вместо приказа.
Затем дайте свой пример с цифрами: сколько PR в неделю вы смотрели, что ревью поймало (скажем, горутину без выхода, которая копила память), как сократили время ожидания ревью. Пример должен быть ваш: придуманный интервьюер распознает по первому уточнению.
Если командного ревью не было, так и скажите и расскажите, как проверяете код сами: линтеры, -race, ревью в open source или в учебном проекте, чтение Effective Go.
Где спотыкаются
Пересказывают кнопки GitHub вместо того, чтобы объяснить, зачем нужно ревью и что в нём ищут.
Сводят ревью к стилю и отступам. В Go форматирование решено gofmt, и спор о пробелах на ревью говорит об отсутствии автоматики.
Не могут рассказать о случае, когда их код раскритиковали. Ответ «замечаний у меня не бывает» звучит хуже любой честной истории о правке после ревью.