Backend
Open in Telegram
Комьюнити Backend программистов. Python, Java, Golang, PHP, C#, C/C++, DevOps Сайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp
Show more3 878
Subscribers
No data24 hours
No data7 days
-1030 days
Posts Archive
3 878
🤔 Какие есть статус коды?
Статус коды HTTP используются для обозначения результата обработки запроса сервером.
🚩Информационные (100-199)
🟠100 Continue
Сервер получил начальную часть запроса клиента и ожидает продолжения.
🟠101 Switching Protocols
Клиент запросил изменение протокола, и сервер согласен выполнить это.
🚩Успешные (200-299)
🟠200 OK
Запрос успешно обработан, и сервер отправляет запрашиваемые данные.
🟠201 Created
Запрос успешно выполнен, и в результате был создан новый ресурс.
🟠202 Accepted
Запрос принят для обработки, но обработка еще не завершена.
🟠204 No Content
Запрос успешно выполнен, но сервер не возвращает никаких данных.
🚩Перенаправления (300-399)
🟠301 Moved Permanently
Запрашиваемый ресурс был окончательно перемещен на новый URI.
🟠302 Found
Запрашиваемый ресурс временно доступен по другому URI.
🟠304 Not Modified
Данные не изменились, клиент может использовать кэшированную версию.
🚩Клиентские ошибки (400-499)
🟠400 Bad Request
Сервер не может обработать запрос из-за ошибки клиента (например, неверный синтаксис).
🟠401 Unauthorized
Для доступа к запрашиваемому ресурсу требуется аутентификация.
🟠403 Forbidden
У клиента нет прав на доступ к запрашиваемому ресурсу.
🟠404 Not Found
Запрашиваемый ресурс не найден на сервере.
🟠405 Method Not Allowed
Метод, указанный в запросе, не поддерживается данным ресурсом.
🚩Ошибки сервера (500-599)
🟠500 Internal Server Error
Общая ошибка сервера, когда обработка запроса не может быть завершена.
🟠501 Not Implemented
Сервер не поддерживает функциональность, необходимую для обработки запроса.
🟠502 Bad Gateway
Сервер, выполняющий роль шлюза или прокси, получил недействительный ответ от вышестоящего сервера.
🟠503 Service Unavailable
Сервер временно не доступен (например, из-за перегрузки или технического обслуживания).
🟠504 Gateway Timeout
Сервер, выполняющий роль шлюза или прокси, не дождался ответа от вышестоящего сервера вовремя.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что происходит в конце спринта?
В конце спринта в гибких методологиях разработки (например, Scrum) проводится серия мероприятий и активностей, направленных на подведение итогов работы команды, оценку достигнутого результата и планирование улучшений. Эти процессы обеспечивают прозрачность, оценку эффективности и подготовку к следующему спринту.
🚩Основные события в конце спринта
🟠Завершение задач спринта
Все задачи, включённые в спринт, должны быть либо выполнены, либо перенесены с соответствующими комментариями. Завершённые задачи проверяются на соответствие критериям "готовности" (Definition of Done, DoD). Если задачи не выполнены, они возвращаются в бэклог продукта для повторной оценки в будущем.
🟠Демонстрация инкремента (Sprint Review)
Показать заинтересованным сторонам результат работы команды. Команда демонстрирует готовый продукт или его обновления. Обсуждаются выполненные задачи, изменения в продукте и обратная связь от заказчиков или других участников. Результат: обновление бэклога продукта с учётом новой информации.
🟠Ретроспектива спринта (Sprint Retrospective)
Цель: анализировать, что прошло хорошо, что можно улучшить и какие действия предпринять в будущем. Участники обсуждают положительные моменты, трудности и проблемы, возникшие в процессе работы. Генерируются идеи для улучшения, которые затем внедряются в следующих спринтах. Используются форматы для выявления проблем, такие как "Start, Stop, Continue" или "Что было хорошо, что плохо, что можно улучшить".
🟠Обновление метрик
Обновление burndown chart, velocity chart или других метрик, используемых для отслеживания прогресса. Анализ выполнения целей спринта (например, процент выполненных задач). Уроки, извлечённые из анализа метрик, учитываются при планировании будущих спринтов.
🚩Итоговые действия перед началом нового спринта
🟠Рефайнмент бэклога продукта
С учётом новых идей, задач и обратной связи обновляется приоритет задач.
🟠Подготовка к планированию следующего спринта (Sprint Planning)
Команда и Product Owner готовятся к обсуждению целей нового спринта.
🟠Документирование
Фиксация результатов спринта, включая завершённые задачи, обратную связь и итоги ретроспективы.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое http?
то протокол прикладного уровня, который является основой передачи данных в Интернете. Он был разработан для передачи гипертекста и других типов медиа между клиентами и серверами. Основные функции HTTP включают инициализацию соединения, запрос ресурсов и получение ответов от сервера.
🚩Основные компоненты HTTP:
🟠Клиент и сервер
HTTP работает по модели клиент-сервер. Клиент, например, веб-браузер, инициирует запросы к серверу, который предоставляет доступ к запрашиваемым ресурсам.
🟠URI (Uniform Resource Identifier)
Используется для идентификации ресурсов. Наиболее распространенным типом URI является URL (Uniform Resource Locator).
🟠Методы HTTP
Определяют действия, которые клиент хочет выполнить над ресурсом. Основные методы включают:
GET: Запрос данных с сервера.
POST: Отправка данных на сервер для обработки.
PUT: Обновление ресурса на сервере.
DELETE: Удаление ресурса с сервера.
🟠Статус-коды
Серверы возвращают клиентам статус-коды, чтобы сообщить о результате обработки запроса. Например, 200 (OK) означает успешное выполнение запроса, а 404 (Not Found) — что ресурс не найден.
🟠Заголовки HTTP
Несут метаданные о запросе или ответе, такие как тип содержимого (Content-Type), длина содержимого (Content-Length), информация об авторизации и так далее.
🟠Сообщения HTTP
Состоят из запроса от клиента и ответа от сервера, каждый из которых включает стартовую строку, заголовки и тело сообщения.
🚩Как это используется:
🟠Веб-серфинг
Каждый раз, когда пользователь вводит URL в адресной строке браузера или нажимает на ссылку, браузер отправляет HTTP-запрос к серверу, который возвращает HTML-страницу.
🟠API
HTTP широко используется для взаимодействия между различными системами через RESTful API. Программы могут отправлять HTTP-запросы для получения данных или выполнения действий на удаленных серверах.
🟠Мобильные приложения
Большинство мобильных приложений взаимодействуют с серверными частями через HTTP, запрашивая и отправляя данные, которые отображаются пользователю.
🟠Загрузка файлов
HTTP используется для скачивания файлов из Интернета.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 В чём разница между SQL и NoSQL?
Разница между SQL и NoSQL базами данных заключается в их архитектуре, структуре, методах хранения данных и использовании. Рассмотрим эти различия подробнее.
🟠Архитектура и структура данных
SQL (Structured Query Language) базы данных
Реляционные базы данных: SQL базы данных являются реляционными и используют таблицы для хранения данных. Каждая таблица состоит из строк и столбцов, что позволяет структурировать данные в виде отношений.
Схемы данных: SQL базы данных требуют четко определенных схем (schemas), которые строго контролируют структуру данных. Все записи в таблице должны следовать заранее определенной структуре.
Язык запросов: SQL использует структурированный язык запросов для манипуляции данными. Язык SQL стандартизирован и включает команды для создания, чтения, обновления и удаления данных (CRUD).
🟠NoSQL (Not Only SQL)
Нереляционные базы данных: NoSQL базы данных не обязательно используют таблицы для хранения данных. Вместо этого они могут использовать различные модели данных, такие как документы, графы, ключ-значение и столбцы
Гибкость схем: NoSQL базы данных часто не требуют фиксированных схем. Это позволяет хранить данные разной структуры в одной и той же коллекции или таблице.
Разнообразие языков запросов: В NoSQL базах данных отсутствует единый стандарт языка запросов. Они могут использовать различные методы доступа к данным, включая REST API и собственные языки запросов.
🚩Масштабируемость и производительность
🟠SQL базы данных
Вертикальная масштабируемость: SQL базы данных обычно масштабируются вертикально, то есть увеличивая мощность сервера (CPU, RAM, дисковое пространство).
Транзакции и консистентность: SQL базы данных поддерживают ACID транзакции (Atomicity, Consistency, Isolation, Durability), что обеспечивает высокую надежность и консистентность данных.
🟠NoSQL базы данных
Горизонтальная масштабируемость: NoSQL базы данных предназначены для горизонтального масштабирования, что позволяет распределять данные по множеству серверов.
Гибкость и скорость: NoSQL базы данных обычно более гибки и могут обеспечивать высокую производительность при работе с большими объемами данных и высокими нагрузками на запись и чтение.
🚩Использование и примеры
🟠SQL базы данных
MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
Финансовые системы, системы управления запасами, системы управления клиентами (CRM), где требуется сложные запросы и транзакции.
🟠NoSQL базы данных
MongoDB, Cassandra, Redis, Couchbase.
Системы больших данных, реального времени аналитика, социальные сети, приложения для интернета вещей (IoT), где требуется высокая производительность и гибкость.
Ставь 👍 и забирай 📚 Базу знаний
3 878
20 мая в 12:00 (мск) пройдёт бесплатный вебинар «Автоматизация процессов безопасности в Kubernetes: опыт MWS Cloud Platform».
Руководитель направления облачной безопасности Алексей Федулаев расскажет:
- Какие есть подводные камни при переходе с ручных сканов
- Как покрыть тепловыми картами кластеры и отслеживать нарушения
- Как находить аномалии в поведении пользователей
- И наконец, как это всё подружить с центром безопасности
Вебинар будет полезен директорам по ИТ и ИБ, ИБ-специалистам и инженерам, работающим в облачных средах.
Регистрируйтесь, подключайтесь к прямому эфиру и задавайте вопросы в чате.
📆 20 мая в 12:00
3 878
Главный навык на ближайшие годы — ВАЙБ-КОДИНГ
ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня
И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную.
Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 30 тысяч: @vibecoding_tg
3 878
🤔 Какие бывают блокировки в PostgreSQL?
В PostgreSQL существует несколько видов блокировок, которые используются для управления конкурентным доступом к данным и обеспечения целостности транзакций.
🚩Блокировки уровня таблицы (Table-Level Locks)
Эти блокировки применяются к целым таблицам и используются для операций, которые требуют эксклюзивного доступа к таблице.
🟠ACCESS SHARE:
Блокировка на уровне доступа для чтения данных из таблицы (например, при выполнении команды
SELECT). Не блокирует другие команды SELECT.
🟠ROW SHARE:
Блокировка уровня строки, позволяющая другим транзакциям выполнять команды SELECT FOR UPDATE и SELECT FOR SHARE.
🟠ROW EXCLUSIVE:
Блокировка, применяемая при вставке, обновлении или удалении строк (INSERT, UPDATE, DELETE). Блокирует блокировки SHARE и EXCLUSIVE.
🟠SHARE UPDATE EXCLUSIVE:
Используется для выполнения команд, которые обновляют индексы, но не данные (VACUUM). Блокирует другие блокировки SHARE UPDATE EXCLUSIVE и более строгие.
🟠SHARE:
Блокировка для чтения данных из таблицы с возможностью блокировки изменений. Используется для операций, которые должны видеть согласованное состояние данных (ANALYZE).
🟠SHARE ROW EXCLUSIVE:
Используется для команд, которые выполняют чтение с возможностью блокировки последующих изменений, таких как CREATE INDEX CONCURRENTLY.
🟠EXCLUSIVE:
Блокирует доступ к таблице для всех операций, кроме команд SELECT и команд с уровнем блокировки ACCESS SHARE.
🟠ACCESS EXCLUSIVE:
Самая строгая блокировка, блокирующая все другие операции. Применяется для структурных изменений таблицы (ALTER TABLE, DROP TABLE).
🚩Блокировки уровня строки (Row-Level Locks)
Эти блокировки применяются к отдельным строкам таблицы и используются для управления конкурентным доступом к данным на более детальном уровне.
🟠SELECT FOR UPDATE:
Блокирует выбранные строки для обновления другими транзакциями. Строки с такой блокировкой могут быть изменены только текущей транзакцией.
🟠SELECT FOR SHARE:
Блокирует строки для чтения, но не для изменения. Другие транзакции могут читать эти строки, но не изменять их.
🟠SELECT FOR NO KEY UPDATE:
Похоже на SELECT FOR UPDATE, но позволяет другим транзакциям выполнять операции, не изменяющие ключи.
🟠SELECT FOR KEY SHARE:
Похоже на SELECT FOR SHARE, но позволяет другим транзакциям выполнять операции, не изменяющие строки.
🚩Блокировки на уровне индексов (Index-Level Locks)
Эти блокировки применяются к индексам и используются для управления доступом к индексированным данным.
🟠Блокировки индексов:
Используются автоматически при доступе к индексам для обеспечения целостности данных. Это может включать блокировки при обновлении индексов или их чтении.
🚩Дедлоки (Deadlocks)
Дедлоки возникают, когда две или более транзакций блокируют друг друга, ожидая освобождения ресурсов, которые заблокированы друг другом. PostgreSQL автоматически обнаруживает дедлоки и прерывает одну из транзакций для их разрешения.
🚩Примеры использования
🟠Обеспечение целостности данных:
Использование блокировок для предотвращения конкурентных изменений данных.
🟠Управление конкурентным доступом:
Применение блокировок для управления доступом к ресурсам в многопользовательских средах.
🟠Оптимизация производительности:
Выбор оптимальных типов блокировок для балансировки между целостностью данных и производительностью.
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Что такое Agile?
Это подход к разработке программного обеспечения, который фокусируется на гибкости, сотрудничестве и быстрой адаптации к изменениям. Agile основывается на следующих принципах и ценностях:
🚩Основные принципы
🟠Индивидуумы и взаимодействия важнее процессов и инструментов
Акцент на командную работу и эффективное общение.
🟠Работающее программное обеспечение важнее исчерпывающей документации
Быстрая поставка работающих продуктов с минимально необходимой документацией.
🟠Сотрудничество с заказчиком важнее согласования условий контракта
Постоянное взаимодействие с заказчиком для удовлетворения его потребностей.
🟠Готовность к изменениям важнее следования первоначальному плану
Гибкость в адаптации к изменениям требований и условий.
🚩Основные методологии
🟠Scrum
Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.
🟠Kanban
Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация.
🟠Extreme Programming (XP)
Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.
🟠Lean
Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества.
🚩Плюсы
➕Быстрая адаптация к изменениям
Возможность быстро реагировать на изменения требований или условий рынка.
➕Улучшенное качество продукта
Постоянное тестирование и интеграция.
➕Повышенная вовлеченность команды
Активное участие всех членов команды в процессе разработки.
➕Удовлетворенность клиентов
Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое Scrum?
Это методология управления проектами и одна из наиболее популярных реализаций Agile, предназначенная для гибкой разработки программного обеспечения. Scrum помогает командам работать более эффективно и адаптироваться к изменениям в требованиях и приоритетах. Основные концепции и элементы Scrum включают следующие компоненты:
🚩Основные концепции
🟠Инкрементная и итеративная разработка
Scrum разбивает работу над проектом на небольшие итерации, называемые спринтами. Каждый спринт обычно длится от одной до четырех недель и заканчивается созданием работающего инкремента продукта.
🟠Самоорганизующиеся команды
Команды в Scrum сами управляют своей работой и распределяют задачи между участниками без вмешательства извне.
🟠Роли в Scrum
В Scrum выделяются три основных роли:
Product Owner (Владелец продукта): отвечает за создание и управление бэклогом продукта, определение приоритетов и взаимодействие с заинтересованными сторонами.
Scrum Master: помогает команде следовать принципам Scrum, устраняет препятствия и обеспечивает эффективность работы команды.
Development Team (Команда разработки): непосредственно занимается созданием продукта, включает специалистов различных профилей, необходимых для выполнения задач.
🚩Основные элементы
🟠Product Backlog (Бэклог продукта)
список всех требований и функций, которые должны быть реализованы в продукте. Элементы бэклога приоритизируются владельцем продукта.
🟠Sprint Backlog (Бэклог спринта)
список задач, которые команда обязуется выполнить в текущем спринте. Эти задачи выбираются из бэклога продукта на основе приоритетов и возможностей команды.
🟠Sprint (Спринт)
фиксированный период времени, в течение которого команда работает над выполнением задач из бэклога спринта. В конце спринта команда демонстрирует результат своей работы.
🟠Daily Scrum (Ежедневный скрам)
ежедневные короткие встречи (обычно 15 минут), на которых команда обсуждает прогресс, планирует работу на день и выявляет препятствия.
🟠Sprint Review (Обзор спринта)
встреча в конце каждого спринта, на которой команда демонстрирует результаты своей работы заинтересованным сторонам и получает обратную связь.
🟠Sprint Retrospective (Ретроспектива спринта)
встреча после завершения спринта, на которой команда анализирует свою работу, обсуждает, что было хорошо, что можно улучшить, и разрабатывает план улучшений на следующий спринт.
🚩Плюсы
➕Гибкость
Scrum позволяет быстро адаптироваться к изменяющимся требованиям и приоритетам.
➕Прозрачность
Частые демонстрации результата и обратная связь обеспечивают высокую степень прозрачности процесса разработки.
➕Повышение качества
Регулярные проверки и ретроспективы помогают команде постоянно улучшать качество продукта и процесса.
➕Улучшение взаимодействия
Scrum способствует более тесному взаимодействию между членами команды и заинтересованными сторонами.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое CGI?
Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса.
🚩Как работает
1⃣Запрос клиента: Клиент (например, веб-браузер) отправляет HTTP-запрос на веб-сервер.
2⃣Запуск CGI-скрипта: Веб-сервер определяет, что запрос предназначен для CGI-скрипта, и запускает его как отдельный процесс.
3⃣Передача данных: Веб-сервер передает данные запроса (например, параметры формы) в CGI-скрипт через стандартный ввод (stdin) и переменные окружения.
4⃣Выполнение скрипта: CGI-скрипт выполняет необходимые операции (например, доступ к базе данных) и генерирует HTML-страницу.
5⃣Ответ сервера: CGI-скрипт отправляет сгенерированную HTML-страницу обратно на веб-сервер через стандартный вывод (stdout), а сервер передает этот ответ клиенту.
🚩Плюсы
➕Простота и универсальность
CGI прост в реализации и не требует сложной настройки. Поддерживает множество языков программирования, что делает его универсальным решением.
➕Совместимость
CGI является стандартом и поддерживается практически всеми веб-серверами.
➕Изоляция процессов
Каждый запрос запускает новый процесс, что обеспечивает изоляцию запросов и повышает безопасность.
🚩Минусы
➖Производительность
Каждый запрос создает новый процесс, что может быть ресурсоемким и замедлять работу сервера при большом количестве запросов. Создание и завершение процессов занимает время, что увеличивает задержку ответа.
➖Масштабируемость
Плохая производительность при высоких нагрузках делает CGI плохо подходящим для масштабируемых веб-приложений. Ограниченная возможность использования пула процессов для повышения эффективности.
➖Ограниченная функциональность
Сложнее интегрироваться с современными технологиями и фреймворками. Отсутствие встроенных средств для работы с сессиями, аутентификацией и другими функциями современных веб-приложений.
🚩Современные альтернативы
🟠FastCGI
Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность.
🟠Server-side scripting
Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность.
🟠Web Server Gateway Interface (WSGI)
Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов.
🟠Application Servers
Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое SQL?
Это язык запросов, предназначенный для управления и манипулирования данными в реляционных базах данных. SQL используется для выполнения различных операций над данными, таких как создание, изменение, удаление и извлечение данных.
🚩Основные возможности SQL
🟠Создание и изменение структуры базы данных
DDL (Data Definition Language): Команды, которые позволяют создавать и изменять структуру базы данных, включая таблицы, индексы, представления и другие объекты базы данных.
CREATE: Создание новых таблиц, баз данных, индексов.
ALTER: Изменение структуры существующих объектов базы данных.
DROP: Удаление объектов из базы данных.
🟠Управление данными
DML (Data Manipulation Language): Команды, которые используются для управления данными в базе данных.
SELECT: Извлечение данных из таблиц.
INSERT: Вставка новых данных в таблицы.
UPDATE: Обновление существующих данных в таблицах.
DELETE: Удаление данных из таблиц.
🟠Управление доступом к данным
DCL (Data Control Language): Команды, которые управляют доступом пользователей к данным в базе данных.
GRANT: Предоставление прав пользователям.
REVOKE: Отзыв ранее предоставленных прав.
🟠Транзакции
TCL (Transaction Control Language): Команды, которые управляют транзакциями в базе данных.
COMMIT: Сохранение всех изменений, сделанных в транзакции.
ROLLBACK: Отмена всех изменений, сделанных в транзакции.
🚩Пример использования SQL
Создание таблицы
CREATE TABLE Employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
salary DECIMAL(10, 2)
);
Вставка данных в таблицу
INSERT INTO Employees (id, name, department_id, salary)
VALUES (1, 'John Doe', 10, 50000.00);
Извлечение данных из таблицы
SELECT name, salary
FROM Employees
WHERE department_id = 10;
Обновление данных в таблице
UPDATE Employees
SET salary = 55000.00
WHERE id = 1;
Удаление данных из таблицы
DELETE FROM Employees
WHERE id = 1;
🚩Зачем нужен SQL
🟠Управление данными
SQL предоставляет мощные средства для извлечения, вставки, обновления и удаления данных, что позволяет эффективно управлять данными в больших объемах.
🟠Определение структуры данных
С помощью SQL можно создавать и изменять структуру базы данных, обеспечивая гибкость в управлении схемой данных.
🟠Управление доступом
SQL позволяет контролировать доступ к данным, обеспечивая безопасность и конфиденциальность информации.
🟠Обеспечение целостности данных
SQL поддерживает механизмы транзакций и ограничения, которые помогают поддерживать целостность данных и предотвращать их некорректное изменение.
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Для чего используют redis в проектах?
Это высокопроизводительная система управления базами данных, работающая в памяти (in-memory), которая поддерживает множество структур данных, таких как строки, списки, множества, хэш-таблицы и другие. Redis широко используется в современных проектах благодаря своей скорости и функциональности.
🚩Основные применения
🟠Кэширование данных
Снижение нагрузки на базу данных: Кэширование часто запрашиваемых данных в Redis позволяет снизить нагрузку на основную базу данных и ускорить время ответа. Ускорение доступа к данным: Быстрое чтение данных из памяти обеспечивает низкую задержку и высокую производительность.
🟠Хранение сессий
Управление сессиями пользователей: Redis часто используется для хранения сессионных данных пользователей в веб-приложениях благодаря своей скорости и поддержке автоматического удаления старых данных (TTL).
🟠Очереди задач и сообщений
Асинхронные задачи: Redis используется для реализации очередей задач в таких системах, как Celery. Это позволяет распределять и выполнять задачи асинхронно и эффективно. Сообщения и события: Redis поддерживает механизм Pub/Sub для организации обмена сообщениями между различными частями приложения.
🟠Хранилище временных данных
Счётчики и трекеры: Используется для хранения временных данных, таких как счётчики посещений, лайков, просмотров и других показателей, которые часто обновляются. Краткосрочные данные: Хранение временных данных, которые необходимы на короткий срок и могут быть удалены после их использования.
🟠Репликация и отказоустойчивость
Репликация данных: Redis поддерживает мастеровую репликацию, что позволяет создавать копии данных на нескольких серверах для обеспечения отказоустойчивости и балансировки нагрузки. Снятие резервных копий: Redis поддерживает создание резервных копий данных, что обеспечивает восстановление в случае сбоев.
🟠Реализация сложных структур данных
Работа с временными рядами: Redis позволяет эффективно управлять временными рядами данных, используя такие структуры, как списки и отсортированные множества. Графы и социальные сети: Использование структур данных Redis для реализации графов и сетей, что полезно в социальных сетях и рекомендательных системах.
🟠Функции блокировок
Реализация распределённых блокировок: Redis позволяет создавать механизмы блокировок для управления доступом к ресурсам в распределённых системах.
🚩Примеры использования
🟠Веб-приложения
Кэширование результатов запросов к базе данных. Хранение сессионных данных пользователей. Управление очередями задач для обработки данных в фоне.
🟠Мобильные приложения
Кэширование API-запросов для уменьшения задержек. Хранение временных данных и метрик использования.
🟠Игровые приложения
Хранение текущих состояний игр и информации о пользователях. Реализация лидеров и таблиц рекордов.
🟠Аналитические системы
Кэширование результатов аналитических запросов. Управление счётчиками и метриками в реальном времени.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое 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
Отправка изменений из локального репозитория в удалённый.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Когда ROC AUC будет плохо определять качество классификатора ?
ROC AUC (Receiver Operating Characteristic - Area Under Curve) является популярной метрикой для оценки качества бинарного классификатора. Однако, в некоторых ситуациях использование ROC AUC может быть неэффективным или вводящим в заблуждение.
🟠Сильно несбалансированные данные
При сильном дисбалансе классов, где один класс существенно преобладает над другим, ROC AUC может давать завышенные оценки качества модели. Это происходит потому, что ROC AUC учитывает как истинно положительные, так и ложно положительные сработки, но при этом не всегда отражает способность модели предсказывать редкий класс.
🟠Различная стоимость ошибок
Если ошибки различных типов (ложно положительные и ложно отрицательные) имеют разную стоимость, ROC AUC может неадекватно отражать качество модели. В таких случаях более подходящей метрикой может быть Precision-Recall Curve или специфическая метрика, учитывающая стоимость ошибок.
🟠Малое количество положительных примеров
При малом количестве положительных примеров (класса 1), ROC AUC может стать менее надежной, так как небольшое изменение в предсказаниях может существенно повлиять на значение метрики. В таких случаях Precision-Recall Curve и PR AUC могут предоставить более надежную оценку.
🟠Нестабильность при малых выборках
Может быть нестабильной и сильно зависеть от конкретного набора данных, особенно при небольших выборках. Это может привести к значительным колебаниям в оценках качества модели.
import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, precision_recall_curve, auc
# Создание несбалансированного набора данных
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10,
n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=42)
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)
# Предсказание вероятностей
y_scores = model.predict_proba(X_test)[:, 1]
# Вычисление ROC AUC
roc_auc = roc_auc_score(y_test, y_scores)
# Вычисление Precision-Recall AUC
precision, recall, _ = precision_recall_curve(y_test, y_scores)
pr_auc = auc(recall, precision)
print(f"ROC AUC: {roc_auc}")
print(f"Precision-Recall AUC: {pr_auc}")
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Чем отличаются LEFT JOIN от INNER JOIN?
Это два типа соединений (joins) в языке SQL, которые используются для объединения строк из двух или более таблиц на основе связанных столбцов. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных.
🚩INNER JOIN
Возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Возвращает строки, где существует совпадение значений в обоих таблицах. Если нет совпадающих значений, строка не будет включена в результирующий набор.
SELECT Employees.name, Departments.department_name
FROM Employees
INNER JOIN Departments ON Employees.department_id = Departments.id;
🚩LEFT JOIN
Возвращает все строки из левой таблицы (первой таблицы в запросе) и соответствующие строки из правой таблицы. Если в правой таблице нет совпадающих строк, в результирующем наборе будут NULL значения для столбцов правой таблицы. Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствия, возвращаются NULL значения для правой таблицы.
SELECT Employees.name, Departments.department_name
FROM Employees
LEFT JOIN Departments ON Employees.department_id = Departments.id;
🚩Сравнение
🟠INNER JOIN
Возвращает только совпадающие строки. Если нет совпадений, строки не включаются в результат.
🟠LEFT JOIN
Возвращает все строки из левой таблицы. Включает совпадающие строки из правой таблицы. Если нет совпадений, строки из правой таблицы будут заполнены NULL значениями.
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Какие бывают ограничения в Базе Данных?
Это правила, которые применяются к данным в таблице для обеспечения точности и целостности данных. Эти ограничения помогают управлять данными и предотвращать вставку или обновление неверных данных. Вот основные типы ограничений:
🟠NOT NULL
Обеспечивает, что столбец не может содержать
NULL значения. Это ограничение гарантирует, что данные всегда будут присутствовать в этом столбце.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100) NOT NULL
);
🟠UNIQUE
Обеспечивает, что все значения в столбце или группе столбцов уникальны. Это ограничение предотвращает дублирование данных.
CREATE TABLE employees (
emp_id INT UNIQUE,
email VARCHAR(100) UNIQUE
);
🟠PRIMARY KEY
Сочетает в себе ограничения NOT NULL и UNIQUE. Обеспечивает уникальную идентификацию каждой строки в таблице. В таблице может быть только один первичный ключ.
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
🟠FOREIGN KEY
Обеспечивает ссылочную целостность между таблицами. Столбец с внешним ключом (или группа столбцов) ссылается на первичный ключ или уникальный ключ в другой таблице.
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
🟠CHECK
Обеспечивает, что значения в столбце соответствуют заданному условию. Это ограничение проверяет данные при вставке или обновлении.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
salary DECIMAL(10, 2),
CHECK (salary > 0)
);
🟠DEFAULT
Устанавливает значение по умолчанию для столбца, если при вставке строки значение для этого столбца не указано.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
hire_date DATE DEFAULT CURRENT_DATE
);
🟠INDEX
Создает индекс на один или несколько столбцов таблицы для ускорения поиска данных. Хотя индекс не является ограничением в строгом смысле, он помогает оптимизировать запросы к базе данных.
CREATE INDEX idx_name ON employees(name);
Пример создания таблицы с различными ограничениями
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
dept_id INT,
salary DECIMAL(10, 2) CHECK (salary > 0),
hire_date DATE DEFAULT CURRENT_DATE,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Каким образом можно найти "медленный запрос" и проанализировать его в PostgreSQL?
🚩Методы и инструменты.
🟠Включение журналирования медленных запросов
Настройка параметров конфигурации PostgreSQL для журналирования медленных запросов позволяет отслеживать запросы, выполнение которых занимает много времени.
1⃣Откройте файл конфигурации PostgreSQL (
postgresql.conf).
2⃣Настройте следующие параметры:
# Включить логирование всех запросов
log_statement = 'all'
# Либо логирование только медленных запросов
log_min_duration_statement = 1000 # Логировать запросы, выполнение которых заняло более 1000 мс (1 секунда)
3⃣Перезапустите сервер PostgreSQL для применения изменений:
sudo systemctl restart postgresql
🟠Использование инструмента `pg_stat_statements`
Расширение pg_stat_statements позволяет собирать статистику по выполненным запросам и предоставляет информацию о частоте, времени выполнения и других характеристиках запросов.
1⃣Включите расширение в postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
2⃣Перезапустите сервер PostgreSQL:
sudo systemctl restart postgresql
3⃣Создайте расширение в нужной базе данных:
CREATE EXTENSION pg_stat_statements;
4⃣Используйте запрос для получения информации о медленных запросах:
SELECT
query,
calls,
total_time,
mean_time,
stddev_time,
rows,
min_time,
max_time
FROM
pg_stat_statements
ORDER BY
total_time DESC
LIMIT 10;
🟠Анализ запросов с помощью `EXPLAIN` и `EXPLAIN ANALYZE`
Команды EXPLAIN и EXPLAIN ANALYZE позволяют понять, как PostgreSQL планирует и выполняет запросы, предоставляя детальную информацию о плане выполнения.
1⃣Выполните команду EXPLAIN для запроса:
EXPLAIN SELECT * FROM my_table WHERE id = 1;
2⃣Выполните команду EXPLAIN ANALYZE для запроса:
EXPLAIN ANALYZE SELECT * FROM my_table WHERE id = 1;
3⃣Анализируйте выходные данные, чтобы понять, какие операции занимают больше всего времени (например, полное сканирование таблицы, узкие места при соединении таблиц и т.д.).
🟠Использование системных представлений и утилит
pg_stat_activity: Показывает текущую активность базы данных, включая выполняемые запросы и их состояние.
SELECT
pid,
usename,
state,
query,
now() - query_start AS duration
FROM
pg_stat_activity
WHERE
state != 'idle'
ORDER BY
duration DESC;
pg_locks: Отображает информацию о текущих блокировках в базе данных.
SELECT * FROM pg_locks;
1⃣Индексы:
Убедитесь, что для часто используемых условий WHERE и JOIN существуют соответствующие индексы.
2⃣Переписывание запросов:
Попробуйте переписать запросы для улучшения их производительности.
3⃣Материализованные представления:
Используйте материализованные представления для часто выполняемых сложных запросов.
4⃣Конфигурация сервера:
Настройте параметры конфигурации PostgreSQL для оптимизации производительности (например, work_mem, shared_buffers, maintenance_work_mem).
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 В чем разница между SQL lite и Express SQL?
Это две разные системы управления базами данных (СУБД), каждая из которых имеет свои уникальные особенности, применения и случаи использования.
🟠Архитектура
SQLite
Встраиваемая СУБД: SQLite - это библиотека, которая встраивается непосредственно в приложение. Она не требует отдельного сервера для работы.
Без сервера: Работает без необходимости запуска серверного процесса, что упрощает установку и настройку.
Файловая система: Все данные хранятся в одном файле базы данных на диске.
SQL Server Express
Серверная СУБД: SQL Server Express - это урезанная версия Microsoft SQL Server, требующая установки и запуска серверного процесса.
Клиент-серверная архитектура: Клиенты подключаются к серверу базы данных через сеть.
Разделенные файлы данных и логов: Данные и логи хранятся в отдельных файлах.
🟠Производительность и масштабируемость
SQLite
Легковесная и быстрая: Подходит для приложений с небольшими или средними объемами данных и низкими требованиями к многопользовательскому доступу.
Ограниченная многопользовательская поддержка: Поддерживает ограниченное количество одновременных пользователей, так как блокировки осуществляются на уровне файла.
SQL Server Express
Масштабируемость: Подходит для приложений с высокими требованиями к производительности и поддерживает значительное количество одновременных пользователей.
Многопользовательская поддержка: Обеспечивает управление многопользовательским доступом и параллельностью транзакций.
🟠Функциональные возможности
SQLite:
Основные возможности SQL: Поддерживает основные команды SQL, такие как SELECT, INSERT, UPDATE, DELETE.
Ограниченные возможности: Отсутствие многих расширенных функций, таких как триггеры, хранимые процедуры, сложные типы данных и транзакции с несколькими заявлениями.
SQL Server Express:
Расширенные возможности: Поддержка триггеров, хранимых процедур, полнотекстового поиска, транзакций и других продвинутых функций.
Ограничения по сравнению с полной версией: SQL Server Express имеет ограничения по объему базы данных (до 10 ГБ на одну базу данных) и по использованию ресурсов (до 1 ГБ ОЗУ и 1 процессор).
🟠Установка и развертывание
SQLite:
Простота установки: Не требует установки, просто включается как библиотека в приложение.
Легкость развертывания: Так как данные хранятся в одном файле, перемещение базы данных сводится к копированию этого файла.
SQL Server Express:
Требует установки: Необходимо установить серверную часть, что может включать несколько шагов настройки.
Администрирование: Требует определенного уровня администрирования для настройки безопасности, резервного копирования и восстановления данных.
🟠Случаи использования
SQLite:
Мобильные приложения: Часто используется в мобильных приложениях (например, Android и iOS) для локального хранения данных.
Встроенные системы: Подходит для встроенных систем и IoT устройств.
Прототипирование и тестирование: Удобен для быстрого создания прототипов и тестирования.
SQL Server Express:
Веб-приложения: Хорошо подходит для небольших веб-приложений и сервисов, особенно на платформе Windows.
Настольные приложения: Используется в настольных приложениях, требующих мощной базы данных.
Учебные цели: Часто используется в образовательных целях для обучения работе с SQL Server.
Ставь 👍 и забирай 📚 Базу знаний
3 878
🤔 Что такое чистый код?
Это понятие в программировании, обозначающее код, который легко читать, понимать и поддерживать. Принципы чистого кода помогают разработчикам создавать качественные и устойчивые к изменениям программы. Вот основные характеристики и принципы чистого кода:
🚩Основные характеристики чистого кода
🟠Читаемость
Код должен быть понятным и легким для чтения другими разработчиками. Имена переменных, функций и классов должны быть осмысленными и описательными.
🟠Простота
Код должен быть простым и ясным, избегая излишней сложности. Это делает его более понятным и легким в поддержке.
🟠Последовательность
Следование единому стилю кодирования и соглашениям по наименованию. Это упрощает чтение и понимание кода.
🟠Минимум избыточности
Избегание дублирования кода, что способствует его упрощению и уменьшению ошибок.
🟠Модульность
Разделение кода на независимые модули или компоненты, которые можно разрабатывать, тестировать и поддерживать отдельно.
🟠Тестируемость
Код должен быть легким для тестирования. Хорошо написанный код обычно легко покрыть юнит-тестами.
🚩Принципы чистого кода
🟠Именование
Имена переменных, функций и классов должны быть осмысленными и описывать их назначение.
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;
Ставь 👍 и забирай 📚 Базу знаний3 878
🤔 Назови четыре уровня изоляции транзакций?
🚩Уровни изоляции
🟠Read Uncommitted (Чтение незафиксированных данных)
Транзакция может читать данные, измененные другой транзакцией, даже если та еще не зафиксирована. Грязные чтения, неповторимые чтения и фантомные чтения. Редко используется на практике из-за высокого риска неконсистентных данных.
🟠Read Committed (Чтение зафиксированных данных)
Транзакция видит только те изменения, которые были зафиксированы другими транзакциями. Незафиксированные изменения не видны. Неповторимые чтения и фантомные чтения. Широко используется, обеспечивает баланс между производительностью и консистентностью данных.
🟠Repeatable Read (Повторяемое чтение)
Гарантирует, что если транзакция повторно читает данные, она получит те же самые значения, даже если другие транзакции изменяют данные. Фантомные чтения. Используется, когда требуется более высокий уровень консистентности данных, но допускаются фантомные чтения.
🟠Serializable (Сериализуемый)
Обеспечивает максимальный уровень изоляции. Транзакции выполняются так, как если бы они были сериализованы, то есть последовательно. Нет. Обеспечивает наивысшую консистентность данных, но может значительно снижать производительность из-за блокировок и задержек.
🚩Аномалии
🟠Грязное чтение (Dirty Read)
Происходит, когда транзакция читает данные, измененные другой транзакцией, которая еще не зафиксирована. Уровень Read Uncommitted допускает эту аномалию.
🟠Неповторимое чтение (Non-repeatable Read)
Происходит, когда транзакция читает те же данные несколько раз и получает разные значения из-за фиксации изменений другой транзакцией. Уровни Read Committed и выше предотвращают грязные чтения, но Read Committed допускает неповторимые чтения.
🟠Фантомное чтение (Phantom Read)
Происходит, когда транзакция выполняет одно и то же запрос несколько раз и видит разные наборы строк из-за вставки, обновления или удаления данных другой транзакцией. Уровень Repeatable Read предотвращает неповторимые чтения, но допускает фантомные чтения. Уровень Serializable предотвращает все три аномалии.
Ставь 👍 и забирай 📚 Базу знаний
Available now! Telegram Research 2025 — the year's key insights 
