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

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
Backend pinned «Привет, это я, Леха, Идущий к IT 🖐 Вы получили доступ к easyoffer.ru подписавшись на этот канал. Нас здесь уже почти 4000 backender'ов 😮 , надеюсь сайт помогает вам с хантингом офферов Теперь на этом канале будут общебекендерские штуки, типа разбора вопросов…»
Подборка дорожных карт по всем существующим ИТ-специальностям

Developer Roadmap содержит интерактивные дорожные карты, руководства и другие образовательные материалы, которые помогут новичкам разобраться, с чего начать изучение стека и какой объем знаний нужно иметь в запасе, чтобы устроиться на работу.

Ссылка на GitHub
🔥28👍61
Что надо ввести для проверки состояния локального репозитория после последнего коммита?
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