SSH (Secure Shell) — это сетевой протокол, который используется для безопасного доступа к удаленным компьютерам и управления ими. Он обеспечивает шифрование данных, аутентификацию и целостность передаваемой информации, что делает его предпочтительным средством для удаленного администрирования и передачи файлов.
SSH использует криптографические методы для шифрования данных, что защищает передаваемую информацию от перехвата и анализа.
Протокол поддерживает различные методы аутентификации, включая использование паролей и публичных/приватных ключей.
Парольная аутентификация: Пользователь вводит свой логин и пароль для доступа к удаленной системе.
Аутентификация с помощью ключей: Вместо пароля используется пара ключей (публичный и приватный). Публичный ключ размещается на удаленном сервере, а приватный ключ остается на клиентской машине.
Шифрует все передаваемые данные, включая пароли, команды и файлы, что предотвращает их перехват и несанкционированный доступ.
Обеспечивает контроль целостности передаваемых данных, используя алгоритмы хеширования, которые обнаруживают любые изменения данных в процессе передачи.
Позволяет создавать зашифрованные туннели для передачи данных других протоколов (например, HTTP, FTP), обеспечивая их безопасность.
Установленное на локальном компьютере, которое используется для установления соединения с удаленным сервером.
Работающее на удаленной машине, которое принимает и обрабатывает соединения от SSH-клиентов.
Для подключения к удаленному серверу используется команда
ssh в терминале.ssh username@remote_host
Для копирования файлов с локального компьютера на удаленный сервер или наоборот используется команда
scp.scp localfile.txt username@remote_host:/remote/directory/
Копирование файлов с удаленного сервера на локальный компьютер
scp username@remote_host:/remote/file.txt /local/directory/
Генерация пары ключей (публичного и приватного)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Копирование публичного ключа на удаленный сервер
ssh-copy-id username@remote_host
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это распределенная система контроля версий, работающая на основе графа коммитов и хранения изменений через хеши (SHA-1).
1. Объектная модель:
- Commit – снимок состояния проекта.
- Tree – каталог файлов в коммите.
- Blob – сами файлы (содержимое).
2. Система ссылок (HEAD, branches, tags).
3. Механизм staging (индексация изменений) перед коммитом.
4. Быстрая работа за счет хранения только изменений (deltas) и поддержки локального репозитория.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В контексте веб-разработки и работы с API, "виды запросов" обычно относятся к HTTP-методам. HTTP-методы — это стандартизированные типы запросов, которые определяют действие, требуемое от веб-сервера. Каждый метод указывает на определённый тип операции над ресурсами. Вот основные методы (виды запросов), используемые в веб-разработке:
Назначение: Запрос содержимого указанного ресурса. GET-запросы должны быть идемпотентными, что означает, что их многократное выполнение приводит к одному и тому же результату и не изменяет состояние сервера.
Пример использования: Запрос веб-страницы или изображения.
Назначение: Отправка данных на сервер для создания нового ресурса. Данные отправляются в теле запроса. POST-запросы не идемпотентны, то есть многократное выполнение может приводить к разным результатам.
Пример использования: Отправка формы на веб-сайте.
Назначение: Обновление существующего ресурса или создание нового ресурса по указанному URI. В отличие от POST, PUT идемпотентен.
Пример использования: Обновление деталей пользователя.
Назначение: Удаление указанного ресурса.
Пример использования: Удаление записи из базы данных.
Назначение: Частичное обновление существующего ресурса. PATCH может быть не идемпотентным, в зависимости от того, как он реализован на сервере.
Пример использования: Обновление части данных пользователя, например, смена пароля.
Назначение: Аналогичен GET, но сервер возвращает только заголовки ответа без тела. Используется для извлечения метаданных.
Пример использования: Проверка существования ресурса или его последнего обновления.
Назначение: Определение возможностей веб-сервера или параметров подключения для конкретного ресурса.
Пример использования: Определение поддерживаемых методов HTTP для URL.
Назначение: Эхо-запрос. Возвращает в теле ответа полученный запрос. Это может использоваться для диагностики. Из-за соображений безопасности его поддержка на серверах часто отключена.
Пример использования: Отладка веб-запросов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это интеграционная архитектура, которая связывает разные сервисы и системы, обеспечивая обмен данными между ними.
Ключевые аспекты:
- Централизованное управление обменом сообщениями.
- Упрощение интеграции систем с разными форматами данных.
- Гибкость – можно легко добавлять и удалять сервисы.
- Масштабируемость – упрощает распределение нагрузки между сервисами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
CQRS (Command Query Responsibility Segregation) – это архитектурный паттерн, который разделяет операции чтения (Query) и записи (Command) в приложении. Вместо одной модели данных используется две:
Модель для чтения – оптимизирована для запросов.
Модель для записи – отвечает за изменение данных.
запросы можно кэшировать, а запись может происходить в другой базе.
можно использовать разные структуры данных для чтения и записи.
можно масштабировать чтение и запись отдельно.
можно ограничить доступ к записи.
В классическом приложении чтение и запись используют одну модель данных
class User {
public $id;
public $name;
public $email;
public function updateEmail($newEmail) {
$this->email = $newEmail;
}
}Команда (Command) – запись
class UpdateUserEmailCommand {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}
class UserCommandHandler {
public function handle(UpdateUserEmailCommand $command) {
// Логика обновления в БД
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute([
':email' => $command->newEmail,
':id' => $command->userId
]);
}
}Запрос (Query) – чтение
class UserQueryHandler {
public function getUserById($userId) {
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT id, name, email FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}Часто CQRS используется вместе с Event Sourcing – вместо изменения данных мы создаем события.
class UserEmailUpdatedEvent {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
1. Динамическая типизация: PHP автоматически определяет тип переменной на основе её значения.
2. Явная типизация: начиная с PHP 7, можно указывать типы аргументов и возвращаемых значений функций (int, string, array и т.д.).
3. Слабая типизация: PHP преобразует типы данных автоматически при необходимости.
4. Строгая типизация: включает строгую проверку типов через директиву declare.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
REST расшифровывается как REpresentational State Transfer (Представленческая передача состояния). Это архитектурный стиль для создания сетевых приложений, который определяет набор ограничений и принципов для проектирования и взаимодействия с веб-службами.
Клиент и сервер разделены. Клиенты запрашивают ресурсы, а серверы предоставляют их. Это разделение позволяет независимое развитие клиента и сервера.
Каждое взаимодействие между клиентом и сервером не зависит от предыдущих взаимодействий. Вся необходимая информация для выполнения запроса должна быть включена в сам запрос.
Ответы могут быть кешируемыми. Это улучшает производительность, снижая необходимость повторных обращений к серверу для получения одних и тех же данных.
Определяет единообразный способ взаимодействия с ресурсами, независимо от конкретного клиента или сервера. Включает четыре подпринципа:
Идентификация ресурсов: Каждый ресурс имеет уникальный идентификатор (обычно URL).
Манипуляция ресурсами через представления: Клиенты взаимодействуют с ресурсами, используя их представления (например, JSON, XML).
Самоописываемые сообщения: Сообщения содержат всю необходимую информацию для обработки запроса или ответа.
Гипермедиа как движок приложения (HATEOAS): Клиенты получают информацию о доступных действиях через гиперссылки в ответах сервера.
Архитектура может быть многослойной, где каждый слой имеет свои обязанности и скрывает сложность соседних слоев.
Сервер может передавать исполняемый код клиенту для выполнения. Например, JavaScript для выполнения на стороне клиента.
GET: Получить ресурс.
POST: Создать новый ресурс.
PUT: Обновить существующий ресурс.
DELETE: Удалить ресурс.
GET /users
Ответ
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
GET /users/1
Ответ
{"id": 1, "name": "Alice"}
3️⃣Создать нового пользователя
POST /users
Тело запроса
{"name": "Charlie"}Ответ
{"id": 3, "name": "Charlie"}PUT /users/1
Тело запроса
{"name": "Alice Smith"}DELETE /users/1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это количественные показатели, используемые для оценки, мониторинга и улучшения различных аспектов работы систем, процессов и проектов. Они предоставляют объективные данные, которые помогают принимать обоснованные решения и улучшать эффективность и качество работы.
Метрики позволяют оценивать, насколько эффективно работают системы или процессы. Например, метрики производительности могут показать, сколько запросов обрабатывается сервером в секунду или как быстро выполняются алгоритмы.
Постоянный мониторинг метрик помогает выявлять проблемы на ранних стадиях. Например, мониторинг времени отклика сервера позволяет обнаружить ухудшение производительности до того, как это повлияет на пользователей.
Объективные данные, предоставляемые метриками, помогают принимать обоснованные решения по улучшению процессов, распределению ресурсов и планированию. Например, данные о загрузке серверов могут помочь определить, когда нужно добавить новые ресурсы.
Метрики качества позволяют оценивать, насколько хорошо продукт или процесс соответствует установленным стандартам и требованиям. Например, метрики кода, такие как количество ошибок или покрытие тестами, помогают улучшать качество программного обеспечения.
В проектном управлении метрики помогают следить за прогрессом, оценивать риски и управлять ресурсами. Например, метрики времени и затрат помогают следить за выполнением проекта в рамках бюджета и сроков.
Время отклика (Response Time): Время, за которое система обрабатывает запрос.
Пропускная способность (Throughput): Количество запросов, обработанных системой за единицу времени.
Время простоя (Downtime): Время, в течение которого система недоступна.
Покрытие тестами (Test Coverage): Процент кода, покрытого автоматизированными тестами.
Количество ошибок (Bug Count): Количество ошибок, обнаруженных в программном обеспечении.
Плотность дефектов (Defect Density): Количество ошибок на единицу кода (например, на 1000 строк кода).
Завершение задач (Task Completion): Процент выполненных задач от общего количества задач в проекте.
Отклонение от плана (Schedule Variance): Разница между планируемым и фактическим временем выполнения задач.
Затраты (Cost): Фактические затраты по сравнению с запланированными затратами.
CI/CD: Метрики сборок и развертываний помогают отслеживать стабильность и скорость релизов.
Анализ кода: Метрики сложности кода, дублирования и покрытия тестами помогают улучшать качество и поддерживаемость кода.
KPI (Key Performance Indicators): Ключевые показатели эффективности помогают оценивать успехи бизнеса или отдельных процессов.
OKR (Objectives and Key Results): Цели и ключевые результаты помогают ставить и достигать стратегические цели.
Мониторинг серверов: Метрики использования CPU, памяти, дискового пространства помогают поддерживать высокую производительность и доступность серверов.
Безопасность: Метрики инцидентов безопасности, обнаружения уязвимостей и реагирования на угрозы помогают обеспечивать защиту данных и систем.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2. Объект — это экземпляр класса, созданный с использованием его структуры.
3. Класс определяет, что объект может делать, а объект выполняет это поведение.
4. Класс — это абстракция, объект — конкретное воплощение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ссылочная целостность (Referential Integrity) – это правило, которое гарантирует, что связи между таблицами остаются корректными.
Допустим, у нас есть 2 таблицы:
users (Пользователи) orders (Заказы) Связь: каждый заказ (
orders) должен ссылаться на существующего пользователя (users) через user_id. CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
Запрещает вставку "несуществующих" ссылок
INSERT INTO orders (id, user_id, amount) VALUES (1, 999, 100.00);
-- ❌ Ошибка! Пользователя с id = 999 нет в users
Запрещает удаление родительской записи, если есть зависимые
DELETE FROM users WHERE id = 1;
-- ❌ Ошибка! Есть заказы, которые ссылаются на пользователя id = 1
Автоматическое удаление связанных данных (
ON DELETE CASCADE) DELETE FROM users WHERE id = 1;
-- ✅ Все заказы с user_id = 1 тоже удалятся
ON DELETE CASCADE → при удалении пользователя удаляются все его заказы. ON DELETE SET NULL → при удалении пользователя поле user_id в заказах становится NULL. ON DELETE RESTRICT → запрещает удалять пользователя, если у него есть заказы. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Пространства имен используются для группировки функций, классов и переменных, чтобы избежать конфликтов имен в больших проектах. Это позволяет нескольким разработчикам работать над проектом, не беспокоясь о пересечении имен.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста (HTTP), которые имеют ряд ключевых отличий. Каждая версия протокола внесла значительные улучшения в эффективность, производительность и возможности веб-коммуникации.
По умолчанию соединения остаются открытыми после завершения запроса, что позволяет отправлять несколько запросов по одному соединению и уменьшает нагрузку на сеть и серверы.
Введены более сложные механизмы кэширования с использованием заголовков
ETag, If-Modified-Since, что улучшает управление кэшем и эффективность передачи данных.Добавлены новые коды состояния для более точного представления различных сценариев веб-взаимодействия.
Поддержка передачи данных в частях (chunks), что позволяет динамически генерировать содержимое и отправлять его по мере готовности.
Поддержка заголовка
Host, позволяющего размещать несколько доменов на одном IP-адресе.В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный формат, который упрощает и ускоряет его разбор.
Одно соединение теперь может одновременно передавать несколько потоков данных, что устраняет проблему "заголовочного блока" и значительно повышает производительность.
HTTP/2 позволяет приоритизировать запросы, что улучшает загрузку ресурсов на странице.
В HTTP/2 используется сжатие заголовков HPACK для уменьшения накладных расходов, связанных с метаданными HTTP.
Серверы могут активно отправлять ресурсы клиенту до того, как клиент явно запросит их, что улучшает время загрузки страниц.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Слово global позволяет получить доступ к переменной, определённой за пределами текущей функции. Используется, чтобы модифицировать глобальные переменные внутри функций.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Если говорить о разделении модулей на более высоком уровне, чем классы, то мы ориентируемся на архитектурные принципы. Основной подход — разделение ответственности (Separation of Concerns, SoC).
- Каждый модуль решает только одну задачу.
- Например, отдельно: модуль аутентификации, модуль работы с БД, модуль обработки заказов.
- Разделение приложения на модель (логика данных), представление (интерфейс), контроллер (управление логикой).
- Например, в Laravel:
-
Models/ — работа с данными -
Views/ — шаблоны -
Controllers/ — обработка запросов - Модули делятся на уровни, где:
- Центральная часть — доменная логика (независимая от фреймворка).
- Внешние слои — адаптеры, API, базы данных.
- Код становится гибким и легко тестируемым.
- Разделение по бизнес-контексту (Bounded Contexts).
- Например, в интернет-магазине:
- Модуль заказов (Orders)
- Модуль оплаты (Payments)
- Модуль пользователей (Users)
- Разделение системы на отдельные сервисы, которые общаются через API.
- Например:
-
auth-service (регистрация, вход) -
order-service (работа с заказами) -
payment-service (оплата) - Удобно при высокой нагрузке и масштабировании.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Масштабирование (scaling) — это процесс увеличения мощности системы, чтобы она справлялась с увеличенной нагрузкой. В программировании и серверной архитектуре есть два типа масштабирования:
Вертикальное масштабирование (Vertical Scaling, Scale-Up)
Горизонтальное масштабирование (Horizontal Scaling, Scale-Out)
- Улучшение одного сервера: больше оперативной памяти (RAM), мощнее процессор (CPU), быстрее диск (SSD/NVMe).
- Приложение остаётся на одном сервере, просто он становится мощнее.
- Добавляются новые серверы, работающие параллельно.
- Нагрузка распределяется между несколькими машинами.
- Используются балансировщики нагрузки (Nginx, HAProxy, AWS ELB).
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from Идущий к IT
🔥 Записал видос "Как за 3 минуты настроить Автоотклики на вакансии HeadHunter" больше не придется заниматься этой унылой рутиной
📺 Видео: https://youtu.be/G_FOwEGPwlw
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это принцип построения ПО, который отделяет бизнес-логику от деталей реализации.
Ключевые принципы:
- Разделение слоев – отделение логики от UI и базы данных.
- Независимость от фреймворков – можно менять базу данных или API без переписывания логики.
- Устойчивость к изменениям – легче поддерживать и тестировать код.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1