Индексы в базе данных - это структуры, которые улучшают скорость операций поиска данных в таблице базы данных. Они работают по принципу, аналогичному указателю в книге, который позволяет быстро находить нужную информацию. Индексы создаются на одном или нескольких столбцах таблицы и позволяют значительно ускорить выполнение запросов, особенно при работе с большими объемами данных.
Основная функция индексов - это сокращение времени, необходимого для поиска записей в таблице. Без индексов база данных должна бы была проверять каждую запись, чтобы найти нужные данные.
Индексы могут значительно повысить производительность запросов SELECT, особенно тех, которые часто выполняются.
Индексы могут использоваться для ускорения операций сортировки, так как данные в индексе могут быть отсортированы.
Индексы также используются для обеспечения уникальности значений в столбцах. Например, уникальный индекс гарантирует, что в столбце не будет повторяющихся значений.
Индексы создаются с помощью SQL-запросов, таких как
CREATE INDEX. Можно создавать индексы на один столбец или на несколько столбцов (составные индексы).Существует несколько типов индексов, включая B-дерево, хеш-индексы, битмап-индексы и другие. Каждый тип имеет свои особенности и применяется в зависимости от конкретных задач.
При выполнении запросов база данных автоматически использует индексы для оптимизации поиска данных. Это не требует дополнительных действий со стороны пользователя.
Важно понимать, что индексы требуют дополнительного пространства на диске и могут замедлять операции вставки, обновления и удаления данных, так как индексы нужно поддерживать в актуальном состоянии. Поэтому следует тщательно продумывать, какие индексы необходимы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В Linux есть несколько команд для проверки свободного места на диске.
Эта команда отображает информацию о файловых системах, включая общий объём, использованное и свободное пространство.
df -h
Чтобы посмотреть только свободное место на корневом (
/) разделе: df -h /
Если нужно узнать место на конкретном диске или разделе:
df -h /dev/sda1
Команда
du показывает, сколько места занимает конкретная директория du -sh /путь/к/папке
lsblk — информация о дисках и разделах lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
Если нужно увидеть структуру разделов диска
sudo fdisk -l
или
sudo parted -l
Если
du неудобен, можно установить и использовать ncdu: sudo apt install ncdu # Для Debian/Ubuntu
sudo yum install ncdu # Для CentOS/RHEL
ncdu
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это понятие в программировании, обозначающее код, который легко читать, понимать и поддерживать. Принципы чистого кода помогают разработчикам создавать качественные и устойчивые к изменениям программы. Вот основные характеристики и принципы чистого кода:
Код должен быть понятным и легким для чтения другими разработчиками. Имена переменных, функций и классов должны быть осмысленными и описательными.
Код должен быть простым и ясным, избегая излишней сложности. Это делает его более понятным и легким в поддержке.
Следование единому стилю кодирования и соглашениям по наименованию. Это упрощает чтение и понимание кода.
Избегание дублирования кода, что способствует его упрощению и уменьшению ошибок.
Разделение кода на независимые модули или компоненты, которые можно разрабатывать, тестировать и поддерживать отдельно.
Код должен быть легким для тестирования. Хорошо написанный код обычно легко покрыть юнит-тестами.
Имена переменных, функций и классов должны быть осмысленными и описывать их назначение.
int age; // Понятно, что переменная хранит возраст
Функции должны быть короткими и выполнять одну задачу.
void calculateAndPrintTotal() {
int total = calculateTotal();
printTotal(total);
}Комментарии должны объяснять, почему был написан определенный код, а не что он делает. Хорошо написанный код должен быть самодокументируемым.
// Calculate the total price including tax
int totalPrice = calculateTotalPrice();
Единый стиль форматирования делает код более читабельным. Используйте отступы, пробелы и пустые строки для улучшения структуры кода.
if (isValid) {
process();
} else {
handleError();
}Обработка ошибок должна быть понятной и не загромождать основной код.
try {
processFile(file);
} catch (IOException e) {
logError(e);
}Избегайте использования магических чисел и строк. Вместо этого используйте константы с осмысленными именами.
static final int MAX_USERS = 100;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Существуют различные типы баз данных, каждый из которых предназначен для определенных задач и сценариев использования. Основные типы баз данных включают:
Организуют данные в таблицы с заранее определенными схемами. Используют SQL для управления данными. MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
Хранят данные в виде документов (обычно в формате JSON или BSON), что позволяет хранить сложные и гибкие структуры данных. MongoDB, CouchDB.
Хранят данные столбцами вместо строк, что оптимизирует производительность для операций чтения и агрегации. Apache Cassandra, HBase.
Хранят данные в виде пар "ключ-значение", что позволяет быстрое извлечение данных по ключу. Redis, Riak, Amazon DynamoDB.
Оптимизированы для хранения и обработки графовых структур, таких как узлы, ребра и свойства, что удобно для социальных сетей, рекомендательных систем и др. Neo4j, ArangoDB, Amazon Neptune.
Специализируются на хранении и анализе временных рядов данных, таких как метрики, события или показания датчиков. InfluxDB, TimescaleDB.
Хранят данные в виде объектов, как в объектно-ориентированном программировании, что позволяет хранить более сложные структуры данных. db4o, ObjectDB.
Поддерживают несколько типов моделей данных (например, реляционные, документные, графовые) в рамках одной базы данных. ArangoDB, OrientDB.
Оптимизированы для работы с большими массивами данных, часто используемыми в научных вычислениях и аналитике. SciDB, Rasdaman.
Распределяют данные по нескольким узлам или серверам, обеспечивая масштабируемость и отказоустойчивость. Google Spanner, CockroachDB.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Celery поддерживает различные брокеры сообщений, включая RabbitMQ и Redis, для управления очередями задач.
Позволяет запускать длительные операции в фоновом режиме, освобождая основной поток выполнения приложения для других задач.
Поддержка периодических и плановых заданий, что позволяет автоматизировать повторяющиеся процессы.
Способен управлять задачами в распределенной системе, используя несколько рабочих узлов (workers) для параллельного выполнения задач.
Легко масштабируется, добавляя больше рабочих узлов для увеличения производительности.
Отправка электронной почты: Асинхронная отправка писем для улучшения производительности веб-приложений.
Обработка данных: Включает такие задачи, как анализ данных, обработка изображений или видео, преобразование форматов и другие ресурсоемкие операции.
Взаимодействие с API: Выполнение запросов к внешним API, которое может быть долгим или неэффективным при синхронном выполнении.
Обновление данных: Регулярное обновление кэшей, индексов поиска или других данных в базе данных.
Мониторинг и сбор метрик: Периодический сбор и обработка метрик для мониторинга состояния системы.
Очистка данных: Периодическая очистка устаревших или временных данных из базы данных.
Уведомления в реальном времени: Отправка уведомлений пользователям через различные каналы (email, SMS, push-уведомления).
Событийное оповещение: Реагирование на события и триггеры, такие как изменения в базе данных или действия пользователя.
Параллельная обработка данных: Выполнение параллельных вычислений для обработки больших объемов данных.
Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний на больших наборах данных.
Веб-скрейпинг: Асинхронный сбор данных с веб-сайтов для агрегации или анализа.
Интеграция данных: Асинхронная интеграция данных из различных источников и API.
Улучшение производительности веб-приложений за счет выполнения долгих операций в фоне.
Обработка заказов, обновление статусов заказов и управление инвентарем в фоновом режиме.
Обработка пользовательских данных, отправка уведомлений и обновление лент новостей.
Выполнение сложных вычислений и обработка больших объемов данных в распределенной среде.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Суть принципа REST (Representational State Transfer) заключается в том, чтобы предоставить простой, масштабируемый и гибкий способ взаимодействия между клиентом и сервером через веб. Основные принципы REST включают:
Клиент и сервер разделены, что позволяет независимое развитие и масштабирование обеих сторон. Клиент делает запросы, а сервер обрабатывает их и возвращает ответы.
Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для его обработки. Сервер не сохраняет состояние между запросами.
Ответы на запросы могут быть помечены как кешируемые или не кешируемые. Это позволяет клиентам сохранять копии ответов и уменьшать количество запросов к серверу.
Определяет единые методы взаимодействия с ресурсами:
GET: Получение ресурса.
POST: Создание нового ресурса.
PUT: Обновление ресурса.
DELETE: Удаление ресурса.
Архитектура может быть построена из нескольких слоев, что повышает гибкость и возможность кэширования.
Ресурсы могут представляться в различных форматах (например, JSON, XML). Клиент и сервер договариваются о формате через заголовки HTTP.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
HTTPS (HyperText Transfer Protocol Secure) — это расширение протокола HTTP, используемое для безопасного обмена данными между веб-браузером и веб-сервером. HTTPS обеспечивает конфиденциальность, целостность и аутентичность передаваемых данных, используя шифрование, аутентификацию и проверку целостности.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В SQL,
JOIN операторы используются для объединения строк из двух или более таблиц на основе логического отношения между ними. Вот различия между LEFT JOIN, RIGHT JOIN и INNER JOIN:INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах, участвующих в соединении.SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
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;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В конце спринта в гибких методологиях разработки (например, Scrum) проводится серия мероприятий и активностей, направленных на подведение итогов работы команды, оценку достигнутого результата и планирование улучшений. Эти процессы обеспечивают прозрачность, оценку эффективности и подготовку к следующему спринту.
Все задачи, включённые в спринт, должны быть либо выполнены, либо перенесены с соответствующими комментариями. Завершённые задачи проверяются на соответствие критериям "готовности" (Definition of Done, DoD). Если задачи не выполнены, они возвращаются в бэклог продукта для повторной оценки в будущем.
Показать заинтересованным сторонам результат работы команды. Команда демонстрирует готовый продукт или его обновления. Обсуждаются выполненные задачи, изменения в продукте и обратная связь от заказчиков или других участников. Результат: обновление бэклога продукта с учётом новой информации.
Цель: анализировать, что прошло хорошо, что можно улучшить и какие действия предпринять в будущем. Участники обсуждают положительные моменты, трудности и проблемы, возникшие в процессе работы. Генерируются идеи для улучшения, которые затем внедряются в следующих спринтах. Используются форматы для выявления проблем, такие как "Start, Stop, Continue" или "Что было хорошо, что плохо, что можно улучшить".
Обновление burndown chart, velocity chart или других метрик, используемых для отслеживания прогресса. Анализ выполнения целей спринта (например, процент выполненных задач). Уроки, извлечённые из анализа метрик, учитываются при планировании будущих спринтов.
С учётом новых идей, задач и обратной связи обновляется приоритет задач.
Команда и Product Owner готовятся к обсуждению целей нового спринта.
Фиксация результатов спринта, включая завершённые задачи, обратную связь и итоги ретроспективы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это подход к разработке программного обеспечения, который фокусируется на гибкости, сотрудничестве и быстрой адаптации к изменениям. Agile основывается на следующих принципах и ценностях:
Акцент на командную работу и эффективное общение.
Быстрая поставка работающих продуктов с минимально необходимой документацией.
Постоянное взаимодействие с заказчиком для удовлетворения его потребностей.
Гибкость в адаптации к изменениям требований и условий.
Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.
Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация.
Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.
Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества.
Возможность быстро реагировать на изменения требований или условий рынка.
Постоянное тестирование и интеграция.
Активное участие всех членов команды в процессе разработки.
Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчики могут не любить 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, развиваемый JetBrains, стал официальным языком разработки для Android в 2017 году. Он предлагает более лаконичный синтаксис, мощные функции работы с null-значениями, и в целом воспринимается как более "современный" язык.
Java обладает огромной экосистемой, которая может быть одновременно преимуществом и недостатком. Иногда требуется глубокое понимание JVM, инструментов сборки (Maven, Gradle), и других особенностей.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Это методология управления проектами и одна из наиболее популярных реализаций Agile, предназначенная для гибкой разработки программного обеспечения. Scrum помогает командам работать более эффективно и адаптироваться к изменениям в требованиях и приоритетах. Основные концепции и элементы Scrum включают следующие компоненты:
Scrum разбивает работу над проектом на небольшие итерации, называемые спринтами. Каждый спринт обычно длится от одной до четырех недель и заканчивается созданием работающего инкремента продукта.
Команды в Scrum сами управляют своей работой и распределяют задачи между участниками без вмешательства извне.
В Scrum выделяются три основных роли:
Product Owner (Владелец продукта): отвечает за создание и управление бэклогом продукта, определение приоритетов и взаимодействие с заинтересованными сторонами.
Scrum Master: помогает команде следовать принципам Scrum, устраняет препятствия и обеспечивает эффективность работы команды.
Development Team (Команда разработки): непосредственно занимается созданием продукта, включает специалистов различных профилей, необходимых для выполнения задач.
список всех требований и функций, которые должны быть реализованы в продукте. Элементы бэклога приоритизируются владельцем продукта.
список задач, которые команда обязуется выполнить в текущем спринте. Эти задачи выбираются из бэклога продукта на основе приоритетов и возможностей команды.
фиксированный период времени, в течение которого команда работает над выполнением задач из бэклога спринта. В конце спринта команда демонстрирует результат своей работы.
ежедневные короткие встречи (обычно 15 минут), на которых команда обсуждает прогресс, планирует работу на день и выявляет препятствия.
встреча в конце каждого спринта, на которой команда демонстрирует результаты своей работы заинтересованным сторонам и получает обратную связь.
встреча после завершения спринта, на которой команда анализирует свою работу, обсуждает, что было хорошо, что можно улучшить, и разрабатывает план улучшений на следующий спринт.
Scrum позволяет быстро адаптироваться к изменяющимся требованиям и приоритетам.
Частые демонстрации результата и обратная связь обеспечивают высокую степень прозрачности процесса разработки.
Регулярные проверки и ретроспективы помогают команде постоянно улучшать качество продукта и процесса.
Scrum способствует более тесному взаимодействию между членами команды и заинтересованными сторонами.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это процесс организации данных в реляционной базе данных для минимизации избыточности и предотвращения аномалий при обновлении данных.
Каждое поле содержит только одно значение, и все записи уникальны.
Данные находятся в 2NF, и нет транзитивных зависимостей между неключевыми атрибутами.
Данные находятся в 3NF, и каждый детерминант является суперключом.
Данные находятся в BCNF, и нет многозначных зависимостей.
Данные находятся в 4NF, и каждая зависимость выражается через проекции.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это протокол для обмена структурированными сообщениями в распределённых вычислительных средах. Он основан на XML и используется для передачи данных между различными приложениями через сеть, часто по протоколу HTTP или SMTP.
SOAP сообщения формируются в формате XML, что обеспечивает независимость от платформы и языка программирования.
SOAP сообщение состоит из обязательных и необязательных элементов:
Envelope: Определяет начало и конец сообщения.
Header: Опциональный элемент, содержащий метаинформацию о сообщении.
Body: Основное содержимое сообщения, включающее данные и команды.
Fault: Опциональный элемент для обработки ошибок.
Чаще всего используется с HTTP/HTTPS, но может работать и с другими протоколами, такими как SMTP.
SOAP легко расширяется, позволяя добавлять дополнительные функциональные возможности через заголовки и другие элементы.
SOAP может быть использован в любой среде и на любом языке программирования, что обеспечивает высокую совместимость между различными системами.
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:example="https://example.com/">
<soapenv:Header/>
<soapenv:Body>
<example:getExampleRequest>
<example:parameter1>Value1</example:parameter1>
<example:parameter2>Value2</example:parameter2>
</example:getExampleRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP может взаимодействовать с любыми системами, поддерживающими XML и HTTP/SMTP.
SOAP основывается на строгих стандартах, что обеспечивает надежность и предсказуемость взаимодействия.
Легко адаптируется для специфических потребностей через расширения и заголовки.
Использует элемент Fault для детальной обработки и передачи ошибок.
Подходит для сложных операций и распределённых транзакций.
SOAP-сообщения могут быть сложными и громоздкими из-за использования XML.
Использование XML увеличивает объем передаваемых данных, что может снизить производительность.
Требует дополнительных ресурсов для обработки и передачи XML-сообщений.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Чтобы выбрать данные из двух таблиц в одном запросе, используется оператор JOIN. Например, INNER JOIN объединяет строки, где есть совпадения в обеих таблицах, а LEFT JOIN возвращает все строки из первой таблицы и соответствующие строки из второй, заполняя NULL там, где данных нет.
В SQL существует несколько видов операторов JOIN, которые позволяют объединять данные из двух или более таблиц на основе определенных условий. Основные типы JOIN включают
INNER JOIN, LEFT JOIN, RIGHT JOIN, и каждый из них имеет свои особенности и использование. Рассмотрим их различия на примере двух таблиц:Таблица A:
id | name
-----------
1 | Alice
2 | Bob
3 | Charlie
Таблица B:
id | city
-----------
1 | New York
3 | Los Angeles
4 | Chicago
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если нет совпадающих строк, такие строки не включаются в результат.SELECT A.id, A.name, B.city
FROM A
INNER JOIN B ON A.id = B.id;
Результат:
id | name | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles
LEFT JOIN возвращает все строки из левой таблицы (A) и совпадающие строки из правой таблицы (B). Если совпадения не найдено, в результате будут строки из левой таблицы с NULL значениями для столбцов из правой таблицы.SELECT A.id, A.name, B.city
FROM A
LEFT JOIN B ON A.id = B.id;
Результат:
id | name | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles
RIGHT JOIN возвращает все строки из правой таблицы (B) и совпадающие строки из левой таблицы (A). Если совпадения не найдено, в результате будут строки из правой таблицы с NULL значениями для столбцов из левой таблицы.SELECT A.id, A.name, B.city
FROM A
RIGHT JOIN B ON A.id = B.id;
Результат:
id | name | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles
4 | NULL | Chicago
FULL JOIN возвращает все строки, когда есть совпадение в одной из таблиц. Это объединение LEFT JOIN и RIGHT JOIN. Если совпадения не найдено, результат будет содержать NULL значения для столбцов из другой таблицы.SELECT A.id, A.name, B.city
FROM A
FULL JOIN B ON A.id = B.id;
id | name | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles
4 | NULL | Chicago
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
HTTP-методы (или глаголы) определяют тип действия, которое клиент хочет выполнить с ресурсом на сервере.
Назначение: Получение данных с сервера. Используется для чтения информации, не изменяя состояние сервера. Безопасный и идемпотентный метод (выполнение одного и того же запроса несколько раз даёт одинаковый результат).
Запрос страницы или API-ресурса
GET /users/123
Назначение: Создание нового ресурса или выполнение действий на сервере. Может изменять состояние сервера (например, добавлять новые данные). Не идемпотентен (повторный запрос создаёт новый ресурс или дублирует операцию).
Создание нового пользователя
POST /users
Назначение: Полное обновление ресурса на сервере. Идемпотентен (повторный запрос с одинаковыми данными не изменяет результат).
Обновление профиля пользователя:
PUT /users/123
Назначение: Частичное обновление ресурса. Обновляет только указанные поля, не затрагивая остальные. Не всегда идемпотентен (зависит от реализации).
Обновление только имени пользователя
PATCH /users/123
Назначение: Удаление ресурса с сервера. Идемпотентен (повторный запрос удаления того же ресурса не вызывает ошибку).
Удаление пользователя
DELETE /users/123
Назначение: Получение метаинформации о ресурсе без передачи его содержимого. Аналогичен GET, но сервер возвращает только заголовки ответа. Полезен для проверки существования ресурса или его свойств (например, размера).
HEAD /users/123
Назначение: Запрос информации о поддерживаемых сервером методах или возможностях ресурса. Используется, например, в CORS для проверки, какие методы доступны для клиента.
OPTIONS /users
Назначение: Диагностика и отладка соединения между клиентом и сервером. Возвращает запрос клиента в теле ответа, позволяя понять, какие изменения произошли на пути от клиента до сервера. Редко используется из-за риска безопасности.
TRACE /users/123
Назначение: Установка туннеля для защищённого соединения (например, через прокси). Чаще всего используется для создания HTTPS-соединений.
CONNECT www.example.com:443
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Объектно-ориентированное программирование (ООП) базируется на нескольких ключевых принципах, которые помогают создавать гибкие, понятные и легко поддерживаемые программы.
Абстракция заключается в выделении значимых характеристик объекта и игнорировании незначимых. Это позволяет создавать упрощенные модели реальных объектов.
Инкапсуляция скрывает внутренние детали объекта и позволяет взаимодействовать с объектом только через определенные методы. Это защищает данные от некорректного использования и облегчает изменение и поддержку кода.
Наследование позволяет создавать новые классы на основе существующих. Новый класс (наследник) получает все свойства и методы родительского класса и может добавлять новые или изменять существующие.
Полиморфизм позволяет объектам разных классов обрабатывать запросы одинаковым образом. Это достигается через переопределение методов в наследуемых классах и интерфейсы.
Композиция предполагает создание объектов других классов внутри данного класса. Это позволяет использовать функциональность существующих классов, не создавая зависимостей через наследование.
Агрегация - это специальный вид композиции, который позволяет одному объекту быть частью другого с возможностью существования вне этого объекта. Агрегация описывает "имеет" отношения.
Принципы ООП позволяют создавать более понятный и структурированный код.
Наследование и полиморфизм способствуют использованию уже написанных классов в новых контекстах.
Инкапсуляция и абстракция делают код легче в сопровождении и модификации.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это принцип программирования, который гласит, что информация или логика в коде не должны дублироваться. Каждый фрагмент знаний должен иметь одно, однозначное и авторитетное представление в системе. Этот принцип был введен в книге "The Pragmatic Programmer" Эндрю Хантом и Дэвидом Томасом.
Код должен быть написан так, чтобы не повторяться. Если одно и то же действие или информация используются в нескольких местах, они должны быть вынесены в одно место и использоваться повторно.
Изменения в коде нужно вносить в одном месте, что упрощает его сопровождение и уменьшает вероятность ошибок.
Код становится более понятным и структурированным, что облегчает его чтение и понимание.
Вынос общих операций в функции или методы, которые затем можно вызывать в различных частях программы.
Создание модулей или библиотек, которые содержат повторяющуюся логику и могут быть переиспользованы в различных проектах.
Объявление констант вместо использования "магических чисел" или строковых литералов в нескольких местах кода.
Использование шаблонов в HTML, XML или других языках разметки для генерации повторяющихся структур.
Хранение конфигурационных данных в одном месте, а не встраивание их в код.
Меньшее количество кода и дублирования упрощает понимание системы и снижает её сложность.
Легче поддерживать и обновлять код, так как изменения нужно вносить в одном месте.
Снижается вероятность ошибок, поскольку одно и то же изменение не нужно делать в нескольких местах.
Переиспользование кода ускоряет разработку, так как не нужно повторно писать уже существующий функционал.
Одинаковые блоки кода, выполняющие одну и ту же задачу, размещены в разных частях программы.
Те же самые данные (например, настройки или конфигурации) хранятся в нескольких местах.
Одни и те же структуры данных определены в разных местах программы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это два типа данных в SQL, которые используются для хранения строковых данных. Основные различия между ними касаются способа хранения данных и управления памятью.
CHAR(n) хранит строки фиксированной длины n. Если строка короче, она дополняется пробелами до указанной длины.Использует фиксированное количество памяти, равное указанной длине
n, независимо от фактической длины строки.Может быть быстрее в некоторых случаях, так как длина строк фиксирована и известна заранее, что упрощает управление памятью.
Подходит для хранения данных, которые всегда имеют одинаковую длину, например, коды стран, идентификаторы и т.д.
CREATE TABLE example (
fixed_char CHAR(10)
);
VARCHAR(n) хранит строки переменной длины, где n — это максимальная длина строки. Реальная длина строки определяется по количеству символов в ней.Использует только столько памяти, сколько необходимо для хранения фактической длины строки, плюс дополнительные байты для хранения информации о длине строки.
Может быть менее эффективным в некоторых случаях по сравнению с
CHAR, так как длина строки не фиксирована и требует дополнительной обработки для управления памятью.Подходит для хранения данных, длина которых может варьироваться, например, имена, адреса, описания и т.д.
CREATE TABLE example (
variable_char VARCHAR(50)
);
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это метод, используемый для оценки значений функции в точках, находящихся между известными значениями. В программировании и математике интерполяция помогает найти промежуточные значения между данными точками, что особенно полезно в задачах аппроксимации, анализа данных и компьютерной графики.
Самый простой и широко используемый метод интерполяции. Предполагает, что значения между двумя известными точками изменяются линейно.
Использует полиномы для аппроксимации значений функции. Чем выше степень полинома, тем точнее можно аппроксимировать функцию, но это также может привести к проблемам с осцилляциями между точками (эффект Рунге). Интерполяция Лагранжа, интерполяция Ньютона.
Использует кусочно-полиномиальные функции (сплайны) для интерполяции. Самый популярный вид — кубические сплайны, которые обеспечивают гладкую и плавную кривую между точками. Преимущество сплайнов в том, что они минимизируют осцилляции и обеспечивают гладкость первой и второй производных.
Использует синусоидальные функции для интерполяции, что полезно для данных, которые имеют волнообразный характер.
Интерполяция используется для заполнения пропущенных данных, аппроксимации значений в точках, где данные не были измерены, и для сглаживания данных.
Интерполяция используется для анимации и отрисовки графики, включая интерполяцию цветов, координат и других параметров.
Интерполяция используется для создания контурных карт, аппроксимации высот, температуры и других параметров на основе точечных измерений.
Интерполяция применяется для увеличения разрешения сигнала и восстановления пропущенных данных.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1💊1
Это исполняемый код (например, SQL-скрипты), который хранится и выполняется непосредственно в базе данных. Разработка бизнес-логики внутри хранимых процедур является спорной практикой. Она имеет как преимущества, так и недостатки в зависимости от требований системы, архитектуры и команды разработки.
Хранимые процедуры выполняются на сервере базы данных, что уменьшает накладные расходы на передачу данных между приложением и базой. Обработка больших объёмов данных становится быстрее, так как нет необходимости отправлять их в приложение и обратно.
Вся логика предметной области сосредоточена в одном месте (в БД), что облегчает контроль доступа и выполнение важных операций. Удобно для многослойных систем, где несколько клиентских приложений используют одну базу данных.
Вместо передачи большого количества SQL-запросов между сервером базы данных и приложением, выполняется один вызов процедуры.
Системы могут ограничить доступ к таблицам и предоставить доступ только к хранимым процедурам, что снижает риск несанкционированного доступа. Встроенные механизмы контроля прав доступа (например, в PostgreSQL и Oracle).
Современные СУБД поддерживают процедурные языки, такие как PL/pgSQL (PostgreSQL), T-SQL (SQL Server) или PL/SQL (Oracle), которые предоставляют функции, циклы и исключения, что позволяет реализовать сложную логику.
При необходимости переноса части функциональности между разными приложениями (например, Web-приложением и мобильным клиентом) логика в БД остаётся неизменной.
Хранимые процедуры часто сложны для чтения, отладки и тестирования по сравнению с кодом на языке программирования (например, Java, C#, Python). Версионный контроль затруднён, так как БД не всегда удобно интегрируется с системами контроля версий (Git).
Логика, написанная в хранимых процедурах, привязывает систему к конкретной СУБД (например, Oracle или SQL Server). Переход на другую БД становится дорогостоящим и трудоёмким.
Сервер базы данных становится "узким местом" системы. Если бизнес-логика выполняется только на сервере БД, это может привести к перегрузке, особенно при высоком трафике.
Инструменты для юнит-тестирования и автоматизированного тестирования хранимых процедур менее развиты, чем для традиционного кода приложений. Тестирование бизнес-логики требует специальной инфраструктуры (например, отдельной тестовой БД).
Внедрение логики в БД нарушает принципы многослойной архитектуры, такие как Separation of Concerns (разделение ответственности). Логика бизнес-уровня смешивается с уровнем данных.
Разработка и деплой изменений в хранимых процедурах требуют взаимодействия с базой данных, что замедляет процесс внедрения обновлений. Изменения в хранимых процедурах могут повлиять на производительность всей системы.
Написание и оптимизация хранимых процедур требуют специфических навыков SQL и понимания особенностей СУБД. Не все разработчики владеют этими навыками.
Если необходимо минимизировать сетевые вызовы и максимально эффективно обрабатывать большие объёмы данных.
Если бизнес-логика должна быть единой для нескольких клиентов (например, мобильного приложения, веб-сервиса).
Если безопасность и контроль доступа являются приоритетом.
Например, для старых систем или проектов, где миграция на новую архитектуру невозможна.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM