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

Rambler / Рамблер - 2

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

  • Какие задачи вы выполняли на предыдущем месте работы? hr-behavioral/about-you
  • Что изменилось в авторизации на вашем проекте? Какую часть этой работы делали лично вы? security/auth
  • Над каким самым интересным проектом вы работали? Какие интересные фичи вы реализовали? hr-behavioral/about-you
  • С какими базами данных, языками, технологиями, очередями сообщений вы работали? brokers/general
  • Расскажите о технической реализации механизма аутентификации в вашей системе. Когда устройство отправляет запрос к бэкенду, как сервис определяет, кто этот пользователь? Какой механизм передачи учетных данных вы использовали? security/auth
  • Какие архитектурные паттерны вы примените для инвалидации JWT, если потребуется выйти со всех устройств одновременно? security/auth
  • В стандартной схеме аутентификации используются пары Access + Refresh JWT-токенов. Представьте, что пользователь нажимает кнопку «Выйти со всех устройств». Как реализовать мгновенную инвалидацию всех его токенов без ожидания истечения их срока жизни? security/auth
  • Существует несколько подходов к валидации JWT-токенов: кто ее выполняет, в каком месте и т.д. Какой подход вам более привычен? security/auth
  • Что произойдет, если перепутать роли ключей: хранить приватный ключ в секрете на сервере, а публичный ключ раздавать всем клиентам или сервисам для верификации? Является ли это критической уязвимостью или такая схема допустима? security/appsec
  • Каким образом вы перенаправляли логи в ClickHouse? Откуда получали данные? nosql-cache/clickhouse
  • Что такое индексы? Для чего они нужны? sql/indexes
  • Какие существуют уровни изоляции транзакций? sql/transactions
  • Какие стратегии репликации вы знаете? sql/replication-scaling
  • Какие подходы к шардированию существуют? Как разделить данные? На что стоит обратить внимание? sql/replication-scaling
  • Предположим, что вы решили выбрать стратегию шардирования данных по диапазону, распределяя равное количество записей. Какие проблемы могут из-за этого возникнуть? sql/replication-scaling
  • Есть ли у вас опыт работы с NoSQL? nosql-cache/general
  • Приведите примеры задач, где вы однозначно выберете NoSQL, а где - PostgreSQL. nosql-cache/general
  • В чем ключевые различия между Kafka и RabbitMQ? brokers/kafka
  • Что такое многопоточность в Go? Как она устроена? go/basics
  • Предположим, какая-то из горутин выполняет тяжелую вычислительную задачу и работает очень долго. Что произойдет с этой горутиной и с другими горутинами, которые стоят за ней в очереди? go/runtime
  • Другой вариант: приложение использует несколько логических процессоров. Если на одном из процессоров закончились горутины для выполнения, будет ли этот процессор простаивать? go/runtime
  • Что такое стек и куча? Какая между ними разница? Когда данные попадают в стек, а когда - в кучу? go/memory-gc
  • Насколько вы следите за обновлениями языка, нововведениями и т.д.? hr-behavioral/about-you
  • Знаете ли, как работает сборщик мусора Go? go/memory-gc

Задача: Есть огромная таблица «Все люди мира» с миллиардами записей о всех людях, когда-либо живших на Земле. В таблице много полей, но аналитики чаще всего фильтруют по двум: год рождения и пол. У них есть три типа запросов: sql/general

Заголовок раздела «Задача: Есть огромная таблица «Все люди мира» с миллиардами записей о всех людях, когда-либо живших на Земле. В таблице много полей, но аналитики чаще всего фильтруют по двум: год рождения и пол. У них есть три типа запросов: sql/general»
  • Фильтр по году рождения;
  • Фильтр по полу;
  • Фильтр по обоим полям одновременно.

Все три запроса работают медленно. Какую стратегию индексации вы предложите, чтобы ускорить все три сценария?

Задача: Представьте, что у вас есть воркер, который обрабатывает заявки из базы данных. Он открывает транзакцию, делает SELECT всех заявок со статусом New, обрабатывает их в течение ~20 секунд, а затем делает UPDATE, меняя статус на Processed. Все это происходит в рамках одной долгой транзакции. Приходит баг-репорт: некоторые новые заявки помечаются как обработанные, но фактически не были обработаны. Почему такая ситуация возможна? sql/transactions

Заголовок раздела «Задача: Представьте, что у вас есть воркер, который обрабатывает заявки из базы данных. Он открывает транзакцию, делает SELECT всех заявок со статусом New, обрабатывает их в течение ~20 секунд, а затем делает UPDATE, меняя статус на Processed. Все это происходит в рамках одной долгой транзакции. Приходит баг-репорт: некоторые новые заявки помечаются как обработанные, но фактически не были обработаны. Почему такая ситуация возможна? sql/transactions»

Задача: Представьте, что у вас есть аналитическая таблица с миллиардами записей: люди, их возраст и рост в миллиметрах. Вы уже оптимизировали три основных типа запросов, создав составные и отдельные индексы по полям «возраст» и «рост». Однако с приходом большого количества аналитиков, которые постоянно запускают сложные выборки, система снова начала работать медленно. Что вы будете делать? sql/indexes

Заголовок раздела «Задача: Представьте, что у вас есть аналитическая таблица с миллиардами записей: люди, их возраст и рост в миллиметрах. Вы уже оптимизировали три основных типа запросов, создав составные и отдельные индексы по полям «возраст» и «рост». Однако с приходом большого количества аналитиков, которые постоянно запускают сложные выборки, система снова начала работать медленно. Что вы будете делать? sql/indexes»

Доп. вопрос: Представьте, что объем данных вырос настолько, что физически не помещается на доступных дисках в стойке. Один сервер уже не вмещает всю таблицу. При этом нагрузка на запись высокая, используется схема Master-Master. Как вы будете масштабировать хранение?

Задача: Есть функция получения данных из «базы». Необходимо придумать вариант, как правильно читать данные из БД. Данные запрашиваются часто и в большом объеме. В примере для иллюстрации используется просто цикл, который пытается получить данные. sql/general

Заголовок раздела «Задача: Есть функция получения данных из «базы». Необходимо придумать вариант, как правильно читать данные из БД. Данные запрашиваются часто и в большом объеме. В примере для иллюстрации используется просто цикл, который пытается получить данные. sql/general»
type User struct {
ID int
Name string
}
var dbHits int
func getUserInfoFromDB(id int) User {
time.Sleep(100 * time.Millisecond)
dbHits++
return User{ID: id, Name: fmt.Sprintf("User-%d ", id)}
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println(getUserInfoFromDB(i))
}(42)
}
wg.Wait()
fmt.Println("DB hits:", dbHits)
}