DevOps | Вопросы собесов
5.18K subscribers
29 photos
1 video
811 links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Какой минимальной сущностью обуславливается существование Docker-контейнера?

Это слой образа (image layer), который содержит файловую систему контейнера и его зависимости.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from easyoffer
Официальный релиз easyoffer 2.0 состоится уже в течение нескольких дней.

Напоминаю, что в честь релиза запускаем акцию.

Первые 500 покупателей получат:

🚀 Скидку 50% на PRO тариф на 1 год
🎁 Подарок ценностью 5000₽ для тех, кто подписан на этот канал

🔔 Подпишитесь на этот канал: https://t.me/+b2fZN17A9OQ3ZmJi
В нем мы опубликуем сообщение о релизе в первую очередь
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как в docker compose вместо yaml файла использовать json файл?

Docker Compose поддерживает использование JSON-файлов вместо стандартного YAML-файла. Формат JSON полностью совместим с YAML, так как YAML является надмножеством JSON. Для этого достаточно создать JSON-файл с описанием конфигурации контейнеров и передать его с помощью опции -f.

🚩Шаги по использованию

🟠Создайте JSON-файл конфигурации
Файл должен содержать описание сервисов в формате JSON. Например, вместо YAML
version: "3.9"
services:
web:
image: nginx
ports:
- "80:80"


В формате JSON будет так
{
"version": "3.9",
"services": {
"web": {
"image": "nginx",
"ports": ["80:80"]
}
}
}


🟠Запустите Docker Compose с этим файлом
Используйте флаг -f, чтобы указать Docker Compose, какой файл использовать
docker-compose -f docker-compose.json up


🟠Проверка работы
Вы можете проверить статус контейнеров, как обычно:
docker-compose -f docker-compose.json ps


🚩Почему использовать JSON?

🟠Совместимость
JSON часто используется в API, CI/CD-пайплайнах и других инструментах, которые могут генерировать конфигурации автоматически.
🟠Простота обработки
JSON легко парсить программно, что может быть полезно в скриптах и интеграциях.
🟠Стандартизация
Некоторые команды и проекты могут предпочитать JSON как более строгий и распространенный формат.

🚩Пример использования

1⃣Создайте файл docker-compose.json
{
"version": "3.8",
"services": {
"app": {
"image": "python:3.9",
"volumes": ["./app:/app"],
"working_dir": "/app",
"command": "python app.py"
}
}
}


2⃣Запустите
docker-compose -f docker-compose.json up


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое PV и PVC?

- PV (PersistentVolume) — ресурс, предоставляющий хранилище в кластере;
- PVC (PersistentVolumeClaim) — запрос пода на нужный объём хранилища и его параметры.
Это механизм абстракции и управления постоянным хранилищем.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Где находится swap какое устройство использует?

Это область на диске, которую операционная система использует как виртуальную память, если основной оперативной памяти (RAM) не хватает. Swap может быть представлен в виде:

🚩Где находится swap?

🟠Swap-раздел
Swap может быть выделен как отдельный раздел диска. Он создается во время установки системы или вручную и не имеет файловой системы (тип раздела — swap).
🟠Swap-файл
Swap может быть представлен как обычный файл в файловой системе (например, /swapfile).

🚩Как узнать, где находится swap?

Используйте команды для проверки текущей конфигурации:

Проверка swap через swapon
swapon --show


Пример вывода
NAME       TYPE      SIZE   USED PRIO
/dev/sda2 partition 4G 1G -2
/swapfile file 2G 0B -3

- NAME: Устройство или файл, используемый для swap.
- TYPE: Указывает, является ли swap разделом или файлом.
- SIZE: Размер swap.
- USED: Сколько swap в данный момент используется.
- PRIO: Приоритет использования (меньшее значение — меньший приоритет).

Проверка через free
free -h


🚩Проверка через `fstab`

Если swap является разделом, он обычно прописан в /etc/fstab
cat /etc/fstab | grep swap


Пример
/dev/sda2    none    swap    sw    0   0


🚩Какое устройство использует swap?

Если swap — это раздел, то он отображается как устройство, например, /dev/sda2. Если swap — это файл, его путь будет, например, /swapfile.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Как деплоить приложение без потерь пользователей (Zero Downtime Deployment)?

Подходы:
- Rolling Update — постепенное обновление экземпляров, без полной остановки.
- Blue-Green Deployment — параллельная версия (green) подготавливается и потом переключение трафика.
- Canary Deployment — новая версия выкатывается на часть пользователей.
- Load balancer health checks — пока экземпляр не готов, трафик не идёт.
Важно: не прерывать соединения пользователей и обеспечивать совместимость между версиями.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какие есть три вида монтирования в докере?

В Docker есть три типа монтирования данных в контейнеры:
Volumes (Тома) – рекомендуемый способ хранения данных
Bind Mounts (Привязанные тома) – монтирование локальных файлов/папок
Tmpfs (Временное хранилище в RAM) – для быстрого доступа без записи на диск

🚩Volumes (Тома) – лучший вариант хранения данных

Данные хранятся внутри Docker (/var/lib/docker/volumes)
Можно использовать в нескольких контейнерах
Не зависят от файловой системы хоста
sh  
docker volume create mydata
docker run -d -v mydata:/app/data --name mycontainer ubuntu



Удаление тома (только если он не используется)
sh  
docker volume rm mydata



🚩Bind Mounts (Привязанные тома) – монтирование папок с хоста

Монтирует директорию с хоста в контейнер
Изменения сразу видны на хосте
Зависит от структуры файлов на хосте
sh  
docker run -d -v /home/user/logs:/app/logs --name mycontainer ubuntu



🚩Tmpfs (Временное хранилище в RAM) – быстрый, но не сохраняющийся вариант

Хранит данные в оперативной памяти (RAM)
Очень быстрое чтение/запись
Пропадает при перезапуске контейнера
Пример: создать tmpfs-монтирование для /app/cache
sh  
docker run -d --tmpfs /app/cache:size=100m --name mycontainer ubuntu


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как называется Kafka-сервис в AWS?

Amazon MSK — Managed Streaming for Apache Kafka


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊10
🤔 Что такое squash в Docker?

В Docker термин "squash" (от англ. "раздавить", "сплющить") относится к процессу объединения нескольких слоев образа Docker в один. Это делается для уменьшения размера итогового образа и оптимизации хранения.

🚩Зачем нужен `squash`?

Docker-образы состоят из последовательности слоев. Каждый слой создается на основе команд в Dockerfile. Например, если ваш Dockerfile выглядит так:
FROM ubuntu:latest
RUN apt update && apt install -y nginx
RUN echo "Hello, World!" > /usr/share/nginx/html/index.html


🚩Как использовать `squash`?

В Docker squash можно выполнить с помощью флага --squash при сборке образа:
docker build --squash -t my-squashed-image .


Для включения экспериментального режима:
1. Открываем /etc/docker/daemon.json (или создаем, если его нет).
2. Добавляем строку "experimental": true.
3. Перезапускаем Docker:
systemctl restart docker


🚩Пример с `squash`

Без --squash
docker history my-image


С --squash
docker build --squash -t my-squashed-image .
docker history my-squashed-image


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как собрать и запушить в реестр (registry)?

1. Сборка:
docker build -t имя:тег .
2. Аутентификация (если нужно):
docker login
3. Пуш:
docker push имя:тег
Перед пушем имя образа должно включать адрес реестра, если это не DockerHub.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Что касается безопасности где хранить переменные секреты?

Хранение секретных переменных, таких как пароли, ключи API, токены доступа и прочие конфиденциальные данные, требует особого подхода для обеспечения безопасности. Ниже описаны рекомендуемые методы и инструменты для безопасного хранения секретных переменных в различных средах разработки и производства.

🟠Использование специализированных хранилищ секретов
HashiCorp Vault:
Это инструмент для управления секретами и защиты данных. Он позволяет централизованно хранить, доступ к которым строго контролируется, и динамически создавать секреты.
Преимущества: Поддержка динамических секретов, интеграция с большинством сред и технологий, высокий уровень безопасности.
AWS Secrets Manager и Azure Key Vault:
Эти облачные сервисы предоставляют управляемые решения для безопасного хранения и управления доступом к секретным данным, включая автоматическое обновление секретов.
Преимущества: Интеграция с облачными сервисами, упрощение ротации секретов, мониторинг и логирование доступа.

🟠Инкапсуляция секретов в среде выполнения
Docker Secrets и Kubernetes Secrets:
Предлагают встроенные механизмы для безопасного хранения секретов, которые используются контейнерами во время выполнения.
Преимущества: Локальная интеграция с системами оркестрации контейнеров, базовое шифрование на диске и управление доступом.

🟠Секреты в контролируемом CI/CD
Платформы CI/CD, такие как GitLab и GitHub, предоставляют возможности для безопасного хранения переменных среды и секретов, которые могут быть использованы в процессах автоматизации без разглашения.
Преимущества: Простота использования, интеграция с процессами разработки, защита от внешнего доступа.

🟠Шифрование секретов
Инструменты шифрования: Использование инструментов, таких как GnuPG (GPG), для шифрования секретов перед их сохранением в системах контроля версий или конфигурационных файлах.
Преимущества: Высокий уровень безопасности, контроль доступа к секретам на уровне пользователя.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Назовите инструменты для развёрнутого окружения и настройки серверов.

- Terraform — декларативное описание облачной инфраструктуры.
- Ansible — настройка серверов через YAML-плейбуки.
- Puppet / Chef — более старые конфигурационные менеджеры.
- Docker + Compose / Kubernetes — управление приложениями.
- Consul, Vault, Prometheus, Grafana — сервис-дискавери, секреты, мониторинг.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Как бы построить выделение ресурсов, балансировку, нагрузку и всю масштабированность?

Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.

🚩Основные компоненты

Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей

🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
yaml  
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
cpu: "500m" # Минимально 0.5 CPU
memory: "256Mi" # Минимально 256MB RAM
limits:
cpu: "1000m" # Максимально 1 CPU
memory: "512Mi" # Максимально 512MB RAM


🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
nginx  
upstream backend {
server app1:5000;
server app2:5000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}


Пример терраформа для AWS ALB
hcl  
resource "aws_lb" "example" {
name = "my-load-balancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.lb_sg.id]
}


🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
yaml  
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70


🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
hcl  
resource "aws_autoscaling_group" "example" {
min_size = 2
max_size = 10
desired_capacity = 2
launch_configuration = aws_launch_configuration.example.name
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что за сущность такая оператор и зачем нужна?

Это концепция Kubernetes, позволяющая автоматизировать управление ресурсами через контроллеры.
1. Оператор управляет жизненным циклом сложных приложений, таких как базы данных или кластеры.
2. Используется для настройки, обновления и восстановления приложений в кластере.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from easyoffer
Ура, друзья! Изиоффер переходит в публичное бета-тестирование!

🎉 Что нового:
🟢Анализ IT собеседований на основе 4500+ реальных интервью
🟢Вопросы из собеседований с вероятностью встречи
🟢Видео-примеры ответов на вопросы от Senior, Middle, Junior грейдов
🟢Пример лучшего ответа
🟢Задачи из собеседований
🟢Тестовые задания
🟢Примеры собеседований
🟢Фильтрация всего контента по грейдам, компаниям
🟢Тренажер подготовки к собеседованию на основе интервальных повторений и флеш карточек
🟡Тренажер "Реальное собеседование" с сценарием вопросов из реальных собеседований (скоро)
🟢Автоотклики на HeadHunter
🟢Закрытое сообщество easyoffer


💎 Акция в честь открытия для первых 500 покупателей:
🚀 Скидка 50% на PRO тариф на 1 год (15000₽ → 7500₽)

🔥 Акция уже стартовала! 👉 https://easyoffer.ru/pro
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как определить опции запуска пайплайна при редактировании определенных ресурсов в гите?

При работе с CI/CD (GitHub Actions, GitLab CI, Jenkins) часто нужно запускать пайплайн только при изменении определенных файлов. Это помогает оптимизировать сборку, экономить ресурсы и время.

🚩В GitHub Actions (on: push, paths)

В GitHub Actions можно указать файлы, изменения в которых запустят пайплайн.
name: Infra Pipeline
on:
push:
paths:
- 'infra/**'
- 'k8s/**'
pull_request:
paths:
- 'infra/**'
- 'k8s/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy Infrastructure
run: ./deploy.sh


🚩В GitLab CI/CD (only: changes)

В GitLab можно настроить запуск пайплайна по изменению файлов с помощью only: changes.
stages:
- deploy

terraform:
stage: deploy
script:
- terraform apply -auto-approve
only:
changes:
- terraform/**


🚩В Jenkins (when { changes })

В Jenkins Declarative Pipeline можно использовать when { changes } для проверки измененных файлов.
pipeline {
agent any
stages {
stage('Deploy Ansible') {
when { changes path: 'ansible/**' }
steps {
sh './deploy_ansible.sh'
}
}
stage('Deploy Helm') {
when { changes path: 'helm/**' }
steps {
sh './deploy_helm.sh'
}
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое ключ в таблице?

Ключ — это уникальный идентификатор строки в таблице БД.
- Первичный ключ (PRIMARY KEY) — уникален, не NULL.
- Используется для поиска, индексации и ссылок (внешних ключей). Пример: id клиента, номер счёта.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего используются иниь контейнеры?

Init-контейнеры (init containers) – это специальные контейнеры в поде, которые запускаются перед основным приложением. Они выполняют подготовительные задачи, а затем завершаются.

🚩Основные сценарии использования Init-контейнеров

🟠Подготовка окружения
Создание директорий, загрузка конфигураций или файлов перед запуском основного контейнера.
🟠Ожидание зависимостей
Проверка доступности БД, API или других сервисов перед запуском приложения.
🟠Миграции БД
Выполнение migrations перед стартом веб-приложения.
🟠Проверка и валидация данных
Убеждаемся, что все файлы и настройки корректны.

🚩Как работают Init-контейнеры?

Запускаются последовательно (поочередно).
Должны завершиться успешно, иначе весь под не стартует.
Не перезапускаются после завершения.
Не делят volume'ы с основным контейнером (могут передавать данные через shared volumes).

🚩Пример: Init-контейнер, проверяющий доступность БД

apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: main-app
image: my-app:latest
ports:
- containerPort: 8080
initContainers:
- name: wait-for-db
image: busybox
command: ['sh', '-c', 'until nc -z db-service 5432; do echo waiting for DB; sleep 2; done;']


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое автоскалирование?

Автоскалирование — это механизм, при котором Kubernetes автоматически увеличивает или уменьшает количество подов в зависимости от нагрузки (CPU, память, запросы и др.).
Варианты:
- Horizontal Pod Autoscaler (HPA) — масштабирует количество подов.
- Vertical Pod Autoscaler (VPA) — меняет ресурсы пода.
- Cluster Autoscaler — масштабирует сами узлы в облаке.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊1
🤔 Как происходит секьюрити тест какой алгоритм под капотом?

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).
Ищут передаваемые пароли, сессии, токены.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM