Задача:
/*
Необходимо написать in-memory кэш, который будет по ключу (uuid пользователя) возвращать
профиль и список его заказов.
1. У кэша должен быть TTL
2. Кэш может пользоваться функцией(-и), которая работает с заказами (добавляет/обновляет/удаляет)
3. Должны быть написаны тестовые сценарии использования данного кэша
*/
type UserProfile struct {
UUID string
Name string
Orders []Order
}
type Order struct {
UUID string
CreatedAt time.Time
UpdatedAt time.Time
Basket interface{}
}
Вопросы:
БД
— Зачем нужны индексы в бд и сталкивался ли на практике?
— Уровни изоляции транзакций и аномалии
— Блокировки. Что такое оптимистичные и пессимистичные блокировки?
— У тебя есть несколько подов в кубере, все они ходят в одну базу. Как избежать гонки данных?
Kafka
— Что такое партиции, почему нельзя просто писать в топик?
— Что делать с сообщениями, которые не можем обработать?
— Что такое consumer lag?
— Какие есть гарантии доставки?
Микросервисы
— Как строили общение между микросервисами?
— Какие помнишь паттерны микросервисной архитектуры?
— Что такое Saga?
gRPC
— Как можно безопасно в gRPC поменять контракт в протофайле, без обновления на стороне клиента, чтобы не сломать его?
— У нас было поле address, мы его у себя решили поменять на full_address. Всё поломается?
— А если убрать полностью поле address, всё сломается?
Разное
— Для чего нужен kubernetes? Какие задачи решает?
— Какие метрики собирали? Работал ли с трассировкой?
— Работал с pprof?
Писал ли тесты? Для чего они нужны в целом?