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
Что надо ввести для проверки состояния локального репозитория после последнего коммита?
Anonymous Quiz
13%
git check
80%
git status
4%
git diff
2%
git commit
😁24👍2
​​Каковы семь уровней в системной модели OSI?

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

Физический уровень
(Physical Layer): Занимается передачей неструктурированных данных через физическую среду. Определяет характеристики физического соединения, включая типы кабелей, радиосвязь и т.д.

Канальный уровень (Data Link Layer): Отвечает за установление, поддержание и завершение надёжного соединения между двумя соседними узлами сети. Также обеспечивает коррекцию ошибок, которые могли возникнуть на физическом уровне.

Сетевой уровень (Network Layer): Управляет устройствами и маршрутами, по которым данные будут передаваться через сеть. Этот уровень отвечает за маршрутизацию пакетов данных между разными сетями.

Транспортный уровень (Transport Layer): Обеспечивает прозрачную передачу данных между узлами сети, контролируя размер, последовательность и целостность пакетов данных. Также отвечает за контроль над потоком данных и их восстановление в случае ошибок.

Сеансовый уровень (Session Layer): Управляет сессиями связи между приложениями на разных узлах сети, обеспечивая установление, управление и завершение сессий.

Представительский уровень (Presentation Layer): Отвечает за представление данных, обеспечивая их преобразование между форматом, понятным приложению, и сетевым форматом. Также может заниматься шифрованием и сжатием данных.

Прикладной уровень (Application Layer): Предоставляет интерфейсы и протоколы для приложений, используемых для обмена данными через сеть. Этот уровень включает в себя различные сетевые службы, такие как передача файлов, электронная почта и базы данных.
👍316
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🔥3
Что такое YAGNI

«You Aren’t Gonna Need It / Вам это не понадобится»

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

Этот принцип применим и при рефакторинге. Если вы занимаетесь рефакторингом метода, класса или файла, не бойтесь удалять лишние методы. Даже если раньше они были полезны – теперь они не нужны.
👍261
Подборка обучающих игр Awesome Learn by Playing

В этом репозитории собраны ссылки на игры и геймифицированные учебные материалы, которые помогут легко и быстро освоить:

• CSS
• JavaScript
• Git
• HTML
• Regex
• Ruby, Python, Scala
• Приемы защиты и взлома

Ссылка на GitHub
🤔104
Почему глобальные переменные это зло, а поля класса нет?

• Глобальные переменные в большинстве случаев нарушают инкапсуляцию. К ним открыт неконтролируемый доступ отовсюду.

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

• Глобальные переменные в большинстве случаев нарушают принцип инверсии зависимостей (или делают возможным его нарушение).

• Глобальные переменные ухудшают масштабируемость проекта.

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

• Глобальные переменные приводят к трудноуловимым ошибкам. Примеры: нежелательное изменение её значения в другом месте/другим потоком, ошибочное использование глобальной переменной для промежуточных вычислений из-за совпадения имен, возвращение функцией неправильного значения при тех же параметрах (оказывается, она зависима от глобальной переменной, а ее кто-то поменял).

• Глобальные переменные создают большие сложности при использовании модульного тестирования.

• Глобальные переменные увеличивают число прямых и косвенных связей в системе, делая её поведение труднопредсказуемым, а её саму - сложной для понимания и развития.
14👍6
Что такое фабричный метод

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

Это способ делегирования логики создания объектов (instantiation logic) дочерним классам.

В классо-ориентированном программировании (class-based programming) фабричным методом называют порождающий шаблон проектирования, использующий генерирующие методы (factory method) для решения проблемы создания объектов без указания для них конкретных классов. Объекты создаются посредством вызова не конструктора, а генерирующего метода, определённого в интерфейсе и реализованного дочерними классами либо реализованного в базовом классе и, опционально, переопределённого (overridden) производными классами (derived classes).
👍6🤔1
Как сделать снимок текущего состояния изменений проекта?
Anonymous Quiz
12%
git add
5%
git init
41%
git stage
42%
git commit
Коллекция качественных бесплатных ИТ-курсов для новичков и профессионалов

freeCodeCamp – некоммерческая благотворительная организация, которая предлагает множество курсов по различным направлениям, включая:

• Адаптивный веб-дизайн (HTML/CSS/JS)
• Алгоритмы и структуры данных (на JavaScript)
• Фронтенд-разработка (Bootstrap, jQuery, Sass, React и т.д.)
• Визуализация данных с D3.js
• Реляционные базы данных
• Бэкенд-разработка (Node.js, Express.js, MongoDB, Mongoose)
• QA и тестирование
• Научные вычисления и анализ данных на Python
• Машинное обучение

Совместно с Microsoft платформа предоставляет бесплатный курс (с выдачей сертификата) по C#.

Ссылка на сайт проекта
Что такое 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