Перед интервью сказали, что упор будет на БД.Готовился по книге Designing Data Intensive apps (это просто библия), книгам Рогова по Постгресу, докам Постгреса, прорешал школьный басик по SQL + книга по индексам + куча других туториаловЭтап 1. Ожидали 30 мин, но со мной чет вышло на 1 час. Собесил ТЛ команды, а также присутсвовал ТЛ всех гоферов озона

  1. Индексы в ПГ. Детально все типы индексов, детально принципы работы btree, hash индекса. Примеры применения не стандартных индексов на практике. Привел пример, как GiST индекс может помочь с фильтрацией товаров по GRB цвету (пример из главы по индексам в Desgining Data Intensive Apps)
  2. OSI - все уровни, TCP / UDP / QUICK, DNS (поверхностно)
  3. Что происходит, когда мы вводим в браузере запрос? попросили протрейсить по всем уровням OSI
  4. Легкая задача: дается матрица NxN, заполнить случайными числами обязательно так, чтобы они не повторялись. Просто хеш мапа и перегенерируем случайное число, ели оно уже было.

Этап 2. 2 часа. Собесил ТЛ команды, но мог подключиться и ТЛ гоферовЯ чуть не умер с кринжа. Честно, я мог выступить лучше. Позволил себе не знать свойство селективности в индексах, а также допустил гонку в задаче по многопоточке.

  1. Спроектировать схему БД для библиотеки. Там присутсвовало отношение many to many. Надо задавать вопросы, не молчать, получать фидбек. Проставить в схеме constraint и ПК-ФК. Короче сделать все по православному ACID. На басике в ШК такого не было, я прошел курс на степике, где это было постоянно, поэтому справился
  2. Написать 3 запроса к своей БД. Это простенькие запросы с элементарными join / group by. Никакой рекурсивной магии
  3. Дается запрос. Надо улучшить его индексом. Вот тут я жестко тупил. Интуитивно я понимал, почему индекс стоит ставить на определенное поле, но не мог это конкретно по-научному объяснить. Не повторяйте моих ошибок. Забойте индексы идеально. tldr: надо отталкиваться от метрики селективности индекса
  4. Алго-задача. https://leetcode.com/problems/valid-parentheses/ . Я ее решал раз 10 на разных языках. Написал не идеальный код, он выглядел недостаточно лаконично, мой косяк.
  5. Задача на конкаренси. Дается массив URL-ов. Надо каждому URL сделать GET запрос. Решил с помощью паттерна work queue (мастер-слейв). Мастер выдает задачи воркерам и ждет их завершения. Вообще ничего сложного, но я сильно нервничал, поэтому косячил, например, где-то забыл запустить бесконечный цикл в горутине и тд. Задачу в идеале решать с вейт группой и именно так я писал бы в проде, но почему-то попросили юзать именно каналы, хотя они там были не оптимальны.

Материалы по которым готовился.(см библиотеку ноушена)

  1. Jay Kreps - I love logs

  2. Katherine Cox-Buday - concurrency in go (мастхев)

  3. Robert Martin - Clean Architecture (мастхев)

  4. Александр Швец - Погружение в паттерны проектирования

  5. Martin Kleppmann - Designing Data-Intensive application (мастхев) кабанчик))

  6. банда четырех(гамма, хелм,джонсон, влиссидес) - паттерны объектно-ориентированного проектирования