Этапы собеседования
1️⃣ предварительное общение с HR в телеграме;
2️⃣ общение с руководителем;
3️⃣ техническое собеседование;
4️⃣ регистрация в их спец платформе для кандидатов;
5️⃣ проверка безопасниками;
6️⃣ оффер или неееет.
С первым этапом - никаких проблем.
Второй этап занял почти 1.5ч. На нем были руководитель + еще несколько спецов. Общались на разные темы от проектирования приложений, различий между монолитами/ микросервисами и заканчивая Agile. По самой СУБД вопросов, практически, не было.
Также, обсуждали организационные моменты, проект, задачи, которыми предстоит заниматься. Отдельно остановились на ЦФТшном PL/Plus - был ли опыт (упаси боже) и готов ли изучать (ну, конечно, да 😂).
Кратко по работе:
Бизнес область: кредитование.
Два технических стрима:
1️⃣ монолит с ЦФТ на Oracle - это хозяйство нужно вялотекуще поддерживать. Нужны компетенции в Oracle + PL/Plus.
2️⃣ перевод, всего чего только можно, на микросервисы на Java-стеке. Нужны, хотя бы, базовые знания Java и около того. Готовы обучать.
Второй стрим в самом начале - будет шанс поучаствовать на старте всего проекта.
Продолжение в четверг
#собеседование #сбер
1️⃣ предварительное общение с HR в телеграме;
2️⃣ общение с руководителем;
3️⃣ техническое собеседование;
4️⃣ регистрация в их спец платформе для кандидатов;
5️⃣ проверка безопасниками;
6️⃣ оффер или неееет.
С первым этапом - никаких проблем.
Второй этап занял почти 1.5ч. На нем были руководитель + еще несколько спецов. Общались на разные темы от проектирования приложений, различий между монолитами/ микросервисами и заканчивая Agile. По самой СУБД вопросов, практически, не было.
Также, обсуждали организационные моменты, проект, задачи, которыми предстоит заниматься. Отдельно остановились на ЦФТшном PL/Plus - был ли опыт (упаси боже) и готов ли изучать (ну, конечно, да 😂).
Кратко по работе:
Бизнес область: кредитование.
Два технических стрима:
1️⃣ монолит с ЦФТ на Oracle - это хозяйство нужно вялотекуще поддерживать. Нужны компетенции в Oracle + PL/Plus.
2️⃣ перевод, всего чего только можно, на микросервисы на Java-стеке. Нужны, хотя бы, базовые знания Java и около того. Готовы обучать.
Второй стрим в самом начале - будет шанс поучаствовать на старте всего проекта.
Продолжение в четверг
#собеседование #сбер
👍15
Собеседование в Сбер.ДомКлик. Финал
Мы остановились на втором этапе - общении с руководителем.
По окончании сессии, мне сказали, что этап с тех собеседованием не потребуется.
Насколько это частая история? Не знаю. Кто туда недавно собесился - напишите плиз в чатике.
Поэтому сорян, технических задачек со Сбера не будет. Обломали меня со свежим материалом 🤷🏻♂️
Далее, не интересные этапы с регистрацией в Сбер HR-платформе «Пульс», заполнения 100500 страниц анкеты и проверка безопасниками.
В итоге: был получен оффер на позицию «Главный инженер по разработке».
Из плюсов
🔹 Можно очень сильно прокачаться в другом стеке.
🔹 Высокая з/п - с учетом всех плюшек, премий и т.п. в месяц набегает довольно приличная сумма по нынешним временам. И это только на входе.
🔹 Жирный соц пакет.
Из минусов
🔸 PL/Plus
🔸 Офис/гибрид в Москве
🔸 Кому-то не зайдет работодатель.
Наверняка, все слышали страшилки про Сбер, когда человек мог просидеть три месяца без работы заполняя заявки, и только к концу испытательного срока получить всё необходимое для работы.
HR клятвенно заверила, что такого больше нет 🤷🏻♂️
Однако, я был приятно удивлен оперативности всех цепочек от HR до ЛПР. Прошло всего три недели (с учетом НГ праздников) от первого касания до оффера.
Для Сбера, я считаю, это огромный прогресс.
На всех этапах потенциальные коллеги были максимально вежливы и проявляли профессионализм.
В целом, эта вакансия - отличная возможность перекатиться из Oracle в Java-мир, если не смущают минусы.
Вот такая история получилась в этот раз 😊
#собеседование #сбер
Мы остановились на втором этапе - общении с руководителем.
По окончании сессии, мне сказали, что этап с тех собеседованием не потребуется.
Насколько это частая история? Не знаю. Кто туда недавно собесился - напишите плиз в чатике.
Поэтому сорян, технических задачек со Сбера не будет. Обломали меня со свежим материалом 🤷🏻♂️
Далее, не интересные этапы с регистрацией в Сбер HR-платформе «Пульс», заполнения 100500 страниц анкеты и проверка безопасниками.
В итоге: был получен оффер на позицию «Главный инженер по разработке».
Из плюсов
🔹 Можно очень сильно прокачаться в другом стеке.
🔹 Высокая з/п - с учетом всех плюшек, премий и т.п. в месяц набегает довольно приличная сумма по нынешним временам. И это только на входе.
🔹 Жирный соц пакет.
Из минусов
🔸 PL/Plus
🔸 Офис/гибрид в Москве
🔸 Кому-то не зайдет работодатель.
Наверняка, все слышали страшилки про Сбер, когда человек мог просидеть три месяца без работы заполняя заявки, и только к концу испытательного срока получить всё необходимое для работы.
HR клятвенно заверила, что такого больше нет 🤷🏻♂️
Однако, я был приятно удивлен оперативности всех цепочек от HR до ЛПР. Прошло всего три недели (с учетом НГ праздников) от первого касания до оффера.
Для Сбера, я считаю, это огромный прогресс.
На всех этапах потенциальные коллеги были максимально вежливы и проявляли профессионализм.
В целом, эта вакансия - отличная возможность перекатиться из Oracle в Java-мир, если не смущают минусы.
Вот такая история получилась в этот раз 😊
#собеседование #сбер
🔥22👍16🤯1
Восстанавливаем текст запроса
Друзья всем привет!
Недавно был на собеседовании в одной из компаний. Об этом я обязательно расскажу позже 😉
Гоняли долго по разным темам. Все тщательно записал и сохранил 😁
В том числе, было такое задание: по плану запроса необходимо восстановить текст запроса.
В исходном задании он был сложней. Я его чутка упростил, чтоб совсем не было треша.
Задание направлено на понимание планов запросов, когда какие операции используются и т.п. Этакий reverse engineering.
В моем курсе по оптимизации, будем разбирать подобные задачи для усвоения материала и натаскивания на собеседования ✅
Анализ, как всегда, в четверг 🎓
Обсудить в нашем ламповом чатике.
#задача
Oracle Developer
Друзья всем привет!
Недавно был на собеседовании в одной из компаний. Об этом я обязательно расскажу позже 😉
Гоняли долго по разным темам. Все тщательно записал и сохранил 😁
В том числе, было такое задание: по плану запроса необходимо восстановить текст запроса.
В исходном задании он был сложней. Я его чутка упростил, чтоб совсем не было треша.
Задание направлено на понимание планов запросов, когда какие операции используются и т.п. Этакий reverse engineering.
В моем курсе по оптимизации, будем разбирать подобные задачи для усвоения материала и натаскивания на собеседования ✅
Анализ, как всегда, в четверг 🎓
Обсудить в нашем ламповом чатике.
#задача
Oracle Developer
👍30❤3🔥3
Восстанавливаем текст запроса. Анализ
Последовательность выполнения шагов: 3, 2, 4, 1, 0 или 3, 2, 1, 4, 0 (как посмотреть на соединение).
1️⃣ Шаг 3. Происходит Range Scan индекса DEPT_LOCATION_IX.
Доступ происходит по предикату "D"."LOCATION_ID">1700 (звездочка в плане + predicate information)
2️⃣ Шаг 2. Выгребание строк по найденным Rowid (на шаге 3) из таблицы DEPARTMENTS
Почему без него никак? В индексе нет достаточного количества данных, чтобы выполнить последующее соединение и материализовать результат.
3️⃣ Шаг 4. NESTED LOOPS SEMI - полусоединение двух таблиц (ищется первое совпадение по предикатам соединения).
Используется в конструкциях типа exists/in.
Исходя из predicate information 4, соединение двух таблиц осуществляется по столбцам "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID".
Отсюда же можно получить названия алиасов к таблицам - d/e.
4️⃣ Шаг 1. Доступ ко второй таблицы происходит по EMP_DEPARTMENT_IX.
5️⃣ Шаг 0. Происходит SELECT.
По этим данным никак нельзя понять название второй таблицы. Тут уж просто кругозор 🤷🏻♂️
Только ленивый или совсем новичок не щупал схему HR с набором табличек.
Название второй таблички - employees.
Даже, если не знаете, я думаю ничего страшного, если на собесе её назовете, хоть, tab2.
Итоговый запрос
Подписчица канала, и мой экс-босс (Наташа, привет), прогнала задание через BingAI и получила текст запроса идентичный натуральному. Есть над чем задуматься 😉
Конечно, на собеседовании у вас не будет времени на это. Да и в работе, лучше понимать "что куда и как".
В своем курсе по оптимизации, я буду давать подобные темы 🎓
Понравилось? ставьте 👍
#решениезадачи #оптимизация
Oracle Developer
Последовательность выполнения шагов: 3, 2, 4, 1, 0 или 3, 2, 1, 4, 0 (как посмотреть на соединение).
1️⃣ Шаг 3. Происходит Range Scan индекса DEPT_LOCATION_IX.
Доступ происходит по предикату "D"."LOCATION_ID">1700 (звездочка в плане + predicate information)
2️⃣ Шаг 2. Выгребание строк по найденным Rowid (на шаге 3) из таблицы DEPARTMENTS
Почему без него никак? В индексе нет достаточного количества данных, чтобы выполнить последующее соединение и материализовать результат.
3️⃣ Шаг 4. NESTED LOOPS SEMI - полусоединение двух таблиц (ищется первое совпадение по предикатам соединения).
Используется в конструкциях типа exists/in.
Исходя из predicate information 4, соединение двух таблиц осуществляется по столбцам "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID".
Отсюда же можно получить названия алиасов к таблицам - d/e.
4️⃣ Шаг 1. Доступ ко второй таблицы происходит по EMP_DEPARTMENT_IX.
5️⃣ Шаг 0. Происходит SELECT.
По этим данным никак нельзя понять название второй таблицы. Тут уж просто кругозор 🤷🏻♂️
Только ленивый или совсем новичок не щупал схему HR с набором табличек.
Название второй таблички - employees.
Даже, если не знаете, я думаю ничего страшного, если на собесе её назовете, хоть, tab2.
Итоговый запрос
select *Минутка юмора
from hr.departments d
where d.location_id > 1700
and exists (select 1 from hr.employees e where d.department_id = e.department_id);
Подписчица канала, и мой экс-босс (Наташа, привет), прогнала задание через BingAI и получила текст запроса идентичный натуральному. Есть над чем задуматься 😉
Конечно, на собеседовании у вас не будет времени на это. Да и в работе, лучше понимать "что куда и как".
В своем курсе по оптимизации, я буду давать подобные темы 🎓
Понравилось? ставьте 👍
#решениезадачи #оптимизация
Oracle Developer
👍25🔥2❤1🎉1
Релиз Oracle 23c
Друзья всем привет!
Еще в сентябре прошлого года, компания Oracle анонсировала выход новой версии СУБД зимой 23 года.
Версия LTS (long term support), а значит она с нами на продолжительное время.
И вот, 03.04 состоялся релиз новой версии 23с Free - Developer Release.
В новой версии заявлено достаточно много интересных фич. Некоторые из них:
1️⃣ Select без from
А вот смогут/захотят на неё переходить компании в РФ, вопрос хороший, как раз для нашего лампового чатика.
В следующем посте расскажу, как эту версию развернуть в Docker 🐳 и потестить новые фичи 😉
#oracle23c
Oracle Developer
Друзья всем привет!
Еще в сентябре прошлого года, компания Oracle анонсировала выход новой версии СУБД зимой 23 года.
Версия LTS (long term support), а значит она с нами на продолжительное время.
И вот, 03.04 состоялся релиз новой версии 23с Free - Developer Release.
В новой версии заявлено достаточно много интересных фич. Некоторые из них:
1️⃣ Select без from
было: select 1+2 from dual;2️⃣ Использование алиасов в Group by и Having
стало: select 1+2;
select trunc(dtime, ‘dd’) day3️⃣ Тип boolean в SQL
from tab
group by day
create table client(И многие другие фишки, которые уже давно надо было добавить. Наконец-то, подумали о разработчиках 🥰
id number(38),
is_active boolean
);
insert into client values(1, true);
insert into client values(2, false);
А вот смогут/захотят на неё переходить компании в РФ, вопрос хороший, как раз для нашего лампового чатика.
В следующем посте расскажу, как эту версию развернуть в Docker 🐳 и потестить новые фичи 😉
#oracle23c
Oracle Developer
👍34🔥6❤1
Установка Oracle 23c в Docker
Есть три варианта:
🔸 Docker-образ;
🔸 RPM-пакет для *nix;
🔸 Виртуалка для VirtualBox.
Мне нравится вариант с Docker.
1️⃣ Устанавливаем Docker в нашу ОС (если нет)
Win Mac Linux
2️⃣ Создаем контейнер с указанием параметров
имя контейнера - oracle23c, порт доступа - 1524, пароль для sys/system - booble34.
Если у вас еще нет скаченного image, то процесс займет некоторое время - нужно получить ~3Gb.
3️⃣ Устанавливаем Oracle client (если нет) и настраиваем network\admin\tnsnames.ora
Добавляете в файл алиас на новую БД.
Всё 🔥
Внутрь контейнера можно попасть через
А что по опциям в этом дистрибутиве?
Выполняем и смотрим:
Обсудить в чатике 💬
PS. Параметров создания БД гораздо больше, можно настроить очень гибко.
По умолчанию, удаленное подключение (не с сервера) к SYS + пароль не доступно (не важно как вы устанавливаете БД). Для настройки нужно выполнять доп. приседания.
#docker #oracle23c
Oracle Developer
Есть три варианта:
🔸 Docker-образ;
🔸 RPM-пакет для *nix;
🔸 Виртуалка для VirtualBox.
Мне нравится вариант с Docker.
1️⃣ Устанавливаем Docker в нашу ОС (если нет)
Win Mac Linux
2️⃣ Создаем контейнер с указанием параметров
docker run -d --name oracle23c -p 1524:1521 -e ORACLE_PWD=booble34 -e ORACLE_CHARACTERSET=UTF8 container-registry.oracle.com/database/free:latestвместо latest можно указать конкретную версию 23.2.0.0.
имя контейнера - oracle23c, порт доступа - 1524, пароль для sys/system - booble34.
Если у вас еще нет скаченного image, то процесс займет некоторое время - нужно получить ~3Gb.
3️⃣ Устанавливаем Oracle client (если нет) и настраиваем network\admin\tnsnames.ora
Добавляете в файл алиас на новую БД.
oradb23c =FREEPDB1 - БД, созданная по умолчанию.
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1524))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FREEPDB1)
)
)
Всё 🔥
Внутрь контейнера можно попасть через
docker exec -it oracle23c /bin/bashК БД можно подключиться
sqlplus system/booble34@oradb23cДля Mac/*nix почти тоже самое.
А что по опциям в этом дистрибутиве?
Выполняем и смотрим:
select * from v$option;Много чего есть. Например: секционирование.
Обсудить в чатике 💬
PS. Параметров создания БД гораздо больше, можно настроить очень гибко.
По умолчанию, удаленное подключение (не с сервера) к SYS + пароль не доступно (не важно как вы устанавливаете БД). Для настройки нужно выполнять доп. приседания.
#docker #oracle23c
Oracle Developer
👍16
Использование алиасов в Group by и Having
Друзья, всем привет!
В Oracle23c, наконец-то, сделали возможность использование алиаса в group by и having.
Это бывает полезно, когда выражение, по которому происходит группировка и фильтрация групп размашистое.
Иногда на собесах спрашивают: можно ли использовать алиасы в group by?
Теперь правильный ответ: зависит от версии, до 23 - нельзя, после - можно.
А можно ли обратиться по позиции?
Да можно, но только в group by и с включением этой возможности в сесиии.
#oracle23c
Oracle Developer
Друзья, всем привет!
В Oracle23c, наконец-то, сделали возможность использование алиаса в group by и having.
Это бывает полезно, когда выражение, по которому происходит группировка и фильтрация групп размашистое.
-- до 23cКрасота 🔥
select extract(year from t.hire_date) year, count(*)
from employees t
group by extract(year from t.hire_date)
having extract(year from t.hire_date) >= 2014;
-- 23с
select extract(year from t.hire_date) year, count(*)
from employees t
group by year
having year >= 2014;
Иногда на собесах спрашивают: можно ли использовать алиасы в group by?
Теперь правильный ответ: зависит от версии, до 23 - нельзя, после - можно.
А можно ли обратиться по позиции?
Да можно, но только в group by и с включением этой возможности в сесиии.
alter session set group_by_position_enabled = true;Обсудить в чатике 💬
select extract(year from t.hire_date) year, count(*)
from employees t
group by 1
having year >= 2014;
#oracle23c
Oracle Developer
👍43🔥3
Условие if exists в create/drop
Друзья, всем привет!
Продолжаем про фишки Oracle23c. В синтаксис создания и удаления, добавили условие if [not] exists. На скринах примеры выполнения.
До 23с повторные вызовы команд create/delete вызывали ошибку. Сейчас мы её можем заглушить. Конечно, нужно использовать её с осторожностью. Вполне вероятно, что вы как раз хотите получить ошибку при выполнении DDL. Однако, найдутся кейсы, где это будет очень полезно.
Обсудить в чатике 💬
#oracle23c
Oracle Developer
Друзья, всем привет!
Продолжаем про фишки Oracle23c. В синтаксис создания и удаления, добавили условие if [not] exists. На скринах примеры выполнения.
До 23с повторные вызовы команд create/delete вызывали ошибку. Сейчас мы её можем заглушить. Конечно, нужно использовать её с осторожностью. Вполне вероятно, что вы как раз хотите получить ошибку при выполнении DDL. Однако, найдутся кейсы, где это будет очень полезно.
-- До 23cК слову сказать, в PostgreSQL эти опции доступны с версии 8.2 (2006й год) 😉
create table my_tab(
id number(38)
);
drop table my_tab;
-- 23c
create table if not exists my_tab(
id number(38)
);
drop table if exists my_tab;
Обсудить в чатике 💬
#oracle23c
Oracle Developer
🔥16👍7🤯2
Собеседование в MagnIT
Друзья, всем привет!
Решил последовать примеру автора канала и сделать пост на тему технического собеседования в Magnit Tech.
Неделю назад, сидя на удаленке в ожидании доступов на один банковский проект, увидел вакансию на позицию Middle/Senior DWH разработчик в Магнит и решил разнообразить ожидание собеседованием в самый большой ритейл в мире (по количеству торговых точек, разумеется).
Реакция HR не заставила долго ждать.
О вакансии
Экосистема КХД включает в себя:
▫️Хранилище Teradata(450 Tb);
▫️Exadata — ODS;
▫️Hadoop для хранения холодных данных;
▫️Informatica PC/DEI в качестве ETL-инструмента.
Основные задачи:
1️⃣ Поддерживать текущее решение на Oracle и Teradata;
2️⃣ Принимать участие в миграции на облачные решения Yandex Cloud Platform на базе Greenplum и Hadoop. Возможно, что-то еще.
Проект по миграции планируется на 3 года.
Плюшки
В лучшем случае, ДМС и курсы + возможность работать как в Москве, так и удалено.
Про з/п
Старт от 200к net. Запрашивал 300к net. Готовы обсуждать, тут многое зависит от вас.
Этапы собеседований
1️⃣ Предварительное общение с HR
Про опыт и мотивацию. Было пару входных тестовых вопросов. Отличная практика - дает примерное представление о об уровне требований работодателя и подготовки соискателя.
Продолжительность интервью - 30 минут.
2️⃣ Интервью
Состав из 4 человек:
▫️ Руководитель направления DWH развития;
▫️ Senior DE инженер;
▫️ DWH аналитик-разработчик;
▫️ HR специалист.
Формат интервью:
▫️ Знакомство;
▫️ Теоретическое собеседование;
▫️ Написание запросов;
▫️ Вопросы от соискателя.
Продолжительность интервью - 1.5 часа.
3️⃣ Оффер
Продолжение следует...
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
Друзья, всем привет!
Решил последовать примеру автора канала и сделать пост на тему технического собеседования в Magnit Tech.
Неделю назад, сидя на удаленке в ожидании доступов на один банковский проект, увидел вакансию на позицию Middle/Senior DWH разработчик в Магнит и решил разнообразить ожидание собеседованием в самый большой ритейл в мире (по количеству торговых точек, разумеется).
Реакция HR не заставила долго ждать.
О вакансии
Экосистема КХД включает в себя:
▫️Хранилище Teradata(450 Tb);
▫️Exadata — ODS;
▫️Hadoop для хранения холодных данных;
▫️Informatica PC/DEI в качестве ETL-инструмента.
Основные задачи:
1️⃣ Поддерживать текущее решение на Oracle и Teradata;
2️⃣ Принимать участие в миграции на облачные решения Yandex Cloud Platform на базе Greenplum и Hadoop. Возможно, что-то еще.
Проект по миграции планируется на 3 года.
Плюшки
В лучшем случае, ДМС и курсы + возможность работать как в Москве, так и удалено.
Про з/п
Старт от 200к net. Запрашивал 300к net. Готовы обсуждать, тут многое зависит от вас.
Этапы собеседований
1️⃣ Предварительное общение с HR
Про опыт и мотивацию. Было пару входных тестовых вопросов. Отличная практика - дает примерное представление о об уровне требований работодателя и подготовки соискателя.
Продолжительность интервью - 30 минут.
2️⃣ Интервью
Состав из 4 человек:
▫️ Руководитель направления DWH развития;
▫️ Senior DE инженер;
▫️ DWH аналитик-разработчик;
▫️ HR специалист.
Формат интервью:
▫️ Знакомство;
▫️ Теоретическое собеседование;
▫️ Написание запросов;
▫️ Вопросы от соискателя.
Продолжительность интервью - 1.5 часа.
3️⃣ Оффер
Продолжение следует...
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍14
Magnit Tech. Экспресс-вопросы (скрининг) от HR
К сожалению, не все вопросы записал, т.к. идея написать пост родилась позже, а некоторые вопросы к тому времени были уже забыты 🤷🏻♂️
1️⃣ Какие виды Join вы знаете?
2️⃣ Какие аналитические функции вы использовали?
3️⃣ Что такое и для чего нужен undo/redo?
4️⃣ Какие виды индексов знаете? В каких случаях используется индексный доступ данных?
5️⃣ Что хранится в блоках b-tree индекса?
6️⃣ Какие виды физического соединения таблиц знаете? В каких системах какой вид соединения используется?
7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.
8️⃣ Что делать с фрагментированной таблицей?
Разбор вопросов в четверг 🎓
Обсудить в чатике 💬
Автор: @Rus5553
#задача
Oracle Developer
К сожалению, не все вопросы записал, т.к. идея написать пост родилась позже, а некоторые вопросы к тому времени были уже забыты 🤷🏻♂️
1️⃣ Какие виды Join вы знаете?
2️⃣ Какие аналитические функции вы использовали?
3️⃣ Что такое и для чего нужен undo/redo?
4️⃣ Какие виды индексов знаете? В каких случаях используется индексный доступ данных?
5️⃣ Что хранится в блоках b-tree индекса?
6️⃣ Какие виды физического соединения таблиц знаете? В каких системах какой вид соединения используется?
7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.
8️⃣ Что делать с фрагментированной таблицей?
Разбор вопросов в четверг 🎓
Обсудить в чатике 💬
Автор: @Rus5553
#задача
Oracle Developer
👍17❤5
Magnit Tech. Экспресс-вопросы от HR. Ответы
Список вопросов: см. в посте вторника.
Ответы:
1️⃣ Виды Join
Inner, Equi, Self, Semi, Outer(left, right, full), Cross, Anti
2️⃣ Аналитические функции
Row_number, rank, dense_rank, lead, lag и т.д.
Весь перечень аналитических функций можно найти в документации.
3️⃣ Что такое undo/redo? Для чего нужны?
Undo - сегмент отката транзакций. В момент совершения транзакции Oracle старые записи вычитывает и хранит в табличном пространство Undo. Новые данные пишутся в Buffer cache. Такой механизм позволяет сделать откат (rollback) транзакции, а также параллельным сессиям читать только зафиксированные транзакции, не дожидаясь фиксации текущей транзакции.
Redo logs - журналы повторного выполнения, по сути, основа процесса восстановления, благодаря которым Oracle гарантирует восстановление изменений пользователя на случая сбоя.
Ссылки на документацию: undo, redo.
4️⃣ Виды индексов
По физической организации можно выделить:
▫️b-tree;
▫️bitmap;
▫️пользовательские индексы;
▫️кластерные индексы.
По типу:
▫️обычные индексы по полям без модификаций;
▫️функциональные индексы;
▫️индексы с сортировкой;
▫️локальные и глобальные индексы;
▫️реверсивные.
Индексный доступ используется для чтения небольших объемов данных из большой таблицы. Примерно, 1-5% от общего объема.
5️⃣ Что хранится в блоках b-tree индекса?
В блоках b-tree индекса хранятся поля, по которым строился индекс, а также rowid. Детали в документации.
6️⃣ Виды физического соединения таблиц:
▫️nested Loops;
▫️merge join;
▫️hash join.
Используются в следующих случаях:
▫️Для OLTP характерен Nested Loops с использованием индексного доступа (unique, range scan).
▫️Для DSS/DWH/OLAP, чаще всего, используется полное сканирование таблиц. При полном сканировании данных - merge и hash join эффективней.
Об алгоритмах физического соединения таблиц можно прочитать здесь.
7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.
Truncate, DDL команда, в основном используется для чистки всей таблицы или секции таблицы. В отличии от команды Delete, Truncate сбрасывает HWM.
8️⃣ Что делать с фрагментированной таблицей?
Фрагментированная таблица - таблица с пустыми блоками данных.
Есть четыре способа дефрагментации таблиц(сброс HWM):
▫️alter table + move;
▫️export / truncate / import;
▫️create table as select (CTAS);
▫️dbms_redefinition.
Напомню, это вопросы со скриниг-интервью от HR.
Главная его задача, попасть в те ответы, которые есть у HR в чеклисте. Не нужно вступать в научные дискуссии и учить уму разуму бедную девушку 😊
—
На следующей недели опубликуем вопросы/ответы с технического собеседования, впечатления и результат 😉
Автор: @Rus5553
#решениезадачи #magnit
Oracle Developer
Список вопросов: см. в посте вторника.
Ответы:
1️⃣ Виды Join
Inner, Equi, Self, Semi, Outer(left, right, full), Cross, Anti
2️⃣ Аналитические функции
Row_number, rank, dense_rank, lead, lag и т.д.
Весь перечень аналитических функций можно найти в документации.
3️⃣ Что такое undo/redo? Для чего нужны?
Undo - сегмент отката транзакций. В момент совершения транзакции Oracle старые записи вычитывает и хранит в табличном пространство Undo. Новые данные пишутся в Buffer cache. Такой механизм позволяет сделать откат (rollback) транзакции, а также параллельным сессиям читать только зафиксированные транзакции, не дожидаясь фиксации текущей транзакции.
Redo logs - журналы повторного выполнения, по сути, основа процесса восстановления, благодаря которым Oracle гарантирует восстановление изменений пользователя на случая сбоя.
Ссылки на документацию: undo, redo.
4️⃣ Виды индексов
По физической организации можно выделить:
▫️b-tree;
▫️bitmap;
▫️пользовательские индексы;
▫️кластерные индексы.
По типу:
▫️обычные индексы по полям без модификаций;
▫️функциональные индексы;
▫️индексы с сортировкой;
▫️локальные и глобальные индексы;
▫️реверсивные.
Индексный доступ используется для чтения небольших объемов данных из большой таблицы. Примерно, 1-5% от общего объема.
5️⃣ Что хранится в блоках b-tree индекса?
В блоках b-tree индекса хранятся поля, по которым строился индекс, а также rowid. Детали в документации.
6️⃣ Виды физического соединения таблиц:
▫️nested Loops;
▫️merge join;
▫️hash join.
Используются в следующих случаях:
▫️Для OLTP характерен Nested Loops с использованием индексного доступа (unique, range scan).
▫️Для DSS/DWH/OLAP, чаще всего, используется полное сканирование таблиц. При полном сканировании данных - merge и hash join эффективней.
Об алгоритмах физического соединения таблиц можно прочитать здесь.
7️⃣ Когда используется truncate? Ожидал, что следующий вопрос будет про разницу между truncate и delete. Не стал дожидаться вопроса и дал ответ сразу. Детали ответа можно найти в посте.
Truncate, DDL команда, в основном используется для чистки всей таблицы или секции таблицы. В отличии от команды Delete, Truncate сбрасывает HWM.
8️⃣ Что делать с фрагментированной таблицей?
Фрагментированная таблица - таблица с пустыми блоками данных.
Есть четыре способа дефрагментации таблиц(сброс HWM):
▫️alter table + move;
▫️export / truncate / import;
▫️create table as select (CTAS);
▫️dbms_redefinition.
Напомню, это вопросы со скриниг-интервью от HR.
Главная его задача, попасть в те ответы, которые есть у HR в чеклисте. Не нужно вступать в научные дискуссии и учить уму разуму бедную девушку 😊
—
На следующей недели опубликуем вопросы/ответы с технического собеседования, впечатления и результат 😉
Автор: @Rus5553
#решениезадачи #magnit
Oracle Developer
🔥33👍21❤7
Техническое собеседование в MagnIT
Формат общения - онлайн, звонок в Teams.
Список тем:
1️⃣ Оптимизация запросов
Способы определения узких мест в запросах, ключевые метрики/статистики в планах выполнения запросов. Что означает кардинальность = 1? Как обновить статистику и какой хинт может использоваться?
2️⃣ Физические виды соединения таблиц
Алгоритм каждого соединения, особенности применения и механизм работы hash join.
3️⃣ Виды индексного доступа
Особенности применения b-tree и bitmap индексов. Что отобразиться в плане при join 2х таблиц, у одной из которых по столбцам соединения отсутствуют индексы? Особенности применения index fast full scan и index full scan, а также механизм сканирования листовых блоков.
4️⃣ Секционирование
Что логически и физически представляет объект после секционирования? Виды и опции, практические кейсы применения. В какую секцию при вставке данных определится NULL при list секционировании? Практики создания секций. Есть ли возможность автоматизировать создание секций в момент вставки данных? Практики и особенности работы DML операциий на секционированных таблицах с глобальным и локальным индексом/индексами?
5️⃣ Compaction сегмента
Как бороться с фрагментацией сегмента?
6️⃣ Хинты
Best practice из личного опыта по хинтам. Как работает хинт append?
7️⃣ Undo tablespace
Что такое undo и принцип его работы. В каких случаях может возникнуть ошибка snapshot too old? Способы решения этой проблемы.
⚠️ Также были две задачи на 10-15 мин. в общей сложности. К сожалению, детали условий задач не запомнил.
Разбор как всегда в четверг 🎓
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
Формат общения - онлайн, звонок в Teams.
Список тем:
1️⃣ Оптимизация запросов
Способы определения узких мест в запросах, ключевые метрики/статистики в планах выполнения запросов. Что означает кардинальность = 1? Как обновить статистику и какой хинт может использоваться?
2️⃣ Физические виды соединения таблиц
Алгоритм каждого соединения, особенности применения и механизм работы hash join.
3️⃣ Виды индексного доступа
Особенности применения b-tree и bitmap индексов. Что отобразиться в плане при join 2х таблиц, у одной из которых по столбцам соединения отсутствуют индексы? Особенности применения index fast full scan и index full scan, а также механизм сканирования листовых блоков.
4️⃣ Секционирование
Что логически и физически представляет объект после секционирования? Виды и опции, практические кейсы применения. В какую секцию при вставке данных определится NULL при list секционировании? Практики создания секций. Есть ли возможность автоматизировать создание секций в момент вставки данных? Практики и особенности работы DML операциий на секционированных таблицах с глобальным и локальным индексом/индексами?
5️⃣ Compaction сегмента
Как бороться с фрагментацией сегмента?
6️⃣ Хинты
Best practice из личного опыта по хинтам. Как работает хинт append?
7️⃣ Undo tablespace
Что такое undo и принцип его работы. В каких случаях может возникнуть ошибка snapshot too old? Способы решения этой проблемы.
⚠️ Также были две задачи на 10-15 мин. в общей сложности. К сожалению, детали условий задач не запомнил.
Разбор как всегда в четверг 🎓
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍38❤1
Коллеги, всем привет!
К сожалению, объем ответов на вопросы получился сильно больше, чем 1 пост (аж 4 поста). Поэтому мы решили вынести их в отдельную статью. Автор @Rus5553
Многие вопросы, так или иначе, уже обсуждались в канале.
Руслан, спасибо за труд 👍
Кстати говоря, не рекламы ради, а справедливости для.
Руслан занимался у меня с 2021 года по индивидуальной программе - архитектура, SQL, PL/SQL, unit-тестирование. Посещал мои курсы - секционирование, PL/SQL Основы. Сейчас самый первый проходит курс по Оптимизации (эксклюзив так сказать), дает мне обратную связь.
Через жажду новых знаний, упорство и труд он уже добился многого как по карьере, так и зарплате. Он понимает, что с ментором можно достичь результата гораздо быстрей, чем ковыряться самому. Очень крутой товарищ👍
И у меня тоже есть свой ментор, только в другой области ИТ ☺️ Менторство - очень эффективный инструмент.
В следующем посте будет окончание истории про MagnIT 😉
#собеседование #magnit
Oracle Developer
К сожалению, объем ответов на вопросы получился сильно больше, чем 1 пост (аж 4 поста). Поэтому мы решили вынести их в отдельную статью. Автор @Rus5553
Многие вопросы, так или иначе, уже обсуждались в канале.
Руслан, спасибо за труд 👍
Кстати говоря, не рекламы ради, а справедливости для.
Руслан занимался у меня с 2021 года по индивидуальной программе - архитектура, SQL, PL/SQL, unit-тестирование. Посещал мои курсы - секционирование, PL/SQL Основы. Сейчас самый первый проходит курс по Оптимизации (эксклюзив так сказать), дает мне обратную связь.
Через жажду новых знаний, упорство и труд он уже добился многого как по карьере, так и зарплате. Он понимает, что с ментором можно достичь результата гораздо быстрей, чем ковыряться самому. Очень крутой товарищ👍
И у меня тоже есть свой ментор, только в другой области ИТ ☺️ Менторство - очень эффективный инструмент.
В следующем посте будет окончание истории про MagnIT 😉
#собеседование #magnit
Oracle Developer
🔥21👍8❤1
Итоги собеседования в MagnIT
Оффер я так и не получил 😊
HR 💬 "На интервью показали достаточно высокий уровень в части теории, но в практической части были допущены ошибки. Мы видим потенциал и хотели бы договориться еще об одной встрече, чтобы продолжить практическую часть по sql."
Что ж, за время управления командой некоторые навыки написания запросов теряются, т.к. больше занимаешься административными и архитектурными задачами. Однако, это не оправдание!
От проведения еще одного 1.5 часового интервью я отказался.
Не буду придерживаться нейтральной позиции и дам оценку HR скринингу и техническому собеседованию.
В целом процесс взаимодействия с HR был приятным и эффективным. Все прозрачно и адекватно.
Остались неприятные впечатления относительно самого интервью, больше похоже на допрос, чем на беседу:
1️⃣ Неэффективное распределение времени на каждом из этапов интервью, пропустили секцию со знакомством и сразу перешли к технической части.
2️⃣ Спустя 1ч 10 мин. перешли к практике, еще через 10 мин. пришлось тактично прервать и напомнить, что и у меня есть вопросы.
3️⃣ В 50% вопросах невнятная формулировка.
Справедливости ради отмечу и плюсы
1️⃣ Компетентные собеседующие и интересные вопросы уровня middle (это субъективно).
2️⃣ Собеседование проходило в уважительной и мягкой форме.
3️⃣ Действительно большие объемы данных, возможность погрузиться в предметную область и поработать на широком стеке технологий (РСУБД, BIG DATA), поучаствовать в проекте миграции большого хранилища.
Выводы/Рекомендации
1️⃣ Уточнять у HR обо всех этапах заранее
Вы рассчитывали на одно большое интервью(знакомство, тех. вопросы и вопросы от вас), а вам предлагают еще несколько этапов. Может возникнуть негатив относительного самого процесса.
2️⃣ Иногда нужно "показать зубы"
Поможет избежать попыток дать ответ на вопрос с непонятной формулировкой. Главное без фанатизма, ключевое слово иногда, все должно быть в рамках корпоративной культуры. Soft skills - это 50 % успеха.
3️⃣ Не иметь завышенных ожиданий относительно Soft Skills собеседующих
Нужно понимать, что IT все же не сфера специалистов с высоким уровнем коммуникаций. Специалисты в основном ориентированы на технику, чем на ведение переговоров.
⚠️ Не факт, что у вас будут те же впечатления от собеседования в Магнит. Это субъективно. Дерзайте!
А какие у вас были положительные и негативные впечатления после собеседования? Обсудить в чатике 🫂
Палец вверх, если зашло 👍
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
Оффер я так и не получил 😊
HR 💬 "На интервью показали достаточно высокий уровень в части теории, но в практической части были допущены ошибки. Мы видим потенциал и хотели бы договориться еще об одной встрече, чтобы продолжить практическую часть по sql."
Что ж, за время управления командой некоторые навыки написания запросов теряются, т.к. больше занимаешься административными и архитектурными задачами. Однако, это не оправдание!
От проведения еще одного 1.5 часового интервью я отказался.
Не буду придерживаться нейтральной позиции и дам оценку HR скринингу и техническому собеседованию.
В целом процесс взаимодействия с HR был приятным и эффективным. Все прозрачно и адекватно.
Остались неприятные впечатления относительно самого интервью, больше похоже на допрос, чем на беседу:
1️⃣ Неэффективное распределение времени на каждом из этапов интервью, пропустили секцию со знакомством и сразу перешли к технической части.
2️⃣ Спустя 1ч 10 мин. перешли к практике, еще через 10 мин. пришлось тактично прервать и напомнить, что и у меня есть вопросы.
3️⃣ В 50% вопросах невнятная формулировка.
Справедливости ради отмечу и плюсы
1️⃣ Компетентные собеседующие и интересные вопросы уровня middle (это субъективно).
2️⃣ Собеседование проходило в уважительной и мягкой форме.
3️⃣ Действительно большие объемы данных, возможность погрузиться в предметную область и поработать на широком стеке технологий (РСУБД, BIG DATA), поучаствовать в проекте миграции большого хранилища.
Выводы/Рекомендации
1️⃣ Уточнять у HR обо всех этапах заранее
Вы рассчитывали на одно большое интервью(знакомство, тех. вопросы и вопросы от вас), а вам предлагают еще несколько этапов. Может возникнуть негатив относительного самого процесса.
2️⃣ Иногда нужно "показать зубы"
Поможет избежать попыток дать ответ на вопрос с непонятной формулировкой. Главное без фанатизма, ключевое слово иногда, все должно быть в рамках корпоративной культуры. Soft skills - это 50 % успеха.
3️⃣ Не иметь завышенных ожиданий относительно Soft Skills собеседующих
Нужно понимать, что IT все же не сфера специалистов с высоким уровнем коммуникаций. Специалисты в основном ориентированы на технику, чем на ведение переговоров.
⚠️ Не факт, что у вас будут те же впечатления от собеседования в Магнит. Это субъективно. Дерзайте!
А какие у вас были положительные и негативные впечатления после собеседования? Обсудить в чатике 🫂
Палец вверх, если зашло 👍
Автор: @Rus5553
#собеседование #magnit
Oracle Developer
👍66❤2
Устранение рудимента - таблички DUAL
Друзья, всем привет!
Продолжаем про фишки Oracle23c. Наконец-то, можно не использовать табличку DUAL для получения результата.
К слову сказать, во многих СУБД так было изначально 😉
Обсудить в чатике 💬
#oracle23c
Oracle Developer
Друзья, всем привет!
Продолжаем про фишки Oracle23c. Наконец-то, можно не использовать табличку DUAL для получения результата.
-- До 23cЕстественно, обратная совместимость сохранена. Старый код будет работать.
select 1 from dual;
declare
v_var number;
begin
select 1 into v_var from dual;
dbms_output.put_line(v_var);
end;
/
-- 23c
select 1;
declare
v_var number;
begin
select 1 into v_var;
dbms_output.put_line(v_var);
end;
/
К слову сказать, во многих СУБД так было изначально 😉
Обсудить в чатике 💬
#oracle23c
Oracle Developer
👍27🔥11
Вопросы по БД на Java-собеседованиях
Всем привет!
Некоторое время назад решил походить по собесам на Java-разработчика. Накопилось очень много материала про это 😊
Но в рамках, нашего канала, хотел бы рассказать, а чего у джавистов спрашивают про БД.
Прежде всего, зависит от позиции, какие обязанности там нужно выполнять. Если это какая-то миграция или поддержка и развитие легаси с Oracle, то будут вопросы связанные с Oracle. На одном из собесов, 50% времени задавали сеньорские вопросы по Oracle (это исключение). По умолчанию - подразумевается PostgreSQL.
В основной массе собесов, дают решать простенькие SQL-запросы и гоняют по теории на уровне junior/middle.
Из запомнившейся теории:
🔸 что такое транзакция, ACID, уровни изоляции;
🔸 что такое блокировки, виды;
🔸 как устроен B-tree индекс;
🔸 как задизайнить отношение “многие ко многим”;
🔸 CAP-теорема;
🔸 шардирование и секционирование, в чем разница.
SQL запросы:
заджойнить пару-тройку таблиц, используя group by/having. Никакой аналитики.
А-ля "найди всех клиентов, у которых более трех заказов".
Подобные задачки часто публикуются в ТГ-каналах для начинающих.
Иногда спрашивают про NoSQL БД и отличия от РСУБД. Заданий а-ля "напиши запрос для MongoDB" не дают.
Выводы
С уверенностью можно сказать, нагоняющая ужас секция по БД на многих Java-разработчиков, будет пройдена легко, если вы опытный DBD или, хотя бы, прочитаете этот канал с начала 😂 Все вопросы, так или иначе, были уже рассмотрены.
Стоит отметить, что секция с SQL/БД занимает, по ощущениям, 0-10% от собеса. К вопросу, о простоте смены специализации 😊
Если пост наберет, хотя бы, 200 🔥 расскажу про собесы на Java-разраба, этапы и т.п. Канал, все-таки, про СУБД Oracle, не всем может быть интересно 😉
Обсудить в чатике 💬
#собеседование #java
Oracle Developer
Всем привет!
Некоторое время назад решил походить по собесам на Java-разработчика. Накопилось очень много материала про это 😊
Но в рамках, нашего канала, хотел бы рассказать, а чего у джавистов спрашивают про БД.
Прежде всего, зависит от позиции, какие обязанности там нужно выполнять. Если это какая-то миграция или поддержка и развитие легаси с Oracle, то будут вопросы связанные с Oracle. На одном из собесов, 50% времени задавали сеньорские вопросы по Oracle (это исключение). По умолчанию - подразумевается PostgreSQL.
В основной массе собесов, дают решать простенькие SQL-запросы и гоняют по теории на уровне junior/middle.
Из запомнившейся теории:
🔸 что такое транзакция, ACID, уровни изоляции;
🔸 что такое блокировки, виды;
🔸 как устроен B-tree индекс;
🔸 как задизайнить отношение “многие ко многим”;
🔸 CAP-теорема;
🔸 шардирование и секционирование, в чем разница.
SQL запросы:
заджойнить пару-тройку таблиц, используя group by/having. Никакой аналитики.
А-ля "найди всех клиентов, у которых более трех заказов".
Подобные задачки часто публикуются в ТГ-каналах для начинающих.
Иногда спрашивают про NoSQL БД и отличия от РСУБД. Заданий а-ля "напиши запрос для MongoDB" не дают.
Выводы
С уверенностью можно сказать, нагоняющая ужас секция по БД на многих Java-разработчиков, будет пройдена легко, если вы опытный DBD или, хотя бы, прочитаете этот канал с начала 😂 Все вопросы, так или иначе, были уже рассмотрены.
Стоит отметить, что секция с SQL/БД занимает, по ощущениям, 0-10% от собеса. К вопросу, о простоте смены специализации 😊
Если пост наберет, хотя бы, 200 🔥 расскажу про собесы на Java-разраба, этапы и т.п. Канал, все-таки, про СУБД Oracle, не всем может быть интересно 😉
Обсудить в чатике 💬
#собеседование #java
Oracle Developer
🔥202👍5
Сиквенсы на сессию
Сиквенс - это объект, используемый для генерации уникальных числовых значений. Чаще всего, используется для генерации значений primary key. Реализация в разных СУБД может быть разная, где-то скрыто от пользователя, где-то явно.
В 12.1 появилась опция Session (см скрин). По умолчанию сиквенсы создаются с опцией Global. В чем различие?
Вполне может быть удобно при совместном использовании с global temporary table или когда нужен некий ID только внутри сессии и др. Пытливый ум найдет применение 😉
Как попробовать
#sequence
Oracle Developer
Сиквенс - это объект, используемый для генерации уникальных числовых значений. Чаще всего, используется для генерации значений primary key. Реализация в разных СУБД может быть разная, где-то скрыто от пользователя, где-то явно.
В 12.1 появилась опция Session (см скрин). По умолчанию сиквенсы создаются с опцией Global. В чем различие?
– Создается по умолчанию - globalCиквенс, с опцией Session, хранит значение только в рамках сессии. Проще говоря, в двух разных сессиях первый вызов nextval отдаст “1”. C global это будут разные значения.
create sequence my_seq;
– С инкрементом только в рамках сессии
create sequence my_seq session;
Вполне может быть удобно при совместном использовании с global temporary table или когда нужен некий ID только внутри сессии и др. Пытливый ум найдет применение 😉
Как попробовать
-- Обратиться в разных сессияхCбросить последовательность (с 18с)
select my_seq.nextval from dual;
alter sequence my_seq restart;Обсудить в чатике 💬
#sequence
Oracle Developer
👍21