oracle_dbd | Unsorted

Telegram-канал oracle_dbd - Oracle Developer👨🏻‍💻

-

Все о разработке в СУБД "Oracle" Теория, практика, SQL, PL/SQL, сертификация и многое другое ————————————————— Сотрудничество, вопросы, обучение - @denis_dbd Реклама - @reklama_dbd

Subscribe to a channel

Oracle Developer👨🏻‍💻

Техническое собеседование во "Вкусно и Точка"

Формат общения - онлайн, звонок по Телемосту Яндекс.

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

1️⃣ Smart Scans. Что это и как работает?

2️⃣ Способы оптимизации запросов. Описать процесс, привести примеры.

3️⃣ Задача на SQL:
Необходимо перестроить справочник ресторанов, убрав столбец director. История должна быть перестроена.

4️⃣ Какие особенности работы с таблицами в Greenplum?

5️⃣ Какие цели у централизованного DDS слоя в DWH?

Разбор, как всегда, в четверг 🎓
Обсудить в чатике 💬

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Коллеги погромисты, с профессиональным праздником 👯‍♀️

А вот и эксклюзивный стих для канала про программистов от ChatGpt:
В мире кода и баз данных,
Oracle разработчик - властелин,
Он читает строки, словно маг,
А глюки в его коде - неосязаемы, по-арабски.

От себя пожелаю - гореть своей профессией, получать удовольствие, чтоб каждый день был как праздник 😉🔥

Поздравить друг друга в чатике 💬

Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Ч.2. С чего начать изучать SQL? (4/17)

У нас есть таблицы (employees, departments), в которых хранится: название отдела, фио, должность, зп в месяц

Давайте их соединим:

select d.department_name, e.first_name, e.last_name, sum(e.salary) 
from employees e
join departments d on e.department_id = d.department_id
where e.first_name = 'John'
group by d.department_name, e.first_name, e.last_name
having sum(e.salary) > 1000
order by d.department_name, e.first_name;

И здесь ключевой момент:
Для тестировщика можно оперировать таким допущением.
После FROM идет сборка "огромной таблицы" из всех перечисленных таблиц.

Вот собралась одна такая таблица - и дальше уже начинают ее фильтровать и из нее делать select.

Почему я заострил на этом внимание?
Гуглеж или чтение учебников с ходу не дают эту информацию. Нужно прочитать 100500 страниц текста, чтобы это понять.
А учебники, вообще, мало кто читает...

После понимания этого нужно переходить:
- К соединению таблиц.
- Затем уже изучение агрегирующих функций.
- Всякие полезности разработки, типа оконных функций - можно вначале не изучать, они постигаются по мере усложнения задач. Часто не нужны тестировщику.
- План запроса - это магия. Подозреваю, что для многих разработчиков тоже (шутка, хотя...)

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

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Чем скрипт тестировщика отличается от скрипта разработчика? (2/17)

Самое главное, cкрипт тестировщика МОЖЕТ быть не оптимальным, но он ДОЛЖЕН возвращать верный результат.

Т.е. часто лучше пойти каким-то более длинным путем написания скрипта, нежели разработчик.
Да, скрипт может выполняться очень долго, но, если он дает такой же результат, что и скрипт разработчика, значится с 99% уверенностью можно считать, что все работает корректно.

Поэтому не нужно стремиться писать оптимально и красиво. Нужно стремиться писать понятно и прямолинейно. Т.е. каждая следующая строчка скрипта явно должна быть очевидна вам и вашему коллеге.
⚠️ скрипт только для дев/тест сред.

Звучит непонятно?
Надеюсь, следующие посты внесут ясность 😉

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

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Всем привет!

Очень рад, что мой призыв, писать авторские статьи, периодически находит отклик.

В ближайшие несколько недель на канале будет публиковаться серия постов от Даниила. Он тестировщик. Посты будут полезны скорее для QA, но могут заинтересовать и Junior DBD. Посмотрим, что из этого выйдет 😉

Это его первый опыт, не все может получиться с первого раза. Давайте проявим дружелюбие, тем более, что у нас в чатике не принято брызгать кислотой 😉 Тем не менее, фидбек будет полезен, даже, если он и не совсем позитивный - это точка роста. Давайте будем корректны по отношению к друг другу.

Я же в свою очередь напомню. Если у вас есть какой-то интересный авторский материал относящийся к Oracle - разработке, администрированию и т.п. велком. Я готов опубликовать его с сохранением авторства. Это не обязательно должна быть серия постов. Это может быть и один пост. Народ у нас в канале разный - уровень, специализация и т.п. думаю кому-то да зайдет. Пишите в личку 👍

Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Решение задачи "вывод строчных английских букв"

Задача
Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования union.

Решение
На текущий момент, коллеги в чатике нагенерили с десяток способов решить данную задачку от совсем простых до монструозных чисто развлечься.

Приведу буквально одно:

select chr(ascii('a') + level - 1) 
from dual
connect by level <= ascii('z') - ascii('a') + 1;

Всем неравнодушным респект, было интересно посмотреть на такое разнообразие 🔥

#решениезадачи

Читать полностью…

Oracle Developer👨🏻‍💻

Replication vs. Table Partitioning vs. Table Sharding vs. Database Federation

На днях попался забавный слайд. Вдруг кому-то зайдет.

🔸 Replication (репликация) - хранении копии одних и тех же данных на разных серверах.

🔸 Table partitioning (секционирование таблиц) - разбиение таблицы на части, с использованием ключа секционирования. Физически - разные части, логически - работаем как с одной таблицей.

🔸 Table sharding (шардирование) - разбиение на независимые части одной сущности. Было бы наглядней, если бы показали на примере разных БД. Т.е. одна часть таблицы хранится в одной БД, вторая часть таблицы в другой БД и т.д.
Например, vk.com хранит пользователей с A-E на одном сервере, F-J на другом и т.д. (пример, сильно притянутый за уши).

🔸 Database Federation - объединение нескольких физических БД в логическую БД. Позволяет работать приложениям с логической БД, как будто она одна. Мне на практике такие конфигурации не встречались. Для любознательных - karan99/system-design-database-federation-dad1916fa653">статья1, karan99/system-design-database-federation-dad1916fa653">статья2, вики.

Чатик 💬

Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Решение задачи на особенности работы с null (Сбер)

Демо-данные для примера

create table test1(a number);
insert into test1 values(1);
insert into test1 values(2);
insert into test1 values(null);
insert into test1 values('');
commit;

Что нужно помнить
1️⃣ null - это неопределенность.
2️⃣ Кавычки без значения ('') - это null, если это не тип CHAR.
2️⃣ Для сравнения с null нельзя просто написать равенство или неравенство, нужно использовать is null или is not null
3️⃣ Использование null в IN бесполезно.

* - правила справедливы для Oracle

Что получим в итоге
Для краткости рассмотрим кейсы, когда А = 1 и A = null (для '' будет такой же)
A = 1
1) все строки, т.к. условие выполняется всегда
2) аналогично
3) аналогично
4) ничего 1!=1, условие всегда не выполняется
5) все строки, т.к. 1 in (1) всегда будет выполняться.
6) ни одной строки, т.к. условие никогда не будет выполнено.

А = null
1) все строки, т.к. условие выполняется всегда
2) ничего, null - особенное значение.
3) все строки, т.к. условие выполняется всегда
4) ничего, null сравниваем через is.
5) аналогично
6) аналогично.

Я не очень люблю подобные задачи... на собесе, помнится, в каких-то неочевидных пунктах запутался, бывает )

Итог: собеседование в Сбер прошел, предложили неплохую ставку, но все равно отказался 🤷🏻‍♂️ А вам достался материал 😉

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

#решениезадачи #собеседование #сбер
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

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

Рад сообщить, о наборе на пятый поток курса “Oracle PL/SQL.Основы”.

Он будет полезен: QA-инженерам, разработчикам, аналитикам.

Основная цель: научить вас читать чужой и писать свой PL/SQL-код, достаточный для современной разработки и закрытия рабочих задач.

🔹22 видео с теорией;
🔹24 практики = единый проект;
🔹13 онлайн встреч в Zoom с разбором вопросов;
🔹закрытый телеграм-канал;
🔹старт 11 сентября 2023

Практика построена таким образом, чтобы вы с нуля, шаг за шагом, создали API на PL/SQL для прототипа платежной системы. Начав с анонимных блоков вы закончите своим мини-фреймворком для Unit-тестирования и использованием utPL/SQL. Пример.

Подробности и программа - здесь. Отзывы - здесь.

Для тех кто заинтересован, но пока не уверен, я создал промо-группу курса, в которой буду размещать подробности, отрывки с занятий, отвечать на вопросы и даже встретимся онлайн. Залетайте!

P.S. Бонус. Студентов, успешно закончивших курс, рекомендую в компанию Qiwi 🐥

Oracle Developer

Читать полностью…

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

Читать полностью…

Oracle Developer👨🏻‍💻

Шпаргалка по SQL

Попалась тут на глаза шпаргалка по SQL, вдруг кому-то пригодится 😉

#sql #cheatsheet
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Задача "Перемещение нулей (MoveZeros)". Решение

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

Во вторник опубликовал не типичную задачу для собеседования на позицию Oracle Developer. Однако, такие задачи очень часто встречаются на позиции Front/Backend-разработчиков.

Как это происходит на собеседовании
🔹 Вы либо шарите экран, либо подключаетесь к online IDE, в которой есть подсветка синтаксиса. Чаще всего, скомпилировать код возможности нет. Автоподсказок то же (хотя встречались с наличием).
🔹 У вас есть ограниченное количество времени (30м-1ч) на решение задачи.
🔹 От вас хотят услышать размышления вслух хода решения.
🔹 Требуется быстрое (O) и низкое, по затратам памяти, решение.

Представьте, что вам дали подобную задачу (как в посте вторника), ограничили 30 минутами. При этом, написать алгоритм без ошибок вы должны на "листке бумаги", без каких-либо запусков, никто не даст отлаживать код. Фактически задачу необходимо решить в уме.

А как насчет написать дерево и пройтись по нему? найти его максимальную глубину? Или инвертировать односвязный список? Да, то, что старательно забыто после окончания универа 😊

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

Задача вторника может быть решена разными способами
Когда она мне попалась на собесе, я решил таким алгоритмом (на Java, конечно). В целом, это удовлетворило интервьювера. Я не утверждаю, что нет более идеального решения, вполне возможно, но в стрессовой ситуации за 30 минут родилось именно это.
Ребята в чатике накидали довольно много разных решений 🔥

Если такой тип задач интересен, могу публиковать время от времени 😉

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

#решениезадачи #leetcode
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Сиквенсы на сессию

Сиквенс - это объект, используемый для генерации уникальных числовых значений. Чаще всего, используется для генерации значений primary key. Реализация в разных СУБД может быть разная, где-то скрыто от пользователя, где-то явно.

В 12.1 появилась опция Session (см скрин). По умолчанию сиквенсы создаются с опцией Global. В чем различие?

– Создается по умолчанию - global
create sequence my_seq;

– С инкрементом только в рамках сессии
create sequence my_seq session;

Cиквенс, с опцией Session, хранит значение только в рамках сессии. Проще говоря, в двух разных сессиях первый вызов nextval отдаст “1”. C global это будут разные значения.

Вполне может быть удобно при совместном использовании с global temporary table или когда нужен некий ID только внутри сессии и др. Пытливый ум найдет применение 😉

Как попробовать
-- Обратиться в разных сессиях
select my_seq.nextval from dual;

Cбросить последовательность (с 18с)
alter sequence my_seq restart;

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

#sequence
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Устранение рудимента - таблички DUAL

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

Продолжаем про фишки 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

Читать полностью…

Oracle Developer👨🏻‍💻

Коллеги, всем привет!

К сожалению, объем ответов на вопросы получился сильно больше, чем 1 пост (аж 4 поста). Поэтому мы решили вынести их в отдельную статью. Автор @Rus5553

Многие вопросы, так или иначе, уже обсуждались в канале.
Руслан, спасибо за труд 👍

Кстати говоря, не рекламы ради, а справедливости для.
Руслан занимался у меня с 2021 года по индивидуальной программе - архитектура, SQL, PL/SQL, unit-тестирование. Посещал мои курсы - секционирование, PL/SQL Основы. Сейчас самый первый проходит курс по Оптимизации (эксклюзив так сказать), дает мне обратную связь.

Через жажду новых знаний, упорство и труд он уже добился многого как по карьере, так и зарплате. Он понимает, что с ментором можно достичь результата гораздо быстрей, чем ковыряться самому. Очень крутой товарищ👍

И у меня тоже есть свой ментор, только в другой области ИТ ☺️ Менторство - очень эффективный инструмент.

В следующем посте будет окончание истории про MagnIT 😉

#собеседование #magnit
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Собеседование во "Вкусно и Точка"

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

Решил продолжить практику написания постов на тему технических собеседований. Собеседование проходил на позицию Senior Data Engineer во "Вкусно и Точка".

О вакансии
Дата платформа(DP) включает в себя:
▫️DWH(15Tb) на базе дистрибутива Greenplum от Arenadata(ADB);
▫️ClickHouse и Superset для Data Marts и BI;
▫️S3 — для хранения сырых данных (RAW слой);
▫️Airflow в качестве оркестратора ETL pipeline(ов);
▫️Шина данных ESB(Kafka, NiFi, RabbitMQ)

Основные задачи:
Основные задачи связаны с развитием Дата платформы. В текущем варианте хранилище находится в самом начале своего развития, как и в целом IT департамент, т.к. при уходе из России Макдональдс забрал практически весь IT ландшафт.

Плюшки
Годовой бонус, ДМС, скидки на спорт.

Из минусов:
Гибридный формат работы(3 дня Office, 2 дня Home Office).

Про з/п
Диалог начинали от 350k net. После тех. собеседования и приглашения в офис для личного знакомства сумма изменилась до 400к net.

Этапы собеседований
1️⃣
Предварительное общение с HR
Вкратце о своем опыте и почему ищу работу.

Продолжительность интервью - 15 минут.

2️⃣ Интервью
Состав из 2х человек:
▫️ Руководитель направления развития DP;
▫️ Архитектор;
Формат интервью:
▫️ Знакомство;
▫️ Технические вопросы;
▫️ Вопросы от соискателя.

Продолжительность интервью - 1.5 часа.

3️⃣ Оффер

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

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

Автор: Ruslan
Предыдущий опыт собеседований от него.

#вкусноиточка #собеседование
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

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

По техническим причинам, решили опубликовать все посты сразу в одном месте.

Из-за отсутствия свободного времени у Даниила на редактирование, посты опубликованы "как есть" без редакций и купюр😉
Начинающим QA и заинтересовавшимся - рекомендую дочитать до конца, возможно, найдете, что-то полезное для себя.

От автора
"Да, серия постов получилась сумбурной :)
И по ней явно не научишься писать SQL запросы.
Однако, если вы сейчас изучаете SQL, то надеюсь эти лайфхаки вам помогут в работе."

Напомню, это была "проба пера". Не всегда все выходит, так как мы хотим. Ничего страшного. В нашей жизни должно быть пространство для экспериментов 😉
Если есть желание поддержать автора - ставьте 🔥

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

Всем хороших выходных 🎊

Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Ч.1 С чего начать изучать SQL? (3/17)

Если вы не изучали SQL, то первым делом нужно понять как он работает.
В этом как раз и заключается вся сложность.
Нужно понимать последовательность выполнения операций.

Буду объяснять на примере стандартной схемы HR и таблички employees.

Например:

select department_id, last_name, sum(salary)
from employees
where first_name = 'John'
group by department_id, last_name
having sum(salary)>1000
order by department_id, last_name

Хоть скрипт начинается с select, но выполняться он будет по-другому.
Перепишем его в той последовательности, как он будет выполняться:

  from employees e 
where e.first_name = 'John'
group by department_id, last_name
having sum(salary)>1000
select department_id, last_name, sum(salary)
order by department_id, last_name;

Да это вроде как все знают, но по личному опыту скажу, что без понимание этого писать запросы проблематично.

Часто начинающие пишут что-то типа такого:

select department_id, last_name, sum(salary) as slr
from employees
where first_name = 'John'
group by department_id, last_name
having slr > 1000
order by department_id, last_name

т.е. в select присваивают псевдоним полю (slr), а потом ниже пытаются к нему обратиться (having).
Естественно, СУБД выкидывает ошибку (неактуально для ORACLE версии 23)

Нужно запомнить:
Первым всегда выполнятся часть от From до Where, когда это понимание приходит - уже проще соединять таблицы 😊

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

SQL для начинающих тестировщиков (1/17)

Привет всем, меня зовут Даниил!
В тестировании уже несколько лет, долгое время SQL мне был не нужен. Однако, потом я попал на проект, где SQL был основным инструментом для тестирования - пришлось изучать 🤷🏻‍♂️
Текущий уровень знаний оцениваю как выше среднего (среди тестировщиков). Понятное дело, что есть ребята, которые меня многому научат.

Хотелось бы рассказать о граблях и лайфаках, которые я постиг за это время.
Материал будет полезен тем, кто мало работал с SQL, но сейчас самостоятельно его изучает - как вспомогательный инструмент.
В теории может быть полезен для разработчиков, если они помогают тестировщикам писать скрипты.

Планирую описать
1. А для чего SQL тестировщику?
2. Чем скрипт тестировщика отличается от скрипта разработчика?
3. С чего начать изучать SQL?
4. Select * from - плохая привычка, правильная select distinct * from
5. NVL - вторая правильная привычка тестировщика
6. Так left или inner?
7. Избегаем конструкции вида select * from (select * from (select * from t2) t1) t
8. With as - великое изобретение для работы тестировщика
9. MINUS - второе великое изобретение для работы тестировщика
10. Работа с датами
11. Алиасы таблиц - правильный тон
12. Параметризация скриптов

Примечание
▫️ Я не планирую писать учебник или ссылки. Многое гуглится, еще больше можно просто узнать читая скрипты опытных разработчиков, ну и личное общение с ними - никто не отменял.
▫️Все ошибки, приведенные в постах, реальны (либо мои, либо чужие).
▫️Писать я буду про select. Модификация данных - отдельная тема.
▫️В постах будет рассматриваться только Oracle.

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Способы взбодриться с утра

Я думаю, у всех есть истории, от которых волосы встают дыбом.
У меня есть одна.

В году 2006, я работал ДБА в одном новосибирском банке.
Как это водится, было открыто несколько окошек Putty одновременно (ssh-подключений к серверам БД).
К сожалению, он тогда не умел (да и сейчас вроде бы не умеет), подкрашивать окно цветом, в зависимости от подключения.
А-ля красный для такого-то сервера (прод), зеленый для такого-то (дев) и т.п.

У меня была задача - обновить учебную БД. Обновление включало в себя - опустить БД, грохнуть файлы, скопировать с PROD файлы в горячем режиме, и поднять учебную БД.

Делал это не первый раз, но по запаре, перепутал окошки с Putty и случайно грохнул файлы ПРОД БД 🤦🏻‍♂️
Слава богу, приложение было не прям, что бы критичное + был standby.
Потеряли 5 минут бизнесового времени и 30 минут реального. Начальство пожурило 😁

ДБА как сапер. Шанс ошибиться только один 😂

Поделиться историями в чатике 💬

Всем хороших выходных 🎊

#юмор
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Задача. Вывод строчных английских букв

Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования union.

Уровень сложности: легкий

Было бы круто посмотреть на различные способы решения.
Как всегда, разбор в четверг 🎓

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

#задача
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Всем хороших выходных 🎊

Перетереть в чатике 💬

#юмор
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Задачи на особенности работы с null (Сбер)

Всем привет 😊
Заключительный пост про задачки с собеса Сбербанка.
что уже было: задача1, задача2

На скриншоте задание. Специально не стал переводить в текст, чтоб передать атмосферу 😉

Естественно, на собеседовании нет возможности набрать текст запроса и выполнить. Выполняем "в уме". Рекомендую, поступить так же 😉
Разбор ответов в четверг 🎓

Приветствуется обсуждение в чатике 💬

⚠️ Меж тем, продолжается набор на курс по PL/SQL. Осталось 1️⃣ место. Бронируйте свое участие. Мест нет 🤷‍♂️

#задача #собеседование #сбер
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Системные представления

Всем привет!
Случайно наткнулся на занимательный ресурс - https://www.viskey4you.com/

Визуализирует большинство системных представлений Oracle - поля, отношения.
Помимо визуализации, можно сконструировать запрос 🛠

Рекомендую посмотреть, потыкать. Особенно будет полезно для новичков, но и не только 😉

Обсудить в чатике 💬
Понравилось? Ставь 👍

#системныепредставления
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Набор вопросов с собеса в Сбер

Всем привет 😊
В марте общался со Сбербанком. Позиция Senior DB Engineer в Дивизион баз данных PlatformV команда DataTouls. Сохранил для вас вопросики 😉
Как мне их презентовали - через шаринг экрана (см. скрин).
Far 🤓

Одно из заданий я уже публиковал - реверс инженеринг текста запроса по его плану.

Вопросы
4. Что такое нормализация и денормализация? Приведенный пример это нормализованная БД?
5. Найти ошибку из приведенного ниже SQL-запроса.
11. Каков ответ на запрос ниже? Внесите исправления, чтобы запрос вел себя как ожидалось.
12. Что будет?

Естественно, на собеседовании нет возможности набрать текст запроса и выполнить. Выполняем "в уме". Рекомендую поступить так же 😉

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

Приветствуется обсуждение в чатике 💬

#задача #собеседование #сбер
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

В тему недели 😉

Всем хороших выходных 🎊

Перетереть в чатике 💬

#юмор
Oracle Developer

Читать полностью…

Oracle Developer👨🏻‍💻

Задача "Перемещение нулей (MoveZeros)"

Сегодня будет немного не обычная задачка.
Мне её задали в МТС Банке на позицию 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.

Example:
Input: [0,12,0,1,3]
Output: [12,1,3,0,0]

Нашел эту задачку на Leetcode. К сожалению, там нет PL/SQL, зато есть другие языки.

Заготовка под код

Разберем задачу в четверг 🎓

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

#задача #leetcode
Oracle Developer

Читать полностью…

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

Читать полностью…

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

Читать полностью…

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

Читать полностью…
Subscribe to a channel