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

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 int64
Balance float64
}
type Transaction struct{
From int64
To int64
Amount float64
}
type AccountRepository struct{
// Здесь набор методов для работы с аккаунтом пользователя
}
type MessageBroker struct{
// Здесь набор методов для работы с брокером сообщений
}
type TranscationService struct{
accountRepository AccountRepository
messageBroker 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 ")
}
}
  • Рассказать подробно где и как тут будет происходить гонка? 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 {}