DevOps | Вопросы собесов
Open in Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Show more5 564
Subscribers
+324 hours
-77 days
-1030 days
Posts Archive
🤔 Как проще проверить есть ли на сервер nginx?
Проверить, установлен ли NGINX на сервере, можно несколькими способами:
Проверка запущенного процесса
ps aux | grep nginx
Если NGINX работает, будет вывод с процессами, например:
root 1234 0.0 0.1 123456 7890 ? Ss 10:00 0:00 nginx: master process /usr/sbin/nginxПроверка через
systemctl (если systemd)
systemctl status nginx
Если NGINX установлен и работает, будет что-то вроде:
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since ...Проверка через
nginx -v (версия)
nginx -v
Если NGINX установлен, покажет версию, например:
nginx version: nginx/1.20.1Проверка пакетов (
dpkg или rpm)
Если сервер на Debian/Ubuntu:
dpkg -l | grep nginx
Если сервер на CentOS/RHEL:
rpm -qa | grep nginx
Проверка открытых портов (если сервер работает)
netstat -tulnp | grep :80
или
ss -tulnp | grep :80
Ставь 👍 и забирай 📚 Базу знанийRepost from easyoffer
Привет, ребята!
1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что:
а) нужно было добавить хоть какой-нибудь проект в резюме
б) подготовиться к прохождению собесов
И всё получилось! Благодаря еasyoffer я успешно прошёл собеседование и устроился Python Junior-разработчиком на удаленку с зарплатой 115 тысяч рублей.
Однако ещё во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратиться в стартап.
По-этому я с самого начала заложил в проект минимальную бизнес-модель, на случай, если сайт начнёт набирать трафик. Я предложил пользователям полный доступ к сайту в обмен на подписку на Telegram-каналы. Это позволяло развивать аудиторию, а в будущем — зарабатывать на рекламе.
Результат превзошёл ожидания!
С момента запуска easyoffer посетило 400 тысяч человек. А когда доход с рекламы превысил мою зарплату программиста, я принял решение уйти с работы и полностью посвятить себя разработке новой версии сайта.
Вот так, зайдя в IT, через 4 месяца вышел через свой же пет-проект. Мне очень повезло
Уже год я работаю над easyoffer 2.0.
Это будет более масштабный и качественной новый проект:
– Появится тренажер
– Появятся задачи из собесов
– Фильтрация контента по грейдам
и еще очень много фич, о которых я расскажу позже.
Хочу, довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям.
По этому в ближайшее время я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку и я готов щедро отблагодарить всех, кто поддержит проект.
А те, кто поддержат проект первыми, получат специальные лимитированные выгодные вознаграждения. Следите за этим телеграм каналом, если хотите стать первыми сапортерами.
🤔 Опишите обстоятельства, при которых потеряются данные внутри Docker-контейнера, чтобы они полностью исчезли.
1. Контейнер удален без сохранения данных в volume или bind mount.
2. Файлы хранятся в tmpfs, который очищается при остановке контейнера.
3. Используется ephemeral контейнер, данные которого существуют только в памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие есть метрики для измерения качества системы?
Для измерения качества системы (особенно в DevOps, SRE и разработке) используют различные метрики производительности, надежности и доступности.
🚩Основные метрики качества системы
🟠Метрики "Четырёх ключевых показателей" (DORA)
Эти метрики помогают оценить эффективность процессов DevOps:
Lead Time for Changes (Время доставки изменений) — время от написания кода до его выхода в прод.
Deployment Frequency (Частота развертываний) — как часто изменения попадают в прод.
Mean Time to Restore (MTTR) (Среднее время восстановления) — как быстро исправляются инциденты.
Change Failure Rate (Процент неудачных изменений) — доля развертываний, вызывающих сбои.
🟠Метрики надежности и доступности (SRE)
Эти метрики помогают измерять надежность системы:
SLA (Service Level Agreement) — договорное время доступности (например, 99.9%).
SLO (Service Level Objective) — целевое значение доступности (например, 99.95%).
SLI (Service Level Indicator) — фактические измеренные показатели (например, 99.93%).
Error Rate — процент ошибок в системе (HTTP 500, таймауты и т. д.).
Latency (Задержка) — время ответа системы на запросы.
🟠Метрики производительности
Они показывают, насколько быстро работает система:
CPU Utilization — загрузка процессора.
Memory Usage — использование оперативной памяти.
Disk I/O — скорость чтения/записи на диск.
Network Throughput — пропускная способность сети.
Response Time — время отклика системы.
🟠Метрики пользовательского опыта
Оценивают удобство работы пользователей с системой:
Apdex (Application Performance Index) — индекс удовлетворенности пользователей (0–1).
TTFB (Time to First Byte) — время до получения первого байта ответа от сервера.
Page Load Time — время полной загрузки страницы.
Bounce Rate — процент пользователей, покинувших сайт без взаимодействия.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Насколько плотно приходилось работать с Bamboo?
Если работали плотно:
- Настраивали пайплайны для CI/CD.
- Конфигурировали задачи для сборки, тестирования и деплоя.
- Использовали Bamboo для мониторинга состояния сборок и анализа ошибок. Если опыта мало:
- Работали с базовыми настройками и интеграцией с репозиториями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое лямбда выражение в Phyton?
В 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']
Ставь 👍 и забирай 📚 Базу знаний🤔 Как сделать так, чтобы в контейнер попасть извне Kubernetes, например, открыть страничку из интернета?
1. Настройка сервиса:
- Создайте Kubernetes Service типа NodePort или LoadBalancer.
2. Ingress:
- Настройте Ingress для маршрутизации трафика с использованием доменного имени.
3. Проброс портов:
- Используйте kubectl port-forward, чтобы связать локальный порт с портом контейнера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как посмотреть логи в уже работающем контейнере?
Чтобы посмотреть логи работающего контейнера в Docker, используйте команду:
docker logs <container_id>
или
docker logs <container_name>
🚩Основные флаги
🟠`-f` (follow)
следить за логами в реальном времени (как tail -f):
docker logs -f <container_id>
🟠`--tail N`
показать только последние N строк:
docker logs --tail 100 <container_id>
🟠`-t` (timestamps)
добавить метки времени:
docker logs -t <container_id>
🚩Просмотр логов через `docker-compose`
Если контейнер запущен через docker-compose, можно использовать:
docker-compose logs -f
или для конкретного сервиса:
docker-compose logs -f <service_name>
🚩Логи для контейнера с systemd (если Docker пишет в `journald`)
journalctl -u docker -f
Ставь 👍 и забирай 📚 Базу знаний🤔 Если запускаем приложение в контейнере, какой-то микросервис, чем будет отличаться под в данном случае?
1. Контейнер: Это единичная инстанция приложения, работающая в изолированном окружении.
2. Под: В Kubernetes под может содержать один или несколько контейнеров, которые работают вместе, делят ресурсы (например, сеть, volume) и рассматриваются как единая сущность для оркестрации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
wipe right or swipe left
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
🤔 Как сделать rebase на main branch?
Выполнить 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
Ставь 👍 и забирай 📚 Базу знаний🤔 Что делаем после этапа тестирования сборки?
1. Публикация артефактов: Загружаем успешно протестированные образы в репозиторий Docker (например, Docker Hub).
2. Деплой: Разворачиваем приложение в тестовой, staging или production среде.
3. Мониторинг: Настраиваем мониторинг и сбор метрик для развернутых компонентов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как и где посмотреть логи какого-нибудь сервиса?
Обычно хранятся в каталоге
/var/log. Также многие современные дистрибутивы используют систему журналирования systemd для управления и просмотра логов.
🚩Способы просмотра
🟠Просмотр логов в /var/log
Каталог /var/log содержит логи большинства системных сервисов и приложений.
Логи системных сообщений
/var/log/syslog: Содержит общие системные логи. /var/log/messages: Содержит общие системные сообщения (не во всех дистрибутивах).
cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog
Логи конкретных сервисов
Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log
Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log
SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log
🟠Использование `journalctl` для системных логов
journalctl — это утилита для просмотра и управления журналами systemd. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования.
Основные команды journalctl
Просмотр всех журналов
journalctl
Логов конкретного сервиса
journalctl -u nginx.service
Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f
Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00"
Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning
🚩Примеры использования
🟠Просмотр логов Apache
Логи доступа
tail -f /var/log/apache2/access.log
Логи ошибок
tail -f /var/log/apache2/error.log
🟠Просмотр логов Nginx
Логи доступа
tail -f /var/log/nginx/access.log
Логи ошибок
tail -f /var/log/nginx/error.log
🟠Использование `journalctl` для просмотра логов Nginx
Все логи Nginx
journalctl -u nginx.service
Последние логи Nginx в реальном времени
journalctl -u nginx.service -f
Ставь 👍 и забирай 📚 Базу знаний🤔 Как на этапе сборки образа передать в контейнер внешнее значение, например, Build ID, сгенерированную CI, чтобы оно там стало env?
Используйте аргументы сборки (--build-arg):
1. Укажите переменную через ARG в Dockerfile.
2. Передайте значение аргумента с помощью флага --build-arg при сборке.
Это значение можно сохранить как переменную окружения внутри контейнера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как установить msodbcsql на астре?
Установка Microsoft ODBC Driver for SQL Server (msodbcsql) на Astra Linux требует выполнения нескольких шагов, включая настройку репозиториев, установку необходимых пакетов и принятие лицензионного соглашения.
🟠Подготовка системы
Перед началом убедитесь, что ваша система обновлена и имеет необходимые инструменты для установки:
sudo apt update
sudo apt install -y curl apt-transport-https
🟠Добавление репозитория Microsoft
Microsoft предоставляет собственные репозитории для своих пакетов. Поскольку Astra Linux основана на Debian, мы будем использовать соответствующий репозиторий:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/debian/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
🟠Установка msodbcsql
После добавления репозитория обновите список пакетов и установите драйвер:
sudo apt update
sudo ACCEPT_EULA=Y apt install -y msodbcsql18
🟠Установка дополнительных инструментов (опционально)
Если вам нужны инструменты командной строки, такие как sqlcmd и bcp, установите пакет mssql-tools:
sudo ACCEPT_EULA=Y apt install -y mssql-tools18
Чтобы эти инструменты были доступны из любого места в терминале, добавьте их в переменную PATH
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
🟠Проверка установки
Убедитесь, что драйвер установлен корректно, выполнив команду:
odbcinst -q -d -n "ODBC Driver 18 for SQL Server"
Ставь 👍 и забирай 📚 Базу знаний🤔 Для чего директории право на исполнение?
Право на исполнение для директории разрешает пользователю заходить в неё и просматривать содержимое. Без него доступ к файлам в директории может быть ограничен, даже если к самим файлам есть права чтения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как задать права на всё?
В Linux права доступа к файлам и папкам регулируются с помощью команд
chmod и chown.
🟠Назначение всех прав (777)
Если вам нужно дать полный доступ ко всем файлам и папкам, используйте
chmod -R 777 /путь/к/папке
-R (recursive) — применяет права ко всем вложенным файлам и каталогам.
777 означает:
7 (чтение, запись, выполнение) для владельца
7 (чтение, запись, выполнение) для группы
7 (чтение, запись, выполнение) для всех остальных
🟠Передача владения (если нет прав)
Если текущий пользователь не владеет файлами, назначьте нового владельца
chown -R username:group /путь/к/папке
username — новый владелец
group — новая группа
🟠Лучший вариант — более безопасные права
Вместо 777 лучше дать только нужные права:
Для исполняемых файлов: chmod 755
Для конфигураций и данных: chmod 644
Для приватных ключей и чувствительных файлов: chmod 600
Ставь 👍 и забирай 📚 Базу знаний🤔 Где хранится название файла?
Название файла хранится в записи каталога, который указывает на соответствующий inode, содержащий метаданные файла.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 На каких принципах работает докер?
Это платформа для автоматизации развертывания, масштабирования и управления приложениями в контейнерах. Контейнеры позволяют изолировать приложения и их зависимости, обеспечивая легкую переносимость и консистентность окружения. Основные принципы работы Docker включают в себя контейнеризацию, использование образов, контейнеров, оркестрацию и сетевую инфраструктуру.
🚩Основные принципы
🟠Контейнеризация
Контейнеризация позволяет запускать приложения и их зависимости в изолированных окружениях. Контейнеры предоставляют легкие и эффективные среды, которые включают все необходимое для запуска приложений.
Контейнеры: Легковесные, изолированные окружения, которые работают поверх ядра хостовой операционной системы.
Namespace: Механизм ядра Linux, обеспечивающий изоляцию процессов, сети, PID, пользовательских идентификаторов и монтирования файловых систем.
Cgroups: Контрольные группы в Linux, которые ограничивают и отслеживают использование ресурсов контейнерами, включая процессорное время, память и I/O.
🟠Использование образов
Образы Docker являются шаблонами для создания контейнеров. Образ включает в себя все необходимые компоненты, такие как код приложения, библиотеки, зависимости и конфигурационные файлы.
Dockerfile: Скрипт, содержащий инструкции по созданию образа. Используется для автоматизации создания образов.
Слойность: Каждый образ состоит из нескольких слоев, которые кэшируются и могут использоваться повторно, что ускоряет процесс сборки и уменьшает использование ресурсов.
🟠Изоляция и безопасность
Docker обеспечивает изоляцию приложений, что позволяет запускать несколько контейнеров на одном хосте без взаимного влияния.
Изоляция процессов: Каждый контейнер имеет свой собственный процессорный контекст, что исключает конфликты между приложениями.
Изоляция файловой системы: Контейнеры имеют свои собственные файловые системы, изолированные от файловой системы хостовой операционной системы.
Безопасность: Docker использует механизмы, такие как AppArmor, SELinux и seccomp, для обеспечения безопасности контейнеров.
🟠Управление сетями
Docker предоставляет гибкие возможности управления сетями для контейнеров, включая создание изолированных сетей и подключение контейнеров к различным сетям.
Bridge Network: Создает изолированную сеть для контейнеров на одном хосте.
Host Network: Контейнер использует сетевые интерфейсы хостовой операционной системы.
Overlay Network: Позволяет контейнерам на разных хостах взаимодействовать друг с другом.
Macvlan Network: Контейнеры получают собственные MAC-адреса и ведут себя как физические устройства в сети.
🟠Хранение данных
Docker поддерживает различные механизмы хранения данных для обеспечения сохранности и доступности данных контейнеров.
Volumes: Независимые от контейнеров хранилища данных, которые могут быть подключены к одному или нескольким контейнерам.
Bind Mounts: Позволяют монтировать директории хостовой файловой системы в контейнеры.
Tmpfs: Использует память хоста для хранения данных контейнера, что полезно для временных данных.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое umask?
Это маска прав доступа, определяющая, какие права будут убраны при создании новых файлов и директорий. Например, umask 022 удаляет права записи для группы и других пользователей.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
