Веб-версияОткрыть в Telegram
BBackend

Backend

@easy_backend · канал · Технологии · в индексе с 2026-05-29
3 747подписчиков−14 за неделю
432постов в индексе
B
Backend
🤔 Чем отличаются LEFT JOIN от INNER JOIN? INNER JOIN возвращает строки, где есть совпадения в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы и сопоставленные строки из правой таблицы; если совпадения нет, возвращает NULL для столбцов правой таблицы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
5 · 771 ·
Backend
Фотография
нажмите — покажем
Твое резюме на HeadHunter — ОК, если ты видишь это. HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям. Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%. Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен. Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием. О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
4 · 429 ·
B
🤔 Для чего используют redis в проектах? Это высокопроизводительная система управления базами данных, работающая в памяти (in-memory), которая поддерживает множество структур данных, таких как строки, списки, множества, хэш-таблицы и другие. Redis широко используется в современных проектах благодаря своей скорости и функциональности. 🚩Основные применения 🟠Кэширование данных Снижение нагрузки на базу данных: Кэширование часто запрашиваемых данных в Redis позволяет снизить нагрузку на основную базу данных и ускорить время ответа. Ускорение доступа к данным: Быстрое чтение данных из памяти обеспечивает низкую задержку и высокую производительность. 🟠Хранение сессий Управление сессиями пользователей: Redis часто используется для хранения сессионных данных пользователей в веб-приложениях благодаря своей скорости и поддержке автоматического удаления старых данных (TTL). 🟠Очереди задач и сообщений Асинхронные задачи: Redis используется для реализации очередей задач в таких системах, как Celery. Это позволяет распределять и выполнять задачи асинхронно и эффективно. Сообщения и события: Redis поддерживает механизм Pub/Sub для организации обмена сообщениями между различными частями приложения. 🟠Хранилище временных данных Счётчики и трекеры: Используется для хранения временных данных, таких как счётчики посещений, лайков, просмотров и других показателей, которые часто обновляются. Краткосрочные данные: Хранение временных данных, которые необходимы на короткий срок и могут быть удалены после их использования. 🟠Репликация и отказоустойчивость Репликация данных: Redis поддерживает мастеровую репликацию, что позволяет создавать копии данных на нескольких серверах для обеспечения отказоустойчивости и балансировки нагрузки. Снятие резервных копий: Redis поддерживает создание резервных копий данных, что обеспечивает восстановление в случае сбоев. 🟠Реализация сложных структур данных Работа с временными рядами: Redis позволяет эффективно управлять временными рядами данных, испол
6 · 678 ·
Backend
🤔 Что тебе известно о бинарном дереве? Это структура данных, в которой каждый узел имеет не более двух дочерних узлов. Эти дочерние узлы называются левым и правым дочерними узлами. В бинарном дереве может быть один или несколько уровней узлов, начиная с корневого узла, который является начальной точкой дерева. 🚩Основные термины 🟠Узел (Node) Основной элемент бинарного дерева, содержащий данные и ссылки на дочерние узлы. 🟠Корень (Root) Верхний узел дерева, не имеющий родительских узлов. 🟠Лист (Leaf) Узел, не имеющий дочерних узлов. 🟠Ветвь (Branch) Путь от корня к любому другому узлу. 🟠Высота дерева Максимальное количество уровней от корня до самого нижнего листа. 🟠Глубина узла Расстояние от корня до данного узла. 🚩Виды 🟠Полное бинарное дерево Все уровни, кроме, возможно, последнего, полностью заполнены, и все узлы последнего уровня выровнены влево. 🟠Совершенное бинарное дерево Все уровни полностью заполнены, и каждый узел имеет два дочерних узла, кроме листьев. 🟠Двоичное дерево поиска (Binary Search Tree, BST) Для каждого узла все значения в левом поддереве меньше значения узла, а все значения в правом поддереве больше значения узла. 🚩Основные операции 🟠Добавление узла (Insertion) Процесс вставки нового узла в дерево. В случае двоичного дерева поиска, новый узел вставляется в соответствующее место, чтобы сохранить порядок элементов. 🟠Удаление узла (Deletion) Процесс удаления узла из дерева. Может потребовать реорганизации дерева для поддержания его свойств. 🟠Поиск (Search) Процесс нахождения узла с определенным значением. В двоичном дереве поиска это осуществляется быстрее благодаря упорядоченности узлов. 🟠Обход дерева (Traversal) Процесс посещения всех узлов дерева в определенном порядке. Основные методы обхода: 🚩Применение 🟠Хранение отсортированных данных Бинарное дерево поиска позволяет эффективно хранить и извлекать отсортированные данные. 🟠Поисковые системы Использование деревьев для организации и поиска данных. 🟠Алгоритмы и структуры данных Базовая с
6 · 823 ·
B
🤔 Что такое итератор? Итератор — это объект, который позволяет поочередно перебирать элементы коллекции или другого объекта. Он предоставляет методы для доступа к следующему элементу и проверки, есть ли ещё элементы. Итераторы используются для упрощения работы с коллекциями в циклах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
2 · 801 ·
Backend
🤔 Для чего можно использовать celery? Celery поддерживает различные брокеры сообщений, включая RabbitMQ и Redis, для управления очередями задач. 🚩Основные возможности 🟠Асинхронное выполнение задач Позволяет запускать длительные операции в фоновом режиме, освобождая основной поток выполнения приложения для других задач. 🟠Планирование задач Поддержка периодических и плановых заданий, что позволяет автоматизировать повторяющиеся процессы. 🟠Управление распределёнными системами Способен управлять задачами в распределенной системе, используя несколько рабочих узлов (workers) для параллельного выполнения задач. 🟠Масштабируемость Легко масштабируется, добавляя больше рабочих узлов для увеличения производительности. 🚩Основные задачи 🟠Фоновые задачи Отправка электронной почты: Асинхронная отправка писем для улучшения производительности веб-приложений. Обработка данных: Включает такие задачи, как анализ данных, обработка изображений или видео, преобразование форматов и другие ресурсоемкие операции. Взаимодействие с API: Выполнение запросов к внешним API, которое может быть долгим или неэффективным при синхронном выполнении. 🟠Периодические задачи Обновление данных: Регулярное обновление кэшей, индексов поиска или других данных в базе данных. Мониторинг и сбор метрик: Периодический сбор и обработка метрик для мониторинга состояния системы. Очистка данных: Периодическая очистка устаревших или временных данных из базы данных. 🟠Уведомления и оповещения Уведомления в реальном времени: Отправка уведомлений пользователям через различные каналы (email, SMS, push-уведомления). Событийное оповещение: Реагирование на события и триггеры, такие как изменения в базе данных или действия пользователя. 🟠Работа с большими данными и машинным обучением Параллельная обработка данных: Выполнение параллельных вычислений для обработки больших объемов данных. Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний на больших наборах данных. 🟠Веб-скрейпинг и интеграция данны
3 · 821 ·
B
🤔 Что такое идемпотентность? Идемпотентность — это свойство операции, при котором её повторное выполнение не изменяет результат. В веб-разработке это важно для обеспечения безопасности повторных запросов. Например, методы GET и DELETE считаются идемпотентными, так как повторные вызовы не влияют на состояние ресурса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
6 · 718 ·
Backend
🤔 Что такое HTTP и HTTPs? HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня для передачи гипертекста между клиентом (например, веб-браузером) и сервером. Он является основой для обмена данными в веб-пространстве и используется для передачи HTML-документов, изображений, видео и других ресурсов. 🚩Как работает HTTP 🟠Запрос-ответ HTTP работает по модели запрос-ответ, где клиент отправляет запрос серверу, а сервер возвращает ответ. Запросы и ответы состоят из трех основных частей: Стартовая строка: Определяет метод запроса (например, GET, POST) и URI (Uniform Resource Identifier). Заголовки: Несут метаданные, такие как тип контента, длина контента, информация о сессии и т. д. Тело: Содержит данные, отправляемые в запросе или ответе (например, данные формы, JSON). 🟠Методы HTTP Основные методы включают: GET: Запрашивает данные с сервера. POST: Отправляет данные на сервер для создания или обновления ресурса. PUT: Обновляет существующий ресурс. DELETE: Удаляет ресурс. HEAD: Запрашивает только заголовки без тела ответа. OPTIONS: Запрашивает информацию о возможностях сервера для определенного ресурса. 🟠Статусы ответа Сервер отвечает статусными кодами, которые показывают результат обработки запроса. Например: 200 OK: Запрос успешно обработан. 404 Not Found: Ресурс не найден. 500 Internal Server Error: Внутренняя ошибка сервера. 🚩HTTPS (HyperText Transfer Protocol Secure) HTTPS (HyperText Transfer Protocol Secure) — это расширение HTTP, которое использует шифрование для защиты данных, передаваемых между клиентом и сервером. HTTPS обеспечивает конфиденциальность, целостность и аутентификацию данных. 🚩Как работает HTTPS 🟠Шифрование HTTPS использует протоколы SSL (Secure Sockets Layer) или его более современную версию TLS (Transport Layer Security) для шифрования данных. Это предотвращает перехват и чтение данных третьими лицами. 🟠Аутентификация Серверы, использующие HTTPS, имеют цифровые сертификаты, которые проверяются клиентом. Это гарантирует, что к
9 · 826 ·
B
🤔 Из чего состоит ответ на сервере? Ответ сервера состоит из статусного кода, заголовков и тела. Статусный код сообщает результат обработки запроса (успех, ошибка и т. д.). Заголовки содержат метаданные, а тело передает данные. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
4 · 723 ·
Backend
🤔 Почему возрастает интерес к функциональному программированию? Интерес к функциональному программированию (ФП) возрастает по следующим основным причинам, связанным с изменениями в требованиях к производительности, масштабируемости и поддерживаемости современных программных систем. 🚩Системы 🟠Упрощение многопоточности и параллелизма Современные процессоры имеют многоядерную архитектуру, что требует программ, способных эффективно использовать параллельное выполнение. Функциональное программирование, благодаря отсутствию побочных эффектов и неизменяемости данных, упрощает параллельное выполнение, поскольку модули можно безопасно исполнять одновременно без риска гонок за состояние. Это особенно важно для высоконагруженных и распределённых систем. 🟠Предсказуемость и легкость тестирования В функциональном программировании важны "чистые" функции — такие функции, которые всегда возвращают одинаковый результат при одних и тех же входных данных и не изменяют состояния системы. Благодаря этому упрощаются тестирование и отладка, так как поведение программы предсказуемо, а ошибки легче выявить и устранить. 🟠Иммутабельность (неизменяемость данных) Принцип неизменяемости данных (или работы с их копиями) снижает вероятность появления ошибок, связанных с изменением состояния. Это повышает надёжность кода, так как изменения данных происходят через создание новых версий, а не модификацию текущих. Такой подход также облегчает поддержку системы, так как меньше вероятность случайных изменений, влияющих на другие части программы. 🟠Удобство модульности и переиспользуемости кода Функциональные принципы, такие как использование функций высшего порядка и замыканий, позволяют создавать модули, которые легко комбинируются и переиспользуются. Это способствует созданию гибкой архитектуры, что важно для разработки и поддержки сложных систем. 🟠Поддержка функциональных элементов в современных языках Популярные языки, такие как JavaScript, Python и Java, начали включать функциональные констр
8 · 874 ·
B
🤔 Какие HTTP методы могут быть? Основные HTTP методы: GET, POST, PUT, DELETE, PATCH. GET используется для получения данных, POST — для создания, PUT и PATCH — для обновления, DELETE — для удаления. Существуют также методы OPTIONS и HEAD для вспомогательных задач. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
2 · 812 ·
Backend
🤔 Примеры систем CP, AP и CA? В контексте CAP-теоремы(Consistency, Availability, Partition Tolerance) системы обычно делят на три группы: CP (Consistency + Partition Tolerance), AP (Availability + Partition Tolerance) и CA (Consistency + Availability). 🚩CP-системы (Consistency + Partition Tolerance) Системы, которые обеспечивают согласованность данных и устойчивость к разделению сети, но могут временно отказаться от доступности при возникновении сетевых сбоев. Такие системы при сетевом разделении блокируют часть данных или операций, чтобы сохранить согласованное состояние. 🟠HBase и MongoDB в режиме CP Оба эти хранилища данных поддерживают согласованность при сетевых сбоях, но могут ограничивать доступность данных, блокируя операции до восстановления связи. 🟠Zookeeper Система координации распределённых приложений, обеспечивающая согласованность, но жертвующая доступностью в случае сетевых проблем. Она часто используется для управления конфигурацией и синхронизацией данных. 🚩AP-системы (Availability + Partition Tolerance) Системы, которые фокусируются на доступности и устойчивости к разделению сети, но допускают временную неидеальную согласованность данных (например, данные могут быть не сразу синхронизированы между репликами). 🟠Cassandra Эта система обеспечивает доступность и устойчивость к разделению сети, но может допускать задержки в синхронизации данных между узлами. 🟠DynamoDB (режим AP) Поддерживает доступность и устойчивость к разделению сети, за счёт возможного отклонения в согласованности. DynamoDB был разработан Amazon для обеспечения высокой доступности даже в условиях сбоя сети. 🟠Riak Распределённое хранилище, оптимизированное для доступности и устойчивости к разделениям сети. Оно допускает временные рассогласования данных, которые разрешаются позже. 🚩CA-системы (Consistency + Availability) Системы, обеспечивающие согласованность и доступность данных, но не гарантирующие устойчивости к разделению сети. В реальных распределённых системах по
11 · 854 ·
B
🤔 Расскажи об отличиях MVC от MVP MVC (Model-View-Controller) и MVP (Model-View-Presenter) — это архитектурные паттерны для разделения логики. В MVC контроллер обрабатывает логику и обновляет представление, а в MVP презентер выполняет аналогичную роль, но взаимодействие с представлением более тесное. MVP чаще используется в мобильной разработке, где логика взаимодействия с представлением более сложная. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
3 · 734 ·
Backend
🤔 Что делает код хорошим? Это код, который легко читать, понимать, поддерживать и расширять. Он эффективно решает поставленные задачи и соответствует требованиям качества, которые важны для конкретного проекта и команды. 🟠 Читаемость Код должен быть понятным для других разработчиков, даже если они не знакомы с проектом. Использование осмысленных имён для переменных, функций и классов, а также наличие чётких комментариев помогают быстрее понять логику программы. Читаемый код снижает риск ошибок при поддержке и улучшении, упрощает ревью и обучение новых участников команды. 🟠Поддерживаемость Код должен легко поддаваться изменениям, чтобы можно было адаптировать его под новые требования или исправлять ошибки. Это достигается за счёт модульности, изолирования логики и избегания «жёсткого» связывания частей кода. Хорошая структура и стандартизация, такие как следование принципам SOLID или архитектурным шаблонам (например, MVC), делают код более устойчивым. 🟠 Простота Хороший код решает задачи самым простым и прямым способом. Простой код легче читать, тестировать и отлаживать. Он избегает ненужных усложнений и излишних абстракций, но при этом остаётся гибким. Следование принципу KISS (Keep It Simple, Stupid) и принципу YAGNI (You Aren't Gonna Need It) помогает держать код простым. 🟠Эффективность Код должен быть оптимизирован для выполнения задачи без избыточного потребления ресурсов, таких как время выполнения и память. Хотя преждевременная оптимизация нежелательна, хороший код учитывает производительность и избегает явных узких мест. Понимание алгоритмов и структур данных помогает писать эффективный и быстрый код. 🟠 Тестируемость Хороший код легко тестировать. Это означает, что его можно покрыть модульными, интеграционными и системными тестами. Тестируемость обеспечивается за счёт слабого сцепления и высокой связанности, а также соблюдения принципов инверсии зависимостей. Код, который легко тестировать, позволяет быстрее находить и исправлять ошибки, что повышает о
7 · 817 ·
B
🤔 Чем отличаются LEFT JOIN от INNER JOIN? LEFT JOIN возвращает все строки из левой таблицы, включая те, для которых нет совпадений в правой таблице, заполняя отсутствующие данные значениями `NULL`. INNER JOIN возвращает только строки, которые имеют совпадения в обеих таблицах. Таким образом, LEFT JOIN сохраняет все данные левой таблицы, а INNER JOIN работает только с пересечением данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
809 ·
Backend
🤔 Обеспечение отказоустойчивости веб-приложения Это процесс создания системы, которая продолжает корректно работать даже при частичных сбоях. Отказоустойчивость позволяет приложению оставаться доступным, минимизировать потери данных и поддерживать положительный пользовательский опыт в случае непредвиденных ситуаций. 🚩Методы 🟠Использование балансировщиков нагрузки Балансировщики нагрузки распределяют входящий трафик между несколькими серверами, чтобы снизить нагрузку на отдельные серверы и избежать перегрузок. В случае сбоя одного сервера запросы автоматически перенаправляются на работающие экземпляры. Использование балансировщика повышает масштабируемость системы, поскольку позволяет легко добавлять или убирать серверы по мере необходимости. 🟠Горизонтальное масштабирование и кластеризация Развертывание приложения на нескольких серверах (в кластере) позволяет избежать единой точки отказа (SPOF — Single Point of Failure). Горизонтальное масштабирование даёт возможность добавлять дополнительные серверы при увеличении нагрузки, что повышает отказоустойчивость и общую производительность системы. Сервисы, такие как Kubernetes и Docker Swarm, упрощают управление и оркестрацию контейнеров в кластере, автоматизируя процесс развертывания, обновлений и балансировки нагрузки. 🟠Механизмы резервного копирования и репликации данных Важные данные должны регулярно сохраняться в резервных копиях и реплицироваться на несколько узлов или в несколько дата-центров. Репликация базы данных (например, master-slave или master-master репликация) обеспечивает доступность данных, даже если один из узлов выходит из строя. Для обеспечения целостности данных реплики могут быть синхронными (обеспечивают актуальность данных на всех узлах, но добавляют задержку) или асинхронными (с меньшей задержкой, но возможностью устаревания данных). 🟠Кеширование и использование CDN Использование кешей (Redis, Memcached) снижает нагрузку на базу данных и позволяет быстрее обрабатывать запросы, снижая риски
8 · 783 ·
B
🤔 Проблемы при восстановлении работоспособности? 1. Недостаточная диагностика: отсутствие инструментов или данных для быстрого определения причины проблемы. 2. Зависимость от ручных процессов: отсутствие автоматизированных процедур восстановления может замедлить работу. 3. Недостаточная документация или неполные инструкции по восстановлению системы. Эти факторы могут усложнить устранение неполадок и требуют проактивного подхода к подготовке. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
1 · 699 ·
Backend
🤔 Взаимодействие с асинхронной коммуникацией в распределённых системах Позволяет компонентам обмениваться данными и выполнять задачи независимо друг от друга, не дожидаясь завершения операций. Асинхронное общение широко применяется в микросервисных архитектурах и других распределённых системах, так как повышает масштабируемость, гибкость и отказоустойчивость системы. 🚩Принципы и подходы 🟠Использование очередей сообщений и брокеров Очереди сообщений (например, RabbitMQ, Apache Kafka, Amazon SQS) помогают отправлять и получать сообщения асинхронно, обеспечивая буфер между отправителем и получателем. Брокеры сообщений сохраняют сообщения до тех пор, пока получатель не будет готов их обработать, что помогает управлять потоками данных и уравновешивать нагрузку. Такой подход позволяет отправителю отправить сообщение и сразу продолжить свою работу, не дожидаясь ответа, что повышает производительность системы. 🟠Паттерн «Издатель-подписчик» (Publish-Subscribe) В модели «издатель-подписчик» компоненты могут публиковать события, на которые подписаны другие компоненты, а брокер сообщений доставляет события всем подписчикам. Этот паттерн позволяет системе оставаться слабосвязанной, так как издатель не знает, сколько и какие конкретно сервисы получат событие. Такие системы часто применяются для уведомлений, регистрации событий, обработки данных и отправки уведомлений нескольким сервисам одновременно. 🟠Паттерн «Очередь задач» В очереди задач сообщения представляют собой задачи для выполнения, которые обрабатываются одним или несколькими исполнителями. Этот паттерн полезен для распределения нагрузки на сервисы, позволяя выполнять задачи асинхронно, когда они становятся доступны, и автоматически управлять потоками. Например, задача по отправке электронной почты может быть помещена в очередь и обработана отдельным рабочим процессом, что освобождает основной сервис от ожидания завершения отправки. 🚩Плюсы ➕Повышенная производительность и масштабируемость, так как сервисы могут п
9 · 803 ·
B
🤔 Что такое SOLID? SOLID — это акроним, обозначающий пять основных принципов объектно-ориентированного программирования и проектирования, направленных на создание более понятного, гибкого и поддерживаемого кода. Принципы включают: Single Responsibility (Принцип единственной ответственности), Open/Closed (Принцип открытости/закрытости), Liskov Substitution (Принцип подстановки Барбары Лисков), Interface Segregation (Принцип разделения интерфейса), и Dependency Inversion (Принцип инверсии зависимостей). Ставь 👍 и забирай 📚 Базу знаний
1 · 730 ·
Backend
🤔 В чём разница между сцеплением и связанностью? Это два ключевых свойства модульной архитектуры программного обеспечения, которые помогают оценить качество кода и архитектурных решений. 🚩Отличия 🟠Сцепление (Coupling) Описывает степень зависимости одного модуля от других. Высокое сцепление означает, что модули сильно зависят друг от друга, что затрудняет их изменение, тестирование и повторное использование, так как изменения в одном модуле требуют изменений в зависимых модулях. Идеально стремиться к слабому сцеплению, чтобы модули были максимально независимыми. Это позволяет изменять или заменять один модуль без необходимости изменения других. 🟠Связанность (Cohesion) Описывает, насколько тесно связанные и объединённые общей задачей элементы внутри одного модуля. Высокая связанность означает, что все функции и данные модуля логически связаны и выполняют одну задачу. Это упрощает понимание кода и делает модуль более автономным.Высокая связанность считается хорошей практикой, так как модуль с высокой связанностью проще в обслуживании, его легче изменить или заменить. 🚩Пример Представьте модуль, который управляет пользователями: если в модуле только функции для работы с пользователями (например, добавление и удаление), он обладает высокой связанностью, так как его функции направлены на одну задачу. Если модуль при этом минимально зависит от других частей системы, это говорит о слабом сцеплении. 🚩 Сравнение 🟠Слабое сцепление и высокая связанность Это желательные качества. Они помогают создать более гибкую и поддерживаемую систему. 🟠Сцепление Лучше, когда оно слабое, так как снижает зависимость между модулями. 🟠Связанность Лучше, когда она высокая, так как все функции модуля работают на достижение одной цели. Ставь 👍 и забирай 📚 Базу знаний
8 · 798 ·
B
🤔 Какие есть паттерны проектирования? Паттерны проектирования — это проверенные решения типичных проблем, возникающих при проектировании программного обеспечения. Они делятся на три основные категории: порождающие (например, Singleton, Factory, Builder), структурные (например, Adapter, Decorator, Facade) и поведенческие (например, Observer, Strategy, Command). Ставь 👍 и забирай 📚 Базу знаний
2 · 710 ·
Backend
🤔 Плюсы и минусы логики предметной области в хранимых процедурах Логика предметной области в хранимых процедурах — это подход, при котором бизнес-логика (правила и операции, связанные с управлением данными) реализуется непосредственно на уровне базы данных с использованием хранимых процедур. Этот подход имеет свои плюсы и минусы, которые важно учитывать при проектировании архитектуры приложения. 🚩Плюсы ➕Производительность Хранимые процедуры выполняются на уровне базы данных, что позволяет избежать сетевых задержек при передаче данных между приложением и базой. Процедуры могут работать с данными напрямую, избегая лишних перегрузок и ускоряя обработку сложных запросов. ➕Оптимизация и план выполнения Современные СУБД могут кэшировать планы выполнения хранимых процедур, что снижает накладные расходы на компиляцию и оптимизацию запросов. Благодаря кэшированию повышается производительность повторных вызовов процедур, особенно в случаях обработки больших объёмов данных. ➕Инкапсуляция бизнес-логики Хранимые процедуры могут содержать бизнес-логику, обеспечивая консистентность её выполнения независимо от источника вызова. Это удобно при использовании единой базы данных для нескольких приложений. Такой подход уменьшает дублирование кода, так как логика определена в одном месте — в базе данных. ➕Упрощение управления транзакциями Хранимые процедуры могут содержать сложные транзакции, обеспечивая целостность данных и управление транзакциями на уровне базы. Это может быть удобнее, чем реализация транзакций на уровне приложения, особенно для сложных многошаговых операций. ➕Безопасность Логика, встроенная в хранимые процедуры, позволяет лучше контролировать доступ к данным. Разработчики могут ограничить прямой доступ к таблицам, предоставляя доступ к данным только через процедуры. Это повышает безопасность, так как доступ к данным осуществляется через контролируемые процедуры, где можно задать права доступа. 🚩Минусы ➖Сложность разработки и поддержки Реализация бизнес-логи
2 · 864 ·
B
🤔 Что такое cherrypick? cherrypick — это команда Git, которая позволяет применить изменения из одного коммита в другой ветке без полного слияния веток. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
2 · 793 ·
Backend
🤔 Почему goto — это зло? Оператор goto считается "злом" в программировании, потому что его использование может значительно усложнить структуру и логику программы, делая код трудным для понимания, сопровождения и отладки. 🚩Проблемы 🟠Усложнение структуры кода goto нарушает последовательный поток выполнения программы, произвольно перемещая управление в другое место кода. Это может привести к хаотичной структуре, где трудно проследить, как данные перемещаются и как выполняется логика. Переходы с помощью goto делают код нечитаемым, поскольку программисту приходится "прыгать" по коду, чтобы понять, что происходит. В больших программах это приводит к запутанной логике и фрагментированности. 🟠Создание "лестницы" зависимостей В коде с частым использованием goto может появиться так называемый "спагетти-код", где переплетённые переходы между различными частями кода делают его сложным для понимания. В "спагетти-коде" контроль над выполнением разбросан по многим местам, что приводит к ошибкам, особенно при модификации программы. 🟠Трудности с отладкой и тестированием Логика с использованием goto труднее отлаживать, поскольку управление переходит в произвольные места. Это осложняет трассировку и отслеживание исполнения программы, делая выявление ошибок более трудоёмким. Внесение изменений также становится рискованным: даже малейшее изменение может привести к неожиданным ошибкам из-за непредсказуемого изменения порядка выполнения. 🟠Нарушение принципов структурного программирования Структурное программирование основывается на трёх базовых конструкциях: последовательности, ветвления и цикла. goto же позволяет "вырваться" за пределы этих конструкций, что разрушает структурированность программы. Программы с goto теряют понятную иерархию и становятся неуправляемыми, так как переходы могут происходить в любой момент, минуя условные конструкции, циклы и функции. 🟠Проблемы с поддержкой и модульностью Код с goto часто сложно разделить на отдельные модули или функции, поскольку пере
1 · 844 ·
B
🤔 Чем отличается rebase от merge? rebase переписывает историю, перемещая изменения на новую базу, а merge объединяет ветки, сохраняя все коммиты и их порядок. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
2 · 784 ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем