fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

DevOps | Вопросы собесов

DevOps | Вопросы собесов

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

نمایش بیشتر
5 565
مشترکین
-124 ساعت
-57 روز
-1030 روز
آرشیو پست ها
🤔 Что внутри директории Linux: /proc? Это виртуальная файловая система, предоставляющая доступ к информации о процессах и системе в реальном времени. Она не занимает место на диске, так как данные в ней формируются ядром Linux динамически. Эта файловая система называется procfs (процессная файловая система). 🚩Основное назначение `/proc` Предоставляет информацию о запущенных процессах, ресурсах системы и конфигурации ядра. Позволяет взаимодействовать с ядром, изменять параметры системы и получать данные о состоянии процессов. 🚩Ключевые элементы внутри `/proc` 🟠Каталоги с идентификаторами процессов (`/proc/[PID]`) Каждый процесс в системе имеет каталог в /proc, название которого соответствует его PID (Process ID). В этих каталогах содержится информация о конкретном процессе: /proc/[PID]/cmdline: Команда, запустившая процесс. /proc/[PID]/cwd: Символическая ссылка на текущую рабочую директорию процесса. /proc/[PID]/exe: Символическая ссылка на исполняемый файл процесса. /proc/[PID]/fd: Директория с открытыми файловыми дескрипторами. /proc/[PID]/status: Детализированная информация о состоянии процесса (UID, GID, память и т.д.). 🟠Файлы системы /proc/cpuinfo Информация о процессоре (модель, частота, количество ядер).
cat /proc/cpuinfo
/proc/meminfo Информация о памяти (доступная память, кэш, использованная память).
cat /proc/meminfo
/proc/diskstats: Статистика ввода-вывода для дисков. /proc/uptime: Время работы системы с момента загрузки. /proc/loadavg: Средняя нагрузка на систему за последние 1, 5 и 15 минут. 🟠Конфигурационные файлы ядра /proc/sys: Содержит настраиваемые параметры ядра. Например, можно изменить значение максимального количества открытых файлов:
echo 100000 > /proc/sys/fs/file-max
Некоторые популярные настройки /proc/sys/net/ipv4/ip_forward: Управление пересылкой IPv4-пакетов. /proc/sys/kernel/pid_max: Максимальный PID, который может быть назначен процессу. 🟠Сетевые интерфейсы /proc/net: Информация о сетевых соединениях и интерфейсах. Примеры: /proc/net/dev: Статистика сетевых интерфейсов. /proc/net/tcp: Состояние TCP-соединений. 🟠Информация об устройствах /proc/devices: Список всех зарегистрированных устройств (символьных и блочных). /proc/partitions: Информация о разделах жесткого диска. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какая файловая система бывает с динамическими inode? 1. Файловая система ext4 поддерживает динамическое выделение inode. 2. Это позволяет увеличивать количество inode в зависимости от потребностей, уменьшая ограничение на число файлов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое data source в графане? Это источник данных, с которым Grafana может взаимодействовать для построения графиков, панелей мониторинга (dashboards) и выполнения запросов. Data Source определяет, как Grafana подключается к внешним системам мониторинга, базам данных или API для получения метрик, логов или другой информации. 🚩Основные аспекты 🟠Типы Data Source Grafana поддерживает множество типов источников данных, включая: Системы мониторинга: Prometheus Zabbix InfluxDB Graphite Лог-агрегаторы: Loki Elasticsearch Splunk Облачные сервисы: AWS CloudWatch Google Cloud Monitoring Azure Monitor Реляционные базы данных: MySQL PostgreSQL API или внешние плагины: JSON API OpenTelemetry 🟠Функции Data Source Подключение: Определяет параметры для соединения с внешним хранилищем данных, такие как URL, токены аутентификации, логин/пароль. Выполнение запросов: Обеспечивает интерфейс для написания запросов к данным через встроенный редактор запросов Grafana. Форматирование данных: Конвертирует данные из формата, предоставляемого источником, в формат, понятный Grafana. 🟠Добавление Data Source Добавление источника данных выполняется через веб-интерфейс Grafana: Зайдите в Settings → Data Sources. Нажмите кнопку Add data source. Выберите нужный тип источника (например, Prometheus). Настройте параметры подключения (например, URL, токен, порт). Нажмите Save & Test, чтобы проверить соединение. 🟠Примеры запросов Для Prometheus:
rate(http_requests_total[5m])
Для MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;
🚩Особенности Data Source 🟠Кастомизация Вы можете устанавливать плагины для подключения к нестандартным источникам данных. Grafana Marketplace предлагает плагины для расширения функциональности. 🟠Мульти-сорсинг Один дашборд может использовать несколько источников данных, что позволяет объединять данные из разных систем. 🟠Глобальные переменные Источники данных могут использовать глобальные параметры, такие как время ($__timeFilter), для унификации запросов. 🟠Безопасность Поддержка различных методов аутентификации: токены, ключи API, OAuth. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем DevOps отличается от Agile? 1. Agile: фокусируется на гибкости и итеративной разработке, улучшая взаимодействие между разработчиками и бизнесом. 2. DevOps: охватывает весь жизненный цикл ПО, включая автоматизацию, CI/CD и поддержку инфраструктуры. 3. Agile — это методология, а DevOps — практический подход, объединяющий разработку и эксплуатацию. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что произойдет если под не пройдет readiness пробу? Если под (Pod) в Kubernetes не пройдет readiness-пробу (readiness probe), он будет считаться не готовым для обработки запросов. 🚩Что делает readiness-проба? Readiness-проба используется для определения того, готов ли контейнер в поде обрабатывать входящие запросы. Если проба не проходит, Kubernetes исключает этот под из списка доступных для обслуживания запросов (например, через Service). 🚩Основные последствия 🟠Под не будет получать трафик через Service Kubernetes автоматически исключает под из группы Endpoints для соответствующего сервиса. Другие компоненты системы, обращающиеся к сервису, не будут направлять запросы в этот под. 🟠Под продолжает работать Под не будет удален или перезапущен. Kubernetes продолжит проверять его состояние readiness-пробой до тех пор, пока он не станет готовым. 🟠Нет влияния на liveness-пробу Если readiness-проба не проходит, это не влияет на liveness-пробу. Под будет работать, пока не нарушена его "жизнеспособность". 🟠Аварийное поведение приложения может быть скрыто Если под зависнет или будет не в состоянии обработать запросы, но при этом не нарушит liveness-пробу, он останется запущенным, но не будет получать трафик. 🚩Как это выглядит на практике? Пример readiness-пробы
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: my-container
    image: nginx
    readinessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
🚩Сценарий 🟠На старте После создания пода Kubernetes ждет initialDelaySeconds (5 секунд) перед выполнением первой проверки. Если / не отвечает на HTTP-запрос, под считается не готовым. 🟠Если проба продолжает проваливаться Kubernetes исключает под из группы доступных эндпоинтов. Под остается запущенным, и проба выполняется каждые periodSeconds (10 секунд), пока под не станет готовым. 🚩Что произойдет с трафиком? Если под — единственный в сервисе: Запросы к сервису вернут ошибку (например, 503 Service Unavailable), так как ни один под не готов. Если подов несколько: Трафик перенаправляется на другие поды, готовые обрабатывать запросы. 🚩Как это помогает? 🟠Обеспечивает стабильность приложения Под начинает обрабатывать трафик только после полной инициализации. 🟠Улучшает отказоустойчивость В случае проблем с подом система перенаправляет запросы на другие экземпляры. 🟠Поддерживает обновления без простоя Во время обновления подов через Deployment новые поды добавляются в пул доступных только после успешного прохождения readiness-проб. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое провайдеры в Terraform? Это плагины, которые позволяют взаимодействовать с облачными сервисами, API или другими системами. 1. Они управляют ресурсами, такими как виртуальные машины, базы данных или сети. 2. Каждый провайдер содержит набор команд для создания, обновления и удаления инфраструктуры. 3. Примеры: AWS, Azure, Google Cloud. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое брокеры сообщений? Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers). 🚩Основные функции брокеров сообщений 🟠Прием и маршрутизация сообщений Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys). 🟠Асинхронное взаимодействие Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы. 🟠Очереди сообщений Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено. 🟠Гарантированная доставка Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери. 🟠Распределение нагрузки Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними. 🟠Фильтрация и маршрутизация Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации. 🚩Примеры использования брокеров сообщений 🟠Микросервисы Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми. 🟠Логирование и мониторинг Сбор логов и метрик от множества источников с их дальнейшей обработкой. 🟠Управление задачами Постановка задач в очередь для выполнения одним или несколькими воркерами. 🟠Интеграция систем Связывание разнородных систем, которые обмениваются данными. 🚩Примеры брокеров сообщений 🟠RabbitMQ Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации. 🟠Apache Kafka Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени. 🟠Redis (Pub/Sub) Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния. 🟠ActiveMQ Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями. 🟠NATS Легковесный и быстрый брокер для приложений, требующих низкой задержки. 🚩Как работают брокеры сообщений Producers (отправители) отправляют сообщение в брокер. Брокер размещает сообщение в соответствующей очереди или теме. Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди. 🚩Пример использования RabbitMQ 1⃣Отправитель публикует сообщение в очередь:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()
2⃣Получатель забирает сообщение из очереди:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
    print(f"Received {body}")

channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
🚩Плюсы использования ➕Разделение ответственности Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных. ➕Масштабируемость Легко добавлять новых потребителей или отправителей. ➕Устойчивость к сбоям Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен. ➕Гибкость Возможность использовать различные стратегии маршрутизации и обработки данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличаются Deployment и ReplicaSet? Управляет поддержанием заданного числа реплик подов, обеспечивая их наличие и работоспособность. Deployment — более высокий уровень абстракции, который использует ReplicaSet для управления подами и добавляет возможности для обновлений, откатов и управления версиями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая разница между deployment и stateful set? Это контроллеры, используемые для управления подами, но они предназначены для различных типов приложений и имеют разные функции. Разница между ними связана с тем, как они управляют жизненным циклом подов, сетевой идентичностью, постоянством данных и порядком развертывания. 🚩Что такое Deployment? Используется для управления статическими или бесстаточными приложениями, где порядок запуска подов, их идентичность и состояние не имеют значения. 🟠Бесстаточные приложения Примеры: веб-серверы, микросервисы, обработка очередей. Каждый под одинаков, и потеря одного из них не нарушает работу приложения. 🟠Порядок развертывания Поды запускаются и удаляются в любом порядке. Если под удаляется, создается новый с другой идентичностью. 🟠Сетевой доступ Поды доступны через Service, но они не сохраняют фиксированные сетевые имена. 🟠Обновления Поддерживает обновления без простоя (rolling updates). Умеет откатываться на предыдущую версию.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6
🚩Что такое StatefulSet? Используется для управления состоянием и обеспечивает упорядоченность и идентичность подов. Это важно для приложений, где требуется сохранение данных, стабильные идентификаторы или порядок операций. 🟠Состояние приложения Примеры: базы данных (MySQL, PostgreSQL), системы очередей (Kafka), распределенные системы (Cassandra, Elasticsearch). Каждый под имеет уникальный идентификатор и связан с определенным хранилищем данных. 🟠Порядок развертывания Поды запускаются, обновляются и удаляются строго в определенном порядке (0, 1, 2...). Это важно для приложений, где один узел должен быть доступен перед запуском другого. 🟠Сетевой доступ Каждый под имеет фиксированное имя (например, pod-0, pod-1), что упрощает взаимодействие между подами. 🟠Обновления Выполняются поэтапно, с учетом порядка. 🟠Постоянство данных Поды используют PersistentVolumeClaim (PVC) для сохранения данных. Даже если под удален, данные остаются на диске и доступны после повторного запуска.
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-service"
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
🚩Когда использовать что? 🟠Используйте `Deployment` Бесстаточное. Требует быстрой масштабируемости. Не зависит от порядка запуска подов. 🟠Используйте `StatefulSet` Требует сохранения данных между перезапусками. Зависит от фиксированной идентичности подов. Требует упорядоченного запуска или удаления. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что будет происходить при kubectl apply? Команда kubectl apply применяет манифесты Kubernetes к кластеру, создавая или обновляя ресурсы. Если ресурс уже существует, Kubernetes сравнивает его текущее состояние с новым и вносит изменения. Это позволяет применять изменения декларативно, без удаления ресурса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое container network module в докере? Это архитектурная модель, разработанная Docker для управления сетями контейнеров. Она описывает, как создаются, управляются и взаимодействуют сетевые компоненты в Docker-контейнерах. CNM служит основой для организации сетей Docker и позволяет подключать контейнеры к различным сетевым средам, обеспечивая гибкость, масштабируемость и безопасность. 🚩Основные компоненты CNM 🟠Sandbox Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил. 🟠Endpoint Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network. 🟠Network Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker: bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте. host: Контейнеры используют сетевой стек хоста без изоляции. none: Сеть отключена; контейнер полностью изолирован. overlay: Распределенная сеть для связи контейнеров на разных хостах. macvlan: Контейнеры получают прямой доступ к физической сети. 🚩Как это работает в Docker Создается Sandbox, где настраиваются сетевые параметры контейнера. Создается Endpoint, который подключает контейнер к выбранной сети. Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами. 🚩Плюсы ➕Гибкость Легко подключать контейнеры к различным типам сетей. ➕Изоляция Обеспечивает безопасность, изолируя сетевые пространства контейнеров. ➕Расширяемость CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel). ➕Управляемость Позволяет контролировать настройки сети через команды Docker. 🚩Пример создания сети 1⃣Создание сети
docker network create my_bridge
2⃣Подключение контейнера к сети
docker run --network my_bridge -d nginx
Ставь 👍 и забирай 📚 Базу знаний

– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию

🤔 Что такое blue-green deployment? Это стратегия развертывания, при которой две идентичные среды (blue и green) используются для обновления приложения. Текущая версия работает в одной среде (blue), а новая разворачивается в другой (green). После тестирования новая версия переключается в продакшн без простоев. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём преимущество Kubernetes как платформы? Это платформа для оркестрации контейнеров, которая упрощает развертывание, управление и масштабирование приложений. Она имеет ряд ключевых преимуществ, которые делают её популярной в DevOps и облачных решениях. 🚩Основные плюсы ➕Автоматизация управления приложениями Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости. ➕Масштабирование (горизонтальное и вертикальное) Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки. ➕Высокая доступность (HA) Kubernetes поддерживает отказоустойчивость: Если один узел (node) выходит из строя, поды перемещаются на другие узлы. Внутренний балансировщик нагрузки распределяет трафик между подами. ➕Платформонезависимость Kubernetes работает в любых средах: Локальных (например, Minikube). В публичных облаках (AWS, Google Cloud, Azure). В гибридных и on-premise инфраструктурах. ➕Управление конфигурацией и секретами Kubernetes упрощает работу с настройками: ConfigMaps: Для управления конфигурационными данными. Secrets: Для безопасного хранения конфиденциальной информации, например, ключей API или паролей. ➕Эффективное использование ресурсов Kubernetes помогает оптимизировать потребление CPU и памяти: Устанавливая минимальные и максимальные лимиты ресурсов для каждого приложения. Перераспределяя ресурсы между приложениями. ➕Расширяемость Kubernetes поддерживает плагины и кастомизацию: Сетевые плагины (Calico, Flannel) для настройки сети. Системы мониторинга (Prometheus, Grafana). Операторы для автоматизации сложных задач. ➕Сообщество и экосистема Kubernetes поддерживается большинством крупных облачных провайдеров. Обширная экосистема инструментов: Helm для управления шаблонами, ArgoCD для GitOps, Istio для сетевых взаимодействий. 🚩Когда особенно полезен? Разработка микросервисных архитектур. Частые релизы и автоматизация CI/CD. Работа с масштабируемыми приложениями. Использование гибридных или мультиоблачных решений. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое API и зачем оно нужно? Это интерфейс, который позволяет приложениям взаимодействовать друг с другом. Он определяет методы и форматы обмена данными между системами. API упрощает интеграцию, делая системы модульными и масштабируемыми. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в линуксе посмотреть список дескрипторов файлов? В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы /proc, которая содержит информацию о процессах, включая их открытые файловые дескрипторы. 🚩Основные способы 🟠Команда `ls` в каталоге `/proc/[PID]/fd` Каждый процесс в Linux имеет свой подкаталог в /proc с идентификатором процесса (PID). В подкаталоге fd хранятся ссылки на открытые дескрипторы файлов.
ls -l /proc/$(pidof <имя_процесса>)/fd
Вывод
lrwx------ 1 user user 64 Dec 23 12:00 0 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 1 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 2 -> /dev/pts/0
🟠Использование `lsof` Команда lsof (list open files) отображает список всех открытых файлов в системе.
lsof -p <PID>
Пример для всех процессов
lsof
Вывод
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash      1234 user  cwd    DIR  8,1     4096  256 /home/user
bash      1234 user  rtd    DIR  8,1     4096    2 /
bash      1234 user    0u   CHR  136,0       0    3 /dev/pts/0
bash      1234 user    1u   CHR  136,0       0    3 /dev/pts/0
bash      1234 user    2u   CHR  136,0       0    3 /dev/pts/0
🟠Использование `lsfd` Утилита lsfd (из пакета util-linux) удобна для просмотра файловых дескрипторов.
lsfd
Вывод
PID    FD TTY      TYPE      DEVICE SIZE/OFF   NODE NAME
1234   0  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
1234   1  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
1234   2  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
🚩Полезные флаги и фильтрация Список дескрипторов определенного пользователя:
lsof -u <имя_пользователя>
Список файлов определенного типа (например, сокеты):
lsof -i
Фильтрация по определенному файлу или устройству:
lsof /path/to/file
🚩Почему важно знать про дескрипторы? 🟠Отладка приложений Определение, какие файлы, сокеты или устройства использует процесс. 🟠Устранение утечек Проверка, остаются ли ненужные дескрипторы открытыми. 🟠Администрирование Диагностика проблем, связанных с блокировкой файлов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Зачем нужен multi-stage? Это метод, который разделяет процесс сборки на несколько этапов для уменьшения размера финального образа. На одном этапе можно собирать приложение, а на другом — копировать только необходимые артефакты в чистую среду. Это улучшает безопасность и производительность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Приведи пример изменяемых и неизменяемых типах данных? В Python типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменить их содержимое после создания. 🚩Изменяемые типы данных (mutable) Это те, содержимое которых можно менять после создания объекта, не создавая новый объект. Списки (list)
my_list = [1, 2, 3]
my_list.append(4)  # Добавляем элемент
print(my_list)  # [1, 2, 3, 4]
Словари (dict)
my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3  # Добавляем ключ-значение
print(my_dict)  # {'a': 1, 'b': 2, 'c': 3}
Множества (set)
my_set = {1, 2, 3}
my_set.add(4)  # Добавляем элемент
print(my_set)  # {1, 2, 3, 4}
🚩Неизменяемые типы данных (immutable) Неизменяемые типы данных нельзя изменить после их создания. Любая операция, изменяющая объект, приводит к созданию нового объекта. Кортежи (tuple)
my_tuple = (1, 2, 3)
# my_tuple[0] = 0  # Ошибка: TypeError
print(my_tuple)  # (1, 2, 3)
Строки (str)
my_string = "Hello"
# my_string[0] = "h"  # Ошибка: TypeError
new_string = my_string.replace("H", "h")
print(new_string)  # "hello"
Числа (int, float, complex)
x = 42
x += 1  # Создается новый объект
print(x)  # 43
Неизменяемые множества (frozenset)
my_frozenset = frozenset([1, 2, 3])
# my_frozenset.add(4)  # Ошибка: AttributeError
print(my_frozenset)  # frozenset({1, 2, 3})
🚩Почему это важно? 🟠Оптимизация памяти Неизменяемые объекты могут использоваться многократно без создания новых копий. 🟠Безопасность Неизменяемые объекты защищены от изменений, что важно для многопоточных программ. 🟠Функциональное программирование Неизменяемость — основа для предсказуемого поведения кода. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое слои? Слои создаются каждой инструкцией (например, FROM, RUN, COPY) и представляют собой файловую систему, добавляемую поверх предыдущих слоёв. Каждый слой кэшируется, что ускоряет процесс сборки, если слои не изменялись. Финальный образ — это объединение всех слоёв. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Куда идет деплой из релизных веток? Касается подходов к управлению релизами в системах контроля версий, таких как 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, и начинается деплой в продакшн. Ставь 👍 и забирай 📚 Базу знаний