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

SberMarket / СберМаркет (Купер) - 1

  • Что такое индексы в базах данных? Какие типы индексов существуют и их особенности? Что такое B-Tree и в чем заключается его сбалансированность? Для каких операций какой тип индекса лучше применять? network/balancing
  • Что такое профилирование запросов? Чем отличаются ANALYZE и EXPLAIN ANALYZE? Как по выводу EXPLAIN понять, выполняется ли запрос быстро или медленно? Какие «красные флаги» в выводе EXPLAIN указывают на проблемы? sql/query-optimization
  • Что такое транзакции? Что означает аббревиатура ACID? Какие уровни изоляции транзакций существуют и какие проблемы они решают? sql/transactions
  • Что такое оптимистичные и пессимистичные блокировки? В каких сценариях лучше применять оптимистичные блокировки? sql/transactions
  • Как организовать работу трех сервисов с одной базой данных без конфликтов? Какие стратегии и паттерны для этого существуют? architecture/microservices
  • Что вы можете рассказать про шардирование, репликацию и партиционирование? В чем их различия и когда что применять? sql/schema-design
  • Расскажите про Apache Kafka: producer, consumer, partition, consumer group, offset. Что такое партиции и для чего они нужны? Можно ли уменьшить или увеличить количество партиций? Какие виды гарантий доставки сообщений существуют? Что такое Dead Letter Queue? sql/schema-design
  • Если consumer упал до того, как сообщение было обработано, как гарантировать повторную обработку этого сообщения? Как Kafka в этом случае управляет offset? brokers/kafka
  • Что такое consumer lag в Kafka? Чем он опасен и как его мониторить? brokers/kafka
  • Какие паттерны микросервисной архитектуры вы знаете? Можете привести примеры? architecture/microservices
  • Расскажите про типы JOIN в SQL: LEFT JOIN, INNER JOIN, RIGHT JOIN, FULL JOIN. В чем их различия и когда какой использовать? sql/query-optimization
  • Для чего нужна команда VACUUM в PostgreSQL? Чистит ли она индексы? Что делает VACUUM FULL? sql/indexes
  • Что можно изменить в .proto -файле gRPC, чтобы не сломать обратную совместимость с существующими клиентами? Какие изменения безопасны, а какие - нет? network/grpc
  • Какой у вас опыт работы с Kubernetes? Какие операции вы выполняли? containers/kubernetes
  • Какие инструменты для observability вы использовали? Какой стек? go/memory-gc
  • Как вы выставляли лимиты и пороги для метрик? Как настраивали алерты на основе этих лимитов? devops/observability
  • Как вы профилировали Go-программы? Какие инструменты использовали? Какие виды профилирования? go/perf-profiling
  • Писали ли вы тесты? Какие именно? Какое целевое покрытие тестами было на вашем проекте? Как измеряли покрытие? testing/unit-mocks

Задача: Необходимо написать in-memory кэш, который будет по ключу (uuid пользователя) возвращать профиль и список его заказов: go/memory-gc

Заголовок раздела «Задача: Необходимо написать in-memory кэш, который будет по ключу (uuid пользователя) возвращать профиль и список его заказов: go/memory-gc»
  • У кэша должен быть TTL (2 сек);
  • Кэшем может пользоваться функция(-и), которая работает с заказами (добавляет/обновляет/удаляет). Если TTL истек, то возвращается nil. При апдейте TTL снова устанавливается 2 сек. Методы должны быть потокобезопасными;
  • Должны быть написаны тестовые сценарии использования данного кэша.
// (базовые структуры не менять)
type Profile struct {
UUID string
Name string
Orders []*Orders
}
type Order struct {
UUID string
Value any
CreatedAt time.Time
UpdatedAt time.Time
}

Доп задание: автоматическая очистка истекших записей