Установка 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
Использование алиасов в 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
Условие 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
Собеседование в 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
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
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
Техническое собеседование в 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
Коллеги, всем привет!
К сожалению, объем ответов на вопросы получился сильно больше, чем 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
Итоги собеседования в 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
Устранение рудимента - таблички 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
Вопросы по БД на 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
Сиквенсы на сессию
Сиквенс - это объект, используемый для генерации уникальных числовых значений. Чаще всего, используется для генерации значений 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
Задача "Перемещение нулей (MoveZeros)"
Сегодня будет немного не обычная задачка.
Мне её задали в МТС Банке на позицию Java Engineer. Естественно, она была на Java. Я слегка адаптировал под PL/SQL.
На позиции "Oracle-разработчик" такие задачи не дают. Однако для того, чтобы размять мозг она подойдет 🧠
Суть задач "с LeetCode" - реализация функционала за как можно меньшую сложность - O. Условно, если задачу можно решить за O(N*N), то скорее всего, есть более оптимальное решение. На собесах обязательно учитывают смог ли ты решить задачу оптимально.
Условия
Заготовка под код
Разберем задачу в четверг 🎓
Обсудить в чатике 💬
#задача #leetcode
Oracle Developer
Сегодня будет немного не обычная задачка.
Мне её задали в МТС Банке на позицию Java Engineer. Естественно, она была на Java. Я слегка адаптировал под PL/SQL.
На позиции "Oracle-разработчик" такие задачи не дают. Однако для того, чтобы размять мозг она подойдет 🧠
Суть задач "с LeetCode" - реализация функционала за как можно меньшую сложность - O. Условно, если задачу можно решить за O(N*N), то скорее всего, есть более оптимальное решение. На собесах обязательно учитывают смог ли ты решить задачу оптимально.
Условия
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.Нашел эту задачку на Leetcode. К сожалению, там нет PL/SQL, зато есть другие языки.
Example:
Input: [0,12,0,1,3]
Output: [12,1,3,0,0]
Заготовка под код
Разберем задачу в четверг 🎓
Обсудить в чатике 💬
#задача #leetcode
Oracle Developer
Задача "Перемещение нулей (MoveZeros)". Решение
Друзья, всем привет!
Во вторник опубликовал не типичную задачу для собеседования на позицию Oracle Developer. Однако, такие задачи очень часто встречаются на позиции Front/Backend-разработчиков.
Как это происходит на собеседовании
🔹 Вы либо шарите экран, либо подключаетесь к online IDE, в которой есть подсветка синтаксиса. Чаще всего, скомпилировать код возможности нет. Автоподсказок то же (хотя встречались с наличием).
🔹 У вас есть ограниченное количество времени (30м-1ч) на решение задачи.
🔹 От вас хотят услышать размышления вслух хода решения.
🔹 Требуется быстрое (O) и низкое, по затратам памяти, решение.
Представьте, что вам дали подобную задачу (как в посте вторника), ограничили 30 минутами. При этом, написать алгоритм без ошибок вы должны на "листке бумаги", без каких-либо запусков, никто не даст отлаживать код. Фактически задачу необходимо решить в уме.
А как насчет написать дерево и пройтись по нему? найти его максимальную глубину? Или инвертировать односвязный список? Да, то, что старательно забыто после окончания универа 😊
К чему я веду
Необходим определенный навык и тренировки для выполнения подобного рода заданий.
Для этого есть специальные площадки, где собраны подобные хитрые задачки разнесенные по уровням сложности. Например, leetcode.
Недавно наткнулся на двадцать паттернов при решении алгоритмических задач. Может кому-то зайдет.
Задача вторника может быть решена разными способами
Когда она мне попалась на собесе, я решил таким алгоритмом (на Java, конечно). В целом, это удовлетворило интервьювера. Я не утверждаю, что нет более идеального решения, вполне возможно, но в стрессовой ситуации за 30 минут родилось именно это.
Ребята в чатике накидали довольно много разных решений 🔥
Если такой тип задач интересен, могу публиковать время от времени 😉
Обсудить в чатике 💬
#решениезадачи #leetcode
Oracle Developer
Друзья, всем привет!
Во вторник опубликовал не типичную задачу для собеседования на позицию Oracle Developer. Однако, такие задачи очень часто встречаются на позиции Front/Backend-разработчиков.
Как это происходит на собеседовании
🔹 Вы либо шарите экран, либо подключаетесь к online IDE, в которой есть подсветка синтаксиса. Чаще всего, скомпилировать код возможности нет. Автоподсказок то же (хотя встречались с наличием).
🔹 У вас есть ограниченное количество времени (30м-1ч) на решение задачи.
🔹 От вас хотят услышать размышления вслух хода решения.
🔹 Требуется быстрое (O) и низкое, по затратам памяти, решение.
Представьте, что вам дали подобную задачу (как в посте вторника), ограничили 30 минутами. При этом, написать алгоритм без ошибок вы должны на "листке бумаги", без каких-либо запусков, никто не даст отлаживать код. Фактически задачу необходимо решить в уме.
А как насчет написать дерево и пройтись по нему? найти его максимальную глубину? Или инвертировать односвязный список? Да, то, что старательно забыто после окончания универа 😊
К чему я веду
Необходим определенный навык и тренировки для выполнения подобного рода заданий.
Для этого есть специальные площадки, где собраны подобные хитрые задачки разнесенные по уровням сложности. Например, leetcode.
Недавно наткнулся на двадцать паттернов при решении алгоритмических задач. Может кому-то зайдет.
Задача вторника может быть решена разными способами
Когда она мне попалась на собесе, я решил таким алгоритмом (на Java, конечно). В целом, это удовлетворило интервьювера. Я не утверждаю, что нет более идеального решения, вполне возможно, но в стрессовой ситуации за 30 минут родилось именно это.
Ребята в чатике накидали довольно много разных решений 🔥
Если такой тип задач интересен, могу публиковать время от времени 😉
Обсудить в чатике 💬
#решениезадачи #leetcode
Oracle Developer
sql_cheatsheet.jpg
517.4 KB
Шпаргалка по SQL
Попалась тут на глаза шпаргалка по SQL, вдруг кому-то пригодится 😉
#sql #cheatsheet
Oracle Developer
Попалась тут на глаза шпаргалка по SQL, вдруг кому-то пригодится 😉
#sql #cheatsheet
Oracle Developer
Набор вопросов с собеса в Сбер
Всем привет 😊
В марте общался со Сбербанком. Позиция Senior DB Engineer в Дивизион баз данных PlatformV команда DataTouls. Сохранил для вас вопросики 😉
Как мне их презентовали - через шаринг экрана (см. скрин).
Far 🤓
Одно из заданий я уже публиковал - реверс инженеринг текста запроса по его плану.
Вопросы
4. Что такое нормализация и денормализация? Приведенный пример это нормализованная БД?
5. Найти ошибку из приведенного ниже SQL-запроса.
11. Каков ответ на запрос ниже? Внесите исправления, чтобы запрос вел себя как ожидалось.
12. Что будет?
Естественно, на собеседовании нет возможности набрать текст запроса и выполнить. Выполняем "в уме". Рекомендую поступить так же 😉
Разбор ответов в четверг 🎓
Приветствуется обсуждение в чатике 💬
#задача #собеседование #сбер
Oracle Developer
Всем привет 😊
В марте общался со Сбербанком. Позиция Senior DB Engineer в Дивизион баз данных PlatformV команда DataTouls. Сохранил для вас вопросики 😉
Как мне их презентовали - через шаринг экрана (см. скрин).
Far 🤓
Одно из заданий я уже публиковал - реверс инженеринг текста запроса по его плану.
Вопросы
4. Что такое нормализация и денормализация? Приведенный пример это нормализованная БД?
5. Найти ошибку из приведенного ниже SQL-запроса.
11. Каков ответ на запрос ниже? Внесите исправления, чтобы запрос вел себя как ожидалось.
12. Что будет?
Естественно, на собеседовании нет возможности набрать текст запроса и выполнить. Выполняем "в уме". Рекомендую поступить так же 😉
Разбор ответов в четверг 🎓
Приветствуется обсуждение в чатике 💬
#задача #собеседование #сбер
Oracle Developer
Ответы на вопросы с собеса в Сбер
Вопросы в предыдущем посте вторника.
Ответы
4. Что такое нормализация и денормализация? Приведенный пример это нормализованная БД?
Это основы проектирования сущностей в БД. Понятия гуглятся на раз-два. Чуть задену денормализацию. Хороший пример - это поисковые таблицы в OLTP-средах. Например, для этого кейса.
Что касается конкретного примера. Вопрос, конечно поставлен интересно "нормализованная ли это БД". Исходя из организации двух табличек, скорее, да. Не совсем ясно, что такое счет1/счет2. Являются ли счета отдельной сущностью или нет. Или достаточно текстового представления. Интервьювер явно хочет обсуждения 😉
5. Найти ошибку из приведенного ниже SQL-запроса.
Все просто. Алиас выражения "y" используется в качестве предиката в where. Будет ошибка.
Фикс: вместо "у" написать полное выражение.
11. Каков ответ на запрос ниже? Внесите исправления, чтобы запрос вел себя как ожидалось.
Ответ будет: not equals. Ибо null = null некорректное сравнение. Условие должны быть как null is null.
Подобные вопросы с сравнением null встречаются постоянно.
12. Что будет? select nvl(null,12) from dual;
Будет 12. Подробней про nvl в этом посте. Если еще вспомните про функцию coalesce, то завоюете сердце интервьювера 😁 Пост про отличия между nvl и coalesce.
В принципе, ничего сложного в этих вопросах нет. Прям совсем база. На следующей неделе, опубликую еще одну задачку с этого собеса.
Обсудить в чатике 💬
Понравилось? Ставь 👍
#решениезадачи #собеседование #сбер
Oracle Developer
Вопросы в предыдущем посте вторника.
Ответы
4. Что такое нормализация и денормализация? Приведенный пример это нормализованная БД?
Это основы проектирования сущностей в БД. Понятия гуглятся на раз-два. Чуть задену денормализацию. Хороший пример - это поисковые таблицы в OLTP-средах. Например, для этого кейса.
Что касается конкретного примера. Вопрос, конечно поставлен интересно "нормализованная ли это БД". Исходя из организации двух табличек, скорее, да. Не совсем ясно, что такое счет1/счет2. Являются ли счета отдельной сущностью или нет. Или достаточно текстового представления. Интервьювер явно хочет обсуждения 😉
5. Найти ошибку из приведенного ниже SQL-запроса.
Все просто. Алиас выражения "y" используется в качестве предиката в where. Будет ошибка.
Фикс: вместо "у" написать полное выражение.
11. Каков ответ на запрос ниже? Внесите исправления, чтобы запрос вел себя как ожидалось.
Ответ будет: not equals. Ибо null = null некорректное сравнение. Условие должны быть как null is null.
Подобные вопросы с сравнением null встречаются постоянно.
12. Что будет? select nvl(null,12) from dual;
Будет 12. Подробней про nvl в этом посте. Если еще вспомните про функцию coalesce, то завоюете сердце интервьювера 😁 Пост про отличия между nvl и coalesce.
В принципе, ничего сложного в этих вопросах нет. Прям совсем база. На следующей неделе, опубликую еще одну задачку с этого собеса.
Обсудить в чатике 💬
Понравилось? Ставь 👍
#решениезадачи #собеседование #сбер
Oracle Developer
Системные представления
Всем привет!
Случайно наткнулся на занимательный ресурс - https://www.viskey4you.com/
Визуализирует большинство системных представлений Oracle - поля, отношения.
Помимо визуализации, можно сконструировать запрос 🛠
Рекомендую посмотреть, потыкать. Особенно будет полезно для новичков, но и не только 😉
Обсудить в чатике 💬
Понравилось? Ставь 👍
#системныепредставления
Oracle Developer
Всем привет!
Случайно наткнулся на занимательный ресурс - https://www.viskey4you.com/
Визуализирует большинство системных представлений Oracle - поля, отношения.
Помимо визуализации, можно сконструировать запрос 🛠
Рекомендую посмотреть, потыкать. Особенно будет полезно для новичков, но и не только 😉
Обсудить в чатике 💬
Понравилось? Ставь 👍
#системныепредставления
Oracle Developer