Перед интервью сказали, что упор будет на БД.Готовился по книге Designing Data Intensive apps (это просто библия), книгам Рогова по Постгресу, докам Постгреса, прорешал школьный басик по SQL + книга по индексам + куча других туториаловЭтап 1. Ожидали 30 мин, но со мной чет вышло на 1 час. Собесил ТЛ команды, а также присутсвовал ТЛ всех гоферов озона
- Индексы в ПГ. Детально все типы индексов, детально принципы работы btree, hash индекса. Примеры применения не стандартных индексов на практике. Привел пример, как GiST индекс может помочь с фильтрацией товаров по GRB цвету (пример из главы по индексам в Desgining Data Intensive Apps)
- OSI - все уровни, TCP / UDP / QUICK, DNS (поверхностно)
- Что происходит, когда мы вводим в браузере запрос? попросили протрейсить по всем уровням OSI
- Легкая задача: дается матрица NxN, заполнить случайными числами обязательно так, чтобы они не повторялись. Просто хеш мапа и перегенерируем случайное число, ели оно уже было.
Этап 2. 2 часа. Собесил ТЛ команды, но мог подключиться и ТЛ гоферовЯ чуть не умер с кринжа. Честно, я мог выступить лучше. Позволил себе не знать свойство селективности в индексах, а также допустил гонку в задаче по многопоточке.
- Спроектировать схему БД для библиотеки. Там присутсвовало отношение many to many. Надо задавать вопросы, не молчать, получать фидбек. Проставить в схеме constraint и ПК-ФК. Короче сделать все по православному ACID. На басике в ШК такого не было, я прошел курс на степике, где это было постоянно, поэтому справился
- Написать 3 запроса к своей БД. Это простенькие запросы с элементарными join / group by. Никакой рекурсивной магии
- Дается запрос. Надо улучшить его индексом. Вот тут я жестко тупил. Интуитивно я понимал, почему индекс стоит ставить на определенное поле, но не мог это конкретно по-научному объяснить. Не повторяйте моих ошибок. Забойте индексы идеально. tldr: надо отталкиваться от метрики селективности индекса
- Алго-задача. https://leetcode.com/problems/valid-parentheses/ . Я ее решал раз 10 на разных языках. Написал не идеальный код, он выглядел недостаточно лаконично, мой косяк.
- Задача на конкаренси. Дается массив URL-ов. Надо каждому URL сделать GET запрос. Решил с помощью паттерна
work queue
(мастер-слейв). Мастер выдает задачи воркерам и ждет их завершения. Вообще ничего сложного, но я сильно нервничал, поэтому косячил, например, где-то забыл запустить бесконечный цикл в горутине и тд. Задачу в идеале решать с вейт группой и именно так я писал бы в проде, но почему-то попросили юзать именно каналы, хотя они там были не оптимальны.
Материалы по которым готовился.(см библиотеку ноушена)
-
Jay Kreps - I love logs
-
Katherine Cox-Buday - concurrency in go (мастхев)
-
Robert Martin - Clean Architecture (мастхев)
-
Александр Швец - Погружение в паттерны проектирования
-
Martin Kleppmann - Designing Data-Intensive application (мастхев) кабанчик))
-
банда четырех(гамма, хелм,джонсон, влиссидес) - паттерны объектно-ориентированного проектирования