🤔 Как происходит секьюрити тест какой алгоритм под капотом?
Security-тестирование – это процесс проверки системы на уязвимости, угрозы и риски атак. Оно помогает защитить данные и сервисы от хакеров.
🚩Сканеры уязвимостей (Nessus, OpenVAS)
- Загружают базу известных уязвимостей (CVE).
- Проверяют систему на наличие этих уязвимостей.
- Используют сигнатурный анализ (по шаблонам) и эвристический анализ (поведенческий).
🚩SQL-инъекции (SQLmap, Burp Suite)
- Автоматически подставляют вредоносные SQL-запросы (
- Проверяют, есть ли доступ к базе данных.
- Выполняют дамп данных, если нашли уязвимость.
🚩Поиск XSS-уязвимостей (DOM-XSS, Stored-XSS, Reflected-XSS)
- Вставляют вредоносный JavaScript-код в форму ввода.
- Если скрипт исполняется в браузере – уязвимость найдена.
🚩Подбор паролей (Brute Force, Dictionary Attack)
- Пробуют тысячи вариантов паролей (
- Используют
🚩Анализ трафика (MITM, Sniffing, Packet Analysis)
Захватывают пакеты сети (
Ищут передаваемые пароли, сессии, токены.
Ставь 👍 и забирай 📚 Базу знаний
Security-тестирование – это процесс проверки системы на уязвимости, угрозы и риски атак. Оно помогает защитить данные и сервисы от хакеров.
🚩Сканеры уязвимостей (Nessus, OpenVAS)
- Загружают базу известных уязвимостей (CVE).
- Проверяют систему на наличие этих уязвимостей.
- Используют сигнатурный анализ (по шаблонам) и эвристический анализ (поведенческий).
🚩SQL-инъекции (SQLmap, Burp Suite)
- Автоматически подставляют вредоносные SQL-запросы (
' OR 1=1 --). - Проверяют, есть ли доступ к базе данных.
- Выполняют дамп данных, если нашли уязвимость.
SELECT * FROM users WHERE username = 'admin' --' AND password = 'password'
🚩Поиск XSS-уязвимостей (DOM-XSS, Stored-XSS, Reflected-XSS)
- Вставляют вредоносный JavaScript-код в форму ввода.
- Если скрипт исполняется в браузере – уязвимость найдена.
<script>alert('XSS!')</script>🚩Подбор паролей (Brute Force, Dictionary Attack)
- Пробуют тысячи вариантов паролей (
rockyou.txt). - Используют
John the Ripper, Hydra, Hashcat. hydra -l admin -P passwords.txt 192.168.1.1 ssh
🚩Анализ трафика (MITM, Sniffing, Packet Analysis)
Захватывают пакеты сети (
tcpdump, Wireshark). Ищут передаваемые пароли, сессии, токены.
Ставь 👍 и забирай 📚 Базу знаний
🔥2
🤔 Как обеспечить доступ пользователей к приложению в кубах?
Есть несколько способов предоставить доступ:
1. Ingress — маршрутизирует HTTP(S)-трафик к нужному сервису.
2. LoadBalancer — сервис получает внешний IP от облачного провайдера.
3. NodePort — открывает порт на каждом узле, доступ к приложению через nodeIP:nodePort.
4. Port-forwarding — для локального тестирования: kubectl port-forward svc/my-app 8080:80.
Ingress наиболее гибкий и часто используется с Ingress Controller’ом (например, nginx или traefik).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Есть несколько способов предоставить доступ:
1. Ingress — маршрутизирует HTTP(S)-трафик к нужному сервису.
2. LoadBalancer — сервис получает внешний IP от облачного провайдера.
3. NodePort — открывает порт на каждом узле, доступ к приложению через nodeIP:nodePort.
4. Port-forwarding — для локального тестирования: kubectl port-forward svc/my-app 8080:80.
Ingress наиболее гибкий и часто используется с Ingress Controller’ом (например, nginx или traefik).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое лямбда выражение в Phyton?
В Python лямбда-выражение — это анонимная (безымянная) функция, создаваемая с помощью ключевого слова
Синтаксис
🚩Примеры
Простая лямбда-функция
Эквивалентно обычной функции
Лямбда внутри
Лямбда внутри
Ставь 👍 и забирай 📚 Базу знаний
В Python лямбда-выражение — это анонимная (безымянная) функция, создаваемая с помощью ключевого слова
lambda. Синтаксис
lambda аргументы: выражение
🚩Примеры
Простая лямбда-функция
add = lambda x, y: x + y
print(add(3, 5)) # Выведет: 8
Эквивалентно обычной функции
def add(x, y):
return x + y
Лямбда внутри
map()nums = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, nums))
print(squares) # [1, 4, 9, 16]
Лямбда внутри
sorted()words = ["apple", "banana", "kiwi"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words) # ['kiwi', 'apple', 'banana']
Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Что такое squash в Docker?
squash — это процесс объединения всех слоёв Docker-образа в один. Это уменьшает количество слоёв, упрощает образ и может ускорить развертывание. Однако использование squash делает процесс сборки менее гибким из-за потери промежуточных слоёв.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Куда идет деплой из релизных веток?
Касается подходов к управлению релизами в системах контроля версий, таких как Git, и их интеграции с процессами CI/CD. Ответ зависит от структуры разработки и процесса релиза в конкретной команде или компании. Однако, в общем, деплой из релизных веток обычно идет на тестовые, стейджинговые или продакшн-окружения. Давайте разберем этот процесс подробнее.
🚩Что такое релизные ветки?
Это ветки, которые создаются на этапе, когда функционал и исправления, готовые к выпуску, отделяются от основной ветки разработки (например,
Заморозить текущий набор изменений для подготовки к релизу.
Отделить доработки и исправления релиза от активной разработки.
Упростить процесс тестирования и последующего деплоя.
🚩Куда обычно идет деплой из релизных веток?
🟠Тестовое окружение (QA environment)
На тестовое окружение деплой из релизной ветки осуществляется для прохождения проверок качества: Автоматизированное и ручное тестирование.
Проверка производительности, безопасности и других аспектов.
🟠Стейджинговое окружение (Staging)
После успешного прохождения тестов релизную ветку деплоят в стейджинг. Это окружение максимально похоже на продакшн и используется для финального тестирования: Проверка совместимости с продакшн-системами.
Демонстрация функционала заказчикам или заинтересованным сторонам.
🟠Продакшн (Production)
После прохождения всех этапов тестирования изменения из релизной ветки деплоятся в продакшн: Обычно это делается автоматически после финального подтверждения.
В некоторых командах финальный мерж релизной ветки в
🚩Зачем это нужно?
🟠Изоляция релиза
Релизные ветки позволяют избежать включения новых, неподготовленных изменений в текущий релиз.
🟠Гибкость
Если в процессе тестирования или релиза найдены баги, их можно исправить прямо в релизной ветке без влияния на разработку.
🟠Управление рисками
Релизные ветки упрощают управление разными стадиями разработки и релиза.
🚩Пример использования
1⃣Разработчик создает ветку
2⃣Выполняются тесты на QA окружении.
3⃣Исправляются баги в
4⃣После успешного тестирования ветка мержится в
Ставь 👍 и забирай 📚 Базу знаний
Касается подходов к управлению релизами в системах контроля версий, таких как Git, и их интеграции с процессами CI/CD. Ответ зависит от структуры разработки и процесса релиза в конкретной команде или компании. Однако, в общем, деплой из релизных веток обычно идет на тестовые, стейджинговые или продакшн-окружения. Давайте разберем этот процесс подробнее.
🚩Что такое релизные ветки?
Это ветки, которые создаются на этапе, когда функционал и исправления, готовые к выпуску, отделяются от основной ветки разработки (например,
main или develop). Они позволяют:Заморозить текущий набор изменений для подготовки к релизу.
Отделить доработки и исправления релиза от активной разработки.
Упростить процесс тестирования и последующего деплоя.
🚩Куда обычно идет деплой из релизных веток?
🟠Тестовое окружение (QA environment)
На тестовое окружение деплой из релизной ветки осуществляется для прохождения проверок качества: Автоматизированное и ручное тестирование.
Проверка производительности, безопасности и других аспектов.
stages:
- test
deploy:
stage: test
script:
- echo "Deploying release branch to QA"
- ./deploy.sh qa
only:
- release/*
🟠Стейджинговое окружение (Staging)
После успешного прохождения тестов релизную ветку деплоят в стейджинг. Это окружение максимально похоже на продакшн и используется для финального тестирования: Проверка совместимости с продакшн-системами.
Демонстрация функционала заказчикам или заинтересованным сторонам.
stages:
- staging
deploy:
stage: staging
script:
- echo "Deploying release branch to Staging"
- ./deploy.sh staging
only:
- release/*
🟠Продакшн (Production)
После прохождения всех этапов тестирования изменения из релизной ветки деплоятся в продакшн: Обычно это делается автоматически после финального подтверждения.
В некоторых командах финальный мерж релизной ветки в
main инициирует деплой.stages:
- production
deploy:
stage: production
script:
- echo "Deploying release branch to Production"
- ./deploy.sh production
only:
- release/*
🚩Зачем это нужно?
🟠Изоляция релиза
Релизные ветки позволяют избежать включения новых, неподготовленных изменений в текущий релиз.
🟠Гибкость
Если в процессе тестирования или релиза найдены баги, их можно исправить прямо в релизной ветке без влияния на разработку.
🟠Управление рисками
Релизные ветки упрощают управление разными стадиями разработки и релиза.
🚩Пример использования
1⃣Разработчик создает ветку
release/1.0.0 от develop.2⃣Выполняются тесты на QA окружении.
3⃣Исправляются баги в
release/1.0.0, и изменения деплоятся на стейджинг.4⃣После успешного тестирования ветка мержится в
main, и начинается деплой в продакшн.Ставь 👍 и забирай 📚 Базу знаний
🔥2
🤔 Сколько часов живёт один вал Prometheus CI/CD?
Файлы WAL (write-ahead log) в Prometheus обычно хранятся 2 часа по умолчанию, после чего происходит компрессия данных в блоки. Этот параметр можно настроить через флаг запуска --storage.tsdb.min-block-duration.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Файлы WAL (write-ahead log) в Prometheus обычно хранятся 2 часа по умолчанию, после чего происходит компрессия данных в блоки. Этот параметр можно настроить через флаг запуска --storage.tsdb.min-block-duration.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4👍1
🤔 Что означают DNS records?
DNS Records – это записи, которые управляют маршрутизацией домена в интернете. Они определяют, куда направлять запросы, какие IP-адреса использовать и какие сервисы подключены к домену.
🚩Примеры использования
A-запись (IP-адрес домена)
CNAME-запись (псевдоним)
MX-запись (почтовый сервер)
TXT-запись (SPF, верификация)
Ставь 👍 и забирай 📚 Базу знаний
DNS Records – это записи, которые управляют маршрутизацией домена в интернете. Они определяют, куда направлять запросы, какие IP-адреса использовать и какие сервисы подключены к домену.
🚩Примеры использования
A-запись (IP-адрес домена)
example.com. IN A 192.168.1.1
CNAME-запись (псевдоним)
www.example.com. IN CNAME example.com.
MX-запись (почтовый сервер)
example.com. IN MX 10 mail.example.com.
TXT-запись (SPF, верификация)
example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как работает TCP?
TCP (Transmission Control Protocol) — это протокол надёжной передачи данных:
- устанавливает соединение (handshake);
- обеспечивает доставку, повторные отправки при потере;
- работает с потоками данных и контролем перегрузки;
- использует подтверждения (ACK) и номера последовательности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
TCP (Transmission Control Protocol) — это протокол надёжной передачи данных:
- устанавливает соединение (handshake);
- обеспечивает доставку, повторные отправки при потере;
- работает с потоками данных и контролем перегрузки;
- использует подтверждения (ACK) и номера последовательности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие виды метрик в Prometheus знаешь?
В Prometheus есть 4 типа метрик, которые используются для мониторинга и сбора данных.
🚩Counter (Счетчик) – только увеличивается
Используется для подсчета событий, ошибок, запросов
Значение только увеличивается (нельзя уменьшить)
Как вывести количество запросов за последние 5 минут
Пример экспозиции в приложении
🚩Gauge (Измеритель) – может расти и уменьшаться
Используется для измерения текущего состояния (температура, RAM, CPU)
Значение может расти и уменьшаться
Как вывести среднюю загрузку CPU за 5 минут
Пример экспозиции в коде
🚩Histogram (Гистограмма) – распределение значений
Используется для измерения длительности, размера запросов
Делит данные по диапазонам (buckets)
Как вычислить среднее время отклика
Пример в коде
🚩Summary (Сводка) – квантильные метрики
Показывает среднее, медиану, квантильное распределение
Используется для измерения задержек, времени отклика
Пример в коде:
Ставь 👍 и забирай 📚 Базу знаний
В Prometheus есть 4 типа метрик, которые используются для мониторинга и сбора данных.
🚩Counter (Счетчик) – только увеличивается
Используется для подсчета событий, ошибок, запросов
Значение только увеличивается (нельзя уменьшить)
promql
http_requests_total
Как вывести количество запросов за последние 5 минут
promql
rate(http_requests_total[5m])
Пример экспозиции в приложении
go
httpRequests := prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests",
})
🚩Gauge (Измеритель) – может расти и уменьшаться
Используется для измерения текущего состояния (температура, RAM, CPU)
Значение может расти и уменьшаться
promql
node_memory_usage_bytes
Как вывести среднюю загрузку CPU за 5 минут
promql
avg(node_cpu_seconds_total)
Пример экспозиции в коде
go
cpuUsage := prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "cpu_usage_percentage",
Help: "Current CPU usage",
})
🚩Histogram (Гистограмма) – распределение значений
Используется для измерения длительности, размера запросов
Делит данные по диапазонам (buckets)
promql
http_request_duration_seconds_bucket
Как вычислить среднее время отклика
promql
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
Пример в коде
go
requestDuration := prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "Histogram of response time for HTTP requests",
Buckets: prometheus.DefBuckets,
})
🚩Summary (Сводка) – квантильные метрики
Показывает среднее, медиану, квантильное распределение
Используется для измерения задержек, времени отклика
promql
http_request_duration_seconds{quantile="0.99"}
Пример в коде:
go
requestSummary := prometheus.NewSummary(
prometheus.SummaryOpts{
Name: "http_request_duration_seconds",
Help: "Summary of response time for HTTP requests",
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
})
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое OpsWorks?
AWS OpsWorks — это сервис управления конфигурациями, который:
- Поддерживает Chef и Puppet.
- Используется для автоматизации серверной инфраструктуры.
- Позволяет управлять слоями, версиями, скриптами и зависимостями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
AWS OpsWorks — это сервис управления конфигурациями, который:
- Поддерживает Chef и Puppet.
- Используется для автоматизации серверной инфраструктуры.
- Позволяет управлять слоями, версиями, скриптами и зависимостями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как сделать rebase на main branch?
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
🟠Выполняем rebase на `main`
Сначала убедимся, что
Теперь выполняем сам rebase:
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
Продолжите rebase:
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
Ставь 👍 и забирай 📚 Базу знаний
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
main). 🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
feature-branch: git checkout feature-branch
🟠Выполняем rebase на `main`
Сначала убедимся, что
main обновлена: git checkout main
git pull origin main
Теперь выполняем сам rebase:
git checkout feature-branch
git rebase main
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
git add <файл>
Продолжите rebase:
git rebase --continue
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
git push origin feature-branch --force
Ставь 👍 и забирай 📚 Базу знаний
🤔 На каком уровне работает ICMP?
ICMP работает на сетевом уровне (уровень 3 по модели OSI). Он используется для сервисных сообщений, таких как:
- "Хост недоступен"
- "Время вышло"
- "Сетевой недоступен"
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
ICMP работает на сетевом уровне (уровень 3 по модели OSI). Он используется для сервисных сообщений, таких как:
- "Хост недоступен"
- "Время вышло"
- "Сетевой недоступен"
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Что сделать если зависает ssh?
Если SSH завис, не стоит сразу закрывать терминал. Есть несколько причин и решений.
🚩Проверить, можно ли выйти без разрыва сессии
Если SSH завис, но сессия не разорвана, попробуйте выйти без закрытия терминала:
Переключение в режим управления SSH
🚩Проверить соединение с сервером
Если SSH завис, причина может быть в разрыве соединения. Проверьте:
Работает ли пинг до сервера:
🔹 Открыт ли SSH-порт (22):
🚩Перезапустить SSH-клиент
Если только один SSH-клиент завис, попробуйте:
или
Затем переподключитесь
🚩Проверить SSH-сервер
Если сервер доступен, но SSH зависает, войдите через консоль или другой метод (например, VNC, IPMI).
Если SSH не отвечает, перезапустите его:
или
🚩Отключить TCP KeepAlive или изменить таймауты
Иногда SSH зависает из-за разрыва соединения на роутере или файрволе.
Добавьте в
Или в
Затем перезапустите SSH
🚩Убить зависшую SSH-сессию на сервере
Если осталось зависшее подключение, найдите его и завершите:
Ставь 👍 и забирай 📚 Базу знаний
Если SSH завис, не стоит сразу закрывать терминал. Есть несколько причин и решений.
🚩Проверить, можно ли выйти без разрыва сессии
Если SSH завис, но сессия не разорвана, попробуйте выйти без закрытия терминала:
~.
Переключение в режим управления SSH
~Ctrl+Z
🚩Проверить соединение с сервером
Если SSH завис, причина может быть в разрыве соединения. Проверьте:
Работает ли пинг до сервера:
ping server_ip
🔹 Открыт ли SSH-порт (22):
nc -zv server_ip 22
🚩Перезапустить SSH-клиент
Если только один SSH-клиент завис, попробуйте:
pkill -9 ssh
или
killall -9 ssh
Затем переподключитесь
ssh user@server_ip
🚩Проверить SSH-сервер
Если сервер доступен, но SSH зависает, войдите через консоль или другой метод (например, VNC, IPMI).
Если SSH не отвечает, перезапустите его:
sudo systemctl restart ssh
или
service ssh restart
🚩Отключить TCP KeepAlive или изменить таймауты
Иногда SSH зависает из-за разрыва соединения на роутере или файрволе.
Добавьте в
~/.ssh/config на клиентеHost *
ServerAliveInterval 60
ServerAliveCountMax 5
Или в
/etc/ssh/sshd_config на сервере ClientAliveInterval 60
ClientAliveCountMax 5
Затем перезапустите SSH
sudo systemctl restart ssh
🚩Убить зависшую SSH-сессию на сервере
Если осталось зависшее подключение, найдите его и завершите:
who # Показывает активные пользователи
ps aux | grep ssh # Показывает процессы SSH
pkill -9 -u username # Завершает все сессии пользователя
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое сквош (squash)?
Squash — это процесс объединения нескольких коммитов в один перед слиянием ветки. Применяется для:
- очистки истории;
- упрощения отката;
- группировки связанных изменений;
- подготовки "чистого" pull request'а.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Squash — это процесс объединения нескольких коммитов в один перед слиянием ветки. Применяется для:
- очистки истории;
- упрощения отката;
- группировки связанных изменений;
- подготовки "чистого" pull request'а.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 В каких случаях используется multi stage?
Multi-stage (многоэтапная сборка) — это метод создания Docker-образов, позволяющий уменьшить их размер и повысить безопасность.
🚩Когда используется?
🟠Оптимизация размера образа
удаляем ненужные зависимости из финального образа.
🟠Безопасность
не включаем инструменты сборки в рабочий контейнер.
🟠Скорость деплоя
меньший образ быстрее скачивается и запускается.
🟠Кросс-компиляция
собираем приложение в одном окружении, а запускаем в другом.
🚩Пример использования Multi-stage в Docker
Допустим, у нас есть приложение на Go. Мы сначала компилируем его в одном контейнере, а затем создаем минимальный образ для запуска.
🚩Использование в React / Angular / Vue
При сборке фронтенда мы можем сначала установить зависимости и собрать проект, а затем развернуть его на
Ставь 👍 и забирай 📚 Базу знаний
Multi-stage (многоэтапная сборка) — это метод создания Docker-образов, позволяющий уменьшить их размер и повысить безопасность.
🚩Когда используется?
🟠Оптимизация размера образа
удаляем ненужные зависимости из финального образа.
🟠Безопасность
не включаем инструменты сборки в рабочий контейнер.
🟠Скорость деплоя
меньший образ быстрее скачивается и запускается.
🟠Кросс-компиляция
собираем приложение в одном окружении, а запускаем в другом.
🚩Пример использования Multi-stage в Docker
Допустим, у нас есть приложение на Go. Мы сначала компилируем его в одном контейнере, а затем создаем минимальный образ для запуска.
# Этап 1: сборка
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Этап 2: минимальный образ для запуска
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
🚩Использование в React / Angular / Vue
При сборке фронтенда мы можем сначала установить зависимости и собрать проект, а затем развернуть его на
nginx. # Этап 1: сборка приложения
FROM node:18 AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
# Этап 2: деплой на nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Ставь 👍 и забирай 📚 Базу знаний
💊1
🤔 Какие экзекьютеры использовали для GitLab CI?
Наиболее часто используемые:
- Docker Executor — для контейнеризированного выполнения
- Shell Executor — выполняет скрипты прямо в системе
- SSH Executor — запускает команды по SSH на удалённой машине
- Kubernetes Executor — для масштабируемого CI/CD в кластере
Docker — самый популярный благодаря изоляции и простоте настройки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Наиболее часто используемые:
- Docker Executor — для контейнеризированного выполнения
- Shell Executor — выполняет скрипты прямо в системе
- SSH Executor — запускает команды по SSH на удалённой машине
- Kubernetes Executor — для масштабируемого CI/CD в кластере
Docker — самый популярный благодаря изоляции и простоте настройки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое нормализация баз данных?
Нормализация баз данных - это процесс организации данных в базе данных для минимизации избыточности данных и обеспечения их целостности. Цель нормализации - структурировать таблицы таким образом, чтобы устранить аномалии обновления, вставки и удаления данных. Нормализация достигается путем разбиения больших таблиц на более мелкие, связанных между собой отношениями, что упрощает управление данными и делает их более логически связанными.
🚩Зачем нужна нормализация
🟠Устранение избыточности данных
Нормализация позволяет минимизировать дублирование данных, что экономит пространство и упрощает управление базой данных.
🟠Обеспечение целостности данных
Нормализация помогает поддерживать целостность данных, обеспечивая правильное и единообразное хранение данных.
🟠Упрощение структуры базы данных
Разделение данных на логические таблицы делает структуру базы данных более понятной и удобной для использования.
🟠Избежание аномалий данных
Нормализация предотвращает возникновение аномалий при обновлении, вставке и удалении данных.
🚩Основные формы нормализации
🟠Первая нормальная форма (1NF)
Удаление повторяющихся групп в таблице. Каждый столбец должен содержать только атомарные (неделимые) значения. Все записи в таблице должны быть уникальными.
🟠Вторая нормальная форма (2NF)
Таблица должна быть в 1NF. Удаление частичной функциональной зависимости: каждый неключевой атрибут должен быть полностью зависим от первичного ключа.
🟠Третья нормальная форма (3NF)
Таблица должна быть в 2NF. Удаление транзитивной зависимости: все неключевые атрибуты должны быть напрямую зависимы от первичного ключа, а не от других неключевых атрибутов.
🟠Бойс-Кодд нормальная форма (BCNF)
Усиление 3NF: каждая детерминанта должна быть кандидатом на ключ, что означает, что в любой нетривиальной функциональной зависимости X -> Y, X должно быть суперключом.
🟠Четвертая нормальная форма (4NF)
Таблица должна быть в BCNF. Устранение многозначных зависимостей: таблица не должна содержать многозначных зависимостей, когда один атрибут зависит от нескольких значений другого атрибута.
🟠Пятая нормальная форма (5NF)
Таблица должна быть в 4NF. Устранение соединительных зависимостей: данные должны быть разбиты так, чтобы каждая зависимость сохранялась.
🚩Примеры применения нормализации
🟠Первая нормальная форма
Если у вас есть таблица с повторяющимися группами, такими как несколько телефонных номеров для одного клиента, вы создаете отдельную таблицу для телефонов и связываете ее с таблицей клиентов.
🟠Вторая нормальная форма
Если у вас есть таблица заказов с колонками "номер заказа", "название товара" и "цена товара", вы можете создать отдельные таблицы для заказов и товаров, чтобы цена товара зависела только от товара, а не от комбинации заказа и товара.
🟠Третья нормальная форма
Если у вас есть таблица сотрудников с колонками "идентификатор сотрудника", "название отдела" и "имя начальника отдела", вы можете создать отдельные таблицы для сотрудников и отделов, чтобы имя начальника отдела зависело только от отдела, а не от сотрудника.
Ставь 👍 и забирай 📚 Базу знаний
Нормализация баз данных - это процесс организации данных в базе данных для минимизации избыточности данных и обеспечения их целостности. Цель нормализации - структурировать таблицы таким образом, чтобы устранить аномалии обновления, вставки и удаления данных. Нормализация достигается путем разбиения больших таблиц на более мелкие, связанных между собой отношениями, что упрощает управление данными и делает их более логически связанными.
🚩Зачем нужна нормализация
🟠Устранение избыточности данных
Нормализация позволяет минимизировать дублирование данных, что экономит пространство и упрощает управление базой данных.
🟠Обеспечение целостности данных
Нормализация помогает поддерживать целостность данных, обеспечивая правильное и единообразное хранение данных.
🟠Упрощение структуры базы данных
Разделение данных на логические таблицы делает структуру базы данных более понятной и удобной для использования.
🟠Избежание аномалий данных
Нормализация предотвращает возникновение аномалий при обновлении, вставке и удалении данных.
🚩Основные формы нормализации
🟠Первая нормальная форма (1NF)
Удаление повторяющихся групп в таблице. Каждый столбец должен содержать только атомарные (неделимые) значения. Все записи в таблице должны быть уникальными.
🟠Вторая нормальная форма (2NF)
Таблица должна быть в 1NF. Удаление частичной функциональной зависимости: каждый неключевой атрибут должен быть полностью зависим от первичного ключа.
🟠Третья нормальная форма (3NF)
Таблица должна быть в 2NF. Удаление транзитивной зависимости: все неключевые атрибуты должны быть напрямую зависимы от первичного ключа, а не от других неключевых атрибутов.
🟠Бойс-Кодд нормальная форма (BCNF)
Усиление 3NF: каждая детерминанта должна быть кандидатом на ключ, что означает, что в любой нетривиальной функциональной зависимости X -> Y, X должно быть суперключом.
🟠Четвертая нормальная форма (4NF)
Таблица должна быть в BCNF. Устранение многозначных зависимостей: таблица не должна содержать многозначных зависимостей, когда один атрибут зависит от нескольких значений другого атрибута.
🟠Пятая нормальная форма (5NF)
Таблица должна быть в 4NF. Устранение соединительных зависимостей: данные должны быть разбиты так, чтобы каждая зависимость сохранялась.
🚩Примеры применения нормализации
🟠Первая нормальная форма
Если у вас есть таблица с повторяющимися группами, такими как несколько телефонных номеров для одного клиента, вы создаете отдельную таблицу для телефонов и связываете ее с таблицей клиентов.
🟠Вторая нормальная форма
Если у вас есть таблица заказов с колонками "номер заказа", "название товара" и "цена товара", вы можете создать отдельные таблицы для заказов и товаров, чтобы цена товара зависела только от товара, а не от комбинации заказа и товара.
🟠Третья нормальная форма
Если у вас есть таблица сотрудников с колонками "идентификатор сотрудника", "название отдела" и "имя начальника отдела", вы можете создать отдельные таблицы для сотрудников и отделов, чтобы имя начальника отдела зависело только от отдела, а не от сотрудника.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Если переменная объявлена внутри функции, можно ли её использовать в другой функции?
Нет. Переменная, объявленная внутри функции, имеет локальную область видимости — она недоступна в других функциях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Нет. Переменная, объявленная внутри функции, имеет локальную область видимости — она недоступна в других функциях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Как сделать так чтобы клиенты отдавали метрики в Prometheus?
В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно:
1. Настроить приложение на экспонирование метрик в формате Prometheus.
2. Добавить Prometheus job для сбора этих метрик.
3. Опционально – использовать Pushgateway, если pull-модель не подходит.
🚩Экспонирование метрик в формате Prometheus
Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки:
Go: [
Python: [
Java: [
Node.js: [
Пример для Python
1⃣Установим библиотеку
2⃣Добавим в код экспонирование метрик
🚩Пример для Node.js
1⃣Установим библиотеку:
2⃣Код сервера:
🚩Настроить Prometheus для сбора метрик
Добавляем job в
🚩Push-модель через Pushgateway (если нужно)
Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway.
Запускаем Pushgateway:
Отправляем метрики через
Настраиваем Prometheus на сбор данных из Pushgateway
Ставь 👍 и забирай 📚 Базу знаний
В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно:
1. Настроить приложение на экспонирование метрик в формате Prometheus.
2. Добавить Prometheus job для сбора этих метрик.
3. Опционально – использовать Pushgateway, если pull-модель не подходит.
🚩Экспонирование метрик в формате Prometheus
Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки:
Go: [
prometheus/client_golang](https://github.com/prometheus/client_golang) Python: [
prometheus_client](https://github.com/prometheus/client_python) Java: [
simpleclient](https://github.com/prometheus/client_java) Node.js: [
prom-client](https://github.com/siimon/prom-client) Пример для Python
1⃣Установим библиотеку
pip install prometheus_client
2⃣Добавим в код экспонирование метрик
from prometheus_client import start_http_server, Counter
import time
# Создаем счетчик запросов
REQUEST_COUNT = Counter('app_requests_total', 'Total requests')
def process_request():
REQUEST_COUNT.inc() # Увеличиваем счетчик
time.sleep(1) # Имитация обработки запроса
if __name__ == '__main__':
start_http_server(8000) # Открываем метрики на 8000 порту
while True:
process_request()
🚩Пример для Node.js
1⃣Установим библиотеку:
npm install prom-client express
2⃣Код сервера:
const express = require('express');
const client = require('prom-client');
const app = express();
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics();
const requestCounter = new client.Counter({
name: 'http_requests_total',
help: 'Total HTTP requests',
});
app.get('/', (req, res) => {
requestCounter.inc();
res.send('Hello, World!');
});
app.get('/metrics', (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(client.register.metrics());
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});🚩Настроить Prometheus для сбора метрик
Добавляем job в
prometheus.ymlscrape_configs:
- job_name: 'my_app'
static_configs:
- targets: ['app_host:8000']
🚩Push-модель через Pushgateway (если нужно)
Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway.
Запускаем Pushgateway:
docker run -d -p 9091:9091 prom/pushgateway
Отправляем метрики через
curlecho "job_execution_time 5.3" | curl --data-binary @- http://localhost:9091/metrics/job/my_batch_job
Настраиваем Prometheus на сбор данных из Pushgateway
scrape_configs:
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091']
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое pv, pvc?
Это понятия из Kubernetes, которые используются для управления хранилищем данных (storage). Они решают задачу обеспечения долгоживущего хранилища для приложений, которое сохраняется независимо от жизненного цикла подов (Pods).
🚩Persistent Volume (PV)
Это объект Kubernetes, который представляет физическое хранилище, доступное в кластере. Это может быть локальное хранилище, сетевой диск (например, NFS), или облачный сервис хранения (например, Amazon EBS, Google Persistent Disk, Azure Disk).
PV создается администратором или автоматически через StorageClass. Это ресурс хранилища, выделенный для использования в кластере. Независим от подов, что позволяет хранить данные, даже если под был удален или перезапущен.
🚩Persistent Volume Claim (PVC)
Это запрос на использование хранилища (PV) со стороны пользователя или приложения. Это как "заявка" на нужное количество места и определенный тип хранилища.
PVC создается разработчиком или приложением. PVC связывается с подходящим PV, который соответствует запросу. Если подходящий PV найден, он "привязывается" к PVC.
🚩Как работают PV и PVC вместе?
🟠Создание PV
Администратор или динамическое создание выделяет хранилище (например, сетевой диск).
🟠Создание PVC
Приложение запрашивает хранилище с помощью PVC.
🟠Привязка
Kubernetes автоматически находит подходящий PV, который соответствует запросу PVC (по размерам, режимам доступа и другим параметрам). После этого PVC "связывается" с PV.
🟠Использование в поде
PVC указывается в поде как volume, что позволяет контейнерам работать с данным хранилищем.
Ставь 👍 и забирай 📚 Базу знаний
Это понятия из Kubernetes, которые используются для управления хранилищем данных (storage). Они решают задачу обеспечения долгоживущего хранилища для приложений, которое сохраняется независимо от жизненного цикла подов (Pods).
🚩Persistent Volume (PV)
Это объект 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"
🚩Persistent Volume Claim (PVC)
Это запрос на использование хранилища (PV) со стороны пользователя или приложения. Это как "заявка" на нужное количество места и определенный тип хранилища.
PVC создается разработчиком или приложением. PVC связывается с подходящим PV, который соответствует запросу. Если подходящий PV найден, он "привязывается" к PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
🚩Как работают PV и PVC вместе?
🟠Создание PV
Администратор или динамическое создание выделяет хранилище (например, сетевой диск).
🟠Создание PVC
Приложение запрашивает хранилище с помощью 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
Ставь 👍 и забирай 📚 Базу знаний
👍2