Девман для питонистов
457 subscribers
107 photos
1 video
99 links
Веб-разработка на Python. Канал от практиков.
Download Telegram
Собеседование — важный этап поиска работы мечты. К нему можно и нужно готовиться. Благодаря подготовке, у вас будут не только готовые ответы на типовые вопросы, но и меньше волнения!

Сегодня разберем один из вопросов, который часто задают работодатели на собеседованиях веб-разработчиков на Python!

Что происходит под капотом джойна? Какие есть алгоритмы соединения таблиц?

В реляционных базах данных, таких как SQL, операцию соединения (join) используют для объединения строк из двух или более таблиц, основываясь на связанных между
ними столбцах. Есть разные типы алгоритмов соединения, каждый из которых имеет свои преимуществ и подходит для разных сценариев.

Разберем основные типы:

📎Nested Loops Join (Циклическое соединение)

👉Как работает: Для каждой строки из первой таблицы алгоритм последовательно проходит через каждую строку второй таблицы, сравнивая их для поиска совпадений.

⚙️Когда использовать: Эффективен, когда одна из таблиц значительно меньше другой. Обычно применяют, когда нет индексов, которые можно использовать для
оптимизации запроса.

Недостатки: Может быть медленным, особенно если обе таблицы большие, так как требует многократного перебора строк.

📎Hash Join (Хеш-соединение)

👉 Как работает: Создает хеш-таблицу для меньшей таблицы, а затем сканирует более крупную таблицу, сравнивая хеш-значения для нахождения совпадений.

⚙️Когда использовать: Хорошо подходит для больших таблиц, особенно когда соединение не может быть оптимизировано с помощью индексов. Эффективен для соединений типа equi-join (способ объединения данных из двух таблиц по равенству значений в указанных столбцах).

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

📎 Merge Join (Слияние)

👉 Как работает: Сначала сортирует обе таблицы по столбцам соединения, а затем итеративно проходит через обе таблицы одновременно для поиска совпадений.

⚙️Когда использовать: Особенно эффективен, если обе таблицы уже отсортированы по соответствующим столбцам. Часто используется для соединений с диапазоном условий.

Недостатки: Может быть медленным, если таблицы не отсортированы, так как требует предварительной сортировки.

🌟 Выбор наиболее подходящего алгоритма соединения зависит от множества факторов:
— размера таблиц,
— наличия индексов,
— условий соединения,
— доступной системной памяти.

Современные системы управления базами данных (СУБД) часто автоматически выбирают оптимальный метод соединения на основе этих факторов.

👉Пишите вопросы с собеседований, которые хотели бы разобрать, в комментариях!

#вопросы_с_собесов
🤔 Давайте вместе разберемся, что не так с этим кодом?

capitals = ('Москва', 'Лондон', 'Париж')

for i in capitals:
...

👉 Чтобы понять, что можно исправить, загляните в типичные улучшения Девмана.
❗️Завтра 12 июня с 12-00 до 14-00 будет недоступен терминал командной строки. Плановые работы на серверах.
Вместо абстрактной буквы i удобнее работать с конкретным, именованным объектом. Название должно быть содержательным, должно соответствовать объекту, описывать его.

Использование абстрактных символов и букв в программировании — плохая практика и вот почему:

Снижается читаемость
Когда голова забита кодом, вы вскоре уже сами не вспомните, что значит i (особенно, если таких букв не одна). Придется тратить время на расшифровку. Другие разработчики, особенно джуны, будут дольше разбираться в вашем коде.

Затрудняется поиск нужной переменной
При поиске i вы получите десятки, а может и сотни ненужных результатов.

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

Переменную в нашем примере стоит назвать так:

capitals = ('Москва', 'Лондон', 'Париж')

for capital in capitals:
...