В операционных системах на базе Unix и Linux для поиска запущенных процессов используются различные команды.
Команда
ps отображает список текущих процессов. Часто используемые опции:ps aux: Показывает все процессы в системе.ps -ef: Альтернативный формат вывода всех процессов.ps aux | grep <имя_процесса>
Команда
top показывает список процессов в реальном времени, обновляя его каждые несколько секунд. Это удобно для мониторинга системы и поиска процессов с высокой загрузкой CPU или памяти.top
Команда
htop — это улучшенная версия top, предоставляющая более удобный интерфейс для мониторинга процессов. Она должна быть установлена отдельно.sudo apt-get install htop
htop
Команда
pgrep используется для поиска процессов по имени. Она возвращает идентификаторы (PID) процессов, соответствующих критериям поиска.Пример использования:
pgrep <имя_процесса>
Команда
pidof возвращает идентификаторы (PID) процессов с указанным именем.pidof <имя_процесса>
Для более точного поиска можно использовать команду
ps с фильтрацией через grep.ps aux | grep <имя_процесса> | grep -v grep
Команда
lsof отображает список открытых файлов и может использоваться для поиска процессов, открывающих определенные файлы.sudo lsof -i :<номер_порта>
Допустим, вам нужно найти процесс с именем
nginx. Вот несколько способов сделать этоИспользование
psps aux | grep nginx | grep -v grep
Использование
pgreppgrep nginx
Использование
pidofpidof nginx
Запустите
top или htop и найдите процесс nginx в интерактивном режиме.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Groovy — это динамический язык программирования для JVM, с лаконичным синтаксисом, совместимым с Java. Он часто используется в:
- Jenkins pipelines (Jenkinsfile пишется на Groovy).
- Сценариях автоматизации.
- В проектах, где нужно расширить Java-библиотеки.
Groovy позволяет писать более выразительный и компактный код по сравнению с Java, сохраняя совместимость с Java API.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Да, в Kubernetes Pod можно запускать несколько контейнеров, и это обычная практика. Pod — это минимальная единица развертывания в Kubernetes которая может содержать один или несколько контейнеров.
вспомогательные контейнеры, дополняющие основное приложение (логирование, прокси, безопасность).
выполняют задачи перед запуском основного контейнера (например, подготовка базы данных).
контейнеры могут использовать общие тома (
volumes) для хранения данных. контейнеры в одном Pod разделяют IP-адрес и порты.
Допустим, у нас есть Nginx и отдельный контейнер, который собирает его логи.
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: log-volume
mountPath: /var/log/nginx
- name: log-collector
image: busybox
command: ["sh", "-c", "tail -f /var/log/nginx/access.log"]
volumeMounts:
- name: log-volume
mountPath: /var/log/nginx
volumes:
- name: log-volume
emptyDir: {}
Все контейнеры внутри Pod имеют один IP-адрес и могут взаимодействовать через
localhost. Например, если в одном контейнере работает
Node.js на порту 3000, другой контейнер внутри Pod может обращаться к нему через localhost:3000. Контейнеры могут делиться файлами через
volumes, как в примере выше. Если нужно выполнить команду перед запуском основного контейнера, используют
initContainers. yaml
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
initContainers:
- name: wait-for-db
image: busybox
command: ["sh", "-c", "until nc -z db-service 5432; do sleep 1; done"]
containers:
- name: app
image: my-app
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
<keep-alive> используется для кеширования компонентов, чтобы они не уничтожались при удалении из DOM, а сохраняли своё состояние. Полезно:
- При переключении между вкладками или страницами.
- Когда нужно сохранить форму, прокрутку, данные и т.п.
Работает только с динамическими компонентами (<component :is="...">).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Она идёт в комплекте с Python и включает всё необходимое: работу с файлами, сетью, регулярными выражениями, математикой и т. д.
работа с файловой системой
доступ к системным параметрам
регулярные выражения
математика
работа с датами
парсинг JSON
логирование
асинхронность
встроенный HTTP-сервер
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊4👍1
- Unit-тесты — проверка логики каждого компонента.
- Интеграционные — проверка взаимодействия между модулями.
- E2E/UI — через браузеры или симуляцию пользовательских действий.
- Security — статический анализ, сканирование уязвимостей.
- Performance — нагрузочные/стресс тесты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊1
Amazon CloudFront — это CDN (Content Delivery Network), которая помогает оптимизировать затраты на трафик и нагрузку на серверы. Использование CloudFront позволяет экономить бюджет на AWS-сервисах следующими способами:
CloudFront кэширует статический и динамический контент, что снижает количество запросов к вашим основным серверам (например, EC2, S3, API Gateway, Lambda).
Меньше запросов к S3 (меньше операций
GET, а они платные). Меньше запросов к API Gateway и Lambda (так как CloudFront может кешировать ответы API).
Экономия на EC2 и RDS, так как нагрузка перераспределяется.
Когда CloudFront забирает файлы из S3 в том же регионе, за исходящий трафик из S3 не взимается плата. Исходящий трафик из S3 в интернет стоит ≈ $0.09 за ГБ. Исходящий трафик из CloudFront в интернет дешевле (например, первые 1 ТБ в месяц — бесплатно).
Если у вас клиенты в разных странах, CloudFront дешевле, чем стандартный AWS-трафик. Исходящий трафик из CloudFront в интернет в среднем на 30-50% дешевле, чем прямой выход из EC2 или S3. AWS часто снижает цены на CloudFront трафик в рамках программ оптимизации.
CloudFront позволяет использовать AWS WAF (Web Application Firewall) для блокировки вредоносных запросов. Меньше запросов к бэкенду (EC2, API Gateway, Lambda). Защита от DDoS (AWS Shield Standard бесплатен для CloudFront).
CloudFront поддерживает TTL (Time-to-Live) для кэширования даже динамических API-ответов. Вместо запроса к API Gateway/Lambda, CloudFront может вернуть кэшированный ответ. Можно настроить "Stale While Revalidate" — клиент получает устаревший контент, пока идет обновление.
CloudFront позволяет управлять ценами, ограничивая определенные регионы. Можно исключить дорогие регионы (например, Южную Америку, где трафик дороже). Можно использовать AWS Origin Shield для дополнительного кеширования между регионами.
CloudFront поддерживает CloudFront Functions, которые выполняются прямо на edge-узлах и дешевле, чем Lambda@Edge. CloudFront Functions работают быстрее и стоят $0.10 за миллион запросов. Lambda@Edge стоит $0.60 за миллион запросов + плата за выполнение.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это процесс создания автоматизированных последовательностей команд, обычно для выполнения рутинных операций, настройки, тестирования или развёртывания. Часто используются bash, python, PowerShell.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊8👍2
Донастройка контейнера может понадобиться, если:
Нужно изменить файлы конфигурации.
Установить дополнительные пакеты.
Задать переменные среды.
Подключить тома или сети.
Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD.
Если контейнер нужно модифицировать перед запуском, создаем свой
Dockerfile на основе существующего образа. FROM nginx:latest
COPY my-nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
Собираем новый образ
docker build -t my-nginx .
docker run -d -p 80:80 my-nginx
Можно задать окружение, тома, команды.
version: '3'
services:
db:
image: postgres:15
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- ./custom-postgres.conf:/etc/postgresql/postgresql.conf
command: postgres -c config_file=/etc/postgresql/postgresql.conf
Запуск
docker-compose up -d
Если контейнер уже работает, можно внести изменения прямо в него.
docker exec -it my-container bash
apt update && apt install -y vim
Если нужно изменять файлы без пересборки образа, подключаем тома.
docker run -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx
Можно задать скрипт донастройки, который выполнится при старте контейнера.
FROM postgres:15
COPY setup.sh /docker-entrypoint-initdb.d/setup.sh
RUN chmod +x /docker-entrypoint-initdb.d/setup.sh
В
setup.sh: #!/bin/bash
psql -U postgres -d mydb -c "CREATE TABLE test (id SERIAL PRIMARY KEY);"
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Deployment предоставляет более высокий уровень абстракции и автоматизирует обновления, масштабирование, откаты и ведение истории. ReplicaSet только поддерживает нужное количество подов, но не управляет версионированием и обновлениями. С использованием Deployment всё это делается проще и безопаснее.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
Это понятия из Kubernetes, которые используются для управления хранилищем данных (storage). Они решают задачу обеспечения долгоживущего хранилища для приложений, которое сохраняется независимо от жизненного цикла подов (Pods).
Это объект Kubernetes, который представляет физическое хранилище, доступное в кластере. Это может быть локальное хранилище, сетевой диск (например, NFS), или облачный сервис хранения (например, Amazon EBS, Google Persistent Disk, Azure Disk).
PV создается администратором или автоматически через StorageClass. Это ресурс хранилища, выделенный для использования в кластере. Независим от подов, что позволяет хранить данные, даже если под был удален или перезапущен.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
Это запрос на использование хранилища (PV) со стороны пользователя или приложения. Это как "заявка" на нужное количество места и определенный тип хранилища.
PVC создается разработчиком или приложением. PVC связывается с подходящим PV, который соответствует запросу. Если подходящий PV найден, он "привязывается" к PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Администратор или динамическое создание выделяет хранилище (например, сетевой диск).
Приложение запрашивает хранилище с помощью PVC.
Kubernetes автоматически находит подходящий PV, который соответствует запросу PVC (по размерам, режимам доступа и другим параметрам). После этого PVC "связывается" с PV.
PVC указывается в поде как volume, что позволяет контейнерам работать с данным хранилищем.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Селектор (label selector) используется для выбора ресурсов по меткам. Например, Deployment использует селектор, чтобы знать, какие Pods ему управлять.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Для отображения всех работающих процессов в Linux можно использовать несколько команд. Самые популярные из них:
ps, top, htop и pgrep. Каждая из них имеет свои особенности.ps выводит снимок (snapshot) текущих процессов в момент выполнения команды.Показывает все процессы, запущенные в системе, включая пользователей и системные демоны.
ps aux
Альтернативный стиль вывода всех процессов с более детальной информацией.
ps -ef
top — интерактивная утилита для отображения всех запущенных процессов в реальном времени. Вывод обновляется автоматически.Запуск
top
htop — более современная и удобная версия top. Требуется предварительная установка:sudo apt install htop # Для Ubuntu/Debian
sudo yum install htop # Для CentOS/RHEL
Запуск
htop
pgrep используется для поиска процессов по имени, но с дополнительными опциями можно вывести все процессы.Пример
pgrep -a ""
Если вы хотите посмотреть системные службы
systemctl list-units --type=service
ps aux. top или htop. pgrep <имя процесса>.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
REST-методы применяются при работе с веб-API. Выбор метода зависит от задачи:
- GET — при запросе информации;
- POST — при создании данных (регистрация, форма);
- PUT — при обновлении ресурса полностью;
- PATCH — для изменения конкретных полей;
- DELETE — при удалении данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.
Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
docker pull nginx:latest
Пример списка образов
docker images
Пример создания образа через
DockerfileFROM ubuntu:latest
RUN apt update && apt install -y nginx
CMD ["nginx", "-g", "daemon off;"]
docker build -t my-nginx .
Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
docker run -d --name web -p 80:80 nginx
Пример списка контейнеров
docker ps
Пример остановки контейнера
docker stop web
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
С помощью команды:
helm rollback <release-name> <revision-number>
Можно также узнать список доступных ревизий через:
helm history <release-name>
Это позволяет быстро вернуться к рабочей версии, если обновление прошло неудачно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
cherry-pick позволяет аккуратно перенести только нужные коммиты.Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
git add <filename>
cherry-pick git cherry-pick --continue
Если вы хотите прервать процесс
cherry-pick, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Мидл (middle engineer) — это разработчик, который уже не нуждается в постоянном менторстве, но ещё не руководит другими. Он уверенно решает задачи, понимает архитектуру и знает best practices.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊23🤔1
В реляционных базах данных, операции объединения (JOIN) позволяют объединить строки из двух или более таблиц на основе связанных между собой столбцов. Существует несколько типов JOIN, каждый из которых имеет свои особенности и применим для разных ситуаций. Рассмотрим основные типы JOIN:
Объединяет строки из обеих таблиц, если они удовлетворяют условию объединения. Когда необходимо выбрать только те строки, которые имеют соответствующие значения в обеих таблицах.
SELECT *
FROM таблица1
INNER JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если соответствующей строки в правой таблице нет, в результирующем наборе данных для столбцов правой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы и соответствующие данные из другой таблицы, если они существуют.
SELECT *
FROM таблица1
LEFT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если соответствующей строки в левой таблице нет, в результирующем наборе данных для столбцов левой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы (правой) и соответствующие данные из другой таблицы (левой), если они существуют.
SELECT *
FROM таблица1
RIGHT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
Возвращает все строки, когда есть совпадения либо в левой, либо в правой таблице. Если строки не соответствуют в одной из таблиц, для этой таблицы будут значения NULL. Когда необходимо выбрать все строки из обеих таблиц, независимо от того, есть ли соответствующие строки в другой таблице.
SELECT *
FROM таблица1
FULL JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
Возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц. Когда необходимо создать комбинации всех строк из обеих таблиц. Используется редко и с осторожностью, так как может привести к очень большому количеству строк.
SELECT *
FROM таблица1
CROSS JOIN таблица2;
Применяется для объединения таблицы самой с собой. Обычно используется для сравнения строк внутри одной и той же таблицы. Когда необходимо сопоставить строки одной таблицы друг с другом, например, для анализа иерархий или поиска парных записей.
SELECT A.*
FROM таблица A, таблица B
WHERE A.ключ = B.ключ;
Автоматически объединяет таблицы по всем столбцам с одинаковыми именами и типами данных. Когда у таблиц есть столбцы с одинаковыми именами, и нужно объединить их без явного указания условий объединения.
SELECT *
FROM таблица1
NATURAL JOIN таблица2;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Файловая система выбирается по ряду параметров:
- Тип нагрузки – большие файлы (XFS, ZFS) или много мелких файлов (EXT4, Btrfs).
- Журналирование – влияет на отказоустойчивость (XFS, EXT4).
- Снапшоты – нужны ли сохранения состояний файлов (Btrfs, ZFS).
- Шифрование – встроенная защита данных (ZFS, LUKS).
- Резервирование пространства – например, XFS и ZFS резервируют место.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1