Backend
3.94K subscribers
35 photos
1 video
696 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 В чём разница InnerJoin и RightJoin ?


Это два типа объединения таблиц в SQL, которые используются для получения данных из нескольких таблиц на основе условий соединения. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных.

🚩`INNER JOIN`

INNER JOIN возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Если нет совпадения, строки не включаются в результирующий набор данных.
SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;


🚩`RIGHT JOIN` (или `RIGHT OUTER JOIN`)

RIGHT JOIN возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Если совпадения нет, строки из правой таблицы все равно включаются в результат с NULL значениями для столбцов из левой таблицы.
SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;


🚩Основные различия

🟠INNER JOIN
Возвращает только строки с совпадающими значениями в обеих таблицах. Исключает строки без совпадений.
🟠RIGHT JOIN
Возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Включает строки из правой таблицы, даже если нет совпадений, с NULL значениями для столбцов из левой таблицы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что знаешь о хеш функции?

Хеш-функция — это функция, которая принимает входные данные (ключ) и возвращает фиксированное число, называемое хешем (или хеш-значением). Основная цель хеш-функции — преобразовать произвольные данные в числовое значение определенного диапазона.

🚩Основные свойства хеш-функции:

🟠 Детерминированность: Хеш-функция всегда должна возвращать одно и то же хеш-значение для одного и того же входного значения.
🟠Равномерное распределение: Хорошая хеш-функция должна равномерно распределять хеш-значения по всему диапазону, чтобы минимизировать количество коллизий.
🟠Быстрота вычисления: Хеш-функция должна быть достаточно быстрой, чтобы не замедлять общую производительность алгоритмов, которые её используют.
🟠Минимизация коллизий: Коллизия возникает, когда два разных входных значения дают одно и то же хеш-значение. Хорошая хеш-функция должна минимизировать вероятность таких случаев.

🚩Применение хеш-функций:

🟠Хеш-таблицы: Используются для вычисления индекса массива, где будет храниться значение, связанное с ключом. Это позволяет быстро выполнять операции вставки, удаления и поиска.
🟠Криптография: Криптографические хеш-функции (например, SHA-256, MD5) используются для обеспечения целостности данных, создания цифровых подписей и безопасного хранения паролей.
🟠Контроль целостности данных: Хеш-функции применяются для проверки целостности данных при передаче или хранении, позволяя выявлять ошибки или изменения в данных.
🟠Генерация уникальных идентификаторов: Хеш-функции используются для генерации уникальных идентификаторов (например, UUID), основываясь на входных данных.

🚩Примеры хеш-функций

🟠Простая хеш-функция: Эта функция возвращает остаток от деления длины ключа на размер таблицы. Она проста, но не обеспечивает равномерное распределение.
def simple_hash(key, table_size):
return len(key) % table_size


🟠Хеш-функция для строк (например, DJB2):
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


🚩Методы разрешения коллизий

🟠Метод цепочек (chaining): В каждой ячейке массива хранится список значений, которые хешируются в один и тот же индекс.
🟠Открытая адресация (open addressing): При коллизии ищется другая свободная ячейка по определённому алгоритму (например, линейное пробирование, квадратичное пробирование или двойное хеширование).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🤔 Что такое итератор?

Это объект, который позволяет поочередно проходить через элементы коллекции (например, списка или множества) без необходимости знать внутреннее представление этой коллекции. Итераторы предоставляют стандартный интерфейс для доступа к элементам, что делает их важной частью объектно-ориентированного программирования и функционального программирования.

🚩Основные аспекты итераторов

🟠Итерабельные объекты (Iterable)
Объекты, которые поддерживают протокол итерации, называются итерабельными. Примеры включают списки, кортежи, множества и словари.

🟠Протокол итерации
В Python, чтобы объект был итерабельным, он должен реализовать метод __iter__(), который возвращает итератор.

🟠Итератор
Итератор — это объект, который реализует методы __iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.

🚩Пример использования итератора в Python

Пример с использованием встроенного итератора
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?

XML (Extensible Markup Language) — это расширяемый язык разметки, используемый для представления структурированных данных в формате, который легко читается как человеком, так и машиной. XML разработан для хранения и обмена данными между различными системами и платформами.

🚩Основные характеристики

🟠Расширяемость
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) помогают отправлять и получать сообщения асинхронно, обеспечивая буфер между отправителем и получателем. Брокеры сообщений сохраняют сообщения до тех пор, пока получатель не будет готов их обработать, что помогает управлять потоками данных и уравновешивать нагрузку. Такой подход позволяет отправителю отправить сообщение и сразу продолжить свою работу, не дожидаясь ответа, что повышает производительность системы.

🟠Паттерн «Издатель-подписчик» (Publish-Subscribe)
В модели «издатель-подписчик» компоненты могут публиковать события, на которые подписаны другие компоненты, а брокер сообщений доставляет события всем подписчикам. Этот паттерн позволяет системе оставаться слабосвязанной, так как издатель не знает, сколько и какие конкретно сервисы получат событие. Такие системы часто применяются для уведомлений, регистрации событий, обработки данных и отправки уведомлений нескольким сервисам одновременно.

🟠Паттерн «Очередь задач»
В очереди задач сообщения представляют собой задачи для выполнения, которые обрабатываются одним или несколькими исполнителями. Этот паттерн полезен для распределения нагрузки на сервисы, позволяя выполнять задачи асинхронно, когда они становятся доступны, и автоматически управлять потоками. Например, задача по отправке электронной почты может быть помещена в очередь и обработана отдельным рабочим процессом, что освобождает основной сервис от ожидания завершения отправки.

🚩Плюсы
Повышенная производительность и масштабируемость, так как сервисы могут продолжать работу без ожидания ответа.
Отказоустойчивость и стабильность за счёт независимости сервисов и использования брокеров сообщений.
Гибкость и низкая связанность компонентов, что позволяет легко модифицировать систему и добавлять новые сервисы.

🚩Минусы

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие минусы есть у индекса?

Дополнительное пространство на диске
Индексы требуют дополнительного места на диске для хранения. Чем больше данных в таблице, тем больше место занимает индекс. Если таблица содержит большое количество индексов, это может значительно увеличить объем хранимых данных.

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

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

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

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

Риск избыточности
Избыточные или дублирующие индексы могут привести к ненужному расходу ресурсов и снижению производительности операций модификации данных.

Неэффективность для малых таблиц
В небольших таблицах накладные расходы на поддержку индексов могут превышать выигрыш в производительности запросов. В таких случаях индексы могут быть неэффективными.

Сложность при изменении структуры данных
Изменение структуры таблиц (например, добавление или удаление колонок) может потребовать перестройки существующих индексов, что может быть трудоемким процессом.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что знаешь про нормализацию?

Это процесс организации данных в реляционной базе данных для минимизации избыточности и предотвращения аномалий при обновлении данных.

🟠1NF (Первая нормальная форма)
Каждое поле содержит только одно значение, и все записи уникальны.
🟠2NF (Вторая нормальная форма)Данные находятся в 1NF, и все неключевые атрибуты полностью зависят от первичного ключа.
🟠3NF (Третья нормальная форма)
Данные находятся в 2NF, и нет транзитивных зависимостей между неключевыми атрибутами.
🟠BCNF (Бойс-Кодд нормальная форма)
Данные находятся в 3NF, и каждый детерминант является суперключом.
🟠4NF (Четвертая нормальная форма)
Данные находятся в BCNF, и нет многозначных зависимостей.
🟠5NF (Пятая нормальная форма)
Данные находятся в 4NF, и каждая зависимость выражается через проекции.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего используют redis в проектах?

Это высокопроизводительная система управления базами данных, работающая в памяти (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
🤔 Что знаешь о принципах программирования KISS?

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

🚩Аспекты

🟠Простота
Системы должны быть простыми в понимании и использовании. Чем проще система, тем меньше вероятность возникновения ошибок. Простота достигается за счет минимизации количества компонентов и взаимодействий между ними.

🟠Ясность
Код должен быть понятным и легко читаемым. Это облегчает его поддержку и модификацию. Использование понятных имен переменных, функций и классов, а также понятная структура кода способствуют ясности.

🟠Избегание избыточности
Компоненты или функциональность следует избегать. Если какой-то элемент системы не добавляет реальной ценности, его следует убрать. Это включает в себя как аппаратное, так и программное обеспечение.

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

🚩Примеры применения

🟠Программирование
При разработке функций или методов следует избегать создания слишком сложных алгоритмов, если можно использовать более простые и понятные решения. Использование стандартных библиотек и инструментов вместо написания собственного кода с нуля, когда это возможно.
🟠Проектирование систем
В системной архитектуре следует избегать излишнего усложнения связей между компонентами системы. Использование простых и проверенных шаблонов проектирования вместо сложных и экспериментальных решений.
🟠Документация
Документация должна быть простой и понятной, избегая излишне технических или сложных объяснений. Хорошо структурированная и лаконичная документация помогает пользователям и разработчикам быстрее понять систему.

🚩Плюсы

Легкость понимания и поддержки
Простые системы легче понимать и поддерживать, что снижает затраты на обучение и поддержку.
Снижение количества ошибок
Чем проще система, тем меньше вероятность возникновения ошибок и проблем при её использовании.
Повышение производительности
Простые решения часто требуют меньше ресурсов и могут работать быстрее и эффективнее.
Улучшение масштабируемости
Простые и модульные системы легче масштабировать и расширять по мере необходимости.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое инкапсуляция?

Это один из основных принципов объектно-ориентированного программирования (ООП), который подразумевает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы или интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.

🚩Основные аспекты инкапсуляции

🟠Скрытие данных
Внутреннее состояние объекта (переменные и данные) скрыто от внешнего мира и доступно только через методы класса.

🟠Методы доступа
Класс предоставляет публичные методы для взаимодействия с его внутренним состоянием. Эти методы часто называют геттерами (для получения значений) и сеттерами (для установки значений).

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

Пример инкапсуляции на языке Python
class Person:
def __init__(self, name, age):
self._name = name # Внутреннее состояние
self._age = age

# Геттер для имени
def get_name(self):
return self._name

# Сеттер для имени
def set_name(self, name):
if isinstance(name, str) and name:
self._name = name

# Геттер для возраста
def get_age(self):
return self._age

# Сеттер для возраста
def set_age(self, age):
if isinstance(age, int) and 0 <= age <= 120:
self._age = age

# Использование класса
person = Person("Alice", 30)
print(person.get_name()) # Вывод: Alice
print(person.get_age()) # Вывод: 30

person.set_name("Bob")
person.set_age(35)
print(person.get_name()) # Вывод: Bob
print(person.get_age()) # Вывод: 35

# Попытка установить некорректное значение
person.set_age(-5) # Значение не изменится из-за проверки в сеттере
print(person.get_age()) # Вывод: 35


🚩Плюсы

Защита данных
Скрытие внутреннего состояния объекта предотвращает его некорректное использование и изменение.

Упрощение поддержки
Инкапсуляция облегчает модификацию и поддержку кода, поскольку внутренние изменения объекта не влияют на внешний код, взаимодействующий с объектом.

Повышение гибкости
Возможность изменения внутренней реализации объекта без изменения его интерфейса.

Контроль доступа
Возможность добавления логики проверки и валидации данных при их установке или изменении.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что можешь рассказать про HTML?

HTML (HyperText Markup Language) — это основной язык разметки, используемый для создания и структурирования веб-страниц. HTML позволяет создавать веб-страницы с текстом, изображениями, ссылками, формами и другими элементами, которые могут быть отображены в браузере. Он является фундаментом веб-технологий и работает в тандеме с CSS (Cascading Style Sheets) и JavaScript для создания полноценных веб-приложений.

🚩Основные аспекты HTML:

Структура документа: HTML-документ состоит из различных элементов, каждый из которых представлен тегами. Теги определяют, как различные части документа должны быть отображены в браузере.
🟠 <!DOCTYPE html>: Определяет тип документа и версию HTML.
🟠 <html>: Корневой элемент документа.
🟠<head>: Содержит метаданные о документе, такие как теги <title>, <meta>, стили и скрипты.
🟠 <body>: Содержит видимую часть документа, включая текст, изображения, ссылки и другие элементы.

Элементы и теги: HTML использует теги для определения различных элементов. Теги обычно идут в парах: открывающий тег <tag> и закрывающий тег </tag>. Некоторые теги являются самозакрывающимися, например, <img /> и <br />.
🟠<h1> - <h6>: Заголовки различных уровней.
🟠 <p>: Параграф текста.
🟠<a>: Гиперссылка.
🟠 <img>: Изображение.
🟠<ul>, <ol>, <li>: Ненумерованные и нумерованные списки и элементы списка.
🟠<table>, <tr>, <td>: Таблицы и их элементы.

Атрибуты: Теги могут иметь атрибуты, которые предоставляют дополнительную информацию о элементе. Атрибуты записываются внутри открывающего тега и имеют формат имя="значение".
🟠href для <a>: Указывает URL, на который ведёт ссылка.
🟠src для <img>: Указывает путь к изображению.
🟠alt для <img>: Описывает изображение для поисковых систем и пользователей с ограниченными возможностями.

Формы: HTML позволяет создавать интерактивные формы для сбора данных от пользователей. Формы могут содержать различные типы полей ввода, такие как текстовые поля, радиокнопки, чекбоксы и кнопки отправки.
🟠 <input>: Общее поле ввода. Атрибут type определяет тип ввода (например, text, password, email).
🟠<textarea>: Многострочное текстовое поле.
🟠 <select> и <option>: Выпадающий список.
🟠 <button>: Кнопка.

🚩Преимущества HTML:

🟠Простота использования: HTML легко изучить и использовать. Он не требует сложных инструментов для написания или редактирования.
🟠Совместимость: HTML поддерживается всеми веб-браузерами, что обеспечивает кроссплатформенность и широкую доступность.
🟠Расширяемость: HTML можно расширять с помощью CSS и JavaScript для создания более сложных и интерактивных веб-страниц.
🟠Стандартизация: HTML является стандартом, поддерживаемым W3C (World Wide Web Consortium), что обеспечивает его надежность и предсказуемость.

🚩Как используется HTML:

🟠Создание веб-страниц:
Основное применение HTML — это создание веб-страниц и веб-приложений. Каждый веб-сайт, который вы посещаете, использует HTML для структурирования своего контента.
🟠Электронные письма:
HTML также используется для создания форматированных электронных писем с текстом, изображениями и ссылками.
🟠Документация и справочные системы:
HTML используется для создания интерактивной документации и справочных систем, которые могут включать текст, ссылки, изображения и другие элементы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чём разница между сцеплением и связанностью?

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

🚩Отличия

🟠Сцепление (Coupling)
Описывает степень зависимости одного модуля от других. Высокое сцепление означает, что модули сильно зависят друг от друга, что затрудняет их изменение, тестирование и повторное использование, так как изменения в одном модуле требуют изменений в зависимых модулях. Идеально стремиться к слабому сцеплению, чтобы модули были максимально независимыми. Это позволяет изменять или заменять один модуль без необходимости изменения других.

🟠Связанность (Cohesion)
Описывает, насколько тесно связанные и объединённые общей задачей элементы внутри одного модуля. Высокая связанность означает, что все функции и данные модуля логически связаны и выполняют одну задачу. Это упрощает понимание кода и делает модуль более автономным.Высокая связанность считается хорошей практикой, так как модуль с высокой связанностью проще в обслуживании, его легче изменить или заменить.

🚩Пример

Представьте модуль, который управляет пользователями: если в модуле только функции для работы с пользователями (например, добавление и удаление), он обладает высокой связанностью, так как его функции направлены на одну задачу. Если модуль при этом минимально зависит от других частей системы, это говорит о слабом сцеплении.

🚩 Сравнение

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что тебе известно о бинарном дереве?

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

🚩Основные термины

🟠Узел (Node)
Основной элемент бинарного дерева, содержащий данные и ссылки на дочерние узлы.
🟠Корень (Root)
Верхний узел дерева, не имеющий родительских узлов.
🟠Лист (Leaf)
Узел, не имеющий дочерних узлов.
🟠Ветвь (Branch)
Путь от корня к любому другому узлу.
🟠Высота дерева
Максимальное количество уровней от корня до самого нижнего листа.
🟠Глубина узла
Расстояние от корня до данного узла.

🚩Виды

🟠Полное бинарное дерево
Все уровни, кроме, возможно, последнего, полностью заполнены, и все узлы последнего уровня выровнены влево.
🟠Совершенное бинарное дерево
Все уровни полностью заполнены, и каждый узел имеет два дочерних узла, кроме листьев.
🟠Двоичное дерево поиска (Binary Search Tree, BST)
Для каждого узла все значения в левом поддереве меньше значения узла, а все значения в правом поддереве больше значения узла.

🚩Основные операции

🟠Добавление узла (Insertion)
Процесс вставки нового узла в дерево. В случае двоичного дерева поиска, новый узел вставляется в соответствующее место, чтобы сохранить порядок элементов.
🟠Удаление узла (Deletion)
Процесс удаления узла из дерева. Может потребовать реорганизации дерева для поддержания его свойств.
🟠Поиск (Search)
Процесс нахождения узла с определенным значением. В двоичном дереве поиска это осуществляется быстрее благодаря упорядоченности узлов.
🟠Обход дерева (Traversal)
Процесс посещения всех узлов дерева в определенном порядке. Основные методы обхода:

🚩Применение

🟠Хранение отсортированных данных
Бинарное дерево поиска позволяет эффективно хранить и извлекать отсортированные данные.
🟠Поисковые системы
Использование деревьев для организации и поиска данных.
🟠Алгоритмы и структуры данных
Базовая структура для многих алгоритмов, включая сортировки, балансировки и другие операции с данными.
🟠Компиляторы и интерпретаторы
Используются для построения и обработки синтаксических деревьев при разборе кода.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Media is too big
VIEW IN TELEGRAM
📺 База 1000+ реальных собеседований

На программиста, тестировщика, аналитика, проджекта и другие IT профы.

Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д.

🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!
Please open Telegram to view this post
VIEW IN TELEGRAM