Это два типа объединения таблиц в SQL, которые используются для получения данных из нескольких таблиц на основе условий соединения. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных.
INNER JOIN возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Если нет совпадения, строки не включаются в результирующий набор данных.SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
RIGHT JOIN возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Если совпадения нет, строки из правой таблицы все равно включаются в результат с NULL значениями для столбцов из левой таблицы.SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
Возвращает только строки с совпадающими значениями в обеих таблицах. Исключает строки без совпадений.
Возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Включает строки из правой таблицы, даже если нет совпадений, с
NULL значениями для столбцов из левой таблицы.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Хеш-функция — это функция, которая принимает входные данные (ключ) и возвращает фиксированное число, называемое хешем (или хеш-значением). Основная цель хеш-функции — преобразовать произвольные данные в числовое значение определенного диапазона.
def simple_hash(key, table_size):
return len(key) % table_size
def djb2_hash(key):
hash_value = 5381
for char in key:
hash_value = ((hash_value << 5) + hash_value) + ord(char) # hash_value * 33 + ord(char)
return hash_value
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Это объект, который позволяет поочередно проходить через элементы коллекции (например, списка или множества) без необходимости знать внутреннее представление этой коллекции. Итераторы предоставляют стандартный интерфейс для доступа к элементам, что делает их важной частью объектно-ориентированного программирования и функционального программирования.
Объекты, которые поддерживают протокол итерации, называются итерабельными. Примеры включают списки, кортежи, множества и словари.
В Python, чтобы объект был итерабельным, он должен реализовать метод
__iter__(), который возвращает итератор.Итератор — это объект, который реализует методы
__iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.Пример с использованием встроенного итератора
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers) # Получение итератора из списка
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
print(next(iterator)) # Вывод: 4
print(next(iterator)) # Вывод: 5
# print(next(iterator)) # Вызывается StopIteration
Пример создания собственного итератора
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
# Использование собственного итератора
my_iter = MyIterator(1, 5)
for num in my_iter:
print(num) # Вывод: 1 2 3 4
Итераторы предоставляют единый интерфейс для прохода по элементам коллекции, независимо от их типа.
Итераторы генерируют элементы по одному, что экономит память при работе с большими наборами данных.
Итераторы инкапсулируют логику обхода элементов, упрощая код и делая его более читаемым.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
XML (Extensible Markup Language) — это расширяемый язык разметки, используемый для представления структурированных данных в формате, который легко читается как человеком, так и машиной. XML разработан для хранения и обмена данными между различными системами и платформами.
XML позволяет создавать собственные теги, что делает его гибким для различных применений и доменов.
XML-документы легко читаются и понимаются человеком благодаря текстовому формату.
XML-документы имеют четкую иерархическую структуру, которая делает их удобными для хранения сложных данных.
XML является текстовым форматом, что делает его совместимым с любыми операционными системами и приложениями.
Опциональная часть, которая может содержать информацию о версии XML и кодировке документа.
<?xml version="1.0" encoding="UTF-8"?>
Каждый XML-документ должен иметь один корневой элемент, который содержит все остальные элементы.
<root>
<!-- Другие элементы -->
</root>
Основные строительные блоки XML-документа. Элементы могут содержать текст, другие элементы и атрибуты.
<book>
<title>XML Basics</title>
<author>John Doe</author>
<year>2023</year>
</book>
Дополнительные данные, связанные с элементами. Атрибуты задаются внутри открывающего тега.
<book genre="fiction">
<title>XML Basics</title>
<author>John Doe</author>
<year>2023</year>
</book>
Пример XML-документа
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1" genre="fiction">
<title>XML Basics</title>
<author>John Doe</author>
<year>2023</year>
</book>
<book id="2" genre="non-fiction">
<title>Learning XML</title>
<author>Jane Smith</author>
<year>2022</year>
</book>
</library>
XML используется для обмена данными между различными системами и приложениями, обеспечивая совместимость.
Пользователи могут создавать собственные теги и атрибуты, что делает XML пригодным для различных областей применения.
XML является стандартом, поддерживаемым многими технологиями и инструментами.
XML-документы могут быть проверены на соответствие определенной структуре с помощью схем XML Schema (XSD) или DTD (Document Type Definition).
XML может быть довольно объемным из-за избыточности тегов, что может привести к увеличению размера данных.
Обработка и парсинг XML-документов может быть сложным и требовать значительных вычислительных ресурсов по сравнению с другими форматами, такими как JSON.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это термин, которым называют старый код или программное обеспечение, созданное много лет назад, но до сих пор используемое. Важно понимать, что "легаси" не обязательно означает "плохой". Этот код может быть ценным и выполнять критически важные задачи, но у него есть свои особенности и проблемы, которые делают работу с ним сложной.
Программы, написанные 5, 10 или даже 20 лет назад, продолжают работать, хотя технологии уже изменились.
Разработчики, написавшие код, могли уйти из компании, не оставив подробных объяснений.
Код, который был написан для одних задач, со временем начинает использоваться для других, часто без переработки.
Код создавался на старых версиях языков программирования, библиотек или платформ, которые сегодня уже не поддерживаются.
Код может быть сложно понять, особенно если он написан без соблюдения современных стандартов или правил.
Старый код часто создавался без автоматизированных тестов, что усложняет внесение изменений.
Код может использовать библиотеки или платформы, которые больше не обновляются или не поддерживаются.
Даже небольшие правки могут вызвать неожиданные ошибки, поскольку никто не знает всех последствий изменений.
Если код выполняет свою задачу, компании часто решают оставить его как есть.
Легаси-код может управлять банковскими системами, производственными линиями или другими системами, от которых зависит бизнес.
Полная переработка кода может занять годы и потребовать огромных ресурсов.
Исправлять ошибки и улучшать работу системы по мере необходимости.
Переходить на современные технологии частями, чтобы минимизировать риски.
Создать новую систему, если старая больше не отвечает требованиям, но это требует времени и ресурсов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Позволяет компонентам обмениваться данными и выполнять задачи независимо друг от друга, не дожидаясь завершения операций. Асинхронное общение широко применяется в микросервисных архитектурах и других распределённых системах, так как повышает масштабируемость, гибкость и отказоустойчивость системы.
Очереди сообщений (например, RabbitMQ, Apache Kafka, Amazon SQS) помогают отправлять и получать сообщения асинхронно, обеспечивая буфер между отправителем и получателем. Брокеры сообщений сохраняют сообщения до тех пор, пока получатель не будет готов их обработать, что помогает управлять потоками данных и уравновешивать нагрузку. Такой подход позволяет отправителю отправить сообщение и сразу продолжить свою работу, не дожидаясь ответа, что повышает производительность системы.
В модели «издатель-подписчик» компоненты могут публиковать события, на которые подписаны другие компоненты, а брокер сообщений доставляет события всем подписчикам. Этот паттерн позволяет системе оставаться слабосвязанной, так как издатель не знает, сколько и какие конкретно сервисы получат событие. Такие системы часто применяются для уведомлений, регистрации событий, обработки данных и отправки уведомлений нескольким сервисам одновременно.
В очереди задач сообщения представляют собой задачи для выполнения, которые обрабатываются одним или несколькими исполнителями. Этот паттерн полезен для распределения нагрузки на сервисы, позволяя выполнять задачи асинхронно, когда они становятся доступны, и автоматически управлять потоками. Например, задача по отправке электронной почты может быть помещена в очередь и обработана отдельным рабочим процессом, что освобождает основной сервис от ожидания завершения отправки.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Индексы требуют дополнительного места на диске для хранения. Чем больше данных в таблице, тем больше место занимает индекс. Если таблица содержит большое количество индексов, это может значительно увеличить объем хранимых данных.
Вставка, обновление и удаление данных в таблице с индексами требует дополнительных операций для обновления индексов. Это может существенно замедлить производительность операций модификации данных, особенно в таблицах с большим количеством индексов.
Администрирование и оптимизация индексов требует дополнительных усилий. Необходимо периодически проверять и оптимизировать индексы, чтобы избежать фрагментации и падения производительности. Неэффективное использование индексов может привести к ухудшению производительности запросов.
При выполнении операций модификации данных индексы могут вызывать блокировки, что может приводить к конфликтам и снижению производительности в условиях высокой конкурентности.
Неправильный выбор колонок для индексирования может не только не улучшить, но и ухудшить производительность запросов. Индексы должны быть тщательно подобраны и настроены в соответствии с типичными запросами к базе данных.
Избыточные или дублирующие индексы могут привести к ненужному расходу ресурсов и снижению производительности операций модификации данных.
В небольших таблицах накладные расходы на поддержку индексов могут превышать выигрыш в производительности запросов. В таких случаях индексы могут быть неэффективными.
Изменение структуры таблиц (например, добавление или удаление колонок) может потребовать перестройки существующих индексов, что может быть трудоемким процессом.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это процесс организации данных в реляционной базе данных для минимизации избыточности и предотвращения аномалий при обновлении данных.
Каждое поле содержит только одно значение, и все записи уникальны.
Данные находятся в 2NF, и нет транзитивных зависимостей между неключевыми атрибутами.
Данные находятся в 3NF, и каждый детерминант является суперключом.
Данные находятся в BCNF, и нет многозначных зависимостей.
Данные находятся в 4NF, и каждая зависимость выражается через проекции.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это высокопроизводительная система управления базами данных, работающая в памяти (in-memory), которая поддерживает множество структур данных, таких как строки, списки, множества, хэш-таблицы и другие. Redis широко используется в современных проектах благодаря своей скорости и функциональности.
Снижение нагрузки на базу данных: Кэширование часто запрашиваемых данных в Redis позволяет снизить нагрузку на основную базу данных и ускорить время ответа. Ускорение доступа к данным: Быстрое чтение данных из памяти обеспечивает низкую задержку и высокую производительность.
Управление сессиями пользователей: Redis часто используется для хранения сессионных данных пользователей в веб-приложениях благодаря своей скорости и поддержке автоматического удаления старых данных (TTL).
Асинхронные задачи: Redis используется для реализации очередей задач в таких системах, как Celery. Это позволяет распределять и выполнять задачи асинхронно и эффективно. Сообщения и события: Redis поддерживает механизм Pub/Sub для организации обмена сообщениями между различными частями приложения.
Счётчики и трекеры: Используется для хранения временных данных, таких как счётчики посещений, лайков, просмотров и других показателей, которые часто обновляются. Краткосрочные данные: Хранение временных данных, которые необходимы на короткий срок и могут быть удалены после их использования.
Репликация данных: Redis поддерживает мастеровую репликацию, что позволяет создавать копии данных на нескольких серверах для обеспечения отказоустойчивости и балансировки нагрузки. Снятие резервных копий: Redis поддерживает создание резервных копий данных, что обеспечивает восстановление в случае сбоев.
Работа с временными рядами: Redis позволяет эффективно управлять временными рядами данных, используя такие структуры, как списки и отсортированные множества. Графы и социальные сети: Использование структур данных Redis для реализации графов и сетей, что полезно в социальных сетях и рекомендательных системах.
Реализация распределённых блокировок: Redis позволяет создавать механизмы блокировок для управления доступом к ресурсам в распределённых системах.
Кэширование результатов запросов к базе данных. Хранение сессионных данных пользователей. Управление очередями задач для обработки данных в фоне.
Кэширование API-запросов для уменьшения задержек. Хранение временных данных и метрик использования.
Хранение текущих состояний игр и информации о пользователях. Реализация лидеров и таблиц рекордов.
Кэширование результатов аналитических запросов. Управление счётчиками и метриками в реальном времени.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from easyoffer
⏳ Осталось 20 мест
Акция со скидкой 50% для первых 500 пользователей easyoffer подходит к концу
🔥 Узнай вопросы и задачи с собеседований в конкретных компаниях
🔥 Получи лучшие ответы и видео-примеры от middle/senior специалистов
🔥 Обходи фильтры ATS, добавив топ30 ключевых слов в свое резюме
🔥 Экономь время с помощью автоматических откликов
🔥 Подготовься идеально к интервью с тренажёрами и симуляторами
Успей забрать место по акции: 👉 https://easyoffer.ru/pro
Акция со скидкой 50% для первых 500 пользователей easyoffer подходит к концу
🔥 Узнай вопросы и задачи с собеседований в конкретных компаниях
🔥 Получи лучшие ответы и видео-примеры от middle/senior специалистов
🔥 Обходи фильтры ATS, добавив топ30 ключевых слов в свое резюме
🔥 Экономь время с помощью автоматических откликов
🔥 Подготовься идеально к интервью с тренажёрами и симуляторами
Успей забрать место по акции: 👉 https://easyoffer.ru/pro
Вакансии, только с прямыми контактами в Telegram! Ноль автоотказов — живой диалог и быстрые объективные решения.
🤖 ML & DS
🔎 QA
💼 1C 👨✈️ CyberSec
👩💻 IT HR
Подпишись чтобы не упустить свой шанс получить лучший оффер!
Please open Telegram to view this post
VIEW IN TELEGRAM
Это принцип проектирования и разработки, который предполагает, что системы и решения должны быть максимально простыми и избегать ненужной сложности. Этот принцип особенно важен в программировании и инженерии, так как помогает создавать более понятные, поддерживаемые и надежные системы.
Системы должны быть простыми в понимании и использовании. Чем проще система, тем меньше вероятность возникновения ошибок. Простота достигается за счет минимизации количества компонентов и взаимодействий между ними.
Код должен быть понятным и легко читаемым. Это облегчает его поддержку и модификацию. Использование понятных имен переменных, функций и классов, а также понятная структура кода способствуют ясности.
Компоненты или функциональность следует избегать. Если какой-то элемент системы не добавляет реальной ценности, его следует убрать. Это включает в себя как аппаратное, так и программное обеспечение.
Системы должны быть разбиты на небольшие, независимые модули, каждый из которых выполняет свою четко определенную задачу. Модульность помогает в тестировании, повторном использовании и поддержке кода.
При разработке функций или методов следует избегать создания слишком сложных алгоритмов, если можно использовать более простые и понятные решения. Использование стандартных библиотек и инструментов вместо написания собственного кода с нуля, когда это возможно.
В системной архитектуре следует избегать излишнего усложнения связей между компонентами системы. Использование простых и проверенных шаблонов проектирования вместо сложных и экспериментальных решений.
Документация должна быть простой и понятной, избегая излишне технических или сложных объяснений. Хорошо структурированная и лаконичная документация помогает пользователям и разработчикам быстрее понять систему.
Простые системы легче понимать и поддерживать, что снижает затраты на обучение и поддержку.
Чем проще система, тем меньше вероятность возникновения ошибок и проблем при её использовании.
Простые решения часто требуют меньше ресурсов и могут работать быстрее и эффективнее.
Простые и модульные системы легче масштабировать и расширять по мере необходимости.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Python или не Python? Вот в чём вопрос… на обсуждение в формате круглого стола на Python-митапе от Авито! ☄️
Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:
➡️ кейс оптимизации GC в Python от Саши Федосеева, backend-инженера из команды Main Page Tech Авито;
➡️ как mypy укрощает Python в большой компании вместе с Сергеем Яхницким из Яндекса.
После докладов, как и сказали выше, вместе с участниками спикеры обсудят, подходит ли Python для запуска больших нагруженных решений в формате круглого стола.
Для тех, кто не успевает вырваться из офиса или дома, будет онлайн-трансляция.
Так что не откладывайте, регистрируйтесь и зовите коллег — все подробности по ссылке.
Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:
После докладов, как и сказали выше, вместе с участниками спикеры обсудят, подходит ли Python для запуска больших нагруженных решений в формате круглого стола.
Для тех, кто не успевает вырваться из офиса или дома, будет онлайн-трансляция.
Так что не откладывайте, регистрируйтесь и зовите коллег — все подробности по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM