Vitech / Витех (Ви.Tech) - 2
Актуальность: 1 кв 2025
Вопросы
Заголовок раздела «Вопросы»- Расскажи о себе;
hr-behavioral/about-you - Как в Golang можно реализовать множество (set)?
go/basics - Как устроен слайс в Golang?
go/slices-arrays - Что будет если мы задали слайсу cap=2 и сделали append по одному элементу 3 раза?
go/slices-arrays - Какие существуют методы разрешения коллизий в хэш-таблицах?
go/maps - Что такое graceful-shutdown? Рeaлизовывал ли/Как работает?
go/sync - Как правильно править поля в proto-структурах (удалять/добавлять новые/переименовывать), учитывая что сервис-клиент и сервис-сервер уже в проде?
network/grpc - Сравни gRPC и REST;
network/http - Как реализовать конкурентную запись в хэш-таблицу в Golang?
go/concurrency - Что такое встраивание в Golang?
go/interfaces - Какая разница между ключевыми словами
makeиnew?go/stdlib-tooling - Зачем RWMutex если у нас есть обычный Mutex?
go/sync - Опиши принцип работы GC (сборщик мусора);
go/memory-gc - Reflection в Golang. Что такое, минусы/плюсы;
go/stdlib-tooling - Допустим есть структура A, и внутри нее поле B типа string. Далее в main мы создаем переменную C, которая является указателем на пустую структуру A. После чего мы хотим сравнить является ли C == nil и результат выводим на экран. Что будет выведено?
go/strings-runes - Представь что есть в кафке топик с тремя партициями, туда пишутся данные. Ты пишешь приложение со стороны консюмера. Сколько консюмеров нужно задействовать, чтобы наиболее оптимально вычитывать этот топик?
brokers/kafka - Представь что ты написал консюмер, он читает из кафки какие-то данные, один топик, одна партиция, один консюмер. Нам сказали что копится лаг. Ты зашел в логи консюмера и увидел что там ошибка при анмаршалинге данных (например нам прислали битый json). Нам нужно оперативно пофиксить эту проблему. Как ее решить?
brokers/kafka - Что такое Pod в K8s?
containers/kubernetes - Знаешь ли что такое graceful-degradation?
go/sync - Допустим у нас сервис читает из топика сообщения, и на каждое сообщение пишет в базу что-то. У нас стало слишком много сообщений, и база не справляется. Как решить проблему на уровне сервиса?
brokers/kafka - Для чего нужен rate-limiter?
architecture/patterns - Допустим у нас проблема - есть info ручка, она отдает ответ 500 или очень долго обрабатывает запрос. Внутри нее происходит чтение из базы данных. Как диагностировать эту проблему и как ее решить? Потом мы узнали что bottle-neck это чтение из базы, как теперь решать проблему?
sql/general - Какой запрос наиболее оптимальный: если много разных таблиц и мы все объединяем join ’ами, или когда все данные в одной таблице?
sql/query-optimization - Как проверить в базе данных, идет ли запрос с использованием индекса или без использования индекса?
sql/indexes - Сталкивался ли с материализованными представлениями в индексе?
sql/indexes - Для чего нужны view (представления) в базе данных?
sql/schema-design - Как реализуется связь many-to-many?
go/interfaces - Какие ты знаешь уровни изоляции транзакций?
sql/transactions
Задача: Провести ревью кода, рассказать о роблемах и как ожно их исправить. go/basics
Заголовок раздела «Задача: Провести ревью кода, рассказать о роблемах и как ожно их исправить. go/basics»package main
import ( "context " "errors "
cache "cache " zap "github.com/go-zap/zap " repository "repository ")
type Service struct { db repository.Repository logger *zap.Logger cache cache.Cache}
func New(db repository.Repository, logger *zap.Logger, cache cache.Cache) *Service { return &Service{ db: db, logger: logger, cache: cache, }}
// GetProduct возвращает сущность по ее IDfunc (s *Service) GetProduct(ctx context.Context, id int64) (*models.Product, error) { product, err := s.cache.GetProduct(id) if err != nil { return nil, err }
if product != nil { return product, nil }
product, err := s.db.GetProduct(context.Background(), id) if err != nil { return nil, err }
return product, nil}
// Update обновляет информацию о сущностиfunc (s Service) CreateProduct(c context.Context, p models.Product) error { _, err := s.db.CreateProduct(c, p) if err != nil { return err }
return nil}