Backend
3.95K subscribers
36 photos
712 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Что такое XML?

XML (Extensible Markup Language) — это формат данных для структурированного хранения и передачи информации.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Основные подводные камни удалённых вызовов?

Это технология, позволяющая приложениям вызывать функции или процедуры, которые выполняются на удалённом сервере, как если бы они были локальными. Несмотря на удобство, такая модель имеет ряд подводных камней, которые необходимо учитывать при проектировании и разработке распределённых систем.

🟠Скрытие распределённости
Удалённые вызовы маскируют тот факт, что операция выполняется через сеть. Это может создать ложное чувство локальности у разработчиков, которые не учитывают:
Сетевую задержку: вызовы занимают больше времени, чем локальные операции, особенно при медленных сетях. Сетевые сбои: соединение может быть потеряно, что приведёт к ошибкам выполнения или длительным тайм-аутам. Изменение задержки: время выполнения одного и того же вызова может существенно варьироваться в зависимости от сетевых условий.

🟠Обработка ошибок
Обработка ошибок в распределённых системах сложнее, чем при локальных вызовах:
Необходимо обрабатывать такие ошибки, как потеря соединения, тайм-ауты, отказ сервера. В некоторых случаях может возникнуть "проблема повторного вызова" (например, запрос был выполнен, но подтверждение потерялось), что приводит к возможной идемпотентности операций.

🟠Сериализация и десериализация данных
Для передачи данных через сеть они должны быть преобразованы в сериализованный формат. Это может:
Увеличивать задержки из-за времени, необходимого на преобразование. Создавать проблемы совместимости, если клиент и сервер используют разные версии протокола. Усложнять отладку и диагностику ошибок в данных.

🟠Распределённая согласованность
Взаимодействие между распределёнными компонентами приводит к необходимости поддерживать согласованность данных: Проблема согласованности особенно актуальна при частичных отказах системы. Может потребоваться использование распределённых транзакций, что усложняет архитектуру.

🟠Проблемы безопасности
Удалённые вызовы подвержены угрозам: Необходимо обеспечивать шифрование данных, чтобы избежать утечек. Аутентификация и авторизация играют ключевую роль в защите системы. Возможны атаки на уровень сети или использование слабостей в протоколах передачи данных.

🟠Балансировка нагрузки и масштабирование
При большом числе клиентов сервер может стать узким местом: Нагрузка на сервер может привести к деградации производительности. Требуется правильная стратегия масштабирования и балансировки нагрузки, например, использование нескольких серверов или очередей сообщений.

🟠Выбор протокола и технологий
Различные протоколы (например, HTTP, gRPC, Thrift) обладают своими особенностями: Протокол может накладывать ограничения на производительность и возможности. Ошибки конфигурации или несоответствие версий могут вызвать проблемы.

🚩Как это используется

🟠Для создания распределённых систем
Микросервисные архитектуры. Взаимодействие клиент-сервер (например, мобильное приложение и API). Системы с тяжёлой серверной логикой.
🟠Чтобы избежать подводных камней
Чётко проектировать архитектуру, учитывая особенности сети. Использовать идемпотентные операции. Обеспечивать надёжные стратегии обработки ошибок. Применять мониторинг и трассировку (например, OpenTelemetry) для отслеживания поведения системы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Какие основные HTTP методы знаешь?

Основные методы: GET, POST, PUT, DELETE, PATCH, OPTIONS и HEAD.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Принципы разделения ответственности (MVC, MVVM и другие)?

Принципы разделения ответственности (Separation of Concerns, SoC) предполагают разделение логики программы на отдельные части, каждая из которых выполняет строго определённую функцию. Это позволяет сделать код более структурированным, гибким и легче сопровождаемым. Популярные паттерны проектирования, основанные на разделении ответственности, включают MVC, MVP, MVVM и другие. Они применяются в разработке приложений для чёткого разграничения пользовательского интерфейса, бизнес-логики и работы с данными.

🚩MVC (Model-View-Controller)

🟠Model (Модель)
Хранит данные и логику их обработки. Отвечает за взаимодействие с базой данных или другими источниками данных. Уведомляет представление об изменениях данных.
🟠View (Представление)
Отображает данные пользователю. Реагирует на обновления данных от модели. Не содержит логики обработки данных.
🟠Controller (Контроллер)
Обрабатывает пользовательский ввод (например, нажатия кнопок, ввод текста). Вызывает соответствующие методы модели и обновляет представление.

🚩Плюсы и минусы
Хорошее разделение обязанностей.
Легче тестировать отдельные компоненты.
При большом приложении контроллер может стать перегруженным.

🚩MVP (Model-View-Presenter)

🟠Model (Модель)
Работает с данными и бизнес-логикой.
🟠View (Представление)
Интерфейс пользователя. Не содержит логики, только вызывает методы презентера.
🟠Presenter (Презентер)
Посредник между моделью и представлением. Получает данные из модели и передаёт их в представление. Не знает деталей реализации интерфейса (только абстракция).

Плюсы и минусы
Более чёткое разделение обязанностей по сравнению с MVC.
Упрощённое тестирование.
Возможен рост сложности презентера.

🚩MVVM (Model-View-ViewModel)

🟠Model (Модель)
Управляет данными и бизнес-логикой.

🟠View (Представление)
Отображает данные и предоставляет интерфейс для взаимодействия.

🟠ViewModel
Посредник между моделью и представлением. Содержит логику преобразования данных для представления. Часто использует привязку данных (data binding), что позволяет автоматически обновлять UI при изменении данных.

Плюсы и минусы
Простота взаимодействия между представлением и данными.
Легко тестировать ViewModel.
Возможна сложность с реализацией привязки данных.

🚩Flux/Redux

🟠Store (Хранилище)
Централизованное состояние приложения.
🟠View (Представление)
Компоненты, которые отображают состояние.
🟠Actions (Действия)
Описывают, какие изменения должны произойти в состоянии.
🟠Reducers (Редьюсеры)
Функции, описывающие, как изменяется состояние на основе действий.

Плюсы и минусы
Прогнозируемость состояния.
Централизованное управление состоянием.
Дополнительная сложность при реализации.

🚩Чем полезны принципы разделения ответственности
🟠Упрощение тестирования
можно тестировать компоненты независимо друг от друга.
🟠Повышение читаемости
код проще понять и сопровождать.
🟠Повторное использование кода
компоненты можно использовать в других частях приложения.
🟠Гибкость в разработке
команда может работать над разными частями параллельно.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое ORM?

ORM (Object-Relational Mapping) — это технология для преобразования объектов в реляционные данные и обратно, упрощая работу с базами.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Объяснение легаси-кода для непрофессионалов?

Это термин, которым называют старый код или программное обеспечение, созданное много лет назад, но до сих пор используемое. Важно понимать, что "легаси" не обязательно означает "плохой". Этот код может быть ценным и выполнять критически важные задачи, но у него есть свои особенности и проблемы, которые делают работу с ним сложной.

🚩Почему появляется легаси-код?

🟠Возраст программного обеспечения.
Программы, написанные 5, 10 или даже 20 лет назад, продолжают работать, хотя технологии уже изменились.
🟠Отсутствие документации.
Разработчики, написавшие код, могли уйти из компании, не оставив подробных объяснений.
🟠Эволюция требований.
Код, который был написан для одних задач, со временем начинает использоваться для других, часто без переработки.
🟠Изменения технологий.
Код создавался на старых версиях языков программирования, библиотек или платформ, которые сегодня уже не поддерживаются.

🚩Проблемы легаси-кода

🟠Плохая читаемость
Код может быть сложно понять, особенно если он написан без соблюдения современных стандартов или правил.
🟠Отсутствие тестов
Старый код часто создавался без автоматизированных тестов, что усложняет внесение изменений.
🟠Зависимость от устаревших технологий
Код может использовать библиотеки или платформы, которые больше не обновляются или не поддерживаются.
🟠Сложность изменений
Даже небольшие правки могут вызвать неожиданные ошибки, поскольку никто не знает всех последствий изменений.

🚩Зачем сохранять легаси-код?

🟠Работает — не трогай
Если код выполняет свою задачу, компании часто решают оставить его как есть.
🟠Критически важные задачи
Легаси-код может управлять банковскими системами, производственными линиями или другими системами, от которых зависит бизнес.
🟠Высокая стоимость переписывания
Полная переработка кода может занять годы и потребовать огромных ресурсов.

🚩Что с ним делать?

🟠Поддерживать
Исправлять ошибки и улучшать работу системы по мере необходимости.
🟠Обновлять
Переходить на современные технологии частями, чтобы минимизировать риски.
🟠Переписывать
Создать новую систему, если старая больше не отвечает требованиям, но это требует времени и ресурсов.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое singleton?

Singleton — это паттерн, обеспечивающий создание только одного экземпляра класса для управления глобальным состоянием.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое гибкость (agility)?

Это способность команды, процесса или организации быстро адаптироваться к изменениям, минимизируя затраты времени, ресурсов и усилий. Гибкость подразумевает не только оперативное реагирование на запросы, но и проактивное планирование с учетом возможных изменений. Она лежит в основе *ибких методологий разработки (Agile), которые ставят в приоритет взаимодействие, ценность для клиента и быструю адаптацию к новым условиям.

🚩Аспекты гибкости

🟠Адаптивность
Гибкие системы и команды способны подстраиваться под новые бизнес-требования, изменения в технологиях или рыночных условиях без значительных потерь в эффективности. Это требует минимизации жестких зависимостей и использования подходов, таких как итеративная разработка.

🟠Итеративность и инкрементальность
Работа над проектом делится на небольшие этапы, каждый из которых добавляет определенную ценность. Итеративный подход позволяет на каждом этапе учитывать обратную связь и изменять стратегию.

🟠Устранение жесткой бюрократии
Для достижения гибкости важно упрощение процессов, которые могут затруднять принятие решений или реализацию изменений. Это обеспечивает быстрое принятие решений на основе текущих данных.

🟠Клиентоориентированность
Гибкость помогает лучше удовлетворять потребности клиента, благодаря постоянной обратной связи, приоритезации задач и возможности корректировки целей в процессе работы.

🟠Кросс-функциональные команды
Гибкость подразумевает тесное взаимодействие между разработчиками, тестировщиками, аналитиками и бизнес-стейкхолдерами. Это ускоряет обмен информацией и сокращает задержки.

🚩Почему гибкость важна?

🟠Удовлетворение клиента
В быстро меняющихся условиях рынка запросы клиентов могут изменяться. Гибкость позволяет удовлетворять эти изменения, поставляя максимально актуальный продукт.
🟠Снижение рисков
Итеративный подход позволяет быстрее выявлять и исправлять ошибки, чем при использовании традиционных методологий, таких как каскадная модель.
🟠Сокращение времени выхода на рынок
Гибкость позволяет быстрее выводить продукт на рынок, предоставляя минимально жизнеспособную версию (MVP) с возможностью дальнейшего развития.
🟠Улучшение командного взаимодействия
Постоянная обратная связь и взаимодействие между участниками команды повышают прозрачность процессов и уменьшают риски недопонимания.

🚩Примеры методологий и подходов для гибкости:

🟠Agile Manifesto
Основной документ, в котором заложены ценности и принципы гибкой разработки.
🟠Scrum
Конкретная реализация Agile с упором на спринты и роль Scrum-мастера.
🟠Kanban
Методология визуализации процессов, которая помогает выявлять узкие места и повышать эффективность.
🟠Extreme Programming (XP)
Подход, направленный на повышение качества кода и оперативное удовлетворение изменяющихся требований.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 В чем разница между Scrum и Kanban?

Scrum — это методология Agile с фиксированными спринтами и определёнными ролями (Scrum Master, Product Owner). Kanban — это гибкий подход, где работа организована на доске с карточками, и нет строгих временных рамок. Scrum ориентирован на итерации, а Kanban — на постоянный поток задач.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
🤔 Что такое гибкость (agility)?

🚩Гибкость

В контексте разработки программного обеспечения относится к способности команды, процесса или системы быстро адаптироваться к изменениям. Это ключевая характеристика Agile-методологий, которые нацелены на создание программного обеспечения через итеративный процесс, частую обратную связь и постоянную готовность к изменениям.

🚩Аспекты

🟠Быстрая адаптация к изменениям
Способность вносить изменения в функциональность, требования или архитектуру продукта без значительных потерь времени и ресурсов. Это важно, так как бизнес-цели, приоритеты и технологии могут изменяться в течение жизненного цикла проекта.

🟠Краткие итерации и обратная связь
В Agile-подходе используются короткие спринты (обычно 1–4 недели), в конце которых предоставляется работающий продукт или его часть. Это позволяет учитывать обратную связь и своевременно корректировать курс.

🟠Минимизация технического долга
Гибкость также зависит от качества кода и архитектуры системы. Хорошо структурированный код облегчает внесение изменений и снижает риск появления ошибок.

🟠Кросс-функциональные команды
В гибких командах разработчики, тестировщики, дизайнеры и бизнес-аналитики работают вместе, что ускоряет процесс и позволяет быстрее реагировать на изменения.

🟠Инструменты и автоматизация
Использование CI/CD (Continuous Integration/Continuous Delivery) помогает оперативно вносить изменения в код и быстро их доставлять пользователям.

🚩Применение гибкости

🟠Запуск продукта на рынок
Быстрое тестирование гипотез и выпуск минимально жизнеспособного продукта (MVP), чтобы собрать обратную связь от пользователей.
🟠Изменение бизнес-целей
Если меняются бизнес-требования, гибкая команда может переключиться на новые приоритеты, сохраняя при этом эффективность.
🟠Технические изменения
Адаптация к новым технологиям или платформам без больших затрат.

🚩Плюсы

Улучшенное качество программного обеспечения.
Быстрая доставка ценности заказчику.
Способность конкурировать в условиях быстро меняющегося рынка.
Снижение рисков, связанных с ошибками или неверно понятыми требованиями.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое git?

Git — это распределённая система контроля версий, которая позволяет разработчикам отслеживать изменения в коде, работать в командах и управлять ветвлениями проекта.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Проблемы с сине-зелёным деплоем при изменении БД

Предполагает, что одновременно существуют две версии приложения: старая (синяя) и новая (зелёная). База данных при этом используется общая. Во время переключения трафика от синей версии к зелёной возникают потенциальные сложности, связанные с изменением структуры данных или логики работы с ними.

🚩Проблемы

🟠Совместимость схемы данных
Если новая версия приложения требует изменений в структуре базы данных (например, добавление колонок, изменение типов данных или удаление полей), старая версия приложения может стать несовместимой с новой схемой.

🟠Изменения данных на уровне логики
Если новая версия изменяет способ обработки или хранения данных, это может вызвать проблемы при переключении трафика обратно на старую версию (например, в случае отката).

🟠Миграции данных
Выполнение миграции данных может занять время и потребовать блокировки таблиц, что может привести к снижению производительности или временному недоступности приложения.

🟠Сложность отката
Если переключение на новую версию произошло, но затем потребовался откат, структура или данные, изменённые новой версией, могут быть несовместимы со старой версией.

🟠Производительность и нагрузка
Изменения в индексации или структуре таблиц могут привести к временной деградации производительности базы данных, что затронет обе версии приложения.

🟠Состояние транзакций
Если новая версия меняет логику транзакций или порядок операций над данными, это может вызвать несогласованность в данных при выполнении параллельных операций обеими версиями.

🚩Подходы для минимизации проблем

🟠Мягкие изменения схемы
Сначала добавить новые поля или таблицы, не удаляя старые. Убедиться, что новая версия поддерживает как старую, так и новую схему. Удалить устаревшие элементы только после полного перехода.

🟠Двусторонняя совместимость
Обеспечить, чтобы новая версия приложения могла работать со старой схемой, а старая версия — с новой (на ограниченное время).

🟠Тестирование миграций
Тщательно тестировать миграции на копии данных в условиях, максимально близких к боевым.

🟠Пошаговые изменения
Сначала внести изменения в базу данных, совместимые с обеими версиями. Затем задеплоить новую версию. Удалить устаревшие элементы только после убедительности в стабильности.

🟠Фичи-флаги
Использовать фичи-флаги, чтобы включать или отключать новую функциональность, связанной с изменениями в БД, без полной смены версии.

🟠Резервное копирование и мониторинг
Выполнять резервное копирование базы данных перед началом миграции. Использовать мониторинг для раннего обнаружения проблем с производительностью или данными.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 В чём смысл инкапсуляции?

Инкапсуляция скрывает внутренние детали реализации объекта, предоставляя доступ к данным только через публичные методы, что защищает данные от прямого изменения.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Как работать с легаси-кодом?

Это код, который устарел, но продолжает использоваться в производственных системах. Он может быть плохо документирован, сложным для понимания, не покрытым тестами или написанным на устаревших технологиях. Работа с таким кодом — частая задача разработчиков, требующая особого подхода.

🚩Проблемы легаси-кода

🟠Отсутствие тестов
Без тестов сложно понять, работает ли изменение корректно.
🟠Сложность понимания
Легаси-код часто плохо документирован и написан без соблюдения современных стандартов.
🟠Зависимость от устаревших технологий
Легаси-код может быть привязан к фреймворкам или библиотекам, которые больше не поддерживаются.
🟠Хрупкость
Даже небольшие изменения могут привести к непредсказуемым ошибкам.
🟠Долгий цикл разработки
Из-за сложности внесения изменений и отсутствия автоматизированных процессов разработка занимает больше времени.

🚩Стратегии работы с легаси-кодом

🟠Изучение и анализ
Прежде чем вносить изменения, изучите код и его окружение: Проведите рефакторинг "окружающего контекста" (например, упростите сложные методы). Используйте дебаггеры, чтобы понять поведение системы. Привлеките экспертов, знакомых с системой, если они доступны. Постарайтесь выделить области, которые наиболее часто модифицируются, чтобы сосредоточиться на них.

🟠Покрытие тестами
Перед внесением изменений напишите базовые unit-тесты или интеграционные тесты: Начните с регрессионных тестов для фиксации текущего поведения. Используйте "Characterization Tests", чтобы зафиксировать, как работает система, а не как она должна работать. Постепенно увеличивайте покрытие тестами.

🟠Модульная работа
Если возможно, изолируйте старые модули, минимизируя их влияние на новую разработку. Используйте "стратегию шва" (Seam Technique) для упрощения взаимодействия с легаси-кодом: Добавьте промежуточный слой между новым и старым кодом. Это позволит вам изменять и тестировать функциональность поэтапно.

🟠Рефакторинг
Разделяйте большие методы и классы на мелкие, с понятной ответственностью. Переименовывайте переменные и методы для улучшения читаемости. Используйте шаблоны проектирования, если это обоснованно. Применяйте правило "Boy Scout Rule": оставляйте код чуть лучше, чем он был.

🟠Декомпозиция системы
Постепенно выделяйте функциональность в независимые модули или микросервисы: Определите ключевые компоненты системы. Реализуйте новые функции вне легаси-кода, минимизируя его изменения.

🟠Обновление зависимостей
Если легаси-код зависит от устаревших библиотек или фреймворков, поэтапно обновите их: Обновляйте зависимости в порядке их важности и уровня риска. Тщательно тестируйте каждое обновление.

🟠Документирование
Если документация отсутствует, создайте её: Описывайте ключевые части системы. Добавляйте комментарии в код, объясняющие сложные места.

🟠Инструменты анализа кода
Используйте статический анализатор кода (например, SonarQube, ReSharper) для выявления проблем и повышения качества.

🚩Ошибки при работе с легаси-кодом

Полный рефакторинг "с нуля" без понимания бизнеса и текущих процессов. Внесение изменений без тестирования. Игнорирование влияния изменений на систему в целом.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое операция GROUP BY?

GROUP BY — это оператор SQL, используемый для группировки строк с одинаковыми значениями в указанных столбцах, обычно с последующим применением агрегатных функций (SUM, COUNT, AVG).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Когда MongoDB предпочтительнее реляционной БД?

Как документо-ориентированная база данных, лучше подходит для определённых сценариев, где её гибкость, масштабируемость и высокая производительность предоставляют существенные преимущества по сравнению с реляционными базами данных (RDBMS).

🟠Гибкая и динамическая схема данных
MongoDB: Позволяет хранить документы с разной структурой, не требуя предварительного определения схемы. Реляционная БД: Требует строгого определения схемы, что делает изменения структуры данных сложными.
Когда использовать MongoDB: Разработка MVP (минимально жизнеспособного продукта) или системы, где требования к структуре данных постоянно меняются. Приложения с разнообразными типами данных, например, каталоги товаров с различными наборами атрибутов.

🟠Хранение сложных, вложенных и неструктурированных данных
MongoDB: Поддерживает вложенные структуры и массивы прямо в документах JSON.
Реляционная БД: Хранение таких данных требует сложных связей и множества таблиц.
Когда использовать MongoDB: Приложения, где нужно работать с иерархическими данными, такими как документы, профили пользователей или логи с вложенными структурами.

🟠Большие объемы данных и высокая производительность
MongoDB: Подходит для быстрого чтения/записи и обработки больших объемов данных благодаря горизонтальной масштабируемости.
Реляционная БД: Масштабируется вертикально и может столкнуться с узкими местами при экстремальных нагрузках.
Когда использовать MongoDB: Большие системы логирования, аналитики и трекинга событий. Приложения, работающие с потоками данных (например, IoT).

🟠Географически распределённые данные
MongoDB: Имеет встроенную поддержку шардирования, репликации и управления географически распределёнными данными.
Реляционная БД: Требует внешних решений для сложной настройки распределённых систем.
Когда использовать MongoDB: Приложения с глобальной пользовательской базой, требующие низкой задержки при доступе к данным.

🟠Простота горизонтального масштабирования
MongoDB: Легко масштабируется горизонтально через шардирование (распределение данных по множеству серверов).
Реляционная БД: Масштабируется в основном вертикально, что может быть дорого.
Когда использовать MongoDB: Проекты с потенциальным ростом данных до петабайтных масштабов. Приложения, где важна линейная производительность при добавлении новых серверов.

🟠Проекты, требующие быстрого времени разработки
MongoDB: Упрощает разработку благодаря отсутствию жёсткой схемы и встроенным инструментам для работы с JSON.
Реляционная БД: Требует больше времени на проектирование структуры и взаимодействие с данными.
Когда использовать MongoDB: Быстрорастущие стартапы или проекты с короткими циклами разработки.

🟠Отсутствие сложных транзакций
MongoDB: Поддерживает транзакции с ограничениями, но рассчитана на сценарии, где они не являются основным требованием.
Реляционная БД: Отлично подходит для приложений с сложными ACID-транзакциями.
Когда использовать MongoDB: Системы, где операции являются атомарными на уровне одного документа или набора документов (например, управление корзинами покупок, хранилища данных).

🚩Примеры применения MongoDB

🟠Электронная коммерция
Хранение данных о товарах с разной структурой атрибутов.
🟠Игровая индустрия
Логирование действий игроков, управление профилями.
🟠Системы аналитики
Хранение больших объемов событий и данных мониторинга.
🟠Мобильные приложения
Управление пользовательскими данными, кэшированием или оффлайн-доступом.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое транзакция в БД?

Транзакция — это последовательность операций с базой данных, которая выполняется как единое целое, с гарантиями атомарности, согласованности, изолированности и долговечности (ACID).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Как писать безопасный код?

🚩Принципы написания

🟠Валидация и очистка пользовательских данных
Опасность: Некорректные данные могут привести к SQL-инъекциям, XSS или другим атакам.
Как действовать: Всегда проверяйте входные данные на стороне сервера (не только на клиенте). Используйте whitelisting (разрешение только ожидаемых значений) вместо blacklisting (запрета нежелательных). Экранируйте или очищайте данные перед их использованием, особенно для HTML или SQL.

🟠Использование параметризованных запросов
Опасность: SQL-инъекции возможны при динамическом составлении SQL-запросов.
Как действовать: Используйте параметризованные запросы (prepared statements) для взаимодействия с базой данных. Не включайте пользовательский ввод непосредственно в запросы.

🟠Шифрование и защита данных
Опасность: Утечка конфиденциальных данных, таких как пароли или персональные данные.
Как действовать: Никогда не храните пароли в открытом виде. Используйте сильные алгоритмы хэширования, такие как bcrypt или Argon2. Шифруйте чувствительные данные перед их хранением или передачей. Используйте TLS (SSL) для защиты данных при передаче.

🟠Защита от XSS (Cross-Site Scripting)
Опасность: Вредоносный скрипт может быть внедрен и выполнен в браузере пользователя.
Как действовать: Всегда экранируйте данные, которые отображаются в HTML, JavaScript или атрибутах. Используйте контекстно-зависимую экранизацию (например, HTML, JavaScript или URL-экранирование). Ограничивайте возможность загрузки вредоносного содержимого, используя заголовок Content Security Policy (CSP).

🟠Защита от CSRF (Cross-Site Request Forgery)
Опасность: Злоумышленник может заставить пользователя выполнить действие от его имени.
Как действовать: Используйте уникальные токены CSRF в запросах (например, в форме или заголовке). Ограничивайте методы запросов (например, PUT/POST) для выполнения важных операций. Проверяйте заголовок Referer или Origin для подтверждения источника запроса.

🟠Минимизация прав доступа
Опасность: Злоумышленник может использовать уязвимость в вашем коде для получения привилегий.
Как действовать: Давайте минимально необходимые права как для пользователей, так и для сервисов. Применяйте принцип наименьших привилегий на уровне кода, базы данных и системного доступа. Ограничивайте доступ к конфиденциальным данным.

🟠Использование современных библиотек и обновлений
Опасность: Устаревшие библиотеки могут содержать уязвимости.
Как действовать: Используйте актуальные версии библиотек и фреймворков. Следите за сообщениями о безопасности и патчами в используемых технологиях.

🟠Обработка ошибок и логирование
Опасность: Некорректная обработка ошибок может раскрыть внутреннюю информацию системы.
Как действовать: Не показывайте пользователям технические детали ошибок (например, трассировки стека). Логируйте ошибки на стороне сервера, но избегайте записи конфиденциальных данных в логи. Создавайте понятные сообщения об ошибках для пользователей, не раскрывая внутренние механизмы.

🟠Защита от уязвимостей в конфигурациях
Опасность: Неправильные настройки среды выполнения, серверов или библиотек могут оставить приложение уязвимым.
Как действовать: Ограничьте доступ к административным интерфейсам через IP или авторизацию. Не храните конфиденциальные данные (например, ключи API) в коде. Используйте файлы конфигурации или хранилища секретов. Деактивируйте ненужные функции и модули в среде выполнения.

🟠Аутентификация и управление сессиями
Опасность: Угрозы включают угон сессий, слабые пароли и неподтверждённую личность.
Как действовать: Используйте безопасные механизмы аутентификации, такие как OAuth2. Ограничивайте время жизни сессий и добавляйте механизмы их завершения. Убедитесь, что сессионные токены передаются только через защищённые соединения (HTTPS).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какие есть уровни изоляции транзакций?

READ UNCOMMITTED — транзакции видят незавершённые изменения.
READ COMMITTED — видны только зафиксированные изменения.
REPEATABLE READ — данные остаются неизменными во время транзакции.
SERIALIZABLE — транзакции выполняются последовательно.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🤔 Что такое двухфакторная аутентификация (2FA)?

Это метод подтверждения личности пользователя, который требует предъявления двух различных факторов аутентификации. Эти факторы относятся к разным категориям и обеспечивают дополнительный уровень безопасности по сравнению с одной лишь аутентификацией, например, паролем.

🚩Категории факторов аутентификации

🟠Знание
Например: пароль, PIN-код или ответ на секретный вопрос.
🟠Обладание
Например: одноразовый код из SMS, аппаратный токен, приложение-аутентификатор (Google Authenticator, Authy).
🟠Биометрия
Например: отпечаток пальца, скан лица или радужной оболочки глаза.

🚩Принцип работы

1⃣Пользователь вводит первый фактор — обычно это пароль.
2⃣Система запрашивает второй фактор — например, одноразовый код, отправленный на телефон, или подтверждение через приложение.
3⃣Если оба фактора подтверждены, доступ предоставляется.

🚩Плюсы
Повышенная безопасность
Даже если злоумышленник узнает ваш пароль, ему будет сложно получить доступ к устройству или коду второго фактора.
Защита от фишинга
Одного украденного пароля недостаточно для получения доступа.
Универсальность
Подходит для широкого спектра приложений: от банковских сервисов до социальных сетей.

🚩Примеры реализации

🟠Одноразовые коды (OTP)
Генерируются приложениями-аутентификаторами или отправляются через SMS/email.
🟠Устройства или токены
Физические ключи (например, YubiKey, ключи с поддержкой FIDO2).
🟠Биометрия
Используется как второй фактор в сочетании с паролем.
🟠Push-уведомления
Подтверждение входа через уведомление в мобильном приложении.

🚩Ограничения

🟠Уязвимость SMS-кодов
Возможны атаки через SIM-сваппинг или перехват сообщений.
🟠Зависимость от устройства
Потеря устройства или токена затруднит доступ к аккаунту.
🟠Усложнение процесса входа
Требует больше времени и усилий от пользователя.

Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое двухфакторная аутентификация (2FA)?

Это метод подтверждения личности пользователя, который требует предъявления двух различных факторов аутентификации. Эти факторы относятся к разным категориям и обеспечивают дополнительный уровень безопасности по сравнению с одной лишь аутентификацией, например, паролем.

🚩Категории факторов аутентификации

🟠Знание
Например: пароль, PIN-код или ответ на секретный вопрос.
🟠Обладание
Например: одноразовый код из SMS, аппаратный токен, приложение-аутентификатор (Google Authenticator, Authy).
🟠Биометрия
Например: отпечаток пальца, скан лица или радужной оболочки глаза.

🚩Принцип работы

1⃣Пользователь вводит первый фактор — обычно это пароль.
2⃣Система запрашивает второй фактор — например, одноразовый код, отправленный на телефон, или подтверждение через приложение.
3⃣Если оба фактора подтверждены, доступ предоставляется.

🚩Плюсы

Повышенная безопасность
Даже если злоумышленник узнает ваш пароль, ему будет сложно получить доступ к устройству или коду второго фактора.
Защита от фишинга
Одного украденного пароля недостаточно для получения доступа.
Универсальность
Подходит для широкого спектра приложений: от банковских сервисов до социальных сетей.

🚩Примеры реализации

🟠Одноразовые коды (OTP)
Генерируются приложениями-аутентификаторами или отправляются через SMS/email.
🟠Устройства или токены
Физические ключи (например, YubiKey, ключи с поддержкой FIDO2).
🟠Биометрия
Используется как второй фактор в сочетании с паролем.
🟠Push-уведомления
Подтверждение входа через уведомление в мобильном приложении.

🚩Ограничения

🟠Уязвимость SMS-кодов
Возможны атаки через SIM-сваппинг или перехват сообщений.
🟠Зависимость от устройства
Потеря устройства или токена затруднит доступ к аккаунту.
🟠Усложнение процесса входа
Требует больше времени и усилий от пользователя.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3