Ozon / Озон (полный список, ч. 1)
Актуальность: 3 кв 2024
Общие рекомендации по подготовке к собесу - https://job.ozon.ru/events/32
- Что такое страница памяти?
go/memory-gc - Если страницы мапятся на физическую память, то каждое обращение к памяти это поиск в некоторой мапе. Как это может работать быстро?
go/maps - Что такое hugepages?
linux-os/memory - Что такое сисколл?
linux-os/general - Что происходит во время вызова сискола?
linux-os/general - Что делает сисколл fork?
linux-os/processes - Что делает сисколл epoll?
linux-os/general - Какие знаешь примитивы синхронизации в ОС?
linux-os/general - Что такое user space и kernel space? Зачем нужно такое разделение?
linux-os/general - Что такое файловый дескриптор?
linux-os/filesystem - Что такое stdin/stdout/stderr, какие дескрипторы назначены для этих сущностей?
linux-os/filesystem - du/dh показывает, что место в файловой системе еще есть, а записать ничего не возможно, т.к. “нет места”. Почему и как исправить?
linux-os/filesystem - На голом сервере запущен какой-то сервис и в нем есть утечка памяти. Что произойдет, когда память закончится? Речь не про кубер и ограничения контейнеров, а про голый сервер
go/memory-gc - На какой тип памяти система будет опираться при решении запустить OOM Killer?
linux-os/memory - Зачем нужна виртуальная память?
linux-os/memory - Чем отличается процесс от системного потока?
go/runtime - А как процессы могут обмениваться информацией?
linux-os/processes - Что такое GOMAXPROCS? Зачем это нужно?
go/runtime - Может ли приложение с GOMAXPROCS=4 потреблять больше 4-eх ядер CPU?
go/runtime - Разработчик дал на ревью код своего нового кэша, нам необходимо провести код-ревью
nosql-cache/caching
Задача: (код без описания) go/basics
Заголовок раздела «Задача: (код без описания) go/basics»// Кэш будет использоваться под высокой нагрузкой в проде// Частота записи/чтения 20%/80% соответственноfunc main() { fmt.Println(GetOrCreate("hello ", "world ")) fmt.Println(Get("hello "))}
var cache = make(map[string]string)
// GetOrCreate проверяет существование ключа key// Если такого нет, то создает новое значениеfunc GetOrCreate(key, value string) string { var m sync.Mutex m.Lock() value = cache[key] m.Unlock() if value != "" { return value } m.Lock() cache[key] = value m.Unlock() return value}
func Get(key string) string { var m sync.Mutex m.Lock() v := cache[key] m.Unlock() return v}- Как устроена структура данных «хеш-таблица»?
algorithms/data-structures - Допустим есть операция set. На вход подается ключ - строка, а значение - число. Что происходит внутри функции?
go/strings-runes - Расскажи самую сложную или интересную инженерную задачу, которую приходилось решать
hr-behavioral/about-you - Что выведет этот код?
go/puzzles
Задача: (код без описания) go/basics
Заголовок раздела «Задача: (код без описания) go/basics»func main() { ch := make(chan int, 1) for i := 0; i < 10; i++ { select { case x := <-ch: print(x) case ch <- i: } }}- Рассказать, как устроен LRU cache
algorithms/data-structures - Есть 3 сущности - пользователь, чат и сообщение. У пользователя есть имя и дата регистрации. У чата есть название и дата создания. У сообщения есть текст, автор и дата создания. Пользователь может состоять в нескольких чатах одновременно. Сообщение обязательно принадлежит чату, сообщение не может принадлежать более чем 1 чату одновременно Нужно описать предметную область в виде таблиц
sql/general - Выбрать все чаты пользователя Вася в формате (chat_id,chat_name)
sql/general - Какие еще виды соединений кроме join знаешь?
sql/query-optimization - Что будет, если вместо join применить left join в этом запросе?
sql/query-optimization - Что такое индекс? Сколько и какие индексы будут созданы по этой схеме?
sql/indexes - По мере роста размеров таблиц этот запрос начинает все медленнее работать, можешь понять почему и исправить?
sql/general - Что показывает эта команда explain?
sql/query-optimization - Какой узел плана однозначано показывает, что не хватает индекса?
sql/indexes - Как заполнять поле id при вставках в таблицы users, chats, messages
sql/general - Чаты становятся популярными, число пользователей растет и нам скоро не хватит свободного места на диске для хранения всей переписки. Что нам делать?
architecture/system-design - Какой первичный ключ лучше - числовой или uuid?
sql/schema-design - Дана таблица «orders»:
sql/general
Задача: (код без описания) misc/general
Заголовок раздела «Задача: (код без описания) misc/general» +----+---------+---------------------+-------------+| id | user_id | created_at | price_total |+----+---------+---------------------+-------------+| 1 | 111 | 2024-01-01 10:00:00 | 2 000 || 2 | 222 | 2024-01-02 10:00:00 | 100 || 3 | 111 | 2024-04-01 10:00:00 | 20 000 || 4 | 222 | 2024-05-01 10:00:00 | 5 000 || 5 | 333 | 2024-05-02 10:00:00 | 10 000 |+-----+--------+---------------------+-------------+Задача: Напишите SQL-запрос, который вернет количество заказов по каждому пользователю с price_total больше или равным 1000 в таком виде отсортированному по количеству заказов в обратном порядке: algorithms/sorting-search
Заголовок раздела «Задача: Напишите SQL-запрос, который вернет количество заказов по каждому пользователю с price_total больше или равным 1000 в таком виде отсортированному по количеству заказов в обратном порядке: algorithms/sorting-search» +----------+-------------+| user_id | order_count |+----------+-------------+| 111 | 2 || 222 | 1 || 333 | 1 |+----------+-------------+- Что выведет данная программа. Почему так?
func main() { nums := []int{1, 2, 3} addNum(nums[0:2]) fmt.Println(nums) // ? addNums(nums[0:2]) fmt.Println(nums) // ?}
func addNum(nums []int) { nums = append(nums, 4)}
func addNums(nums []int) { nums = append(nums, 5, 6)}- Рассказать про правила работы append
- Рассказать про синтаксис [0:2:2]
- Что выведет этот код, и почему?
func main() { lst := []string{"a ", "b ", "c ", "d "} for k, v := range lst { if k == 0 { lst = []string{"aa ", "bb ", "cc ", "dd "} }
fmt.Println(v) }}func main() { lst := []string{"a ", "b ", "c ", "d "} for k, v := range lst { if k == 0 { lst[3] = "z " }
fmt.Println(v) }}- Что из себя представляет протокол HTTP? Из какиx основных частей состоит HTTP запрос и HTTP ответ?
- Какие есть основные методы HTTP?
- Примеры HTTP хедеров?
- Назовите классы кодов состояний HTTP
- Какие существуют инструменты для мониторинга и отладки микросервисов?
- Пример инструментов для сбора и отображения метрик?
- Какая тулза используется для профилирования в Go?
- Зачем микросервису на Go нужен хендлер /debug/vars?
- Как посмотреть логи микросервиса живущего в kubernetes?
- Команда top показывает, что какой-то процесс потребляет 146% CPU. Это реальная ситуация? Если дa, то нужно ли мне что-то с этим делать?
- Как убить процесс linux ’e?
- Что делать, если я вызываю kill и процесс продолжает работает?
- Что такое -9?
- Зачем нужен UDP, если он такой ненадежный?
- Зачем нужен TCP, если он такой медленный?
- Где применяется udp?
- На примере создания заказа. Есть запрос на сервис и есть ответ, между этими двумя действиями мы сладываем в аналитику товары которые заказали (например для подсчета популярности товаров). Сервис аналитики переодически работает медленно или вовсе таймаутит, и мы не успеваем ответить, теряем заказы. Что делать, чтобы перестать терять заказы, и деньги соответственно?
- Сервис аналитики не будет читать данные из нас или нашей очереди, что будем делать?
- Отдел аналитики жалуется на высокий рпс от нас когда они под нагрузкой мы их сервис кладем. Как решить проблему?
- Проблема с аналитикой решена. Теперь проблема с местом занимаемым нашей очередю, инфра ограничьила ресурсы(расширять дальше некуда), что делать? (На аналитику повлиять мы не можем, у них в планах переписать сервис и тд нужно свое решение)
- Мой сервис используют внешний API для построения маршрутов, в рамках тарифа у нас есть ограничьение по RPS. Нужно спроектировать ratelimiter
- Какие есть плюсы и минусы у одной/обоих схем?
- Как можно оптимизировать работу с redis ’ом?
- Есть два сервиса A и B, сервис A отправляет запросы в сервис B по HTTP. Какие существуют варианты для масштабирования сервиса B? Можно использовать любые технологии
- Какие есть плюсы и минусы у одной/обоих схем?
- Сколько балансировщиков будет в первой схеме?
- Если их больше, чем один, то как приложение узнает где они запущены? (возвращаемся к оригинальной задаче)
- Как именно будет выглядеть discovery через DNS?
- В чем разница между REST и RPC подходами?
- Обязательно ли делать REST поверх HTTP?
- Обязательно ли делать RPC поверх HTTP?
- Расскажи как RPC запрос можно переложить на HTTP-запрос?
- А как это сделать используя только TCP?
- В чем разница между proxy / reverse-proxy?
- Есть таблица на 1 миллиард записей, которая активно используется в продашкне. Нужно сделать датафикс, который модифицирует 10 миллионов строк. Как бы ты подошел к решению задачи?
- Какие типы локов (блокировок) есть в PostgreSQL? Кто берет эти локи?
- Какие аномалии могут быть при исполнении несколько транзакций параллельно? Расскажи кратко о них
- Что такое транзакция? Какие уровни изоляции транзакций существуют в РСУБД?
- Построить оптимальный индекс для
SELECT*FROM employее WHERE sex ='m'AND salary >300000 AND age =20ORDER BY created_at- Какие существуют общие типы ограничьений (constraint) в реляционных базах данных? Расскажите кратко о назначении каждого ограничения
- Что произойдет если нарушить CHECK?
- Можно ли как-то визуально улучшить сообщения об ошибках нарушения ограничения CHECK средствами БД?
- Может ли ограничьение CHECK или UNIQUE работать на всю таблицу целиком? Если дa, приведите пример.
- Что такое значение NULL?
- Допустим мы создаем таблицу:
CREATE TABLE TEST_TABLE (A serial,B bigint,C bigint);insert into test_table(b) values(5);и выполняем команду на вставку строки
Заголовок раздела «и выполняем команду на вставку строки»Что вернет следующий запрос?
- Допустим мы создаем таблицу:
sql/general
Задача: (код без описания) sql/general
Заголовок раздела «Задача: (код без описания) sql/general»CREATE TABLE TEST_TABLE (A serial,B bigint,C bigint,PRIMARY KEY(a, c));insert into test_table(b) values(5);Что вернет следующий запрос?
- Что происходит с таблицей при добавлении первичного ключа?
sql/schema-design - Для чего нужны FOREIGN KEY?
sql/schema-design - Допустим мы имеем базу данных из следующих таблиц
sql/general
Задача: (код без описания) sql/general
Заголовок раздела «Задача: (код без описания) sql/general»CREATE TABLE products (product_no integer PRIMARY KEY,name text,price numeric);
CREATE TABLE orders (order_id integer PRIMARY KEY,shipping_address text);
CREATE TABLE order_items (product_no integer REFERENCES products,order_id integer REFERENCES orders,quantity integer,PRIMARY KEY(product_no, order_id));Как сделать так, чтобы
Заголовок раздела «Как сделать так, чтобы»- при удалении записи из таблицы products гарантированно не удалялись все записи из таблицы order_items с тем же продуктом?
sql/general - при удалении из таблицы заказов автоматически удалялись все записи этого заказа из order_items?
sql/general - Приведите плюсы и минусы практики применения FOREIGN KEY
sql/schema-design - Нужно описать модель библиотеки. Есть 3 сущности: «Автор», «Книга», «Читатель». Физически книга только одна и может быть только у одного читателя. Нужно составить таблицы для библиотеки так чтобы это учесть.
sql/general - Написать запрос - выбрать названия всех книг которые на руках
sql/general - Написать запрос - выбрать названия всех книг в библиотеке у которых больше 3 авторов
sql/general - Написать запрос - выбрать имена топ 3 читаемых авторов на данный момент
sql/general