Oracle Developer👨🏻‍💻
3.17K subscribers
582 photos
63 videos
2 files
468 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Собеседование в Леруа Мерлен

Друзья, всем привет!

Пока нахожусь в процессе написания поста по секции System Design, как и обещал в предыдущем посте, решил осветить мой опыт работы на проекте в одном из крупнейших ритейлеров DIY + продолжить практику написания постов на тему технических собеседований.

На текущий момент работаю в консалтинге, поэтому при смене проектов приходиться каждый раз проходить тестирование. Собеседование в этот раз проходил на проект по динамическому ценообразованию в Леруа Мерлен.

Стек:
Дата платформа(DP) включает в себя:
▫️Greenplum 320TB(ODS 205 TB, MARTS 115 TB);
▫️Greenplum&Power BI, ClickHouse/PostgreSQL&Superset для Data Marts и BI;
▫️Spark SQL — для обработки данных из RAW и загрузки в ODS;
▫️S3 — для хранения сырых данных (RAW слой - 140 TB);
▫️Airflow в качестве оркестратора ETL pipeline(ов);
▫️Шина данных ESB(Kafka, NiFi).

Детали по DP можно прочитать здесь.

Про команду и ее задачи:
Команда из 10 человек:
▫️Product Owner - InHouse;
▫️Team Lead - InHouse;
▫️2 Data Scientist(DS) - 2 FT аутстаффинга;
▫️1 Data Engineer(DE) - 1 FT аутстаффинг;
▫️1 Business and Data Analyst(DA/BA) - 1 FT аутстаффинг;
▫️1 DE/DA/BA - 1 FT аутстаффинг;
▫️2 BI developer(BI) - 1 FT аутстаффинг;
▫️Data partner - InHouse.

Задачи:
1️⃣
Разработать модель динамического ценообразования;
2️⃣Интеграция источников данных по мониторингу цен конкурентов и др. источники;
3️⃣Развитие и оптимизация отчетности ценообразования.

О моем функционале и ролях:
Совмещал роли DE, DA и BA.

Функционал:
1️⃣
Развитие DDS ценообразования;
2️⃣ Интеграция внешних источников;
3️⃣ Развитие и оптимизация BI отчетности в части Data Marts.

Детали по функционалу:
1️⃣
Роли DA и BA подразумевают опыт в части развития DDS, нужно понимать какие факты и справочники должны быть в ритейле, какие разрезы будет смотреть бизнес, ориентироваться по цифрам.
2️⃣ Есть задачи, связанные с интеграциями внешних источников. Их мало. Сам процесс подразумевает много общения и заявок в Slack и др. внутренние системы Леруа, на мой взгляд, ничего общего с функционалом DE/DA/BA.
3️⃣ Прежде всего это оптимизация скриптов и рефакторинг отчетности на предмет того, какими данными хорошо бы обогатить DDS.

Из плюсов:
▫️Доступы дали в 1ый же день;
▫️Можно работать удалено из любой точки мира;
▫️Классный офис со спортзалом и столовой(шведский стол - сравнительно дешево).

Из минусов:
▫️Французская корпоративная культура. Почему это минус - расскажу в финальной части своего поста.
▫️Релизная политика в DWH;
▫️30 % времени кластер Greenplum либо недоступен, либо тормозит.

⚠️ Т.к. мой формат работы в качестве аутстаффера на проекте не подразумевает трудоустройство напрямую в компанию и некоторые опции мне недоступны, остальные параметры я указал, исходя из того, что узнал в процессе работы.

Плюшки:
▫️ДМС и спортзал внутри офиса.
▫️Судя по вакансиям на hh.ru есть внутреннее обучение;
▫️По наблюдениям есть программы развития для сотрудников как вертикально, так и горизонтально.

Про з/п
Для внутренних сотрудников примерно от 200к до 350k net. В основном это ставки для дата-команд.
В финальном посте сделаю краткий обзор на организационную структуру процессов разработки.

Этапы собеседований
1️⃣
Техническое собеседование с одним из внутренних дата инженеров;

Продолжительность тестирования - 60 минут.

2️⃣ Знакомство с руководством(состав из 2х человек):
▫️ Директор по цифровым продуктам;
▫️ Product owner.

Продолжительность ~ 40 минут.

3️⃣ Ответ: взяли/не взяли.

Продолжение следует...

Обсудить в чатике 💬

Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Техническое собеседование в Леруа Мерлен

Формат общения - онлайн, звонок по Zoom.

Список вопросов:

1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
При загрузке новых цен в таблицу просто добавляются новые строчки без delete/update предыдущих.
Необходимо написать запрос, который выгрузит данные по активным ценам на конкретную дату. Обернуть в функцию. Какие плюсы и минусы такого хранения данных?

2️⃣ Есть 2 таблицы:
▫️Таблица поставок: Поставщик, Цена товара, Кол-во заказанного товара, дата заказа.
▫️Таблица поставщиков: Поставщик, Наименование поставщика
Необходимо найти поставщика с максимальной суммой заказов за месяц.

3️⃣ Условия задачи выше(см. п.2). Необходимо найти поставщика, который ничего не поставил за месяц. Рассказать, какой будет план запроса, что необходимо сделать, чтобы в плане был hash join и что это такое?

4️⃣ Есть таблица поставок: id, delivery_date, supplier_id, product_id, shipped, unit_price.
Какой поставщик отгрузил товаров нам на наибольшую сумму денег?

5️⃣ Колоночное хранение данных. Какие плюсы и минусы?

6️⃣ Данные в таблице равномерно распределены за 10 лет, не секционированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?

7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.

8️⃣ Как распределяются данные по сегментам и что такое перекосы?

9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?

Разбор как всегда в четверг 🎓

Обсудить в чатике 💬

Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Техническое собеседование в Леруа Мерлен. Ответы

Список вопросов: см. в посте вторника.

Ответы:
1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
Полная постановка в посте вторника

Итоговая функция - см. следующий пост в файле ⬇️

Плюсы:
▫️Быстрее запись в таблицу;
▫️Меньше места занимают данные.

Минусы:
▫️При любом запросе необходимо считывать всю таблицу для преобразования в SCD2 формат;
▫️При росте объема данных текущие вычислительные ресурсы перестанут справляться с вычислениями;
▫️Отсутствие поля для секционирования, т.е. только горизонтальное масштабирование ресурсов кластера поможет решить проблемы с производительностью запросов.

По 2️⃣, 3️⃣ и 4️⃣ запросы довольно простые, поэтому решение оставим на добрую волю читателей.
Добавлю, что в плане запроса должен быть full table scan по обеим таблицам и hash join.
Что это такое и с чем это едят - рассказывается на
курсе по оптимизации Oracle SQL.

5️⃣ Колоночное хранение данных. Какие плюсы и минусы?
Вкратце колоночное хранение данных - это хранение каждого поля таблицы в отдельном файле.
Плюсы:
▫️Производительность запросов ощутимо выше, т.к. читаются только те данные, которые указаны в select, а не вся строка;
▫️Хорошо подходят для вставки большого объема данных, операции batch-insert;
▫️Удаление колонки существенно дешевле в отличии от традиционных СУБД, удаляется только файл с указанным полем, не затрагивая остальные данные;
▫️Алгоритмы сжатия данных работают лучше на колоночных таблицах, т.к. каждый файл, который необходимо сжать, хранит данные только одного типа.

Минусы:
Не подходит для OLTP, т.к. стоимость одиночных вставок очень высока.

6️⃣ Данные в таблице равномерно распределены за 10 лет, не партицированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?
Алгоритм:
▫️create table t2 as select * from t where ... distributed ...;
▫️alter table t rename t3; alter table t2 rename t;

Далее решаем, удалять данные из хранилища или сохранить в качестве истории.

⚠️ Можно поступить по-другому в случае, если доступ к таблице для пользователя предоставлен через view.
К сожалению, нет под рукой GP для эксперимента.

Концепт идеи:
Реализовать онлайн перестройку таблицы, выделить в отдельную секцию данные за 8 лет, а во view добавить условие фильтрации, чтобы пользователь не смог получить эти исторические данные.

7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.

▫️Воспользоваться оконной функцией row_number() с указанием 30 полей в partition by.
▫️Создать сцепку из 30 полей и применить hash-функцию. В разрезе нового поля применить row_number.
▫️Создать уникальный индекс(в виду ограничений действий на промышленной среде этот вариант не подходит).

8️⃣ Как распределяются данные по сегментам и что такое перекосы?
Тема отдельного поста.

9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?
Тема довольно дискуссионная. Расскажу про свой опыт и наблюдения решения подобных задач.

Здесь можно выделить два решения:
Промышленное коробочное решение - в эту сторону чаще смотрят большие начальники;
Самописные решения на базе ML - очень любят амбициозные аналитики и разработчики.

Критерий выбора зависит от целей, которая преследует компания:
▫️Повышении уровня товарооборота и др. операционных показателей - однозначно промышленное коробочное решение.
▫️Только автоматизация - можно попробовать справиться собственными силами или силами аутстаффинга.

Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Итоги собеседования в Леруа Мерлен

Оба собеседования прошел успешно.

🔸Корпоративная культура в Леруа Мерлен:
В Леруа очень ценят людей, можно назвать это даже фанатизмом. Мне после российского ритейла было очень непривычно.
Лучше всего корпоративная культура отражена в диалоге, который у меня произошел с одним из моих коллег.

Вкратце, была обнаружена ошибка в отчете об остатках(диалог проходил в личном чате):
Я: "Косяк в стоках у тебя. Мы продаем в день ~2 ярда, а стоков у нас на триллион руб? Такого быть не может!"
Коллега: "Давай без таких резких фраз, они на меня давят. Я в целом не очень люблю оценочных суждений и резких слов. Фразу у тебя косяк я воспринимаю тяжело".

Необходимо быть аккуратным в коммуникации, а порой и в своей собственной активности лишь бы не задеть чувств менее активных коллег. Таков уж Леруа!

🔸Организационная структура процессов развития:
Организационная структура компании состоит из доменов, подразделения которые сосредотачивают в себе определенные функции бизнеса и поддержки, аналог дирекций/управлений/служб в др. компаниях.

Леруа на текущий момент распиливает все купленные коробочные решения на микросервисы, в связи с этим активное развитие получило продуктовое направление - разработка продуктов внутренними силами доменов.

Примерная структура домена выглядит следующим образом:
▫️Операционная команда;
▫️Архитектор;
▫️Product Owner(PO);
▫️Team Lead(TL);
▫️Дата команда
Под каждый продукт выделяется отдельный PO, TL и дата команда на его развитие.

Домен, отвечающий за развитие и поддержку Даты Платформы, отвечает за выкатку релизов. Дата команда участвует в разработке до момента, когда будет сделан pull request в Git репозиторий.

🔸Релизная политика Data Platform(DP) в Леруа Мерлен:
Согласно релизной политике DP, накат на прод происходит не чаще, чем 1 раз в неделю. Прозябал какой-нибудь грант на чтение и релиз переносится на следующую неделю.
Такой регламент сильно тормозит развитие отчетности в компании и приводит к тому, что основное большинство скриптов находится "на руках" у аналитиков и разработчиков. Большие "портянки" скриптов переносятся в BI инструменты вместо элегантного однострочного обращения к таблице или представлению.

Инвестиционные затраты(CAPEX) на развитие отчетности и модели ценообразования(средняя ставка по рынку аутстаффинга ~25к/день):
CAPEX(мес) = 6 FT аутстаффинга * 25к * 22(кол-во раб. дн./мес.) ~ 3,3 млн. руб./мес. + ФОТ внутренних сотрудников даты команды.

⚠️Чем реже релизы, тем дольше люди сидят на проектах, тем больше денег платит компания за аутстафф. Сумма для небольшой команды довольно внушительная.

🔸Общее впечатление:
В целом, положительное.

Плюсы:
▫️В компании действительно развитая инженерная культура, "не боятся" новых технологий и готовы к развитию.
▫️Очень спокойный темп работы. Кому надоели дедлайны "Вчера" - вам в Леруа!

Есть и минусы:
▫️Слабо развито направление бизнес-аналитики, если сравнивать с тем, что я видел в Food Ритейле.
Учитывая, что менеджмент компании решил изменить позиционирование Леруа на рынке DIY в сторону развития омниканальных продаж(ее основными конкурентами становятся e-commerce гиганты Wildberries, Ozon, Yandex Market), усиление этого направления крайне важно для компании.
▫️ Немного смутил неопытный молодой состав руководителей. Видимо, текущая ситуация и продажа компании местному менеджменту, вынудило головную компанию ADEO перевести опытных ключевых сотрудников к себе в штат.

И ДА, от Леруа мне поступало предложение перейти к ним в штат в один из других доменов...

Обсудить в чатике 💬

Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
🌐 Навигация по темам канала Oracle Developer

📘 Основы
#sql #plsql #теория #архитектура
#функции #секционирование #временныетаблицы
#транзакции #исключения #курсоры
#аналитическиефункции #иерархическиезапросы
#системныепредставления #компиляция #представления #коллекции #циклы

🛠 Практика и задачи
#задача #решениезадачи #asktom

🚀 Оптимизация и производительность
#оптимизация #nestedloops #индекс

🧩 Инструменты и технологии
#тестирование #postgresql #oracle #docker #oracle23c #ide #ai

💼 Карьера и Развитие
#карьера #собеседование #hr #тинькофф #magnit #вкусноиточка #leroymerlin#сбер #яндекс #Эффективность #КарьерныйРост #Denis_Kivillev #Работа

🎓 Дополнительные материалы
#видео #подкаст #аудиоподкаст #конкурс #марафон #юмор


В почти 700 (!) постах не мудрено заплутать. Поэтому решил сделать подобие навигации 😉
Не забывайте пользоваться обычным поиском, я не добавил сюда низкочастотные хештеги
.

Канал Oracle Developer | Чатик💬