DevOps | Вопросы собесов
5.21K subscribers
34 photos
825 links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
DevOps | Вопросы собесов pinned «👾 1120 вопросов собесов на DevOps 🔒 База реальных собесов 🔒 База тестовых заданий 👾 Список менторов 👩‍💻 DevOps ├ Вакансии └ Тесты 🖥 Data Science ├ Вопросы собесов ├ Вакансии └ Тесты 👩‍💻 С# ├ Вопросы собесов ├ Вакансии ├ LeetCode ответы └ Тесты 👩‍💻 Kotlin…»
🤔 Какой инструмент используется для мониторинга и логирования в DevOps?
Anonymous Quiz
6%
Ansible
3%
GitLab CI
81%
ELK Stack
9%
Jenkins
📌 Чем отличается докер от lxc?

💬 Спрашивают в 13% собеседований

🤔 Docker vs. LXC: Основные отличия

Docker и LXC (Linux Containers) — это два различных подхода к контейнеризации, которые обеспечивают изоляцию и управление приложениями. Хотя они имеют общие цели, они различаются по архитектуре, использованию и функциональности.

🤔 Основные отличия Docker и LXC

1️⃣ Уровень абстракции

- Docker:
- Предоставляет высокий уровень абстракции для контейнеров.
- Фокусируется на упаковке приложений и их зависимостей в образы, которые можно легко распространять и развертывать.
- Использует Docker Engine для управления контейнерами и их изоляции.

- LXC:
- Обеспечивает низкий уровень абстракции, ближе к традиционной виртуализации.
- Фокусируется на изоляции системных процессов, предоставляя полные системные контейнеры, работающие как легковесные виртуальные машины.
- Использует набор инструментов LXC для управления контейнерами.

2️⃣ Простота использования

- Docker:
- Обеспечивает простые команды для создания, запуска и управления контейнерами (docker run, docker build).
- Имеет развитую экосистему и множество готовых образов на Docker Hub.
- Использует Dockerfile для автоматизации сборки образов.
# Пример Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]


- LXC:
- Более сложен в настройке и управлении.
- Требует больше знаний о системных аспектах Linux.
- Использует конфигурационные файлы и команды LXC для управления контейнерами.

# Пример команды LXC для создания контейнера
lxc-create -n mycontainer -t ubuntu


3️⃣ Функциональность и возможности

- Docker:
- Предоставляет простые инструменты для создания, развертывания и масштабирования контейнерных приложений.
- Поддерживает оркестрацию с использованием Docker Swarm и Kubernetes.
- Обеспечивает возможность создания многоуровневых образов с помощью Dockerfile.

- LXC:
- Предоставляет большую гибкость и контроль над контейнерами.
- Может использоваться для запуска приложений, требующих глубокой интеграции с хостовой системой.
- Поддерживает различные виды изоляции, включая изоляцию сети, файловой системы и ресурсов.

4️⃣ Изоляция и безопасность

- Docker:
- Обеспечивает изоляцию на уровне процессов и файловой системы.
- Использует технологии namespaces и cgroups для изоляции контейнеров.
- Поддерживает дополнительные механизмы безопасности, такие как SELinux и AppArmor.

- LXC:
- Обеспечивает более глубокую изоляцию, приближенную к виртуальным машинам.
- Также использует namespaces и cgroups, но позволяет более гибкую настройку.
- Поддерживает различные уровни изоляции и настройки безопасности.

5️⃣ Производительность

- Docker:
- Быстрый запуск контейнеров благодаря легковесной изоляции.
- Низкая накладная стоимость по сравнению с традиционной виртуализацией.
- Хорошо подходит для микросервисной архитектуры и CI/CD пайплайнов.

- LXC:
- Может иметь более высокую накладную стоимость из-за глубокой изоляции.
- Подходит для запуска приложений, требующих высокой производительности и низкой латентности.
- Обеспечивает более стабильное и предсказуемое поведение для тяжелых приложений.

🤔 Краткое резюме

- Docker:
- Предоставляет высокий уровень абстракции для приложений.
- Легок в использовании и имеет богатую экосистему.
- Идеален для микросервисов и CI/CD пайплайнов.

- LXC:
- Обеспечивает низкий уровень абстракции, ближе к виртуализации.
- Более сложен в настройке, но предлагает больше гибкости.
- Подходит для приложений, требующих глубокой интеграции с хостовой системой и высокой производительности.

Docker предоставляет более упрощенный и специализированный подход к контейнеризации, ориентированный на разработку и развертывание приложений, тогда как LXC обеспечивает большую гибкость и контроль, подходя для более сложных сценариев использования.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
📌 Что такое вид сети в докере network type host?

💬 Спрашивают в 13% собеседований

🤔 Что такое тип сети host в Docker (network type host)?

Тип сети host в Docker — это один из способов настройки сетевого взаимодействия контейнеров, который имеет особое поведение по сравнению с другими типами сетей, такими как bridge или overlay.

🤔 Основные особенности сети типа host

1️⃣ Общий сетевой стек с хостом:
- Контейнер, запущенный с типом сети host, использует сетевой стек хостовой машины.
- Контейнер не получает свой собственный IP-адрес. Вместо этого он использует IP-адрес хоста.

2️⃣ Доступ к хостовым портам:
- Все порты, которые открывает контейнер, будут доступны непосредственно на хосте.
- Нет необходимости маппить порты (например, -p 80:80), так как контейнер и хост делят одно и то же сетевое пространство.

3️⃣ Уменьшенная изоляция:
- Контейнеры с сетью типа host имеют меньше изоляции по сравнению с другими типами сетей.
- Это может представлять риски с точки зрения безопасности, так как контейнеры имеют доступ ко всей сети хоста.

🤔 Пример использования сети host

Запуск контейнера с сетью типа host:
docker run --rm --network host nginx


В этом примере контейнер Nginx будет использовать сетевой стек хостовой машины. Это означает, что если Nginx слушает на порту 80, он будет доступен на порту 80 хостовой машины.

🤔 Когда использовать сеть типа host

1️⃣ Высокая производительность:
- Сеть типа host может быть полезна в сценариях, где важна минимальная сетевое накладная стоимость, например, для приложений с высокой пропускной способностью или низкой задержкой.

2️⃣ Тестирование и отладка:
- Удобно использовать для быстрого тестирования и отладки, когда необходимо точно воспроизвести сетевые условия хоста.

3️⃣ Простота настройки:
- Упрощает конфигурацию сетевых сервисов, так как исключает необходимость маппинга портов и настройки виртуальных сетей.

🤔 Пример практического применения

Рассмотрим пример, где необходимо запустить HTTP-сервер, который должен быть доступен на всех сетевых интерфейсах хостовой машины:
docker run --rm --network host httpd


После запуска этой команды HTTP-сервер Apache будет доступен на всех сетевых интерфейсах хостовой машины, что удобно для тестирования на локальной машине.

🤔 Сравнение с другими типами сетей

1️⃣ Bridge Network (по умолчанию):
- Контейнеры получают собственный IP-адрес в виртуальной сети.
- Требуется маппинг портов для доступа к контейнеру извне.

2️⃣ Overlay Network:
- Используется для связи контейнеров, работающих на разных хостах в кластере Swarm или Kubernetes.
- Обеспечивает более высокую изоляцию и безопасность.

3️⃣ Host Network:
- Контейнеры используют сетевой стек хоста.
- Высокая производительность, но сниженная изоляция и безопасность.

🤔 Потенциальные риски и ограничения

1️⃣ Безопасность:
- Сниженная изоляция может привести к рискам безопасности, так как контейнеры имеют полный доступ к сети хоста.

2️⃣ Конфликты портов:
- Возможны конфликты портов, если несколько контейнеров пытаются использовать один и тот же порт на хосте.

3️⃣ Совместимость:
- Не все приложения и сценарии могут корректно работать с сетью типа host.

🤔 Краткое резюме

Тип сети host в Docker позволяет контейнеру использовать сетевой стек хостовой машины, предоставляя высокую производительность и простоту настройки,

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
9
📌 Что такое контейнер в ос?

💬 Спрашивают в 13% собеседований

🤔 Что такое контейнер в ОС?

Контейнер в операционной системе (ОС) — это метод изоляции процессов, который позволяет запускать приложения и их зависимости в изолированной среде. Контейнеры предоставляют легковесную виртуализацию на уровне операционной системы, что позволяет эффективно использовать ресурсы и быстро развертывать приложения.

🤔 Осноdные особенности контейнеров

1️⃣ Изоляция:
- Контейнеры изолируют приложения и их зависимости от остальной системы и других контейнеров.

2️⃣ Легковесность:
- Контейнеры делят ядро хостовой операционной системы, что делает их гораздо более легкими по сравнению с виртуальными машинами.

3️⃣ Пакетирование приложений:
- Контейнеры включают все необходимые зависимости и библиотеки, что позволяет запускать приложения в любом окружении без необходимости дополнительной настройки.

4️⃣ Портативность:
- Контейнеры обеспечивают совместимость на различных платформах и в разных окружениях.

🤔 Основные технологии и инструменты

1️⃣ Docker:
- Наиболее популярная платформа для создания, развертывания и управления контейнерами. Docker использует контейнеры для упрощения разработки и развертывания приложений.

2️⃣ LXC (Linux Containers):
- Набор инструментов и библиотек для контейнеризации на уровне ОС. LXC предоставляет более низкоуровневый доступ к контейнерам по сравнению с Docker.

3️⃣ Podman:
- Альтернатива Docker, которая предоставляет возможность создания и управления контейнерами без необходимости запуска демона.

4️⃣ Kubernetes:
- Система оркестрации контейнеров, используемая для автоматического развертывания, масштабирования и управления контейнеризированными приложениями.

🤔 Примеры использования контейнеров

🤔 Docker

Docker позволяет создавать контейнеры с использованием Dockerfile. Пример простого Dockerfile:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]


Создание и запуск контейнера:
docker build -t myapp:latest .
docker run --rm -p 80:80 myapp:latest


🤔 LXC

Создание и запуск контейнера с использованием LXC:
lxc-create -n mycontainer -t ubuntu
lxc-start -n mycontainer
lxc-attach -n mycontainer


🤔 Преимущества контейнеров

1️⃣ Быстрое развертывание:
- Контейнеры запускаются быстрее, чем виртуальные машины, так как они не требуют загрузки полной операционной системы.

2️⃣ Эффективное использование ресурсов:
- Контейнеры более эффективно используют ресурсы хоста, так как они делят одно и то же ядро ОС.

3️⃣ Упрощенное управление зависимостями:
- Все зависимости приложения включены в контейнер, что устраняет проблемы с совместимостью и конфликтами.

4️⃣ Портативность:
- Контейнеры могут работать в любом окружении, где поддерживается контейнеризация, что делает их идеальными для разработки, тестирования и продакшн-сред.

🤔 Применение контейнеров

Контейнеры широко используются в различных сценариях:

1️⃣ Микросервисная архитектура:
- Контейнеры позволяют изолировать отдельные компоненты приложения, что упрощает их разработку, развертывание и масштабирование.

2️⃣ DevOps:
- Контейнеры облегчают создание CI/CD пайплайнов, автоматизируя процессы тестирования и развертывания.

3️⃣ Тестирование и разработка:
- Контейнеры предоставляют консистентное окружение для разработки и тестирования, устраняя проблемы с конфигурацией.

🤔 Краткое резюме

Контейнеры — это легковесные виртуализированные среды, которые обеспечивают изоляцию, пакетирование и портативность приложений. Они позволяют эффективно использовать ресурсы, быстро развертывать приложения и упрощать управление зависимостями. Контейнеры широко применяются в микросервисной архитектуре, DevOps, тестировании и разработке, а также в облачных вычислениях.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
📌 Какой опыт работы с SQL и noSQL базами?

💬 Спрашивают в 13% собеседований

🤔 Опыт работы с SQL и NoSQL базами данных

🤔 SQL базы данных

SQL (Structured Query Language) базы данных используют реляционную модель данных и обеспечивают поддержку ACID-транзакций.

1️⃣ PostgreSQL
- Опыт: Проектирование схем, оптимизация запросов, хранимые процедуры, индексы, триггеры.
- Пример: Разработка сложных запросов, настройка репликации и резервного копирования.
- Инструменты: pgAdmin, psql, pg_stat_statements.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_users_email ON users(email);


2️⃣ MySQL/MariaDB
- Опыт: Администрирование, настройка репликации и кластеризации, оптимизация производительности.
- Пример: Миграция данных, оптимизация конфигурации сервера.
- Инструменты: MySQL Workbench, phpMyAdmin, mysql, mysqldump.
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


3️⃣ Microsoft SQL Server
- Опыт: Проектирование баз данных, управление сервером, T-SQL скрипты, хранимые процедуры.
- Пример: Создание отчетов, настройка Always On Availability Groups.
- Инструменты: SQL Server Management Studio (SSMS), Visual Studio.
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
BirthDate DATE,
Position NVARCHAR(100)
);
CREATE PROCEDURE GetEmployeeById
@EmployeeID INT
AS
BEGIN
SELECT * FROM Employees WHERE EmployeeID = @EmployeeID;
END;


🤔 NoSQL базы данных

NoSQL (Not Only SQL) базы данных предназначены для работы с нереляционными структурами данных и часто используются для приложений, требующих высокой производительности.

1️⃣ MongoDB
- Опыт: Проектирование схем, работа с коллекциями и документами, агрегирующие запросы, индексы.
- Пример: Система учета товаров, настройка репликации и шардинга.
- Инструменты: MongoDB Compass, mongo shell, Mongoose.
db.products.insertOne({
name: "Laptop",
price: 1200,
category: "Electronics",
createdAt: new Date()
});


2️⃣ Redis
- Опыт: Кэш и хранилище ключ-значение, настройка кластеров, работа с типами данных (строки, списки, множества).
- Пример: Кэширование запросов, очереди задач.
- Инструменты: redis-cli, Redis Desktop Manager, redis-py.
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('username', 'johndoe')
username = r.get('username')
print(username)


3️⃣ Cassandra
- Опыт: Проектирование и оптимизация схем, управление кластерами, CQL (Cassandra Query Language).
- Пример: Высоконагруженные системы, настройка репликации.
- Инструменты: cqlsh, DataStax DevCenter.
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT,
created_at TIMESTAMP
);
INSERT INTO users (user_id, name, email, created_at)
VALUES (uuid(), 'Alice', 'alice@example.com', toTimestamp(now()));


🤔 Краткое резюме

Имею значительный опыт работы с SQL и NoSQL базами данных. SQL базы данных (PostgreSQL, MySQL, SQL Server) использовал для транзакционных приложений и аналитических систем. NoSQL базы данных (MongoDB, Redis, Cassandra) использовал для высоконагруженных систем, кэширования и работы с большими данными. Этот опыт включает проектирование схем, оптимизацию запросов, настройку репликации и кластеризации.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
📌 Как найти запущенный процесс?

💬 Спрашивают в 13% собеседований

🤔 Как найти запущенный процесс

В операционных системах на базе Unix и Linux для поиска запущенных процессов используются различные команды. Вот основные и наиболее часто используемые:

🤔 Команда `ps`

Команда ps отображает список текущих процессов. Часто используемые опции:

- ps aux: Показывает все процессы в системе.
- ps -ef: Альтернативный формат вывода всех процессов.

Пример использования:
ps aux | grep <имя_процесса>


🤔 Команда `top`

Команда top показывает список процессов в реальном времени, обновляя его каждые несколько секунд. Это удобно для мониторинга системы и поиска процессов с высокой загрузкой CPU или памяти.

Пример запуска:
top


🤔 Команда `htop`

Команда htop — это улучшенная версия top, предоставляющая более удобный интерфейс для мониторинга процессов. Она должна быть установлена отдельно.

Пример установки и запуска:
sudo apt-get install htop
htop


🤔 Команда `pgrep`

Команда pgrep используется для поиска процессов по имени. Она возвращает идентификаторы (PID) процессов, соответствующих критериям поиска.

Пример использования:
pgrep <имя_процесса>


🤔 Команда `pidof`

Команда pidof возвращает идентификаторы (PID) процессов с указанным именем.

Пример использования:
pidof <имя_процесса>


🤔 Команда `ps` с фильтрацией

Для более точного поиска можно использовать команду ps с фильтрацией через grep.

Пример:
ps aux | grep <имя_процесса> | grep -v grep


🤔 Команда `lsof`

Команда lsof отображает список открытых файлов и может использоваться для поиска процессов, открывающих определенные файлы.

Пример поиска процессов, использующих определенный порт:
sudo lsof -i :<номер_порта>


🤔 Пример поиска конкретного процесса

Допустим, вам нужно найти процесс с именем nginx. Вот несколько способов сделать это:

🤔 Использование `ps`:
ps aux | grep nginx | grep -v grep


🤔 Использование `pgrep`:
pgrep nginx


🤔 Использование `pidof`:
pidof nginx


🤔 Использование `top` или `htop`:

Запустите top или htop и найдите процесс nginx в интерактивном режиме.

🤔 Краткое резюме

Для поиска запущенных процессов в Unix и Linux используются команды ps, top, htop, pgrep, pidof и lsof. Эти команды позволяют найти процессы по имени, идентификатору, или другим критериям, предоставляя подробную информацию о текущих задачах системы.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥1
📌 Что такое init контейнер?

💬 Спрашивают в 13% собеседований

🤔 Что такое Init-контейнер

Init-контейнер — это особый тип контейнера в Kubernetes, который запускается и выполняется перед основными (основными) контейнерами в поде (Pod). Init-контейнеры предназначены для выполнения задач начальной настройки или подготовки среды перед запуском основных контейнеров.

🤔 Основные особенности Init-контейнеров

1️⃣ Запуск перед основными контейнерами:
- Init-контейнеры запускаются последовательно, один за другим.
- Основные контейнеры не запускаются, пока все Init-контейнеры не завершат свою работу успешно.

2️⃣ Изоляция и безопасность:
- Init-контейнеры имеют свою собственную файловую систему, независимую от основных контейнеров.
- Могут использоваться для выполнения задач, требующих повышенных привилегий, минимизируя риск для основных контейнеров.

3️⃣ Повторные запуски:
- Init-контейнеры будут перезапускаться до тех пор, пока не завершатся успешно, или до тех пор, пока не выйдет время ожидания.

4️⃣ Подготовка среды:
- Выполнение задач инициализации, таких как настройка конфигураций, загрузка данных, проверка условий перед запуском приложения.

🤔 Примеры использования Init-контейнеров

1️⃣ Проверка наличия зависимости:
- Перед запуском основного приложения Init-контейнер может проверить наличие необходимых зависимостей или служб.

2️⃣ Загрузка конфигураций:
- Init-контейнер может загружать конфигурационные файлы или секреты из внешних источников.

3️⃣ Выполнение миграций базы данных:
- Перед запуском основного приложения Init-контейнер может выполнить миграции базы данных.

🤔 Пример манифеста Pod с Init-контейнером

Пример Pod, который использует Init-контейнер для выполнения миграций базы данных перед запуском основного приложения:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
initContainers:
- name: init-migrate
image: busybox
command: ['sh', '-c', 'echo "Running database migrations"; sleep 5;']
containers:
- name: myapp-container
image: myapp:latest
ports:
- containerPort: 80


В этом примере:
- Init-контейнер init-migrate запускается первым и выполняет команду, которая симулирует выполнение миграций базы данных.
- После успешного завершения Init-контейнера запускается основной контейнер myapp-container.

🤔 Преимущества использования Init-контейнеров

1️⃣ Разделение обязанностей:
- Разделение задач инициализации и основной логики приложения помогает упростить разработку и поддержку.

2️⃣ Повторное использование:
- Init-контейнеры можно повторно использовать в разных Pod-ах, если они выполняют общие задачи подготовки.

3️⃣ Обеспечение готовности среды:
- Init-контейнеры могут гарантировать, что все необходимые условия выполнены до запуска основного приложения.

🤔 Краткое резюме

Init-контейнеры в Kubernetes — это контейнеры, которые запускаются до основных контейнеров в поде для выполнения задач инициализации и подготовки среды. Они обеспечивают изоляцию, могут перезапускаться до успешного завершения и полезны для выполнения задач, таких как проверка зависимостей, загрузка конфигураций и выполнение миграций базы данных.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83👀1
📌 Чем отличается git push от git pull и зачем используется каждая?

💬 Спрашивают в 13% собеседований

🤔 Git Push и Git Pull: Отличия и использование

Git — это распределенная система управления версиями, которая позволяет разработчикам отслеживать изменения в коде и работать совместно над проектами. Две ключевые команды в Git, которые часто используются в ежедневной работе — это git push и git pull. Каждая из этих команд имеет свою цель и применяется в разных сценариях.

🤔 Git Push

`git push` — это команда, которая используется для отправки локальных изменений на удаленный репозиторий.

🤔 Основные аспекты:

1️⃣ Отправка изменений:
- git push отправляет коммиты из локального репозитория на удаленный репозиторий.
- Обычно используется для публикации локальных изменений и совместной работы с другими разработчиками.

2️⃣ Синхронизация веток:
- git push обновляет соответствующую ветку на удаленном репозитории, делая ваши изменения доступными для других.

🤔 Пример использования:
# Отправка изменений на удаленный репозиторий
git push origin main

В этом примере команда отправляет коммиты из локальной ветки main на удаленную ветку main репозитория с именем origin.

🤔 Git Pull

`git pull` — это команда, которая используется для получения и слияния изменений из удаленного репозитория в локальный репозиторий.

🤔 Основные аспекты:

1️⃣ Получение изменений:
- git pull загружает изменения из удаленного репозитория в локальный.
- Команда объединяет команды git fetch (для получения изменений) и git merge (для слияния изменений).

2️⃣ Синхронизация локальной ветки:
- git pull обновляет локальную ветку последними изменениями из удаленного репозитория, гарантируя, что ваш локальный репозиторий синхронизирован с удаленным.

🤔 Пример использования:
# Получение и слияние изменений из удаленного репозитория
git pull origin main

В этом примере команда получает изменения из удаленной ветки main репозитория с именем origin и сливает их с локальной веткой main.

🤔 Основные отличия

1️⃣ Направление данных:
- git push: Отправляет изменения с локального репозитория в удаленный репозиторий.
- git pull: Получает изменения из удаленного репозитория в локальный репозиторий.

2️⃣ Цель:
- git push: Публикация локальных изменений для совместной работы.
- git pull: Получение и слияние последних изменений для синхронизации с удаленным репозиторием.

3️⃣ Процесс:
- git push: Простой процесс отправки коммитов.
- git pull: Комбинирует получение и слияние изменений, что может вызывать конфликты, которые необходимо разрешать вручную.

🤔 Когда использовать каждую команду

- `git push` используется, когда вы хотите отправить свои изменения на удаленный сервер, чтобы другие разработчики могли видеть и работать с ними. Это важно для совместной работы над проектом.
- `git pull` используется, когда вы хотите синхронизировать свою локальную копию репозитория с последними изменениями из удаленного репозитория. Это помогает убедиться, что ваш локальный репозиторий содержит актуальные данные, особенно перед началом новой работы или перед слиянием своих изменений.

🤔 Краткое резюме

- `git push`: Команда для отправки локальных изменений в удаленный репозиторий. Используется для публикации изменений.
- `git pull`: Команда для получения и слияния изменений из удаленного репозитория в локальный. Используется для синхронизации с удаленным репозиторием.

Обе команды являются неотъемлемой частью работы с Git, обеспечивая эффективное управление и синхронизацию изменений в проектах.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁4🎉1
📌 Какой опыт работы с постгрес?

💬 Спрашивают в 13% собеседований

🤔 Опыт работы с PostgreSQL

🤔 Общий опыт

PostgreSQL — это мощная реляционная база данных с открытым исходным кодом, известная своей расширяемостью и соответствием стандартам SQL. У меня есть значительный опыт работы с PostgreSQL, охватывающий различные аспекты разработки, администрирования и оптимизации баз данных.

🤔 Проектирование и создание схем

- Опыт: Проектирование баз данных с учетом требований приложения, нормализация данных, создание таблиц, индексов и ограничений.

- Пример: Создание схемы базы данных для системы управления заказами с таблицами для пользователей, продуктов, заказов и платежей.
-- Создание таблицы пользователей
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Создание таблицы продуктов
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


🤔 Оптимизация запросов

- Опыт: Анализ и оптимизация SQL-запросов для повышения производительности, использование индексов, планов выполнения запросов (EXPLAIN), материализованных представлений.

- Пример: Оптимизация запросов для отчетов, использующих большие объемы данных, путем добавления индексов и переписывания запросов для более эффективного выполнения.
-- Пример индексации
CREATE INDEX idx_users_email ON users(email);

-- Пример использования EXPLAIN для анализа запроса
EXPLAIN SELECT * FROM users WHERE email = 'example@example.com';


🤔 Администрирование баз данных

- Опыт: Настройка и управление PostgreSQL-серверами, создание резервных копий и восстановление, настройка репликации и высокодоступных конфигураций.

- Пример: Настройка потоковой репликации для обеспечения отказоустойчивости и высокой доступности.
# Создание резервной копии базы данных
pg_dump -U username -h localhost -F c mydatabase > mydatabase.backup

# Восстановление базы данных из резервной копии
pg_restore -U username -h localhost -d mydatabase mydatabase.backup


🤔 Написание хранимых процедур и функций

- Опыт: Создание хранимых процедур и функций с использованием PL/pgSQL для автоматизации сложных бизнес-логик на стороне базы данных.

- Пример: Написание функции для расчета общей стоимости заказов для пользователя.
-- Пример хранимой функции
CREATE OR REPLACE FUNCTION get_total_spent(user_id INT) RETURNS DECIMAL AS $$
DECLARE
total DECIMAL;
BEGIN
SELECT SUM(price) INTO total
FROM orders
WHERE user_id = get_total_spent.user_id;
RETURN total;
END;
$$ LANGUAGE plpgsql;


🤔 Работа с расширениями

- Опыт: Использование расширений для расширения функциональности PostgreSQL, таких как PostGIS для геопространственных данных или pg_trgm для быстрого поиска текста.

- Пример: Установка и использование расширения PostGIS для работы с геопространственными данными.
-- Установка расширения PostGIS
CREATE EXTENSION postgis;

-- Пример использования PostGIS
SELECT ST_AsText(ST_MakePoint(-71.064544, 42.28787));


🤔 Инструменты и среды

- Опыт: Использование различных инструментов для работы с PostgreSQL, включая pgAdmin, psql, DBeaver и другие инструменты для мониторинга и администрирования.

- Пример: Использование pgAdmin для управления базой данных и выполнения запросов, а также настройки пользователей и ролей.

🤔 Краткое резюме

Мой опыт работы с PostgreSQL включает проектирование и создание схем баз данных, оптимизацию запросов, администрирование серверов, написание хранимых процедур и функций, использование расширений и работу с различными инструментами. Этот опыт позволяет эффективно использовать PostgreSQL для создания, управления и оптимизации производительных и надежных баз данных.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42
🤔 Что за сущность такая оператор зачем нужна?

Оператор в Kubernetes — это концепция и методика, которая позволяет автоматизировать управление состоянием сложных приложений и ресурсов. Операторы облегчают управление состоянием приложений.

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

🟠Custom Resource Definitions (CRD): CRD расширяют стандартные объекты Kubernetes, добавляя новые типы ресурсов. Эти ресурсы специфичны для приложений или сервисов, которыми управляет оператор.
🟠Контроллер: Контроллер — это программа, которая следит за состоянием ресурсов, определенных CRD, и выполняет действия для достижения желаемого состояния. Контроллеры пишутся на Go с использованием фреймворка Operator SDK.

🚩Зачем нужны операторы

🟠Автоматизация сложных задач: Операторы автоматизируют рутинные задачи, такие как развертывание, обновление, резервное копирование и восстановление приложений, которые требуют знаний и вмешательства администратора.
🟠Управление состоянием приложений: Операторы следят за состоянием приложения и автоматически предпринимают действия для поддержания или восстановления этого состояния, обеспечивая высокую доступность и отказоустойчивость.
🟠Интеграция с Kubernetes: Операторы используют встроенные механизмы Kubernetes, такие как CRD и контроллеры, что позволяет легко интегрировать их в существующие кластеры Kubernetes и управлять приложениями в привычной среде.

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

🟠Базы данных: Оператор для PostgreSQL может автоматизировать задачи развертывания кластеров, настройки репликации, выполнения резервного копирования и восстановления.
🟠Мониторинг и логирование: Оператор для Prometheus может управлять развертыванием и настройкой экземпляров Prometheus, включая настройку сбора метрик и алертинга.
🟠CI/CD: Оператор для Jenkins может автоматизировать настройку мастера Jenkins и агентов, а также управлять плагинами и настройками.

🚩Определение CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: postgresqls.postgres.example.com
spec:
group: postgres.example.com
versions:
- name: v1
served: true
storage: true
scope: Namespaced
names:
plural: postgresqls
singular: postgresql
kind: PostgreSQL
shortNames:
- pg


🚩Разработка контроллера
func (r *ReconcilePostgreSQL) Reconcile(request reconcile.Request) (reconcile.Result, error) {
instance := &v1alpha1.PostgreSQL{}
err := r.client.Get(context.TODO(), request.NamespacedName, instance)
if err != nil {
return reconcile.Result{}, err
}
return reconcile.Result{}, nil
}


🚩Развертывание оператора
operator-sdk init --domain example.com --repo github.com/example/postgresql-operator
operator-sdk create api --group postgres --version v1 --kind PostgreSQL --resource --controller
make install
make run


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🤔 Как работает gitlab runner?

GitLab Runner — это приложение с открытым исход кодом, используемое для выполнения задач CI/CD в проектах GitLab. Оно отвечает за выполнение заданий (jobs), определенных в файле .gitlab-ci.yml, и за передачу результатов обратно в GitLab.

🚩Основные компоненты и архитектура

🟠GitLab: Центральный сервер, где хранятся репозитории, настройки проектов и пайплайны CI/CD.
🟠GitLab Runner: Агент, который устанавливается на отдельный сервер или виртуальную машину и выполняет задачи CI/CD.
🟠Executor: Способ выполнения заданий Runner-ом, такие как Docker, Shell, VirtualBox, Kubernetes и другие.

🚩Установка и настройка GitLab Runner

Установка GitLab Runner зависит от операционной системы. Пример для Ubuntu:
GitLab Runner
curl -L --output /usr/share/keyrings/gitlab-runner-archive-keyring.gpg https://packages.gitlab.com/runner/gitlab-runner/gpgkey
echo "deb [signed-by=/usr/share/keyrings/gitlab-runner-archive-keyring.gpg] https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
Runner
sudo apt-get update
sudo apt-get install gitlab-runner


После установки GitLab Runner нужно зарегистрировать его в GitLab для связи с проектом:
sudo gitlab-runner register


Во время регистрации нужно указать:
🟠URL GitLab сервера.
🟠Токен регистрации (доступен в настройках GitLab проекта).
🟠Описание и метки Runner-а.
🟠Тип Executor-а (например, Shell, Docker).

Пример регистрации
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
<TOKEN>
Please enter the gitlab-ci description for this runner:
[hostname] my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
docker,aws
Please enter the executor: shell, docker, docker-ssh, ssh, docker+machine, kubernetes, custom:
docker


Конфигурация файла .gitlab-ci.yml: Файл .gitlab-ci.yml определяет этапы (stages) и задания (jobs) пайплайна CI/CD. Пример простого файла:
stages:
- build
- test
- deploy

build_job:
stage: build
script:
- echo "Building the project..."
- ./build.sh
test_job:
stage: test
script:
- echo "Running tests..."
- ./test.sh
deploy_job:
stage: deploy
script:
- echo "Deploying the project..."
- ./deploy.sh


🚩Как работает GitLab Runner

🟠Запуск задания: Когда код попадает в репозиторий (например, при пуше или создании мержа), GitLab инициирует запуск пайплайна, используя задания, определенные в .gitlab-ci.yml.
🟠Получение задания: Зарегистрированный Runner получает задание от GitLab сервера. Runner выбирается на основе меток и доступности.
🟠Выполнение задания: Runner выполняет шаги, указанные в скрипте задания (script). Это может включать сборку, тестирование, деплой и другие задачи.
🟠Отправка результатов: После выполнения задания Runner отправляет результаты обратно в GitLab сервер. Это включает в себя выходные данные, статусы выполнения и артефакты.

🚩Типы Executor-ов

🟠Shell: Выполнение команд в оболочке (например, Bash).
🟠Docker: Выполнение команд в Docker-контейнере.
🟠Docker+machine: Автоматическое создание Docker-окружений с использованием Docker Machine.
🟠Kubernetes: Выполнение заданий в подах Kubernetes.

В файле .gitlab-ci.yml можно указать Docker Executor для выполнения заданий в контейнерах:
build_job:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker build -t myapp:latest .
- docker push myregistry/myapp:latest


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