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)}