Magnit / Магнит - 2 (E-com)
Актуальность: 1 кв 2025
Скрининг
Заголовок раздела «Скрининг»- Какими инструментами для оценки производительности и профилирования пользуетесь во время разработки?
go/perf-profiling - Расскажи про уровни изоляций транзакций;
sql/transactions - Расскажи про гарантии доставки Kafka;
brokers/kafka - С какими проблемами при длительном продукте приходилось сталкиваться в практике?
hr-behavioral/about-you - Какие инструменты используешь для работы сервисов в проде?
devops/observability - Какие виды автотестов используешь?
testing/general - Приходилось принимать участие в выстраивании архитектуры?
architecture/general - Какими инструментами для визуализации архитектуры пользовался?
architecture/general
Тех. собес
Заголовок раздела «Тех. собес»- Какой есть другой способ взаимодействия микросервисов кроме оркестрации?
architecture/microservices - Какие плюсы и минусы у монолита?
architecture/microservices - Какие плюсы и минусы у микросервисов?
architecture/microservices - Какие есть способы минимизировать влияние ошибок при внесении изменений в продукт и последующий релиз?
devops/ci-cd - Применяли ли у себя паттерн graceful degradation?
architecture/patterns - Фича-тогглы (feature toggles) применяли?
devops/ci-cd - В чем различие между pg и mongo?
nosql-cache/mongodb - Какие плюсы и минусы у pg и mongo?
nosql-cache/mongodb - Как устроена оркестрация на техническом уровне?
containers/kubernetes - Как сделать блокировки чтобы записывать мог только один поток, а читать могли все?
sql/transactions - Какие есть уровни изоляции и какие проблемы они решают?
sql/transactions - Что можешь рассказать про индексы?
sql/indexes
Код выполняет следующий набор действий
Заголовок раздела «Код выполняет следующий набор действий»- Проверяет баланс пользователей;
go/concurrency - Выполняет транзакцию;
sql/transactions - Отправляет информация о транзакции в некий абстрактный брокер.
sql/transactions
- Провести ревью кода;
- Рассказать какие проблемы имеются в данном коде;
- Внести правки по каждой из найденных проблем.
type Account struct{UserId int64Balance float64}
type Transaction struct{From int64To int64Amount float64}
type AccountRepository struct{// Здесь набор методов для работы с аккаунтом пользователя}
type MessageBroker struct{// Здесь набор методов для работы с брокером сообщений}
type TranscationService struct{accountRepository AccountRepositorymessageBroker MessageBroker}
func(t*TranscationService) MakeTransaction(fromUser, toUser int64, amount float64) error{sourceAccount:=t.accountRepository.Get("SELECT * FROM account WHERE id = "+strconv.Itoa(fromUser))destinationAccount:=t.accountRepository.Get("SELECT * FROM account WHERE id = "strconv.Itoa(toUser))
if sourceAccount.Balance>=amount{t.accountRepository.saveAccount(Account{UserId: fromUser,Balance: sourceAccount.Balance-amount})
t.accountRepository.saveAccount(Account{UserId: toUser,Balance: destinationAccount.Balance-amount})
t.messageBroker.Send(Transaction{From: fromUser,To: toUser,Amount: amount})
return nil} else{return errors.New("some error ")}}Вопросы к задаче 1
Заголовок раздела «Вопросы к задаче 1»- Рассказать подробно где и как тут будет происходить гонка?
go/sync - Как ускорить весь метод?
go/perf-profiling - Как защитить баланс от гонки, но чтобы в этот момент его получение было доступно из других параллельных запросов?
go/concurrency - Какие есть иные механизмы чтобы уменьшить участок синхронизации помимо транзакционных блокировок?
sql/transactions - Сталкивался ли с ошибками долгих транзакций (idle in transaction)?
sql/transactions - Как ускорить или отказаться от проверки “if sourceAccount.Balance >= amount”
go/concurrency - Как может помочь версионирование баланса при блокировках?
sql/transactions - В структуре Account какие могут быть проблемы?
go/concurrency - Что не хватает в методе MakeTransaction чтобы обезопасить от возможных долгих операций?
sql/transactions - В структре TranscationService какой есть еще способы работы с объектами AccountRepository и MessageBroker?
network/tcp-udp - В чем еще может помочь применение интерфейсов?
go/interfaces
Задача: Есть функция, которая делает HTTP запрос. Реализация отсутствует Необходимо реализовать логику Rate Limiter с возможностью ограничения кол-ва запросов, производимых этой функцией до n-го кол-ва в секунду. architecture/system-design
Заголовок раздела «Задача: Есть функция, которая делает HTTP запрос. Реализация отсутствует Необходимо реализовать логику Rate Limiter с возможностью ограничения кол-ва запросов, производимых этой функцией до n-го кол-ва в секунду. architecture/system-design»func makeRequest(url, data string) error {}