#вопросы_с_собеседований
Что такое непрерывная интеграция?
Практика разработки, при которой разработчики часто интегрируют код в общий репозиторий. Может варьироваться от пары изменений в день или неделю до пары изменений за час в более крупных масштабах.
Каждый фрагмент кода (изменение / патч) проверяется для того, чтобы изменения можно было безопасно объединить. Сегодня обычной практикой является тестирование изменений с помощью автоматизированной сборки, которая обеспечивает интеграцию кода. Это может быть одна сборка, которая запускает несколько тестов на разных уровнях (модульных, функциональных и т. д.), или несколько отдельных сборок, которые нужно пройти, чтобы изменения были добавлены в репозиторий.
Что такое непрерывная интеграция?
Практика разработки, при которой разработчики часто интегрируют код в общий репозиторий. Может варьироваться от пары изменений в день или неделю до пары изменений за час в более крупных масштабах.
Каждый фрагмент кода (изменение / патч) проверяется для того, чтобы изменения можно было безопасно объединить. Сегодня обычной практикой является тестирование изменений с помощью автоматизированной сборки, которая обеспечивает интеграцию кода. Это может быть одна сборка, которая запускает несколько тестов на разных уровнях (модульных, функциональных и т. д.), или несколько отдельных сборок, которые нужно пройти, чтобы изменения были добавлены в репозиторий.
👍2
Напишите простой демон для systemd, который будет поддерживать работу процесса и перезапускаться в случае выхода из строя процесса.
[Unit]
Description=Test_service
After=postgres.service
StartLimitBurst=5
StartLimitIntervalSec=10
[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=/usr/bin/env python /app/server.py
[Install]
WantedBy=multi-user.target
#вопросы_с_собеседований
[Unit]
Description=Test_service
After=postgres.service
StartLimitBurst=5
StartLimitIntervalSec=10
[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=/usr/bin/env python /app/server.py
[Install]
WantedBy=multi-user.target
#вопросы_с_собеседований
👍5
Что такое CI/CD в двух словах?
Свод практик, направленный на автоматизацию тестирования и доставки новых компонент проекта заинтересованным сторонам (разработчики, аналитики, инженеры качества, конечные пользователи и др.).
#вопросы_с_собеседований
Свод практик, направленный на автоматизацию тестирования и доставки новых компонент проекта заинтересованным сторонам (разработчики, аналитики, инженеры качества, конечные пользователи и др.).
#вопросы_с_собеседований
👍1
Что такое inode в Linux?
Индексный дескриптор в файловой системе, который хранит метаданные о файлах, за исключением имени файла. В дескрипторе хранится: длина файла в байтах, id устройства с файлом, id пользователя владельца файла, id группы файла, режим файла (права доступа), timestamp последнего изменения файла, счётчик хардлинков, указатели на блоки файла.
#вопросы_с_собеседований
Индексный дескриптор в файловой системе, который хранит метаданные о файлах, за исключением имени файла. В дескрипторе хранится: длина файла в байтах, id устройства с файлом, id пользователя владельца файла, id группы файла, режим файла (права доступа), timestamp последнего изменения файла, счётчик хардлинков, указатели на блоки файла.
#вопросы_с_собеседований
👍7❤3
Объясните паттерны IaaS/PaaS/SaaS на примере пиццы.
На картинках варианты ответов.
#вопросы_с_собеседований
На картинках варианты ответов.
#вопросы_с_собеседований
👍6❤2
Исправьте неправильно написанный Dockerfile
Есть условное Node.js приложение, и неправильно написанный Dockerfile, который не будет кэшироваться и будет занимать много места. Нужно переписать его в соответствии с best practices.
#плохой файл
FROM ubuntu:18.04
COPY ./src /app
RUN apt-get update -y
RUN apt-get install -y nodejs
RUN npm install
ENTRYPOINT ["npm"]
CMD ["run", "prod"]
Вариант решения:
FROM node:14.15.4-buster as BUILDER
COPY ./src /build
RUN npm install
FROM node:14.15.4-alpine3.12
WORKDIR /app
COPY --from=BUILDER /build/out /app
CMD ["server.js"]
#вопросы_с_собеседований
Есть условное Node.js приложение, и неправильно написанный Dockerfile, который не будет кэшироваться и будет занимать много места. Нужно переписать его в соответствии с best practices.
#плохой файл
FROM ubuntu:18.04
COPY ./src /app
RUN apt-get update -y
RUN apt-get install -y nodejs
RUN npm install
ENTRYPOINT ["npm"]
CMD ["run", "prod"]
Вариант решения:
FROM node:14.15.4-buster as BUILDER
COPY ./src /build
RUN npm install
FROM node:14.15.4-alpine3.12
WORKDIR /app
COPY --from=BUILDER /build/out /app
CMD ["server.js"]
#вопросы_с_собеседований
👍6
Напишите политику для AWS S3 бакета, которая разрешает доступ только с определенных IP адресов.
{
"Id": "AllowFromSourceIP",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIP",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::demo-bucket",
"arn:aws:s3:::demo-bucket/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"11.11.11.11/32",
"22.22.22.22/32"
]
}
},
"Principal": "*"
}
]
}
#вопросы_с_собеседований
{
"Id": "AllowFromSourceIP",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIP",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::demo-bucket",
"arn:aws:s3:::demo-bucket/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"11.11.11.11/32",
"22.22.22.22/32"
]
}
},
"Principal": "*"
}
]
}
#вопросы_с_собеседований
❤4
Что такое Amazon ECS?
Определение Amazon: Amazon Elastic Container Service (Amazon ECS) — это полностью управляемый сервис оркестрации контейнеров. Благодаря безопасности, надежности и масштабируемости сервиса ECS ряд заказчиков, например компании Duolingo, Samsung, GE и Cookpad доверяют ему и выполняют в нем свои самые конфиденциальные и критически важные приложения.
#вопросы_с_собеседований
Определение Amazon: Amazon Elastic Container Service (Amazon ECS) — это полностью управляемый сервис оркестрации контейнеров. Благодаря безопасности, надежности и масштабируемости сервиса ECS ряд заказчиков, например компании Duolingo, Samsung, GE и Cookpad доверяют ему и выполняют в нем свои самые конфиденциальные и критически важные приложения.
#вопросы_с_собеседований
👍1
Почему при высоких показателях значения LA на сервере может не наблюдаться проблем (консоль ssh отзывается, сервисы работают в обычном режиме)?
На параметр нагрузки LA влияет также и ожидание ввода-вывода (параметр wa в утилите top) в дисков и задержка сети. Данные параметры могут не влиять на работу основных сервисов в системе, но учитываются при расчете общей нагрузки на систему.
#вопросы_с_собеседований
На параметр нагрузки LA влияет также и ожидание ввода-вывода (параметр wa в утилите top) в дисков и задержка сети. Данные параметры могут не влиять на работу основных сервисов в системе, но учитываются при расчете общей нагрузки на систему.
#вопросы_с_собеседований
👍3
Terraform Backend. Какой лучше?
Зависит от требованиям к хранению состояния.
✍️ AWS S3 — Standard (с locking через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB.
✍️ terraform enterprise — Standard (без блокировки).
✍️ etcd — Standard (без лока). Сохраняет состояние в etcd 2.x по заданному пути.
✍️ etcdv3 — Standard (с блокировкой). Сохраняет состояние в хранилище etcd в виде K/V с заданным префиксом.
✍️ gcs — Standard (с локом). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния.
Существуют также и другие Backend для Terraform.
#вопросы_с_собеседований
Зависит от требованиям к хранению состояния.
✍️ AWS S3 — Standard (с locking через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB.
✍️ terraform enterprise — Standard (без блокировки).
✍️ etcd — Standard (без лока). Сохраняет состояние в etcd 2.x по заданному пути.
✍️ etcdv3 — Standard (с блокировкой). Сохраняет состояние в хранилище etcd в виде K/V с заданным префиксом.
✍️ gcs — Standard (с локом). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния.
Существуют также и другие Backend для Terraform.
#вопросы_с_собеседований
👍3
Теорема САР. Что это такое?
Теорема CAP (известная также как теорема Брюера) — эвристическое утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:
Согласованность данных (англ. consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;
Доступность (англ. availability) — любой запрос к распределённой системе завершается корректным откликом, однако без гарантии, что ответы всех узлов системы совпадают;
Устойчивость к разделению (англ. partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
#вопросы_с_собеседований
Теорема CAP (известная также как теорема Брюера) — эвристическое утверждение о том, что в любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств:
Согласованность данных (англ. consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;
Доступность (англ. availability) — любой запрос к распределённой системе завершается корректным откликом, однако без гарантии, что ответы всех узлов системы совпадают;
Устойчивость к разделению (англ. partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
#вопросы_с_собеседований
👍6
Зачем нужен terraform taint?
Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
#вопросы_с_собеседований
Команда terraform taint пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды terraform apply.
#вопросы_с_собеседований
В gitlab CI необходимо, чтобы джоба выполнялась всегда только при ручной активации. Что для этого необходимо сделать?
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
#вопросы_с_собеседований
Необходимо добавить when: manual в описание заданной джобы. По-умолчанию при использовании when: manual параметр allow_failure установлен в true, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было, необходимо также установить параметр allow_failure: false.
#вопросы_с_собеседований
Что выполняет конструкция extends: .plan в gitlab CI?
extends используется для повторного использования секции пайплайна (аналог фунции). .plan указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends.
#вопросы_с_собеседований
extends используется для повторного использования секции пайплайна (аналог фунции). .plan указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends.
#вопросы_с_собеседований
👍3
Вопрос по Bash-у
#вопросы_с_собеседований
Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
...............................................................................................................
cmd 2>&1 >/dev/null | grep что-то
#вопросы_с_собеседований
Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
...............................................................................................................
👍6⚡1🌚1
Простой вопрос по Linux для новичков
#вопросы_с_собеседований
Что произойдет при выполнении команд:
1. cat [что-то] > file2
2. cat [что-то] >> file2
...............................................................................................................
1. Перенаправление вывода в файл, а не в стандартный вывод. Конечный файл будет создан, если он не существует, и будет перезаписан, если он существует.
2. Допишутся в конец существующего файла выходные данные команды. Конечный файл будет создан, если он не существует.
#вопросы_с_собеседований
Что произойдет при выполнении команд:
1. cat [что-то] > file2
2. cat [что-то] >> file2
...............................................................................................................
👍13🥱3🤔2❤1
Вопрос по Linux
#вопросы_с_собеседований
Что такое системные вызовы? Зачем они нужны и как они работают? Какие системные вызовы знаешь?
...............................................................................................................
Системный вызов — это то, посредством чего код приложения, выполняющегося в пользовательском режиме, запрашивает службу, предоставляемую кодом, который выполняется в режиме ядра.
read - чтение из файлового дескриптора.
open - открывающий и по возможности создающий файл или устройство
close - закрыть файловый дескриптор
access - проверка пользовательских привилегий для этого файла
mmap - служит для отображения предварительно открытого файла (например, с помощью системного вызова open()) в адресное пространство вычислительной системы
#вопросы_с_собеседований
Что такое системные вызовы? Зачем они нужны и как они работают? Какие системные вызовы знаешь?
...............................................................................................................
👍13🔥4
#вопросы_с_собеседований
Простенький вопрос, который часто предлагают вначале собеса
Представлен вывод команды top. Что означает каждая запись в выводе?
top - 10:44:36 up 91 days, 19:29, 7 users, load average: 0,00, 0,02, 0,05
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0,0 us, 1,5 sy, 0,0 ni, 96,9 id, 0,0 wa, 0,0 hi, 0,0 si, 1,5 st
KiB Mem : 12137392 total, 6227844 free, 1117728 used, 4791820 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
top — утилита
10:44:36 — время системы
up — сколько система работает с момента последнего запуска
7 user — количество авторизованных юзеров в системе
load average: 0.00, 0.02, 0.05 — параметр средней нагрузки на систему за период времени 1 минута, 5 минут, 15 минут
156 total — всего процессов в системе
1 running — количество процессов в работе
155 sleeping — ожидание процесса или сигнала
0 stopped — количество приостановленных процессов сигналом STOP или выполнение трассировки
0 zombie — количество зомби-процессов, которые завершили своё выполнение, но присутствующие в системе, чтобы дать родительскому процессу считать свой код завершения.
Простенький вопрос, который часто предлагают вначале собеса
Представлен вывод команды top. Что означает каждая запись в выводе?
top - 10:44:36 up 91 days, 19:29, 7 users, load average: 0,00, 0,02, 0,05
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0,0 us, 1,5 sy, 0,0 ni, 96,9 id, 0,0 wa, 0,0 hi, 0,0 si, 1,5 st
KiB Mem : 12137392 total, 6227844 free, 1117728 used, 4791820 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
👍11❤6🔥5🥰5🎉2
#вопросы_с_собеседований
Как работает OOM Killer и для чего нужен?
Когда в Linux-е заканчивается память, ядро вызывает OOM для ее освобождения. Это часто встречается на серверах, на которых запущен ряд процессов с интенсивным использованием памяти.
ООМ освобождает память для спасения системы, но чтобы процессы освобождаемые были наименее важны для системы.
У нас не только физическая и виртуальная память может закончиться. А если процесс потребляет страницу определенного размера, то могут быть не очень хорошие вещи.
Ядро Linux дает оценку каждому запущенному процессу, называемому oom_score, которая показывает, насколько вероятно, что он будет остановлен в случае нехватки доступной памяти.
Оценка пропорциональна количеству памяти, используемой процессом. Оценка - 10% процентов памяти, используемой процессом. Таким образом, максимальная оценка составляет 100% x 10 = 1000.
Подробнее об убийце здесь
Как работает OOM Killer и для чего нужен?
👍20🔥12❤4
#вопросы_с_собеседований
a=5; true | { true && a=10; } чему будет равно a?
Ответ будет 5. Потому что каждая команда конвейера исполняется в отдельной подоболочке
kannabis@fuse:~$ a=5; true | { true && a=10; echo $a; }
10
kannabis@fuse:~$ echo $a
5
a=5; true | { true && a=10; } чему будет равно a?
❤8🥰1