Перейти к содержимому

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 возвращает сущность по ее ID
func (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
}