и посмотреть медиа
Backend - программисты
и посмотреть медиа
Backend разработчики.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Комьюнити backend-программистов: Python, Java, Golang, PHP, DevOps.
🤔 В чём разница между сцеплением и связанностью? Это два ключевых свойства модульной архитектуры программного обеспечения, которые помогают оценить качество кода и архитектурных решений. 🚩Отличия 🟠Сцепление (Coupling) Описывает степень зависимости одного модуля от других. Высокое сцепление означает, что модули сильно зависят друг от друга, что затрудняет их изменение, тестирование и повторное использование, так как изменения в одном модуле требуют изменений в зависимых модулях. Идеально стремиться к слабому сцеплению, чтобы модули были максимально независимыми. Это позволяет изменять или заменять один модуль без необходимости изменения других. 🟠Связанность (Cohesion) Описывает, насколько тесно связанные и объединённые общей задачей элементы внутри одного модуля. Высокая связанность означает, что все функции и данные модуля логически связаны и выполняют одну задачу. Это упрощает понимание кода и делает модуль более автономным.Высокая связанность считается хорошей практикой, так как модуль с высокой связанностью проще в обслуживании, его легче изменить или заменить. 🚩Пример Представьте модуль, который управляет пользователями: если в модуле только функции для работы с пользователями (например, добавление и удаление), он обладает высокой связанностью, так как его функции направлены на одну задачу. Если модуль при этом минимально зависит от других частей системы, это говорит о слабом сцеплении. 🚩 Сравнение 🟠Слабое сцепление и высокая связанность Это желательные качества. Они помогают создать более гибкую и поддерживаемую систему. 🟠Сцепление Лучше, когда оно слабое, так как снижает зависимость между модулями. 🟠Связанность Лучше, когда она высокая, так как все функции модуля работают на достижение одной цели. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Из чего состоит ответ на сервере? Ответ на сервере, особенно в контексте HTTP, состоит из нескольких ключевых компонентов. Эти компоненты обеспечивают клиенту информацию о результате запроса, статусе обработки, а также предоставляют сами данные, если это необходимо. Основные части ответа включают: 🟠Стартовая линия (Status Line) Стартовая линия содержит информацию о статусе ответа и состоит из следующих частей: Версия протокола HTTP: Например, HTTP/1.1. Код состояния (Status Code): Числовой код, который указывает результат обработки запроса. Примеры включают 200 (OK), 404 (Not Found), 500 (Internal Server Error). Причинная фраза (Reason Phrase): Человеко-читаемое описание статуса. Например, OK, Not Found, Internal Server Error. HTTP/1.1 200 OK 🟠Заголовки (Headers) Заголовки предоставляют метаданные о ответе. Они состоят из пар "ключ-значение" и могут включать: Date: Дата и время отправки ответа. Content-Type: Тип содержимого ответа (например, text/html, application/json). Content-Length: Размер тела ответа в байтах. Server: Информация о сервере, отправившем ответ. Set-Cookie: Установка cookies. Content-Type: application/json Content-Length: 85 Server: Apache/2.4.1 (Unix) Set-Cookie: sessionId=abc123; Path=/; HttpOnly 🟠Тело ответа (Body) Тело ответа содержит данные, которые сервер отправляет клиенту. Формат и содержание тела зависят от типа ответа и могут включать: HTML-страницы JSON-объекты XML-данные Файлы (например, изображения, документы) { "id": 123, "name": "John Doe", "email": "[email protected]" } Пример полного HTTP-ответа HTTP/1.1 200 OK Date: Tue, 27 Jul 2024 12:28:53 GMT Content-Type: application/json Content-Length: 85 Server: Apache/2.4.1 (Unix) Set-Cookie: sessionId=abc123; Path=/; HttpOnly { "id": 123, "name": "John Doe", "email": "[email protected]" } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое виртуальное окружение? Это изолированная среда для выполнения программного кода, которая позволяет создавать независимые друг от друга пространства для различных проектов. В каждом таком окружении могут быть установлены специфические для проекта зависимости (библиотеки, пакеты), которые не будут пересекаться с зависимостями других проектов. 🚩Зачем нужно 🟠Изоляция зависимостей В разных проектах могут использоваться различные версии одних и тех же библиотек. Виртуальные окружения позволяют избежать конфликтов версий, создавая изолированные пространства для каждого проекта. 🟠Упрощение управления зависимостями Легко установить, обновить или удалить зависимости без риска повлиять на другие проекты. Это особенно полезно при работе над проектами с долгим жизненным циклом, где могут возникать проблемы совместимости. 🟠Повышение безопасности Изоляция окружения помогает ограничить доступ к критически важным системным ресурсам и защищает основную систему от потенциально вредоносного кода. 🟠Удобство разработки и тестирования Виртуальные окружения позволяют разработчикам легко переключаться между проектами и их зависимостями, что упрощает процесс тестирования и отладки. 🟠Совместимость и переносимость Проекты с виртуальными окружениями легче перенести на другие системы или передать другим разработчикам. Достаточно скопировать окружение вместе с проектом, чтобы получить полностью функционирующую копию. 🚩Как используется 🟠venv Встроенный модуль в Python, позволяющий создавать легковесные виртуальные окружения. 🟠virtualenv Более функциональный инструмент, особенно полезный для старых версий Python. 🟠conda Инструмент, который управляет как пакетами, так и виртуальными окружениями, поддерживающий не только Python, но и другие языки программирования. 1⃣Создание окружения Команда для создания нового окружения (например, python -m venv env для venv). 2⃣Активация окружения Команда для активации окружения (например, source env/bin/activate на Unix-подобных системах или .\env\Scripts\activate на Windows). 3⃣Установка зависимостей Использование менеджера пакетов (например, pip) для установки необходимых библиотек. 4⃣Деактивация окружения Команда для выхода из окружения (например, deactivate). Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие есть уровни изоляции транзакций ? Уровни изоляции транзакций определяют степень видимости изменений, сделанных одной транзакцией, для других параллельно выполняющихся транзакций. Они помогают контролировать влияние транзакций друг на друга и управляют различными типами аномалий, такими как "грязное" чтение, неповторяющееся чтение и фантомные чтения. В стандарте SQL-92 определены четыре уровня изоляции транзакций: 🚩Read Uncommitted (Чтение неподтвержденных данных) Транзакция может видеть изменения, сделанные другими транзакциями, даже если эти изменения еще не были зафиксированы (не подтверждены). 🟠Грязное чтение (Dirty Read) Транзакция может прочитать данные, которые были изменены другой транзакцией, но не были зафиксированы. 🟠Неповторяющееся чтение (Non-repeatable Read) Транзакция может видеть разные значения данных при повторном чтении, если другая транзакция изменила эти данные и зафиксировала изменения. 🟠Фантомные чтения (Phantom Read) Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса. 🚩Read Committed (Чтение подтвержденных данных) Транзакция может видеть только изменения, которые были зафиксированы другими транзакциями. Неподтвержденные изменения не видны. 🟠Неповторяющееся чтение (Non-repeatable Read) Транзакция может видеть разные значения данных при повторном чтении, если другая транзакция изменила и зафиксировала эти данные. 🟠Фантомные чтения (Phantom Read) Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса. 🚩Repeatable Read (Повторяемое чтение) Транзакция гарантирует, что если она прочитала данные в начале транзакции, эти данные останутся неизменными до конца транзакции. Транзакция не видит изменения данных, сделанные другими транзакциями после начала текущей транзакции. Фантомные чтения (Phantom Read): Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса. 🚩Serializable (Сериализуемость) Транзакция выполняется так, как если бы она была единственной, работающей в системе. Другие транзакции не могут добавлять, изменять или удалять данные, пока текущая транзакция не завершится. Это самый строгий уровень изоляции. Все аномалии (грязное чтение, неповторяющееся чтение, фантомные чтения) предотвращаются. -- Установка уровня изоляции SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; Пример на Java (использование JDBC) connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ); connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое MVVM? Это архитектурный шаблон, который разделяет приложение на три части: Model (данные и логика), View (интерфейс) и ViewModel (связь между Model и View). 🚩Пример Model public class User { public string Name { get; set; } public int Age { get; set; } } ViewModel public class UserViewModel : INotifyPropertyChanged { private ObservableCollection _users; public ObservableCollection Users { get { return _users; } set { _users = value; OnPropertyChanged(nameof(Users)); } } public UserViewModel() { Users = new ObservableCollection { new User { Name = "John Doe", Age = 30 }, new User { Name = "Jane Doe", Age = 25 } }; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } View (XAML) • • Код за View (Code-behind) public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new UserViewModel(); } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие существуют нормальные формы в SQL? Это процесс организации данных для минимизации избыточности и избегания аномалий при внесении данных. Нормальные формы (NF) — это набор правил, которые помогают в нормализации баз данных. 🟠Первая нормальная форма (1NF) Таблица находится в 1NF, если: Все столбцы содержат атомарные значения, то есть каждое значение в столбце неделимо. Все строки уникальны, нет повторяющихся строк. Пример: Если у вас есть таблица с заказами, и каждый заказ может содержать несколько продуктов, вместо хранения всех продуктов в одном столбце, нужно разбить их на отдельные строки. 🟠Вторая нормальная форма (2NF) Таблица находится во 2NF, если: Она находится в 1NF. Все неключевые столбцы полностью зависят от всего первичного ключа, а не от его части. Пример Если в таблице "Заказы" у вас есть составной ключ (OrderID, ProductID), то столбцы, зависящие только от OrderID (например, OrderDate), должны быть вынесены в отдельную таблицу. 🟠Третья нормальная форма (3NF) Таблица находится в 3NF, если: Она находится во 2NF. Все неключевые столбцы зависят только от первичного ключа, а не от других неключевых столбцов. Пример Если в таблице "Сотрудники" у вас есть столбцы EmployeeID, DepartmentID и DepartmentName, нужно вынести DepartmentName в отдельную таблицу "Департаменты", чтобы избежать зависимости между неключевыми столбцами. 🟠Бойс-Кодд нормальная форма (BCNF) Таблица находится в BCNF, если: Она находится в 3NF. Для каждой функциональной зависимости X -> Y, X является суперключом. Пример: Если в таблице "Курс" есть зависимости (Professor, Course) -> Room и Room -> Capacity, необходимо реструктурировать таблицу так, чтобы не было зависимостей, где детерминанты не являются суперключами. 🟠Четвертая нормальная форма (4NF) Таблица находится в 4NF, если: Она находится в BCNF. В ней нет многозначных зависимостей (Multivalued Dependencies). Пример: Если студент может записаться на несколько курсов и участвовать в нескольких клубах, то эти зависимости должны быть вынесены в отдельные таблицы. 🟠Пятая нормальная форма (5NF) Таблица находится в 5NF, если: Она находится в 4NF. В ней нет соединительных зависимостей (Join Dependencies), которые нельзя разделить без потери данных. Пример: Если у вас есть сложные зависимости между несколькими таблицами, то нужно убедиться, что все соединения этих таблиц могут быть разложены обратно без потери информации. 🟠Доменино-ключевая нормальная форма (DKNF) Таблица находится в DKNF, если: Все ограничения и зависимости выражаются только через домены и ключи таблицы, и отсутствуют аномалии при вставке, обновлении или удалении данных. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Расскажи про https HTTPS (HyperText Transfer Protocol Secure) — это расширение протокола HTTP, используемое для безопасного обмена данными между веб-браузером и веб-сервером. HTTPS обеспечивает конфиденциальность, целостность и аутентичность передаваемых данных, используя шифрование, аутентификацию и проверку целостности. 🚩Основные аспекты HTTPS 🟠Шифрование: HTTPS использует шифрование для защиты данных, передаваемых между клиентом и сервером. Шифрование делает данные нечитаемыми для посторонних, предотвращая их перехват и кражу. Это достигается с помощью протоколов SSL (Secure Sockets Layer) и его преемника TLS (Transport Layer Security). 🟠Аутентификация: Аутентификация подтверждает, что клиент и сервер являются теми, за кого они себя выдают. Это предотвращает атаки типа "человек посередине" (man-in-the-middle attacks). Аутентификация осуществляется с помощью цифровых сертификатов, которые выдаются доверенными центрами сертификации (Certificate Authorities, CA). 🟠Целостность данных: Целостность данных гарантирует, что данные не были изменены во время передачи. Это достигается с помощью хеш-функций и контрольных сумм, которые проверяются на каждой стороне соединения. 🚩Как работает HTTPS 🟠Инициация соединения: Клиент (например, веб-браузер) инициирует соединение с сервером, отправляя HTTPS-запрос. 🟠Обмен сертификатами: Сервер отправляет клиенту свой цифровой сертификат. Сертификат содержит публичный ключ сервера и информацию о центре сертификации. 🟠Проверка сертификата: Клиент проверяет подлинность сертификата, используя список доверенных центров сертификации. Если сертификат действителен, клиент продолжает установку защищённого соединения. 🟠Установка сеансового ключа: Клиент и сервер договариваются о сеансовом ключе, используя асимметричное шифрование. Этот ключ будет использоваться для шифрования данных в течение сеанса. 🟠Шифрование данных: Данные передаются между клиентом и сервером в зашифрованном виде, что обеспечивает их конфиденциальность и целостность. 🚩Преимущества HTTPS 🟠Безопасность: HTTPS защищает данные от перехвата и подделки, что особенно важно для передачи конфиденциальной информации, такой как пароли и номера кредитных карт. 🟠Доверие пользователей: Наличие HTTPS повышает доверие пользователей к веб-сайту, так как современные браузеры отмечают сайты с HTTPS как безопасные. 🟠SEO (Поисковая оптимизация): Поисковые системы, такие как Google, отдают предпочтение сайтам с HTTPS и могут ранжировать их выше в результатах поиска. 🟠Соответствие стандартам: Многие нормативные акты и стандарты требуют использования HTTPS для защиты данных, например, GDPR в Европейском Союзе. 🚩Как настроить HTTPS 🟠Получение сертификата: Приобретите SSL/TLS сертификат у доверенного центра сертификации (CA) или используйте бесплатные сертификаты, такие как Let's Encrypt. 🟠Установка сертификата: Установите полученный сертификат на веб-сервер. Процесс установки зависит от используемого веб-сервера (например, Apache, Nginx, IIS). 🟠Настройка перенаправлений:Настройте сервер так, чтобы все HTTP-запросы перенаправлялись на HTTPS. 🟠Обновление ссылок и ресурсов: Убедитесь, что все ссылки и ресурсы на сайте используют HTTPS, чтобы избежать смешанного контента (mixed content), когда части страницы загружаются по HTTP. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чём смысл инкапсуляции? Один из основных принципов объектно-ориентированного программирования (ООП), наряду с наследованием и полиморфизмом. Смысл инкапсуляции заключается в объединении данных и методов, работающих с этими данными, в одном объекте, а также в ограничении доступа к этим данным из внешнего мира. 🚩Основные аспекты инкапсуляции 🟠Сокрытие данных В инкапсуляции данные (свойства) объекта скрываются от внешнего доступа и защищаются от некорректных изменений. Это достигается путем использования модификаторов доступа (например, private, protected, public). 🟠Контролируемый доступ Вместо прямого доступа к данным, предоставляются методы (геттеры и сеттеры) для чтения и изменения значений свойств. Это позволяет контролировать, каким образом данные могут быть изменены или получены. 🟠Защита целостности данных Инкапсуляция помогает защитить внутреннее состояние объекта от некорректных или неожиданных изменений, обеспечивая целостность данных и уменьшая вероятность ошибок. 🚩Примеры инкапсуляции На Java public class Person { private String name; private int age; // Конструктор public Person(String name, int age) { this.name = name; this.age = age; } // Геттер для имени public String getName() { return name; } // Сеттер для имени public void setName(String name) { this.name = name; } // Геттер для возраста public int getAge() { return age; } // Сеттер для возраста public void setAge(int age) { if (age > 0) { this.age = age; } else { System.out.println("Возраст должен быть положительным числом."); } } } На Python class Person: def __init__(self, name, age): self._name = name self._age = age # Геттер для имени @property def name(self): return self._name # Сеттер для имени @name.setter def name(self, name): self._name = name # Геттер для возраста @property def age(self): return self._age # Сеттер для возраста @age.setter def age(self, age): if age > 0: self._age = age else: print("Возраст должен быть положительным числом.") # Пример использования person = Person("John", 30) print(person.name) # John person.age = -5 # Возраст должен быть положительным числом. print(person.age) # 30 Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое Agile? Это подход к разработке программного обеспечения, который фокусируется на гибкости, сотрудничестве и быстрой адаптации к изменениям. Agile основывается на следующих принципах и ценностях: 🚩Основные принципы 🟠Индивидуумы и взаимодействия важнее процессов и инструментов Акцент на командную работу и эффективное общение. 🟠Работающее программное обеспечение важнее исчерпывающей документации Быстрая поставка работающих продуктов с минимально необходимой документацией. 🟠Сотрудничество с заказчиком важнее согласования условий контракта Постоянное взаимодействие с заказчиком для удовлетворения его потребностей. 🟠Готовность к изменениям важнее следования первоначальному плану Гибкость в адаптации к изменениям требований и условий. 🚩Основные методологии 🟠Scrum Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива. 🟠Kanban Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация. 🟠Extreme Programming (XP) Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование. 🟠Lean Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества. 🚩Плюсы ➕Быстрая адаптация к изменениям Возможность быстро реагировать на изменения требований или условий рынка. ➕Улучшенное качество продукта Постоянное тестирование и интеграция. ➕Повышенная вовлеченность команды Активное участие всех членов команды в процессе разработки. ➕Удовлетворенность клиентов Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!