Что можешь рассказать про интерфейсы в Go?
Обычный интерфейс Go задаёт набор методов; тип соответствует ему неявно, если имеет нужный method set. Значение интерфейса содержит динамический тип и значение.
Читать ответПодготовка к интервью
Разбирайте реальные вопросы, сверяйтесь с подробными ответами и готовьтесь по технологиям и компаниям.
Проверьте, насколько резюме подходит выбранной позиции, и получите рекомендации по улучшению.
Каталог
Обычный интерфейс Go задаёт набор методов; тип соответствует ему неявно, если имеет нужный method set. Значение интерфейса содержит динамический тип и значение.
Читать ответОсновные паттерны — worker pool, pipeline, fan-out/fan-in, producer-consumer и семафор. В Go буферизованный канал можно использовать как счётчик занятых слотов.
Читать ответУ строки Go есть дескриптор и байтовые данные; они не обязаны находиться в одной области. Размещение зависит от происхождения строки и escape analysis.
Читать ответНазовите фактический период коммерческой работы на Go, долю задач на языке и наиболее показательные проекты. Учебную практику укажите отдельно.
Читать ответGo обычно возвращает error отдельным значением, делая неуспех частью сигнатуры. Это упрощает локальную обработку, но требует дисциплины и добавляет повторяющиеся проверки.
Читать ответТипичный pipeline включает получение зависимостей, форматирование и анализ, тесты, сборку артефакта, проверку образа, развёртывание и контроль результата.
Читать ответПриведите реальный пример канала: очередь задач, сбор результатов, сигнал завершения или передача прогресса. Объясните владение и отмену.
Читать ответДобавьте mutex и выполняйте проверку с возможной вставкой под одной блокировкой. Существующее значение возвращается без замены, даже если это пустая строка.
Читать ответПервый фрагмент делает пять вызовов для ID 42 и содержит data race на dbHits++. Второй при корректно объявленных once и user выполнит загрузку один раз.
Читать ответИнверсия зависимостей означает, что бизнес-логика зависит от нужного ей контракта, а не от конкретной БД или HTTP-клиента. В Go это удобно выражать небольшими интерфейсами.
Читать ответДля передачи прогресса и результата между горутинами подходят каналы; для отмены — context, для ожидания — WaitGroup, для общего состояния — mutex или атомики.
Читать ответMutex защищает общий инвариант: все конкурирующие обращения должны соблюдать один протокол блокировки. RWMutex разделяет читателей и писателей, но не устраняет необходимость дисциплины.
Читать ответ