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

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

«Keep it simple, stupid / Делай проще, глупец»

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

KISS намекает на то, что решение всегда должно оставаться достаточно простым, чтобы любой член вашей команды мог легко понять его, не зная, как в настоящее время работает код. Конечно, некоторые сложные проблемы требуют комплексных решений, но часто случается так, что программисты увлекаются новыми инструментами и применяют их в работе, даже если они не соответствуют задаче.
👍17🔥2
Что такое абстрактная фабрика

Приведем аналогию: Вернёмся к примеру с дверями из «Простой фабрики». В зависимости от своих потребностей вы можете купить деревянную дверь в одном магазине, стальную — в другом, пластиковую — в третьем. Для монтажа вам понадобятся разные специалисты: деревянной двери нужен плотник, стальной — сварщик, пластиковой — спец по ПВХ-профилям.

Это фабрика фабрик. То есть фабрика, группирующая индивидуальные, но взаимосвязанные/взаимозависимые фабрики без указания для них конкретных классов.

Шаблон «Абстрактная фабрика» описывает способ инкапсулирования группы индивидуальных фабрик, объединённых некой темой, без указания для них конкретных классов.
👍10
​​Не храните секреты в коде приложения

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

• Ключи доступа и секреты API, которые используются для доступа к внешним или внутренним сервисам;
• Пароли и учетные данные, включая пароли к базам данных, системам администрирования и т. д.;
• Любые ключи шифрования, которые тоже должны оставаться вне исходного кода;
• Конфигурационные файлы, содержащие чувствительные данные;
• Девичья фамилия матери, кличка домашнего животного и прочие ответы на секретные вопросы.

Вместо сохранения такой информации прямо в коде проекта, вы можете использовать переменные окружения (environment variables). Ну а для более серьезных систем существуют мощные и безопасные хранилища секретов по типу HashiCorp Vault.
👍19😁1
​​Типы соединений SQL

INNER JOIN (ВНУТРЕННЕЕ СОЕДИНЕНИЕ) — Возвращает те строки, для которых в обеих таблицах выполняется условие соединения.

LEFT JOIN (ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ или просто ЛЕВОЕ СОЕДИНЕНИЕ) — Возвращает строки, содержащие данные из левой таблицы (указанной слева от ключевого слова JOIN), даже если в правой таблице нет совпадающих строк. В строках, где нет совпадения справа, все столбцы справа будут заполнены значением NULL.

RIGHT JOIN(ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ или просто ПРАВОЕ СОЕДИНЕНИЕ) — Возвращает строки, содержащие данные из правой таблицы (указанной справа от ключевого слова JOIN), даже если в левой таблице нет совпадающих строк. В строках, где нет совпадения слева, все столбцы слева будут заполнены значением NULL.

FULL JOIN (ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ или просто ПОЛНОЕ СОЕДИНЕНИЕ) — Возвращает строки, содержащие данные из обеих таблиц. В строках, где нет совпадения слева или справа, все столбцы без совпадения будут заполнены значением NULL.

CROSS JOIN (ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ) — Возвращает строки, содержащие все возможные комбинации левой и правой частей соединения. Такое соединение называют «декартовым произведением»

Есть еще несколько терминов, которые используются для операций соединения:

Self-join (самосоединение) — Соединение данных в таблице с данными в этой же таблице (с самой собой)

Natural join (естественное соединение) — Неявное соединение двух таблиц за счет совпадения имен столбцов в этих таблицах

Equi-join (равнозначное соединение) — Соединение двух таблиц, в условии которого используется только операция равенства (=)
22👍6
​​Для чего важно использовать инкапсуляцию?

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

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

Также инкапсуляция делает программу более удобной для использования, так как она скрывает лишние детали и позволяет проще работать с программой.
👍12
​​Как защититься от SQL инъекций

Чтобы защититься от SQL инъекций, нужно следовать этим простым правилам:

• Используйте параметризованные запросы. Не вставляйте значения напрямую в запросы SQL. Вместо этого, используйте параметры, которые передаются вместе с запросом.

• Фильтруйте и проверяйте ввод данных. Прежде чем отправлять данные в базу данных, убедитесь, что они соответствуют ожидаемому формату и содержанию. Для этого не забывайте про валидацию данных и очистку от нежелательных символов.

• Используйте подготовленные выражения. Они позволяют предварительно скомпилировать запросы SQL, разделяя данные от кода запроса.

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

Соблюдение этих простых мер позволит сделать вашу базу данных более защищенной от SQL инъекций.
👍15🤔4
​​Что такое REST

REST - это способ организации взаимодействия между компьютерами через интернет. Он использует стандартные протоколы, такие как HTTP, чтобы позволить компьютерам обмениваться данными.

В основе REST лежат несколько основных принципов:

Клиент-серверная архитектура — Концепция заключается в разделении некоторых зон ответственности: в разделении функций клиента и сервера.

Stateless — Принцип заключается в том, что сервер не должен хранить у себя информацию о сессии с клиентом. Он должен в каждом запросе получать всю информацию для обработки.

Кэширование — Каждый ответ сервера должен иметь пометку, можно ли его кэшировать.

Единообразие интерфейса — Hypermedia as the Engine of Application State (HATEOAS) - одно из ограничений REST, согласно которому сервер возвращает не только ресурс, но и его связи с другими ресурсами и действия, которые можно с ним совершить.

Layered system (слоистая архитектура) — Концепция заключается в том, что ни клиент, ни сервер не должны знать о том, как происходит цепочка вызовов дальше своих прямых соседей.

Code on done (код по требованию) — Идея передачи некоторого исполняемого кода (по сути какой-то программы) от сервера клиенту. Например, клиент, запрашивая страницу приветствия, получит в ответ от сервера не просто HTML-код для отображения, а ещё программу, которую он сам и исполнит

REST позволяет создавать гибкие и расширяемые веб-сервисы, которые могут быть использованы в различных приложениях и на разных платформах.
👍142
​​Зачем тестируют бэкенд

Тестирование бэкенда в большинстве случаев сводится к тестированию баз данных. Общее предназначение бекенд-тестирования с архитектурной точки зрения состоит в проверке бизнес-слоя или уровня, и слоя баз данных (см. картинку).

То есть это поиск дефектов в базах данных и на сервере.

QA-команда, которой поручили провести тестирование бэкенда на проекте, должна обладать довольно-таки крепкими знаниями SQL (здесь кое-что полезное), и, разумеется, общих принципов устройства и функционирования сервера.

Важность тестирования бэкенда состоит в том, что если в работе сервера и/или БД случатся ошибки, то приложение становится непригодным к использованию, иногда полностью; как минимум потеря данных, зависания, и подобные проблемы, они, как правило, более фундаментальны, чем на фронтенде.
🔥4👍2
​​Да кто такой этот ваш Kubernetes

Kubernetes - это инструмент для управления приложениями в контейнерах. Он позволяет автоматизировать развертывание, масштабирование и управление приложениями, работающими в контейнерах.

В основе Kubernetes лежит идея о том, что вы можете запускать множество контейнеров и автоматически управлять ими, чтобы приложения работали надежно и эффективно.

Kubernetes позволяет легко масштабировать ваше приложение, управлять обновлениями, а также обеспечивает высокую доступность и надежность.
👍10👾51
​​Располагайте команды в файлах Dockerfile в надлежащем порядке

Обращайте особое внимание на порядок расположения команд в файлах Dockerfile для того чтобы пользоваться возможностями Docker по кешированию слоёв.

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

Обратите внимание на следующее:

• Составляя файлы Dockerfile, всегда старайтесь размещать слои, которые, вероятнее всего, будут меняться как можно ближе к концу файла.

• Комбинируйте команды RUN apt-get update и RUN apt-get install. (Это, кроме того, положительно сказывается на размерах файлов.)

• Если вам нужно отключить кеширование для конкретной Docker-сборки — воспользуйтесь опцией --no-cache=True.
🔥7
Строитель

Приведем аналогию: Допустим, вы пришли в забегаловку, заказали бургер дня, и вам выдали его без вопросов. Это пример «Простой фабрики». Но иногда логика создания состоит из большего количества шагов. К примеру, при заказе бургера дня есть несколько вариантов хлеба, начинки, соусов, дополнительных ингредиентов. В таких ситуациях помогает шаблон «Строитель».

Шаблон позволяет создавать разные свойства объекта, избегая загрязнения конструктора (constructor pollution). Это полезно, когда у объекта может быть несколько свойств. Или когда создание объекта состоит из большого количества этапов.

Шаблон «Строитель» предназначен для поиска решения проблемы антипаттерна Telescoping constructor.
👍3🤔3
Что такое DRY

«Don't Repeat Yourself / Не повторяйся»

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

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

В большинстве случаев дублирование кода происходит из-за незнания системы. Прежде чем что-либо писать, проявите прагматизм: осмотритесь. Возможно, эта функция где-то реализована. Возможно, эта бизнес-логика существует в другом месте. Повторное использование кода – всегда разумное решение.

Такой подход делает код более читаемым, поддерживаемым и менее подверженным ошибкам, так как изменения нужно вносить только в одном месте, а не в нескольких.
​​XSS атаки и как от них защититься

XSS (Cross-Site Scripting — «межсайтовый скриптинг») — подтип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода и взаимодействии этого кода с веб-сервером злоумышленника.

Рассмотрим несколько способов защиты:

• Перед тем как выводить данные на веб-страницу, убедитесь, что все специальные символы, такие как <, >, &, и кавычки, экранированы или заменены на их HTML-коды.

• Использование Content Security Policy (CSP). Это механизм, который позволяет вам установить правила безопасности для загрузки ресурсов на вашей веб-странице. CSP позволяет ограничить источники, с которых браузер может загружать ресурсы, такие как скрипты или стили.

• Проверяйте все данные, поступающие от пользователей, на предмет наличия вредоносного кода. Это позволит избежать внедрения XSS-атак через формы или другие вводные поля.

• Используйте актуальные и безопасные библиотеки и фреймворки, которые активно обновляются и патчатся от известных уязвимостей.

• Установите флаги безопасности для cookies, чтобы они не были доступны из JavaScript, если это необходимо.

Эти меры помогут сделать ваше веб-приложение более защищенным от атак XSS.
6
Что такое ORM

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

Объекты: В программировании мы работаем с объектами, которые представляют собой сущности или элементы данных. Например, объект может быть представлением пользователя или товара.

Реляционные базы данных: Данные часто хранятся в базах данных, которые используют реляционную модель. Такие базы данных хранят данные в виде таблиц с рядами и столбцами.

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

Таким образом, ORM облегчает работу с базами данных, делая код более понятным и поддерживаемым.
9
5 браузерных плагинов для Google Chrome в помощь разработчику

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

Githunt — Небольшой, но крайне полезный аддон Chrome поможет всем, кто ищет новые полезные штуки для работы на GitHub. Выводит на передний план ленту трендовых GitHub-проектов с кратким описанием каждого.

HTML-Validator — Надстройка для выявления ошибок в HTML-коде, помогающая сверстать страницу в два раза быстрее.

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

Talend API Tester — Упрощает вызов, обнаружение и тестирование HTTP и REST API.

Если ли вы знаете другие хорошие плагины, которыми давно пользуетесь, не стесняйтесь добавить их в комментариях👇
🔥7🎉2👍1
Прототип

Приведем аналогию: Помните клонированную овечку Долли? (Долли (5 июля 1996 — 14 февраля 2003) — первое клонированное млекопитающее животное, которое было получено путём пересадки ядра соматической клетки в цитоплазму яйцеклетки.) Так вот, этот шаблон проектирования как раз посвящён клонированию.

Объект создаётся посредством клонирования существующего объекта.

Шаблон «Прототип» используется, когда типы создаваемых объектов определяются экземпляром-прототипом, клонированным для создания новых объектов. То есть шаблон позволяет дублировать существующий объект и модифицировать копию в соответствии с потребностями. Без заморочек с созданием объекта с нуля и его настройкой.
👍8🔥1
​​Что такое BDUF

«Big Design Up Front / Глобальное проектирование прежде всего»

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

Зачастую продумывание решений избавляло нас от проблем при разработке… Внесение изменений в спецификации занимало час или два. Если бы мы вносили эти изменения в код, на это уходили бы недели. Я даже не могу выразить, насколько сильно я верю в важность проектирования перед реализацией, хотя адепты экстремального программирования предали эту практику анафеме. Я экономил время и делал свои продукты лучше, используя BDUF, и я горжусь этим фактом, чтобы там ни говорили фанатики экстремального программирования. Они просто ошибаются, иначе сказать не могу.

— Джоел Спольски


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

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

Очень распространенный контраргумент заключается в том, что стоимость решения проблем зачастую ниже стоимости времени планирования. Чем с меньшим количеством ошибок столкнется пользователь, тем лучше будет его опыт. У вас может не быть другого шанса справиться с этими ошибками.
🔥143👍2
​​Защита от CSRF-атак

CSRF (Cross-Site Request Forgery) - это атака, когда злоумышленник заставляет пользователя выполнить нежелательное действие на веб-сайте, на котором пользователь авторизован.

Вот несколько способов защиты от CSRF:

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

Используйте атрибут SameSite для cookies, чтобы ограничить их доступ только к запросам, исходящим с того же сайта. Это помогает предотвратить использование cookies в CSRF атаках.

Проверяйте Referer заголовок запроса, чтобы убедиться, что запрос отправлен с вашего собственного сайта, а не с другого домена. Этот метод не всегда надежен, так как некоторые браузеры могут не отправлять этот заголовок.

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

Эти меры помогут уменьшить риск CSRF атак и сделают ваше веб-приложение более защищенным.
Какая функция в PHP используется для установки соединения с базой данных MySQL?
Anonymous Quiz
9%
mysql_query()
61%
mysqli_connect()
30%
connect_mysql()