и посмотреть медиа
Backend - programmers
и посмотреть медиа
Backend developers.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Community of backend programmers: Python, Java, Golang, PHP, DevOps.
🤔 Почему разработчики иногда не любят Java? Разработчики могут не любить Java по нескольким причинам, связанным с особенностями языка, его экосистемы и исторической репутацией. 🚩Причины 🟠Объемность и многословность кода Java часто критикуют за необходимость писать много шаблонного (boilerplate) кода. Например, для выполнения простых операций, таких как создание POJO-классов (Plain Old Java Object), разработчики вынуждены прописывать геттеры, сеттеры, конструкторы, методы equals и hashCode. Несмотря на наличие библиотек, таких как Lombok, для уменьшения шаблонности, это остается одной из претензий к языку. 🟠Сравнительно медленные инновации Исторически Java обновлялась медленно, что вызывало недовольство. До перехода на модель выпуска версий каждые шесть месяцев (с Java 9), промежутки между релизами были слишком большими. Это приводило к отставанию языка от более динамично развивающихся конкурентов, таких как Kotlin, Scala или Python. 🟠Морально устаревшие подходы Некоторые считают Java "устаревшим" языком из-за особенностей, таких как ручное управление многопоточностью (до появления улучшенных инструментов в Java 8 и последующих версиях) или отсутствие "современного" синтаксиса (например, до появления var). 🟠Устаревший стереотип о производительности Раньше Java часто ассоциировалась с медленной работой из-за интерпретируемой природы байт-кода и большого объема памяти, необходимого для запуска JVM. Хотя современные реализации JVM (HotSpot, GraalVM) сделали Java очень быстрой, этот стереотип все еще живет. 🟠Экосистема устаревших инструментов и библиотек В крупных проектах на Java все еще можно столкнуться с использованием старых библиотек и инструментов, таких как XML-конфигурации для Spring. Такие проекты требуют больше усилий для модернизации и поддержки. 🟠Жесткость типизации и отсутствие динамики Java — строго типизированный язык. Это обеспечивает надежность и удобство поддержки, но снижает гибкость при разработке прототипов или экспериментировании. Это особенно заметно в сравнении с языками, такими как Python или JavaScript. 🟠Конкуренция с Kotlin Kotlin, развиваемый JetBrains, стал официальным языком разработки для Android в 2017 году. Он предлагает более лаконичный синтаксис, мощные функции работы с null-значениями, и в целом воспринимается как более "современный" язык. 🟠Сложность экосистемы Java обладает огромной экосистемой, которая может быть одновременно преимуществом и недостатком. Иногда требуется глубокое понимание JVM, инструментов сборки (Maven, Gradle), и других особенностей. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое join'ы? Это операции в языке SQL, которые позволяют объединять строки из двух или более таблиц на основе логических связей между ними. Существует несколько типов JOIN'ов, каждый из которых используется для разных сценариев объединения данных. 🚩Основные типы JOIN'ов 🟠INNER JOIN Возвращает только те строки, которые имеют совпадающие значения в обеих таблицах. SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id; 🟠LEFT JOIN (LEFT OUTER JOIN) Возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, то в столбцах правой таблицы будут NULL. SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; 🟠RIGHT JOIN (RIGHT OUTER JOIN) Возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, то в столбцах левой таблицы будут NULL. SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id; 🟠FULL JOIN (FULL OUTER JOIN) Возвращает все строки, когда есть совпадения в одной из таблиц. Если совпадений нет, то в соответствующих столбцах будут NULL. SELECT employees.name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.id; 🟠CROSS JOIN Возвращает декартово произведение строк из двух таблиц. Каждая строка из первой таблицы соединяется со всеми строками из второй таблицы. SELECT employees.name, departments.department_name FROM employees CROSS JOIN departments; 🟠SELF JOIN Использует JOIN для объединения таблицы с самой собой. Это полезно, когда нужно сравнить строки внутри одной таблицы. SELECT e1.name AS Employee1, e2.name AS Employee2 FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.id; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Основные подводные камни удалённых вызовов? Это технология, позволяющая приложениям вызывать функции или процедуры, которые выполняются на удалённом сервере, как если бы они были локальными. Несмотря на удобство, такая модель имеет ряд подводных камней, которые необходимо учитывать при проектировании и разработке распределённых систем. 🟠Скрытие распределённости Удалённые вызовы маскируют тот факт, что операция выполняется через сеть. Это может создать ложное чувство локальности у разработчиков, которые не учитывают: Сетевую задержку: вызовы занимают больше времени, чем локальные операции, особенно при медленных сетях. Сетевые сбои: соединение может быть потеряно, что приведёт к ошибкам выполнения или длительным тайм-аутам. Изменение задержки: время выполнения одного и того же вызова может существенно варьироваться в зависимости от сетевых условий. 🟠Обработка ошибок Обработка ошибок в распределённых системах сложнее, чем при локальных вызовах: Необходимо обрабатывать такие ошибки, как потеря соединения, тайм-ауты, отказ сервера. В некоторых случаях может возникнуть "проблема повторного вызова" (например, запрос был выполнен, но подтверждение потерялось), что приводит к возможной идемпотентности операций. 🟠Сериализация и десериализация данных Для передачи данных через сеть они должны быть преобразованы в сериализованный формат. Это может: Увеличивать задержки из-за времени, необходимого на преобразование. Создавать проблемы совместимости, если клиент и сервер используют разные версии протокола. Усложнять отладку и диагностику ошибок в данных. 🟠Распределённая согласованность Взаимодействие между распределёнными компонентами приводит к необходимости поддерживать согласованность данных: Проблема согласованности особенно актуальна при частичных отказах системы. Может потребоваться использование распределённых транзакций, что усложняет архитектуру. 🟠Проблемы безопасности Удалённые вызовы подвержены угрозам: Необходимо обеспечивать шифрование данных, чтобы избежать утечек. Аутентификация и авторизация играют ключевую роль в защите системы. Возможны атаки на уровень сети или использование слабостей в протоколах передачи данных. 🟠Балансировка нагрузки и масштабирование При большом числе клиентов сервер может стать узким местом: Нагрузка на сервер может привести к деградации производительности. Требуется правильная стратегия масштабирования и балансировки нагрузки, например, использование нескольких серверов или очередей сообщений. 🟠Выбор протокола и технологий Различные протоколы (например, HTTP, gRPC, Thrift) обладают своими особенностями: Протокол может накладывать ограничения на производительность и возможности. Ошибки конфигурации или несоответствие версий могут вызвать проблемы. 🚩Как это используется 🟠Для создания распределённых систем Микросервисные архитектуры. Взаимодействие клиент-сервер (например, мобильное приложение и API). Системы с тяжёлой серверной логикой. 🟠Чтобы избежать подводных камней Чётко проектировать архитектуру, учитывая особенности сети. Использовать идемпотентные операции. Обеспечивать надёжные стратегии обработки ошибок. Применять мониторинг и трассировку (например, OpenTelemetry) для отслеживания поведения системы. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как работает хеш таблица? Это структура данных, которая позволяет эффективно хранить и извлекать пары "ключ-значение". Она использует хеш-функцию для преобразования ключа в индекс массива, где хранится соответствующее значение. 🚩Основные концепции 🟠Хеш-функция Это функция, которая принимает ключ и возвращает индекс массива, где должно храниться значение. Хорошая хеш-функция должна равномерно распределять ключи по всему пространству индексов, чтобы минимизировать количество коллизий. 🟠Коллизии Это ситуации, когда два разных ключа хешируются в один и тот же индекс. Существуют различные методы разрешения коллизий: Метод цепочек (chaining): В каждой ячейке массива хранится список (или другая структура данных), содержащий все значения, соответствующие этому индексу. Открытая адресация (open addressing): При коллизии ищется другая свободная ячейка по определённому алгоритму (например, линейное пробирование, квадратичное пробирование или двойное хеширование). 🟠Размер хеш-таблицы Количество ячеек (бакетов) в массиве. Оптимальный размер зависит от количества ключей и используемой хеш-функции. Обычно размер выбирается простым числом для уменьшения вероятности коллизий. 🚩Как работает хеш-таблица 🟠Вставка элемента Хеш-функция вычисляет индекс для ключа. Если ячейка пуста, значение записывается в неё. Если ячейка занята (коллизия), применяется выбранный метод разрешения коллизий. 🟠Поиск элемента Хеш-функция вычисляет индекс для ключа. Проверяется ячейка по этому индексу. Если ключи совпадают, возвращается значение. Если ключи не совпадают (коллизия), применяется метод разрешения коллизий до нахождения нужного ключа или пустой ячейки (что означает отсутствие ключа). 🟠Удаление элемента Хеш-функция вычисляет индекс для ключа. Элемент удаляется, после чего может потребоваться перемещение других элементов для предотвращения разрыва цепочек или нарушения последовательности в открытой адресации. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чём различие между LeftJoin , RightJoin и InnerJoin ? В SQL, JOIN операторы используются для объединения строк из двух или более таблиц на основе логического отношения между ними. Вот различия между LEFT JOIN, RIGHT JOIN и INNER JOIN: 🟠`INNER JOIN` INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах, участвующих в соединении. SELECT A.*, B.* FROM TableA A INNER JOIN TableB B ON A.id = B.id; 🟠`LEFT JOIN` (или `LEFT OUTER JOIN`) LEFT JOIN возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, результат всё равно будет включать строки из левой таблицы с NULL значениями для столбцов из правой таблицы. SELECT A.*, B.* FROM TableA A LEFT JOIN TableB B ON A.id = B.id; 🟠RIGHT JOIN (или RIGHT OUTER JOIN) RIGHT JOIN возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, результат всё равно будет включать строки из правой таблицы с NULL значениями для столбцов из левой таблицы. SELECT A.*, B.* FROM TableA A RIGHT JOIN TableB B ON A.id = B.id; INNER JOIN SELECT Employees.name, Departments.dept_name FROM Employees INNER JOIN Departments ON Employees.dept_id = Departments.dept_id; LEFT JOIN SELECT Employees.name, Departments.dept_name FROM Employees LEFT JOIN Departments ON Employees.dept_id = Departments.dept_id; RIGHT JOIN SELECT Employees.name, Departments.dept_name FROM Employees RIGHT JOIN Departments ON Employees.dept_id = Departments.dept_id; Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие минусы есть у индекса? ➖Дополнительное пространство на диске Индексы требуют дополнительного места на диске для хранения. Чем больше данных в таблице, тем больше место занимает индекс. Если таблица содержит большое количество индексов, это может значительно увеличить объем хранимых данных. ➖Замедление операций записи Вставка, обновление и удаление данных в таблице с индексами требует дополнительных операций для обновления индексов. Это может существенно замедлить производительность операций модификации данных, особенно в таблицах с большим количеством индексов. ➖Сложность управления Администрирование и оптимизация индексов требует дополнительных усилий. Необходимо периодически проверять и оптимизировать индексы, чтобы избежать фрагментации и падения производительности. Неэффективное использование индексов может привести к ухудшению производительности запросов. ➖Проблемы с блокировками При выполнении операций модификации данных индексы могут вызывать блокировки, что может приводить к конфликтам и снижению производительности в условиях высокой конкурентности. ➖Проблемы с выбором индексов Неправильный выбор колонок для индексирования может не только не улучшить, но и ухудшить производительность запросов. Индексы должны быть тщательно подобраны и настроены в соответствии с типичными запросами к базе данных. ➖Риск избыточности Избыточные или дублирующие индексы могут привести к ненужному расходу ресурсов и снижению производительности операций модификации данных. ➖Неэффективность для малых таблиц В небольших таблицах накладные расходы на поддержку индексов могут превышать выигрыш в производительности запросов. В таких случаях индексы могут быть неэффективными. ➖Сложность при изменении структуры данных Изменение структуры таблиц (например, добавление или удаление колонок) может потребовать перестройки существующих индексов, что может быть трудоемким процессом. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое нормализация баз данных? Нормализация баз данных - это процесс организации данных в базе данных для минимизации избыточности данных и обеспечения их целостности. Цель нормализации - структурировать таблицы таким образом, чтобы устранить аномалии обновления, вставки и удаления данных. Нормализация достигается путем разбиения больших таблиц на более мелкие, связанных между собой отношениями, что упрощает управление данными и делает их более логически связанными. 🚩Зачем нужна нормализация 🟠Устранение избыточности данных Нормализация позволяет минимизировать дублирование данных, что экономит пространство и упрощает управление базой данных. 🟠Обеспечение целостности данных Нормализация помогает поддерживать целостность данных, обеспечивая правильное и единообразное хранение данных. 🟠Упрощение структуры базы данных Разделение данных на логические таблицы делает структуру базы данных более понятной и удобной для использования. 🟠Избежание аномалий данных Нормализация предотвращает возникновение аномалий при обновлении, вставке и удалении данных. 🚩Основные формы нормализации 🟠Первая нормальная форма (1NF) Удаление повторяющихся групп в таблице. Каждый столбец должен содержать только атомарные (неделимые) значения. Все записи в таблице должны быть уникальными. 🟠Вторая нормальная форма (2NF) Таблица должна быть в 1NF. Удаление частичной функциональной зависимости: каждый неключевой атрибут должен быть полностью зависим от первичного ключа. 🟠Третья нормальная форма (3NF) Таблица должна быть в 2NF. Удаление транзитивной зависимости: все неключевые атрибуты должны быть напрямую зависимы от первичного ключа, а не от других неключевых атрибутов. 🟠Бойс-Кодд нормальная форма (BCNF) Усиление 3NF: каждая детерминанта должна быть кандидатом на ключ, что означает, что в любой нетривиальной функциональной зависимости X -> Y, X должно быть суперключом. 🟠Четвертая нормальная форма (4NF) Таблица должна быть в BCNF. Устранение многозначных зависимостей: таблица не должна содержать многозначных зависимостей, когда один атрибут зависит от нескольких значений другого атрибута. 🟠Пятая нормальная форма (5NF) Таблица должна быть в 4NF. Устранение соединительных зависимостей: данные должны быть разбиты так, чтобы каждая зависимость сохранялась. 🚩Примеры применения нормализации 🟠Первая нормальная форма Если у вас есть таблица с повторяющимися группами, такими как несколько телефонных номеров для одного клиента, вы создаете отдельную таблицу для телефонов и связываете ее с таблицей клиентов. 🟠Вторая нормальная форма Если у вас есть таблица заказов с колонками "номер заказа", "название товара" и "цена товара", вы можете создать отдельные таблицы для заказов и товаров, чтобы цена товара зависела только от товара, а не от комбинации заказа и товара. 🟠Третья нормальная форма Если у вас есть таблица сотрудников с колонками "идентификатор сотрудника", "название отдела" и "имя начальника отдела", вы можете создать отдельные таблицы для сотрудников и отделов, чтобы имя начальника отдела зависело только от отдела, а не от сотрудника. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое git ? Это распределённая система контроля версий, разработанная Линусом Торвальдсом в 2005 году. Она предназначена для отслеживания изменений в исходном коде во время разработки программного обеспечения. Git позволяет нескольким разработчикам работать над одним и тем же проектом одновременно, не опасаясь потерять работу или перезаписать изменения друг друга. 🚩Основные понятия и функции 🟠Репозиторий (Repository) Это хранилище для проекта, в котором хранятся все файлы и история их изменений. 🟠Коммит (Commit) Зафиксированный снимок текущего состояния файлов в репозитории. Коммиты образуют историю изменений проекта. 🟠Ветвь (Branch) Отдельная линия разработки. Ветви позволяют параллельно работать над разными функциями или исправлениями без вмешательства в основную кодовую базу. 🟠Слияние (Merge) Процесс объединения изменений из одной ветви в другую. Обычно используется для интеграции новых функций или исправлений из отдельных ветвей в основную ветвь. 🟠Клон (Clone) Создание копии удалённого репозитория на локальной машине разработчика. 🟠Форк (Fork) Создание копии чужого репозитория (обычно на платформе вроде GitHub) для внесения собственных изменений без воздействия на оригинальный проект. 🟠Запрос на слияние (Pull Request или Merge Request) Запрос на включение изменений из одной ветви в другую, часто используемый в коллаборативных платформах (например, GitHub, GitLab). 🟠Ремот (Remote) Удалённый репозиторий, который может быть связан с локальным репозиторием. Основные команды взаимодействуют с ним для синхронизации данных. 🚩Основные команды 🟠git init Создание нового локального репозитория. 🟠git clone [URL] Клонирование удалённого репозитория на локальную машину. 🟠git add [файл/папка] Добавление изменений в индекс (стадия подготовки к коммиту). 🟠git commit -m "Сообщение" Создание коммита с заданным сообщением. 🟠git status Проверка состояния файлов в рабочем каталоге и индексе. 🟠git log Просмотр истории коммитов. 🟠git branch Управление ветвями (создание, просмотр, удаление). 🟠git checkout [ветка/коммит] Переключение между ветвями или возврат к определённому коммиту. 🟠git merge [ветка] Слияние указанной ветки с текущей. 🟠git pull Получение изменений из удалённого репозитория и слияние с текущей веткой. 🟠git push Отправка изменений из локального репозитория в удалённый. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чём разница 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 значениями для столбцов из левой таблицы. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!