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

Magnit / Магнит - 7

Актуальность: 4 кв 2025

  • Какой был самый интересный проект, который вы разрабатывали? hr-behavioral/about-you
  • Было ли в рамках вашей деятельности полный этап от проектирования до разработки, мониторинга, сопровождения и так далее? devops/observability
  • Что такое слайс? go/slices-arrays
  • Какие операции со слайсами можно делать? go/slices-arrays
  • Потокобезопасны ли слайсы? go/slices-arrays
  • Если создать слайс a, присвоить его переменной b, а затем изменить элемент в исходном слайсе a - изменится ли b? Почему это происходит и как сделать так, чтобы изменения в одном не затрагивали другой? go/slices-arrays
  • Какие бывают каналы? В чем их отличие? go/channels
  • Зачем придумали буферизированный и небуферизированный канал? go/channels
  • По какому принципу работает буфер? go/channels
  • Что будет, если попытаться отправить данные в закрытый канал? go/channels
  • Что будет, если попытаться закрыть уже закрытый канал? go/channels
  • Что произойдет, если использовать for range для чтения из канала, который никогда не будет закрыт? go/channels
  • Чем deadlock отличается от паники? go/sync
  • Что такое строки в Go? go/strings-runes
  • Почему строки сделали неизменяемыми? go/strings-runes
  • Как устроены строки в Go на техническом уровне? Мы говорим, что строка - это слайс байтов, но при этом работаем с символами. Как это устроено внутри? go/slices-arrays
  • Сколько максимум байт занимает один символ? go/strings-runes
  • Что такое руна? go/strings-runes
  • Сколько байт занимает одна руна? go/strings-runes
  • Что такое мапа? Чем отличаются новая мапа? go/maps
  • Как мапа реализована в Go? go/maps
  • Два элемента лежат в бакете. Как по ключу получить нужное значение из бакета? go/maps
  • Как называется ситуация, когда несколько элементов попали в один бакет? go/maps
  • Что происходит, когда два разных ключа имеют одинаковый хэш и попадают в один бакет? go/maps
  • Мапа потокобезопасна? go/maps
  • Чем отличается fatal error от паники? go/errors-panic
  • Возможно ли перехватить fatal error? go/errors-panic
  • Какие бывают мьютексы? В чем их отличие? go/sync
  • Что под капотом используется в мьютексе? go/sync
  • Чем atomic лучше мьютекса? go/sync
  • Какие основные техники используются при работе с атомиками? go/sync
  • Какие примитивы синхронизации из стандартного пакета sync вы применяли на практике, помимо sync.Map? go/sync
  • В каких случаях использовали sync.Pool? go/sync
  • Что такое горутина? В чем ее преимущество перед потоками? go/concurrency
  • За счет чего обеспечивается «бесплатность» коммуникации между горутинами? go/concurrency
  • Всегда ли эффективно решать задачу с помощью горутины? В каких случаях они не дадут выигрыш? go/concurrency
  • Как классифицировать операции, с которыми работают горутины? В каком случае будет преимущество? go/concurrency
  • Что такое стек горутины? go/concurrency
  • Что происходит при переполнении стека? go/memory-gc
  • Какие способы можно применить, чтобы разгрузить память и избежать переполнения? go/memory-gc
  • Как определить, на стек или на кучу ложится переменная? go/memory-gc
  • Почему предпочтительнее использовать стек, а не кучу? go/memory-gc
  • Почему куча - это медленная память? go/memory-gc
  • Какой алгоритм у сборки мусора? Есть ли там этапы сборки? algorithms/general
  • Что такое Mark and Sweep? go/memory-gc
  • Что такое Stop the World и на каком этапе срабатывает? go/memory-gc
  • Как можно уменьшить негативное влияние Stop the World? go/memory-gc
  • Какие индексы в Postgres знаете, с какими есть опыт работы? sql/indexes
  • Что из себя представляет B-tree? sql/indexes
  • Чем сбалансированное дерево лучше бинарного? network/balancing
  • Нужно составить составной индекс по трем полям. Как будете его составлять, какие метрики использовать для этого? sql/indexes
  • Что такое селективность? sql/indexes
  • Что такое покрывающий индекс? sql/indexes
  • В чем минусы большого количества индексов? sql/indexes
  • Есть ли опыт работы с транзакциями? sql/transactions
  • Что такое транзакции? sql/transactions
  • Какие принципы ACID? sql/transactions
  • Что такое фантомное чтение? sql/transactions
  • Какие есть уровни изоляции? sql/transactions
  • Рассмотрим уровень изоляции транзакций Read Committed. Запущены две параллельные транзакции. Вторая транзакция вносит изменения в данные и успешно коммитится, пока первая еще активна. Увидит ли первая транзакция эти изменения при следующем чтении тех же данных? sql/transactions
  • Какой уровень изоляции стоит выбрать для того, чтобы гарантированно работать с данными, не позволяя другим транзакциям их изменять? sql/transactions
  • Работали ли вы с масштабированием баз данных? hr-behavioral/about-you
  • Какие есть способы масштабирования баз данных? sql/replication-scaling
  • Есть ли опыт работы с блокировками? Какие использовали в работе? sql/transactions
  • Есть ли опыт работы с Kafka? brokers/kafka
  • Как будет работать комбинация «консьюмеров больше, чем партиций»? brokers/general
  • Как будет работать комбинация «партиций больше, чем консьюмеров»? brokers/general
  • Какие есть гарантии доставки? brokers/general
  • Удавалось ли реализовывать exactly once на уровне микросервисов? Какие паттерны использовали? Какие еще можно предложить способы реализации? architecture/microservices
  • Что такое паттерн Outbox? architecture/microservices
  • Как можно разрешить Consumer Lag? brokers/kafka
  • Гарантирует ли Kafka уникальность и последовательность сообщений? brokers/kafka
  • Есть несколько консьюмеров одного и того же топика, два-три разных сервиса. Каким образом каждый из этих консьюмер-групп будет получать сообщение? Не получится ли так, что первая группа получила некоторое сообщение, а вторая, не успев, потеряет? brokers/general
  • Как консьюмер-лаг соотносится с консьюмер-группами? brokers/general
Пример:
Дано: `[1, 2, 3, 4, 5]`, `[4, 5, 6, 7, 8]`
Результат: `[1, 2, 3, 4, 4, 5, 5, 6, 7, 8]`
func merge(a []int, b []int) []int {
// код решения
}
  • Какая сложность чтения по индексу добавления? sql/indexes
  • Что можете сказать про алгоритмическую сложность? algorithms/complexity
  • Почему добавление в слайс константное? Чем это гарантируется? Константно ли оно всегда? go/slices-arrays
func merge(chList ...chan int) chan int {
// код решения
}
func main() {
ch1 := make(chan int, 2)
ch1 <- 1
ch1 <- 2
close(ch1)
ch2 := make(chan int, 2)
ch2 <- 1
ch2 <- 2
close(ch2)
out := merge(ch1, ch2)
for v := range out {
fmt.Println(v)
}
}