Главная / Блог / QA automation INTERVIEW PART 3

Собеседование на должность
QA Automation Engineer.
Web, SQL, Linux, Git, сети.

[ Часть 3 ]
Собеседование на должность
QA Automation Engineer.
Web, SQL, Linux, Git, сети.

Smartiqa Article
  • Дата: 15 сентября 2023
  • Автор: Евгений Поваров

1. Клиент-серверная архитектура

  1. Компоненты Web-приложения. 1. Серверная часть: Логика (Java, Python, C#, C++) + БД. 2. Клиентская часть: HTML, CSS, JavaScript. 3. Протокол: HTTP, HTTPS.
  2. В чем разница между протоколами HTTP и HTTPS? HTTPS является расширением протокола HTTP с надстройкой шифрования (использует TLS протокол для защиты базового TCP-соединения). HTTP использует порт 80, HTTPS - 443.
  3. Что такое SSL сертификат? Это цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение. SSL (Secure Sockets Layer) – протокол безопасности, создающий зашифрованное соединение между веб-сервером и веб-браузером.
  4. Чем отличаются SSL и TLS сертификаты? TLS (Transport Layer Security) переводится как «безопасность транспортного уровня». Обе технологии занимаются защитой пользовательской информации от злоумышленников. Отличие - TLS основан на спецификации SSL 3.0. А сам SSL уже давно устарел, разработчики редко его используют как единственную защиту. Чаще всего можно увидеть связку двух сертификатов SSL/TLS. Такая поддержка обеспечивает работу как с новыми, так и со старыми устройствами.
  5. Структура HTTP сообщения. Стартовая строка (тип запроса + адрес + версия HTTP), заголовки, тело сообщения.
Пример структуры HTTP запроса/ответа

# Запрос
GET /blog HTTP/1.1
Host: smartiqa.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: wp-settings
Connection: keep-alive

# Ответ
HTTP/1.1 200 OK
Date: Sun, 10 Feb 2013 03:51:41 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
 
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>Smartiqa Blog</title>
</head>
<body>
</body>
</html>
6. Что такое веб-кэширование? Техника кеширования заключается в сохранении копии полученного ресурса для возврата этой копии в ответ на дальнейшие запросы. Запрос на ресурс, уже имеющийся в веб-кеше, перехватывается, и вместо обращения к исходному серверу выполняется загрузка копии из кеша. Это основной источник повышения производительности сайтов. Два типа кэша: приватные кеши и кеши совместного использования.
7. Что такое HTTP сжатие? Возможность, которая может быть встроена в веб-серверы и веб-клиенты для повышения скорости передачи и использования полосы пропускания. Клиент передает в заголовке Accept-Encoding поддерживаемые способы сжатия (gzip, deflate). Если данные были сжаты сервером, то он добавит в HTTP-ответ поле Content-Encoding или Transfer-Encoding с выбранным типом сжатия.
8. Что такое куки браузера? Небольшой фрагмент данных, который сервер отправляет браузеру пользователя. Браузер может сохранить этот фрагмент у себя и отправлять на сервер с каждым последующим запросом. Это, в частности, позволяет узнать, с одного ли браузера пришли несколько запросов (например, для аутентификации пользователя). Можно сохранить любую информацию о состоянии, HTTP-протокол сам по себе этого делать не умеет. Используется для: логина, корзины, пользовательских предпочтений, отслеживания поведения пользователей.
Developer Tools. Local Storage Content.
Developer Tools. Local Storage Content.
Postman. Cookies.
Postman. Cookies.
9. Прокси-сервер. Промежуточный сервер между компьютером пользователя и конечным пользователем. Повышает уровень конфиденциальности и позволяет обходить региональные блокировки.
10. API (Application programming interface). Контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
11. REST API. API, соответствующий принципам архитектурного стиля REST (например, отделение сервера от клиента, отсутствие сохранения состояния).
12. HTML. Версии. HTML4, HTML5, XHTML.
13. HTML. Структура web-элемента. Открывающий тэг, закрывающий тэг, атрибут, содержимое.
14. HTML. Виды тэгов. 1) Одиночные: <!doctype>, <meta>, <br>, <img>, <input>. 2) Парные: <p></p>, <a></a>). 3) Блочные (занимают всю ширину страницы или родительского элемента): <div></div>, <table></table>, <p></p>, <form></form>. 4) Строчные: <span></span>, <b></b>, <a></a>.
15. HTML. Классификация тэгов в HTML5 по типу контента. 1) Поток (Flow, основное содержимое страницы): <a>, <button>, <header>, <nav>, <ol>, <section> 2) Метаданные (Metadata, определяются в заголовке): <title>, <meta>, <script>, <style>. 3) Текст (Phrasing, текст страницы и его форматирование): <a>, <button>, <i>, <img>, <span>, <textarea>. 4) Встроенный контент (Embedded): <audio>, <video>, <img>, <svg>, <canvas>. 5) Интерактивные элементы (Interactive): <button>, <select>, <video>, <a>, <input>, <textarea>. 6) Заголовки (Heading): <h1>...<h6>. 7) Секции (Sectioning): <article>, <aside>, <nav>, <section>.
16. HTML. Атрибуты. 1) Универсальные: class, id, hidden, style, title. 2) Уникальные (характерны только для одного элемента): ismap, high, low, list. 3) Специфические (относятся не к одному, а сразу к нескольким тэгам): src, target, height, width, name. 4) Событийные: onclick, oncopy, onfocus.
17. DOM-модель. Определение. Это конечный вид документа как объекта, создаваемого веб-браузером на основании HTML кода, полученного с сервера. То есть 1) объединяются HTML, CSS и скрипты + 2) генерируются тэги с помощью языков программирования + 3) подтягиваются данные из БД => получаем финальный вид страницы. HTML-код, который пишут программисты – это всего лишь текстовый файл определенного формата, а DOM – результат действий браузера, который создает объекты при парсинге текстовых файлов.
18. DOM-модель. Основные структуры. Дерево, Наследник, Предок, Братья/Сестры, События, Узел.
19. HTML. Тэги верхнего уровня. <!DOCTYPE>, <html>, <head>, <body>.
20. HTML. Заголовочные тэги. <title>, <style>, <base>, <link>, <meta>, <script>.
21. HTML. Заголовок веб-страницы. Технологии. 1) Open Graph протокол 2) Resource Description Framework, 3) RSS каналы
22. CSS. CSS свойства. Свойство включает: 1) Selector, 2) Property, 3) Value. С точки зрения подключения стили можно разделить на 3 вида: 1) Встроенные (Inline) - задаются через атрибут style, 2) Внутренние (Internal) - определяются в тэге <style>, 3) Внешние (External) - хранятся в файле *.css и подключаются через тэг <link>.
23. CSS. Селекторы. Виды селекторов: 1) Глобальный: *, 2) По элементу: q, h1, 3) По классу: .class-name, 4) По идентификатору: #identificator-name, 5) По атрибуту: a[href="https://yandex.ru/"], 6) По псевдоклассу: a:hover, 7) По псевдоэлементу: section::first-line, 8) Групповые селекторы: h1, header, section, 9) Комбинированные: article p, body > p, h1 + p, article ~ p
24. CSS. Виды web элементов. 1) Блочные, 2) Строчные, 3) Flex, 4) Grid, 5) Table, 6) Inline-block
25. CSS. Блочные модели. Стандартная: свойства width и height задают только размер содержимого блока. Альтернативная: свойства width и height задают размер = содержимое блока + padding + border.
26. Какие версии HTTP протокола знаете? HTTP 1.1, HTTP 2. HTTP/1.1 - человекочитаемые. В HTTP/2 сообщения встроены в бинарную структуру, фрейм, позволяющий оптимизации, такие как компрессия заголовков и мультиплексирование.
27. Что такое Swagger? Это набор инструментов (фреймворк), который позволяет автоматически описывать API на основе его кода. Как это происходит: 1) разработчик описывает код с помощью формальных текстовых правил. 2) Swagger генерирует документацию в формате JSON-файла.
28. Коды HTTP. 100 - информационные коды. 200 - успешный запрос, 300 - redirect, 400 (ошибка на стороне клиента, 404 - not found, 401 - unauthorized, 403 - forbidden), 500 - ошибка на стороне сервера.
29. Какая разница между Идентификацией, Аутентификацией, Авторизацией? Идентификация: кто я? (логин). Аутентификация: доказательство (пароль). Авторизация: проверка, что разрешен доступ к ресурсу.
30. Схемы аутентификации. Basic, API key, OAuth (схема аутентификации, которая автоматизирует обмен ключами между клиентом и сервером, токен доступа - кодовая строка, которую клиент получает после успешного завершения процесса OAuth)
31. Что такое локатор? Локатор — текст, которой идентифицирует себя как элемент DOM страницы - с помощью локатора на странице можно найти элементы. В случае CSS — локатор включает в себя набор уникальных атрибутов элемента, а в случае XPath — это путь по DOM'у к элементу.

Подробнее можно почитать здесь:
  1. Web-приложение: понятие, компоненты и принципы работы
  2. HTML: Понятие, стандарты, тэги и атрибуты
  3. HTML: Структура страницы, DOM-дерево, применение тэгов.
  4. Современный CSS: Основные понятия, селекторы, блочная модель

2. Linux

  1. Что такое ядро Linux? Программа, написанная на том или ином языке программирования и скомпилированная в исполняемый файл. Ядро всегда загружается первым и потом постоянно "сидит" в определенной области оперативной памяти. То есть это программа, которая всегда находится в запущенном состоянии и взаимодействует, с одной стороны, с железом, а с другой – с системными и пользовательскими программами. На ядро возлагается функция оптимального распределения аппаратных ресурсов. Оно организует как бы параллельную работу множества программ, играет роль менеджера.
  2. Какие бывают виды ядер? Какое ядро в Linux? 1. Монолитное ядро проще и быстрее работает, так как в памяти всегда находится почти весь код. 2. Микроядро меньше, сложнее, работает медленнее, однако нередко считается более передовым из-за легкости подключения новых частей кода. У Linux монолитное ядро. Однако некоторые идеи микроядерной архитектуры тут также используются. Так драйверы устройств могут быть представлены в виде модулей и загружаться по требованию, а не при загрузке всего ядра.
  3. Что такое драйвер? Программный код, функция которого заключается в предоставлении возможности использовать определенное железо (например, видеокарту). Драйвер может загружаться сразу вместе с ядром, а может подгружаться по необходимости.
  4. Что такое POSIX? Стандарт, описывающий интерфейс между операционной системой и прикладной программой. Цель создания – обеспечение совместимости unix-like операционных систем, а также переносимости программ на уровне исходного кода.
  5. Корневые каталоги. /home, /media, /mnt, /boot (ядро + загрузчик), /etc (конфиги), /dev (файлы устройств), /bin (утилиты), /lib (библиотеки для утилит), /usr, /opt (программы пользователя), /var (кэш, логи).
  6. Типы файлов. 1) Файлы, 2) Каталоги (содержат информацию о файлах внутри), 3) Символьная ссылка (ссылка на имя файла), 4) Символьные устройства (терминал), 5) Блочные устройства (жесткий диск), 6) Сокеты (двунаправленные), 7) Каналы (однонаправленные).
  7. Что такое модули ядра? Это драйвера оборудования или FS, которые компилируются отдельно от ядра. Могут опционально подгружаться. Пример: /lib/modules/5.4.0.45-generic/kernel
  8. Что такое системный вызов? Программы в Linux могут работать в двух режимах: 1) Пользовательском (User mode) и 2) Режиме ядра (Kernel mode). Системный вызов - это функция, которая позволяет программам из User mode взаимодействовать с ядром Линукс.
  9. Группы системных вызовов. 1) Управление процессами (load, execute, exit, wait), 2) Работа с файлами (create file, delete file, open, close, read, write), 3) Управление устройствами, 4) Работа с информацией, 5) Связь, коммуникация.
  10. Что такое пакет в Linux? Пакет - это архив специального формата, который содержит все необходимые приложению бинарные файлы, конфиги, зависимости.
  11. Как устанавливаются пакеты? Процесс установки: 1) Запрашиваем установку пакета, 2) Менеджер пакетов (apt, apt-get) проверят зависимости, 3) Пакет и его зависимости загружаются из репозитория, 4) Устанавливаются. Списки репозиториев хранятся в файле /etc/apt/sources.list. Также существует локальный кэш пакетов (представляет собой базу данных). В нем хранится список доступных пакетов. Команда apt update - обновит локальный кэш. Команда apt upgrade - обновит все установленные в системе пакеты.
  12. Что такое init процесс? Это первый процесс, который запускается ядром Linux (/etc/init.d). init процесс проверяет файловую систему, задает время, запускает демонов. Дочерние процессы запускаются через forking.
  13. Что такое daemon? Является синонимом концепции «службы», задачи, которая выполняется непрерывно, обычно без взаимодействия с пользователем. Демон или Disk And Execution MONitor — это программа, которая работает в фоновом режиме. Демоны распространены среди сетевых инструментов и задач системного администрирования. Примеры: crond, httpd, sshd
  14. Что такое zombie процесс? Каждая программа, которая выполняется в Linux, - это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби. Зомби процессы Linux не выполняются и убить их нельзя, даже с помощью sigkill, они продолжают висеть в памяти, пока не будет завершён их родительский процесс.
  15. Какой результат ожидается после выполнения следующей команды? cat log.txt | grep -e "[0-9a-z]\{32\}.bin". Получим все имена файлов с расширением .bin и длиной имени в 32 символа, находящиеся в файле log.txt
  16. Какими способами процессы могут передавать друг другу данные? Через сокеты, каналы, общую память.
  17. Где можно посмотреть системные логи? /var/log/syslog, /var/log/boot.log, /var/log/kern.log
  18. Отладка ядра. 1) Проследить за системными вызовами - strace, 2) пошагово отладить ядро - gdb, 3) собрать данные о падении ядра - kdump.
  19. Что такое паника ядра? Kernel panic - сообщение о критической ошибке ядра операционной системы, после которой она не может продолжать дальнейшую работу.
  20. Файловые системы в Linux. FS - это система, которая связывает блоки на диске с программным обеспечением. То есть она показывает, как распределить логические данные (имя файла, размер, атрибуты) на физических носителях, создает/читает/удаляет их. Основные FS в Linux: 1) Ext 2, Ext3, Ext4 - стабильная и часто используемая FS. 2) XFS - предназначена для быстрой работы с большими файлами. 3) procfs (виртуальная) - FS для доступа к информации о системных процессах, обычно ее монтируют к /proc, она создаёт двухуровневое представление пространств процессов - на верхнем уровне процессы представляют собой каталоги, именованные в соответствии с их pid. 4) sysfs (виртуальная) - экспортирует информацию ядра Linux о присутствующих в системе устройствах и драйверах.
  21. Часто используемые команды. sudo, lsof (list system open files), ps, top, kill, curl, wget, ssh, find, grep, awk, head, tail, less, pwd, ls, mkdir, rm, cat, touch, chown, cp, mv, ln, lsblk
  22. В чем разница между командами cat, head, more, less, tail? cat - выводит полное содержимое файла. more/less - постраничный вывод. head - выводит указанное количество строк с начала файла. tail - выводит указанное количество строк с начала файла.
  23. Чем отличается вызов команд: <Команда 1> ; <Команда 2> и <Команда 1> && <Команда 2>? А <Команда 1> || <Команда 2>? Во втором случае Команда 2 запустится только в том случае, если Команда 1 завершилась успешно. В первом - Команда 2 запустится при любом коде возврата Команды 1. В последнем - вторая команда запустится, только если первая команда завершилась с ошибкой.
  24. Что это за команды и чем они отличаются: > и >>? Команды вывода данных в файл. > перезаписывает файл с нуля, >> дописывает данные.
  25. Объясните значение команды chmod 775 my_file? Команда chmod меняет правда доступа на файл. Пример chmod ABC: A - права пользователя, B - права группы, С - права всех остальных. 7 - все разрешено, 6 - чтение и запись, 5 - чтение и исполнение, 4 - только чтение, 0 - все запрещено. Если отвечать на вопрос - меняем права доступа к файлу my_file, текущему пользователю и его группе разрешено все, всем остальным - только чтение данного файла и исполнение.
  26. Что такое systemd, systemctl? Systemd - демон, который запускает сервисы, описанные в его конфигурации. systemctl - команда, которая позволяет работать с процессами/службами.
  27. Что такое journald? Это системный демон журналов systemd. Systemd спроектирован так, чтобы централизованно управлять системными логами от процессов, приложений и т.д. Все такие события обрабатываются демоном journald, он собирает логи со всей системы и сохраняет их в бинарных файлах.
  28. Что такое stdin, stdout, stderr? Ввод и вывод данных распределяется между тремя стандартными потоками: 0) stdin — стандартный ввод (клавиатура), 1) stdout — стандартный вывод (экран), 2) stderr — стандартная ошибка (вывод ошибок на экран). Физически STDIN, STDOUT и STDERR - это три специальных файла, которые связываются с терминалом. Но это необычные файлы. Хотя UNIX представляет все как файл, это не делает его таковым на самых низких уровнях. Большинство файлов в иерархии /dev являются либо символьными, либо блочными устройствами, фактически драйверами устройств. Когда вы открываете их, вы подключаетесь к драйверу устройства, а не к физическому файлу.
  29. Что значит запись file 2>&1? Перенаправляем stderr в stdout
  30. Для чего нужна команда tee? Команда берет данные из одного источника и сохраняет их на выходе в нескольких местах. Например, команда ls -la | tee output.txt выведет содержимое директории 1) в консоль и одновременно 2) в файл output.txt
Файлы устройств в папке /dev

tati@tati ~ % ls /dev
afsc_type5			ptyw7
auditpipe			ptyw8
auditsessions			ptyw9
autofs				ptywa
autofs_control			ptywb
autofs_homedirmounter		ptywc
autofs_notrigger		ptywd
autofs_nowait			ptywe
bpf0				ptywf
bpf1				'random'
bpf2				rdisk0
bpf3				rdisk0s1
console				rdisk0s2
cu.BLTH				rdisk1
cu.Bluetooth-Incoming-Port	rdisk1s2
'disk0'				rdisk1s3
disk0s1				rdisk1s4
disk0s2				rdisk1s5
'disk1'				rdisk1s6
disk1s2				rdisk1s7
disk1s3				rdisk1s7s1
disk1s4				sdt
disk1s5				'stderr'
disk1s6				'stdin'
disk1s7				'stdout'
disk1s7s1			systrace
dtrace				tty
dtracehelper			tty.BLTH
fbt				tty.Bluetooth-Incoming-Port
fd				ttyp0
fsevents			ttyp1
machtrace			ttyp7
'null'				ttyp8
oslog				ttyp9
oslog_stream			ttypa
pf				ttypb
pfm				ttypc
profile				ttypd
ptmx				ttype
ptyp0				ttypf
ptyp1				ttyq0
ptyp2				ttyq1
ptyp3				ttyq2

<...>

ptyw2				uart.BLTH
ptyw3				'urandom'
ptyw4				xcpm
ptyw5				zero
ptyw6
31. Как завершить процесс в Linux? Процесс завершается при получении соответствующего сигнала: SIGTERM или SIGKILL. 1) Команда kill <process_id> отправляет процессу сигнал SIGTERM. Этот сигнал считается мягким уничтожением - процесс может проигнорировать такой сигнал, также при таком уничтожении процесс получает время для отправки информации дочерним/родительским процессам. Команда kill -9 <process_id> немедленно прекратит выполнение процесса. Такой способ уничтожения менее предпочтителен, так как может приводить к возникновению зомби-процессов.
32. Что такое tty? TTY — это абстрактное устройство в UNIX и Linux. Иногда оно относится к физическому устройству ввода, такому как последовательный порт, а иногда к виртуальному TTY, который позволяет пользователям взаимодействовать с системой. Когда вы запускаете эмулятор терминала или используете какую-либо оболочку, она взаимодействует с виртуальными TTY, также известным как псевдо-TTY или PTY. Пример вывода команды tty: /dev/ttys000
33. Что будет если одна из команд в последовательности, соединенной через pipe, завершится неуспешно? Последующие команды все равно запустятся. Например, при вызове команды 'nonexisting-command | touch my_file.txt' файл my_file.txt все равно создастся. Это происходит, потому что каждая команда в череде пайпов запускается в отдельной оболочке (subshell), а сам запуск оболочки - всегда успешный.
34. Выведите список PID текущих процессов. PID - вторая колонка в таблице. Команда: ps aux | awk '{print $2}'

3. Git

  1. Системы контроля версий. Локальная, централизованная, распределенная.
  2. Основные понятия. Репозиторий, индекс, коммит, указатели, ветка, рабочая копия.
  3. Работа с репозиторием. Команды: init, clone, status
  4. Создание коммита. Команды: add, commit.
  5. Создание, просмотр, переключение между ветками, удаление. Команды: branch, checkout, log, diff.
  6. Отмена изменений. Команды: restore, rm, checkout, revert.
  7. Слияние изменений между ветками. Команды: merge, cherry-pick, rebase.
  8. Работа с удаленным репозиторием. Команды: fetch, pull, push.
  9. Работа с GitHub, форки и Pull Requests.

Подробнее можно почитать в нашем курсе по работе с Git.

Читайте также

4. Компьютерные сети

  1. Пятиуровневая структура сети (TCP/IP). Физический уровень. Сигналы в кабеле.
  2. Пятиуровневая структура сети (TCP/IP). Канальный уровень. Протоколы: Ethernet, WiFi. Идентификация по MAC адресам.
  3. Пятиуровневая структура сети (TCP/IP). Сетевой уровень. Протоколы: IPv4 и IPv6. Идентификация по IP адресам.
  4. Пятиуровневая структура сети (TCP/IP). Транспортный уровень. Протоколы: TCP/UDP. Идентификация по порту(80, 8080, 22 и т д).
  5. Пятиуровневая структура сети (TCP/IP). Уровень приложений. Протоколы: HTTP, SSH, FTP.
  6. Что такое сеть/подсеть? Это группа устройств, находящихся под одним управлением и способных коммуницировать между собой. Также сеть - это диапазон IP адресов. Диапазон определяется маской сети. Для удобства управления сеть делят на сегменты - подсети. Подсеть имеет меньший диапазон адресов, он так же определяется маской.
  7. Физические сущности сети. 1) Оконечные узлы (компьютеры, телефоны, терминалы, сервера, телевизоры). 2) Промежуточные устройства (коммутаторы, концентраторы, модемы, маршрутизаторы, точки доступа Wi-Fi) 3) Сетевые среды (кабели, воздушная среда, сетевые карты).
  8. Какие типы приложений работают с сетью? 1) Загрузчики (работают по FTP поверх TCP или по TFTP поверх UDP), порт 21 по стандарту 2) Интерактивные приложения (Whatsup, Telegram, электронная почта) 3) Приложения в реальном времени (Skype, Telegram, Viber в момент звонка)
  9. Основные сущности IP протокола. IP-адрес, маска, шлюз
  10. Сколько разрядов содержит IP адрес? 32 двоичных разряда: <8 разрядов>. <8 разрядов>. <8 разрядов>. <8 разрядов>. Всего получаем 256*256*256*256 = 4294967296 вариаций адресов. Пример IP адреса в двоичном представлении 01001010. 01110111. 10101010. 00101010. Его двоично-десятичное представление: 64+8+2 . 64+32+16+4+2+1 . 128+32+8+2 . 32+8+2 => 74.119.170.4
  11. Что такое маска подсети? 32-битное число, позволяющее отделить адрес подсети и часть IP адреса конкретного хоста.
  12. В каком виде может быть представлена маска подсети? 1) В двоично-десятичном (255.255.255.0), 2) в виде префикса в CIDR-нотации - числа от 0 до 32, обозначающего длину маски в битах. Например, в сети 192.168.23.0/24 значение /24 — это маска, равная 255.255.255.0.
  13. Сколько адресов в подсети с маской /23? У нас длина маски 23 бита. Значит под адреса хостов в сети остается 32 - 23 = 9 бит. 2 в степени 9 = 512 - 2 = 510 адресов
  14. Что такое DHCP? Dynamic Host Configuration Protocol - ПРОТОКОЛ динамической конфигурации хоста. Это широковещательный протокол, который позволяет хосту получить настройки сети: IP адрес, маску сети, шлюз, DNS сервера.
  15. Что такое широковещательное сообщение? Одно сообщение от клиента сети, которое получат все остальные клиенты сети.
  16. Сетевые сервисы. DHCP сервер. DHCP сервер выдает машинам в сети динамические IP адреса из заданного диапазона. Помимо IP адреса также присылает маску подсети, адрес шлюза, адреса DNS серверов. Алгоритм работы: 1) Discover - клиент отправляет широковещательный запрос;
    2) Offer - на этот запрос отвечают DHCP-сервера и отправляют клиенту свободный IP-адрес;
    3) Request – клиент выбирает подходящий DHCP-сервер и отправляет широковещательный ответ с полученным IP-адресом, чтобы DHCP-серверы пометили его, как занятый;
    4) Acknowledgement – выбранный DHCP сервер отправляет подтверждение клиенту.
  17. Сетевые сервисы. DNS (Domain Name System). Хранит сопоставление доменных имен и их IP адресов. Например, 8.8.8.8 - IP адрес для доменного имени google.com. Так же необходим для кэширования ранее используемых адресов (эти адреса могли быть получены от более крупного регионального DNS сервера). Часто к одному доменному имени могут еще привязываться поддомены и почтовые сервера, которые в свою очередь, могут иметь другие IP адреса. В DNS сервере есть файлы, в которых хранятся все необходимые связи между доменным именем и IP-адресами. Написанное в таком файле называется описанием DNS-зоны. Описание выполняется в помощью разных типов записей: A, MX, CNAME и т д.
  18. Что такое домен верхнего уровня? Домен верхнего (первого) уровня— самый высокий уровень в иерархии системы доменных имён (DNS) после корневого домена. Является начальной точкой отсчёта (справа налево), с которой начинается доменное имя в Интернете: .<домен 2-го уровня>.<домен верхнего (первого/корневого) уровня>. Поскольку каждое имя интернет-домена состоит из нескольких частей, разделённых точками и записанными в обратном порядке, то доменом верхнего уровня является завершающая часть имени домена. Например, в имени домена www.smartiqa.ru доменом верхнего уровня является ru. Домены верхнего уровня делятся географически и тематически. Например, .ru (Россия), .de (Германия). Домены второго уровня должны быть уникальными. Домены третьего уровня встречаются редко, пример, для m.vk.com домен m показывает, что перед нами мобильная версия.
  19. Сетевые сервисы. NAT (Network Address Translation). Переводит частный адрес (адрес в локальной сети) в общедоступный публичный (адрес в интернете). Несколько устройств в локальной сети пользуются одним публичным адресом.
  20. LAN/WAN. Локальная/Глобальная сети.
  21. VPN (Private Virtual Network). Позволяет объединить в одну частную сеть несколько локальных сетей через Интернет.
  22. Что такое TCP протокол? Transmission Control Protocol - протокол передачи данных 4го транспортного уровня. Надежность обеспечивается методом 3-way handshake - периодическим подтверждением отправки пакетов и переотправкой потерянных пакетов. Ключевая сущность - порт (16-битное число от 1 до 65535).
  23. Чем отличаются протоколы TCP и UDP? TCP – транспортный протокол передачи данных в сетях TCP/IP, предварительно устанавливающий соединение с сетью. UDP – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. Разница между протоколами TCP и UDP – в так называемой "гарантии доставки". TCP требует отклика от клиента, которому доставлен пакет данных, подтверждения доставки, и для этого ему необходимо установленное заранее соединение. Также протокол TCP считается надежным, тогда как UDP получил даже именование "протокол ненадежных датаграмм". TCP исключает потери данных, дублирование и перемешивание пакетов, задержки. UDP все это допускает, и соединение для работы ему не требуется.
  24. Как происходит передача пакетов через TCP? В 3 этапа: 1. Установка соединения, 2. Передача данных, 3. Завершение соединения. Установка соединения называется "трехэтапным рукопожатием": 1) Клиент отправляет номер и флаг SYN. Сервер возвращает номер и флаги SYN и ACK. Сервер переходит в состояние SYN-RECEIVED. 2) Клиент отправляет ACK флаг и переходит в состояние ESTABLISHED. 3) Сервер переходит в состояние ESTABLISHED.
  25. Что такое сокет? Сокеты — название программного интерфейса для обеспечения обмена данными между процессами. Сокет — абстрактный объект, представляющий конечную точку соединения. Например: 1) Сокет процессора — это разъем на материнской плате, куда подключается центральный процессор. 2) Сокет в сети — это конец канала связи. Допустим, между двумя программами, которые работают в сети, установлен канал сообщения. В этом случае одна такая программа будет являться сокетом в сети. Типы сокетов в сети: SOCK_STREAM и SOCK_DGRAM. 3) Веб-сокет - это определенный вид сокета в сети, который отвечает за соединение и передачу информации между веб-браузером и веб-сервером.
Вывод команды netstat

# Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.104.59152    stackoverflow.co.https ESTABLISHED
tcp4       0      0  192.168.0.104.59149    199.232.148.193.https  ESTABLISHED
tcp4       0      0  192.168.0.104.59148    192.0.73.2.https       ESTABLISHED
tcp4       0      0  192.168.0.104.59147    151.101.129.69.https   ESTABLISHED
tcp4       0    517  192.168.0.104.59145    lb-in-f113.1e100.https ESTABLISHED
tcp4       0    517  192.168.0.104.59142    lb-in-f113.1e100.https ESTABLISHED
tcp4       0      0  192.168.0.104.59141    lu-in-f101.1e100.https ESTABLISHED
tcp4       0      0  192.168.0.104.59140    rest-domains.hh..https ESTABLISHED
tcp4       0      0  192.168.0.104.59139    la-in-f18.1e100..https ESTABLISHED
tcp4       0    517  192.168.0.104.59138    lb-in-f113.1e100.https ESTABLISHED
tcp4       0    517  192.168.0.104.59137    lb-in-f113.1e100.https ESTABLISHED

# Active Multipath Internet connections
Proto/ID  Flags      Local Address          Foreign Address        (state)    
icm6       0      0  *.*                    *.*                               

# Active LOCAL (UNIX) domain sockets
Address          Type   Recv-Q Send-Q            Inode             Conn             Refs          Nextref Addr
5e16cedc125c3a1f stream      0      0                0 5e16cedc125c3957                0                0 /var/run/mDNSResponder
5e16cedc125c3957 stream      0      0                0 5e16cedc125c3a1f                0                0
5e16cedc125c41ef stream      0      0                0 5e16cedc125c6f97                0                0 /var/run/mDNSResponder
5e16cedc125c6f97 stream      0      0                0 5e16cedc125c41ef                0                0
5e16cedc125c8c7f stream      0      0                0 5e16cedc125c8bb7                0                0 /var/run/mDNSResponder

5e16cedc125c4a87 dgram       0      0                0 5e16cedc125c94a7                0 5e16cedc125c356f
5e16cedc125c356f dgram       0      0                0 5e16cedc125c94a7                0 5e16cedc125c4447
5e16cedc125c4447 dgram       0      0                0 5e16cedc125c94a7                0 5e16cedc125c37c7
5e16cedc125c37c7 dgram       0      0                0 5e16cedc125c94a7                0 5e16cedc125c34a7
5e16cedc125c34a7 dgram       0      0                0 5e16cedc125c94a7                0 5e16cedc125c4767
26. Что такое маршрутизатор/роутер? Это устройство, которое имеет несколько сетевых интерфейсов и специальное ПО для маршрутизации, благодаря чему оно можем пересылать пакеты между разными сетями.
27. Что из себя представляет таблица маршрутизации? Таблица маршрутизации - электронная таблица (файл) или БД, которая содержит записи с указанием соответствия между адресом назначения и интерфейсом, через который следует передать пакет до следующего роутера. Пакет может передаваться в текущую сеть или на следующий роутер.
28. Какие основные колонки содержатся в таблице маршрутизации? 1) Network destination 2) Netmask 3) Gateway (это адрес сетевого интерфейса следующего роутера) 4) Interface (это адрес сетевого интерфейса ТЕКУЩЕГО роутера). 5) Metric (расстояние до точки назначения, чем оно меньше - тем предпочтительнее путь). Суть: Чтобы попасть в Network destination нужно выйти в роутера через Interface и пойти в следующий роутер через Gateway.
Таблица маршрутизации

===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 14 2a 8b a1 b5 ...... NVIDIA nForce Networking Controller
0x3 ...00 50 56 c0 00 01 ...... VMware Virtual Ethernet Adapter for VMnet1
0xd0005 ...00 53 45 00 00 00 ...... WAN (PPP/SLIP) Interface
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    89.223.67.129   89.223.67.131       20
     60.48.85.155  255.255.255.255    89.223.67.129   89.223.67.131       20
      60.48.105.1  255.255.255.255    89.223.67.129   89.223.67.131       20
    60.48.172.103  255.255.255.255    89.223.67.129   89.223.67.131       20
    60.48.203.116  255.255.255.255    89.223.67.129   89.223.67.131       20
     60.49.71.132  255.255.255.255    89.223.67.129   89.223.67.131       20
    66.36.138.228  255.255.255.255    89.223.67.129   89.223.67.131       20
    66.36.152.228  255.255.255.255    89.223.67.129   89.223.67.131       20
   74.108.102.130  255.255.255.255    89.223.67.129   89.223.67.131       20
    89.223.67.128  255.255.255.192    89.223.67.131   89.223.67.131       20
    89.223.67.131  255.255.255.255        127.0.0.1       127.0.0.1       20
   89.255.255.255  255.255.255.255    89.223.67.131   89.223.67.131       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
   164.77.239.153  255.255.255.255    89.223.67.129   89.223.67.131       20
     192.168.23.0    255.255.255.0     192.168.23.1    192.168.23.1       20
     192.168.23.1  255.255.255.255        127.0.0.1       127.0.0.1       20
   192.168.23.255  255.255.255.255     192.168.23.1    192.168.23.1       20
    192.168.192.0    255.255.255.0  192.168.192.251  192.168.192.251      1
  192.168.192.251  255.255.255.255        127.0.0.1       127.0.0.1       50
  192.168.192.255  255.255.255.255  192.168.192.251  192.168.192.251      50
   212.113.96.250  255.255.255.255    89.223.67.129   89.223.67.131       20
   219.95.153.243  255.255.255.255    89.223.67.129   89.223.67.131       20
        224.0.0.0        240.0.0.0    89.223.67.131   89.223.67.131       20
        224.0.0.0        240.0.0.0     192.168.23.1    192.168.23.1       20
        224.0.0.0        240.0.0.0  192.168.192.251  192.168.192.251      50
  255.255.255.255  255.255.255.255    89.223.67.131   89.223.67.131       1
  255.255.255.255  255.255.255.255     192.168.23.1    192.168.23.1       1
  255.255.255.255  255.255.255.255  192.168.192.251  192.168.192.251      1
Default Gateway:     89.223.67.129
===========================================================================
Router table
Пример таблицы маршрутизации роутера A
29. Что такое адресный план? Это процесс разбиения IP-пространства на подсети одинакового размера. Это необходимо для безопасности и производительности. Например, когда нужно разграничить отделы предприятия. Компьютеры внутри подсети обмениваются напрямую, а доступ в интернет - через шлюз.
30. Что такое агрегация? Процесс объединения мелких префиксов с длинной маской и маленьким количеством хостов в более крупные - с короткой маской и множеством хостов. Необходима для уменьшения объема информации для указания роутеру.
31. Что такое CIDR? Classless InterDomain Routing - БЕСклассовая междоменная маршрутизация. Позволяет гибко делить пространство IP адресов за счет переменной длины маски подсети.
32. Что такое VLSM? Variable Length Subnet Mask, переменная длина маски подсети — ключевая сущность бесклассовой адресации. Маска может быть любой длины от 0 до 32 бит.
33. Сколько битов в IP адресе относятся непосредственно к самому хосту? Часть битов слева обозначают сеть. Количество этих битов указано в маске подсети. Например, если сеть имеет маску 255.255.255.0, то это значит, что 24 бита слева адреса - это адрес сети. Все остальные биты отводятся под адрес хоста.
34. Дан адрес 192.168.10.16/24. Определите сеть и адрес хоста. Маска 24 бита, значит 192.168.10.0 - подсеть, а 16 - устройство внутри сети.
35. Дан адрес 192.168.10.16/16. Определите сеть и адрес хоста. Маска 16 бит, значит 192.168.0.0 - подсеть, а 10.16 - устройство внутри сети.
36. Дан адрес 192.168.10.130/25. К какой сети относится данный адрес? Переводим адрес в двоичный: 11000000. 10101000. 00001010. 10000010. Длина маски 25, значит первые 25 разрядов и есть адрес сети. Обнуляем все после 25го разряда: 11000000. 10101000. 00001010. 10000000. Переводим обратно в двоично-десятичную форму: 192.168.10.128. То есть наш адрес 192.168.10.130 относится к сети 192.168.10.128
37. Даны адреса 192.168.10.16 и 192.168.11.50. Находятся ли они в одной подсети? Зависит от того, какая у сети маска. Если /16 (то есть 255.255.0.0) - но да, а если /24 (255.255.255.0) - то нет. д
38. Какие адреса в сети нельзя назначать устройствам? Первый адрес - он обозначает саму сеть (в нем все биты под адреса устройств заполнены нулями). Последний адрес - широковещательный (в нем все биты под адреса заполнены единицами). Это значит, что все, что будет отправлено на этот адрес, будет рассылаться всем участникам сети. Пример: сеть 192.168.128.0/24. Первый адрес - 192.168.128.0. Последний 192.168.128.255.
39. Сколько хостов будет в сети с префиксом /24? Будет 2 в 8 степени = 256. И еще вычитаем 2 адреса (первый и последний), итого получаем 254 хоста.
40. Сколько хостов будет в сети с префиксом /22? Будет 2 в степени 10 = 1024. Итого 1022. 63
Subnets example
Пример разбиения сети 128.1.0.0/16 на подсети
subnets
Пример разбиения сети 192.168.0.0/24 на подсети
41. Что такое VLAN? Virtual Local Area Network, виртуальная локальная сеть — это функция в роутерах и коммутаторах, позволяющая на одном физическом сетевом интерфейсе (Ethernet, Wi-Fi интерфейсе) создать несколько виртуальных локальных сетей. VLAN используют для создания логической топологии сети, которая никак не зависит от физической топологии.
42. Как обработается пакет с dst IP: 10.0.2.179 при следующей таблице маршрутизации роутера?
default nexthop 10.0.0.3
10.0.2.0/16 nexthop 10.0.0.1
10.0.2.128/25 nexthop 10.0.0.2
10.0.0.10/24 direct net eth0

Отправится на 10.0.2.128/25
43. Как обработается пакет с dst IP: 10.0.0.179 при следующей таблице маршрутизации роутера?
0.0.0.0/0 nexthop 10.0.0.3
10.0.0.0/16 nexthop 10.0.0.1
10.0.0.0/24 direct eth1.10
10.0.2.0/24 nexthop 10.0.0.2

Отправится на 10.0.0.0/24 (имеет более узкий диапазон чем 10.0.0.0/16, поэтому является более приоритетным)

5. Базы данных, SQL

  1. Основные понятия. БД - набор сведений, хранящийся некоторым упорядоченным образом. СУБД - совокупность языковых и программных средств, с помощью которых осуществляется доступ к данным. SQL - язык структурированных запросов, который предоставляет просто способ к считыванию и записи данных. Схема: SQL -> СУБД -> БД
  2. Виды БД. Иерархическая, сетевая (есть связь многие-ко-многим), реляционная (все данные представлены в виде таблиц), объектно-ориентированная, гибридная.
  3. Реляционная БД. БД, основанная на реляционной модели данных. Реляционная модель - совокупность данных, состоящая из набора двумерных таблиц. Каждая таблица состоит из столбцов (полей/атрибутов) и строк (записей/кортежей).
  4. Свойства таблиц в реляционной БД. Свойства: 1. В таблице не может быть двух одинаковых строк. 2. Столбцы располагаются в определенном порядке, который задается при создании таблицы. 3. В таблице может не быть строк, но должен быть хотя бы 1 столбец. 4. У каждого столбца есть уникальное (в пределах таблицы) имя и тип значений. 5. Каждая ячейка должна иметь атомарное значение.
  5. Первичный ключ (Primary key, PK). Первичный ключ - поле или набор полей, которые однозначно идентифицируют запись в таблице.
  6. Виды связей между таблицами. 1. Один-к-одному (например, Сотрудник - Паспорт). 2. Один-ко-многим (например, Сотрудник - Должность) 3. Многие-ко-многим (Преподаватель - Группа).
  7. Внешний ключ (Foreign key, FK). Необходим для установления связей между таблицами. Как правило, он соединяет Первичный ключ главной таблицы и столбец/столбцы дочерней таблицы.
  8. Концептуальная модель БД. Это отражение предметной области, в которой разрабатывается БД. Как правило, представляет собой диаграмму, в которой 1) объекты - прямоугольники, 2) связи между объектами - ромбы, 3) атрибуты объектов - овалы.
  9. Как происходит процесс преобразования концептуальной модели в реляционную? 1. Составляем таблицы и создаем первичные ключи. 2. Проводим процесс нормализации.
  10. Нормализация. Это приведение структуры БД к виду, обеспечивающему минимальную логическую избыточность. Каждая нормальная форма налагает определенные ограничения на данные. Например, таблица находится в первой нормальной форме, если все ее поля имеют атомарные значения.
  11. SQL запросы. Примеры.
11.1. SQL. Создание таблицы CREATE TABLE

-- Cоздадим таблицу с названием months и тремя столбцами
CREATE TABLE months (id int, name varchar(10), days_number int);
11.2. SQL. Ввод данных INSERT INTO

-- Добавим в таблицу месяц Январь
INSERT INTO months (id,name,days_number) VALUES (0, ‘Junuary’, 31);
11.3. SQL. Получение данных SELECT

-- Простые запросы 
SELECT * FROM books; 
SELECT name, author FROM books; 
SELECT * FROM books ORDER by name DESC

-- Запросы с WHERE
SELECT * FROM books 
WHERE author = ‘I. S. Turgenev’;

SELECT * FROM books 
WHERE year >= 1900 AND  genre == ’Story’; 

SELECT * FROM books 
WHERE genre IN (’story’, ‘detective’); 

SELECT * FROM books 
WHERE year BETWEEN 1900 AND 1950; 

SELECT * FROM books 
WHERE name LIKE ‘K%’;

SELECT count(distinct beers) FROM participant;

-- Запросы с функциями
SELECT MIN(year) FROM books; 
SELECT SUM(pages_number) FROM books; 
SELECT author, AVG(pages_number) as avg_pages_number FROM books GROUP BY author;

-- Вложенный SELECT
SELECT name, author WHERE year = ( SELECT MIN(year) from books );

-- Соединение таблиц
SELECT books.name, books.year, publisher.name 
FROM books INNER JOIN publishers 
ON books.publisher_id = publishers.id

-- Оконные функции
SELECT date, cash_flow, 
SUM(cash_flow) OVER (ORDER BY date ASC) AS cumulative_cf 
FROM transactions;
11.4. SQL. Обновление данных UPDATE SET

-- Для всех книг с количеством страниц больше 200 проставим размер big
UPDATE books SET size = ‘big’ 
WHERE pages_number > 200
11.5. SQL. Удаление записей из таблицы DELETE FROM

Удалим из таблицы все книги, написанные Л. Н. Толстым
DELETE FROM books WHERE author = ‘L. N. Tolstoy’
11.5. SQL. Удаление таблицы TRUNCATE TABLE

-- Удалим таблицу books
TRUNCATE TABLE books;
12. SQL. Какая разница между LEFT, RIGHT, INNER, OUTER JOIN? Простой JOIN (он же INNER JOIN) покажет только общие записи обеих таблиц. Каким образом записи считаются общими, определяется полями в join-выражении. Например, запись FROM table1 JOIN table2 on table1.id = table2.id означает что будут показаны записи с одинаковыми id, существующие в обеих таблицах. LEFT JOIN (или LEFT OUTER JOIN) показывает все записи из левой таблицы (той, которая идет первой в join-выражении) независимо от наличия соответствующих записей в правой таблице. RIGHT JOIN (или RIGHT OUTER JOIN) действует в противоположность LEFT JOIN - показывает все записи из правой (второй) таблицы и только совпавшие из левой (первой) таблицы. FULL JOIN - покажет все записи из обеих таблиц. CROSS JOIN - декартово произведение таблиц (всевозможные сочетания строк таблиц).
13. Что такое Timeseries данные? Временные ряды - данные о процессе, которые собраны в разные моменты его жизни. Например, данные о перемещении автомобиля, статистика посещения сайта. Популярные хранилища: InfluxDB, Graphite, Prometheus, TimescaleDB (расширение для PostgreSQL). Особенности: 1) Обязательна временная метка. 2) Уровни ряда - характеристики процесса (например, скорость, координаты, направление). 3) Работа в Append-only режиме.
14. Примеры реляционных БД. Информация хранится в таблицах — наборах связанных друг с другом записей, организованных в столбцах и строках. Должна быть определена схема, по которой приложения будут записывать информацию в БД. Примеры: Microsoft SQL Server, PostgreSQL, MySQL.
15. Примеры нереляционных БД. Строго определенной схемы взаимосвязи между данными нет. MongoDB, Apache Cassandra, Oracle NoSQL Database, Berkeley DB, Redis, Amazon DynamoDB
16. Типы noSQL баз данных. Key-value, матричные, документо-ориентированные, графовые.
17. Преимущества нереляционных БД. Горизонтальная масштабируемость, производительность, работа с неструктурированными данными. Недостатки: ограниченность языка, ненадежные транзакции.
18. Когда лучше использовать нереляционные БД? 1) Большие объемы разнообразных данных 2) Кэширование (TTL)
19. Оптимизация запросов SELECT. 1) Не читайте больше данных чем надо. Не используйте *. 2) Корректно используйте JOIN - столбцы объединения должны иметь один тип данных. Если часто нужны объединять данные, то лучше хранить их в отдельном столбце. 3) Ограничить использование DISTINCT - она исключает повторяющиеся строки в результате. Команда требует повышенного времени обработки. Лучше всего комбинировать с LIMIT. 4) Оптимизация WHERE в запросе SELECT - если where состоит из условий, объединенных AND, они должны располагаться в порядке возрастания вероятности истинности данного условия.
20. Какие параметры используются в конструкции order by? ASC и DESC.

6. Виртуализация, Docker, Kubernetes

  1. Что такое виртуализация? Предоставление вычислительных ресурсов, которое абстрагировано он аппаратной реализации. При этом реализуется логическая изоляция вычислительных процессов, которые находятся на одном физическом ресурсе.
  2. Что такое виртуальная машина? Программная/аппаратная система, эмулирующая аппаратноое обеспечение гостевой платформы на базе host-платформы.
  3. Что такое гипервизор? Программа или аппаратная схема, обеспечивающая одновременное выполнение нескольких ОС. Она обеспечивает их изоляцию и распределение ресурсов.
  4. Что такое контейнер? Независимая среда выполнения с собственным процессором, пямятью, сетевыми ресурсами, которая использует ядро хостовой ОС. Изоляция происходит на уровне процесса ОС.
  5. Чем отличается виртуализация от контейнеризации? При виртуализации создается отдельная операционная система с соответствующими ресурсами. При контейнеризации используется ядро операционной системы, на которой запускается контейнер.
  6. Что входит в состав Docker? 1) Демон (обеспечивает изоляцию на уровне файловой системы, процессов, сети) 2) Клиентские средства (чтобы из терминала управлять образами и контейнерами) 3) API (управлять контейнерами в стиле REST)
  7. Назовите основные сущности Docker. Docker image, Dockerfile, Docker registry, Docker container.
  8. Основные команды Docker: docker container create / start / run / attach / exec / ls / stop / kill / rm, docker image build / push / pull / ls / rm / images, docker version, docker system prune.
  9. Перечислите основные команды для Dockerfile? FROM, RUN (команда выполняется при билде имаджа), CMD (команда выполнится по дефолту при старте контейнера, может быть заменена на другую при запуске docker run <image> <other_command>), LABEL, EXPOSE (указывает порт для проброса), ENV, COPY (копирует файлы и кладет в FS), ADD (похожа на COPY + может скачивать по url), ENTRYPOINT (хитро комбинируется с CMD), VOLUME (делает mount point), USER, WORKDIR, ARG (параметры при запуске docker build), STOPSIGNAL, HEALTHCHECK, SHELL.
  10. Объясните разницу в запуске команд внутри Dockerfile через exec и shell формы? RUN <command> (shell форма, команда выполняется в шеле, по умолчанию /bin/sh -c для Linux или cmd /S /C для Windows). RUN ["executable", "param1", "param2"] (exec форма). В отличае от shell формы, exec форма не использует командную оболочку.
  11. Что делает команда docker container rm --force <id>? Удаляет запущенный контейнер без предварительного выключения. Лучше вызывать docker container stop с последующим docker container rm
  12. Что такое Docker Swarm? Платформа оркестрации Docker контейнеров. Объединяет несколько контейнеров в один виртуальный хост. Состав кластера: 1) ноды 2) службы и задачи 3) балансировщики нагрузки.
  13. Что такое Docker Layers? Docker управляет образами с помощью внешнего драйвера хранилища. Образы сделаны из упорядоченных слоев. Слой - набор изменений файловой системы. Складываем все слои -> получаем новый образ (в нем все накопленные изменения). Когда создается контейнер, добавляется новый слой. Удобство слоев: можно не пересобирать весь образ при частичном изменении, образы/контейнеры могут ссылаться на общие слои.
Dockerfile example

ENV id=48ab5012b
FROM python:3.9

RUN  mkdir -p /opt/app
WORKDIR /opt/app

ENV PYTHONPATH /opt/app

RUN pip3 config -v debug

RUN apt-get update
RUN apt-get install -y zbar-tools libzbar-dev zip sshpass openssh-client curl git libssl-dev make iputils-ping xvfb rdesktop

COPY pip.conf  /etc/pip.conf
RUN python3 -m venv venv && pip3 install --upgrade pip

COPY selenium/requirements.txt /opt/app/requirements.txt

RUN pip3 install -r requirements.txt

RUN mkdir -p /root/.ssh && \
        chmod 700 /root/.ssh && \
        touch /root/.ssh/known_hosts && \
        chmod 600 /root/.ssh/known_hosts
Useful Docker commands

# -----------
# 1. Run container from alpine image
$ docker container run alpine:latest
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
7264a8db6415: Pull complete
Digest: sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a
Status: Downloaded newer image for alpine:latest

# The container ID is 888e89a3b36b. Status is Exited
$ docker container ls --all
CONTAINER ID   IMAGE           COMMAND     CREATED          STATUS                      PORTS     NAMES
6e34c821672f   alpine:latest   "/bin/sh"   19 seconds ago   Exited (0) 18 seconds ago             elegant_wilson

# -----------
# 2. Run interactive container with ubuntu image
# --tty allocates a pseudo-tt
# --rm tells Docker to remove the container when its execution is finished
$ docker container run --interactive --tty --rm ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
b237fe92c417: Pull complete
Digest: sha256:ec050c32e4a6085b423d36ecd025c0d3ff00c38ab93a3d71a460ff1c44fa6d77
Status: Downloaded newer image for ubuntu:latest

# Work inside container
root@239247f11f9e:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@239247f11f9e:/# cat /etc/issue
Ubuntu 22.04.3 LTS
root@239247f11f9e:/# exit
exit
#  Since --rm flag was used, Docker removed the container when it stopped.
$ ls --all
CONTAINER ID   IMAGE           COMMAND     CREATED          STATUS                      PORTS     NAMES
6e34c821672f   alpine:latest   "/bin/sh"   16 minutes ago   Exited (0) 16 minutes ago             elegant_wilson

# -----------
# 3. Run a background MySQL container
# --detach run in the background.
$ docker container run --detach --name mydb -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
$ docker container ls
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS      NAMES
3899eba0d4f0   mysql:latest   "docker-entrypoint.s…"   3 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp   mydb
# Display the running processes of a container
$ docker container top mydb
PID                 USER                TIME                COMMAND
303                 999                 0:01                mysqld

# Execute cmd inside container with name mydb
$  docker exec -it mydb \
>  mysql --user=root --password=$MYSQL_ROOT_PASSWORD --version
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql  Ver 8.1.0 for Linux on x86_64 (MySQL Community Server - GPL)

# Connect to a new shell process inside mydb container
$  docker exec -it mydb sh
sh-4.4# ls
bin   dev                         etc   lib    media  opt   root  sbin  sys  usr
boot  docker-entrypoint-initdb.d  home  lib64  mnt    proc  run   srv   tmp  var
sh-4.4#

# -----------
# 4. Run a custom web app and publish it
# Clone repo with app
$  git clone https://github.com/dockersamples/linux_tweet_app
$  cd ~/linux_tweet_app

# Build image from Dockerfile
$  cat Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html
COPY linux.png /usr/share/nginx/html
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
$  export DOCKERID=<your_login_to_docker_hub>
$  docker image build --tag $DOCKERID/linux_tweet_app:1.0 .                                                             
 => [internal] load build definition from Dockerfile                                            
 => => transferring dockerfile: 186B                                                           
 => [internal] load metadata for docker.io/library/nginx:latest                                
 => [1/3] FROM 
 => [2/3] COPY index.html /usr/share/nginx/html                                                 
 => [3/3] COPY linux.png /usr/share/nginx/html                                                   
 => exporting to image                                                                          
 => => exporting layers                                                                         
 => => writing image 
 => => naming to docker.io/nocuddles/linux_tweet_app:1.0   

# Change the site
$  cp index-new.html index.html

# Build new image file
$  docker image build --tag $DOCKERID/linux_tweet_app:2.0 .
$  docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
<docker_id>/linux_tweet_app   2.0       c22259b0b5c0   19 seconds ago   187MB
<docker_id>/linux_tweet_app   1.0       532a95958384   18 minutes ago   187MB

# Push new image to Docker Hub
$  docker login
$  docker image push $DOCKERID/linux_tweet_app:1.0
$  docker image push $DOCKERID/linux_tweet_app:2.0

# Pull image
docker pull <docker_id>/linux_tweet_app:2.0
Run/stop container examples

# Run container
# Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
$ docker container run alpine hostname
$ docker container run --interactive --tty --rm ubuntu bash
$ docker container run --detach --name mydb -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
$ docker container run --detach --publish 80:80 --name linux_tweet_app $DOCKERID/linux_tweet_app:1.0
$ docker container run --detach --publish 80:80 \
 --name linux_tweet_app --mount type=bind,source="$(pwd)",target=/usr/share/nginx/html
 $DOCKERID/linux_tweet_app:1.0

# Stop/remove container
# Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
$ docker stop <id> # graceful shutdown
$ docker kill <id> # brutal shutdown
$ docker rm <id> # removes container
$ docker rm --force <id> # removes container without shutting down
$ docker run --rm -it Ubuntu /bin/bash # will remove container as soon as it stops
Docker Hub
14. Что такое Kubernetes? Программный продукт, предназначенный для управления кластером Docker контейнеров.
15. Kubernetes. Node. Нода (узел) - виртуальная машина или физический компьютер в кластере Kubernetes. У каждого узла есть Kubelet - агент, который взаимодействует с ведущим узлом. На узле есть Docker. Ноды объединяются в кластер. Должно быть как минимум три Ноды в кластере. Мастер-нода непосредственно управляет кластером, используя для этого controller manager и scheduler. Она ответственна за интерфейс взаимодействия с пользователями через сервер API и содержит в себе хранилище etcd с конфигурацией кластера, метаданными и статусами объектов.
16. Kubernetes. Pod. Набор из одного и более контейнеров для совместного развертывания на ноде. Группировка контейнеров нужна, когда они взаимозависимы и должны запускаться в одной ноде. Это увеличивает скорость отклика. Например, это могут быть контейнеры, хранящие веб-приложение и сервис для его кэширования.
17. Kubernetes. ReplicaSet. Объект, отвечающий за контроль за несколькими экземплярами (репликами) Подов. Позволяет повысить устойчивость к отказам.
18. Kubernetes. Deployment. Хранит описание подов, количество реплик и алгоритм их замены в случае изменения параметров.
Install Kubernetes

# Kubectl — позволяет создавать и настраивать объекты в кластере
# Kubelet — занимается запуском контейнеров на хостах
# Kubeadm — позволит настраивать компоненты, составляющие кластер
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

# Инициализация кластера
kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Добавление Ноды в кластер
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

6. Брокеры сообщений, Apache Kafka, RabbitMQ

  1. Что такое микросервисы? Вариант архитектуры ПО, при котором оно представляет собой набор независимых друг от друга небольших, слабо связанных и легко изменяемых модулей. Идет в противовес монолитной архитектуре, при которой ПО - это единый модуль.
  2. Назовите преимущества/недостатки микросервисной архитектуры? Преимущества микросервисной архитектуры: гибкость, меньшая сложность, повторное использование фукнционала, устойчивость к отказам отдельных сервисов (монолит падает полностью). Недостатки: сложнее мониторить, разные ЯП и фреймворки, проблемы с аутентификацией и авторизацией, нужны системы оркестрации и дейплоймента.
  3. Что такое распределенная система? Набор программных компонентов, которые используют вычислительные ресурсы нескольких отдельных вычислительных узлов для достижения общей цели. Плюсы: надежность, производительность, легкое масштабирование.
  4. Какие виды взаимодействий между сервисами знаете? 1. Синхронные вызовы. Недостаток - цепочка синхронных вызовов к микросервисам приведет к ожиданию ответов от всех сервисов. Поэтому синхронные вызовы лучше использовать по правилу "один вызов на один запрос пользователя". Используем REST. 2. Асинхронные вызовы. В таком случае используем системы обработки очередей - RabbitMQ, Apache Kafka, ActiveMQ.
  5. Что такое gRPC (Google Remote Procedure Call)? Это RPC-фреймворк с открытым исходным кодом, который используется для создания масштабируемых и быстрых API. Фреймворк основан на RPC. В RPC взаимодействие между клиентом и сервером происходит так, будто клиентский API-запрос выполняется локально. В RPC клиент отправляет запрос процессу на сервере, который постоянно слушает удаленные вызовы. RPC использует IDL - Interface Definition Language для контрактации типа данных и методов, которые будут вызываться. gRPC = RPC + оптимизации. Основные концепции gRPC: 1) Буферы протокола (Protobuf, стандартизируют сериализацию и десериализацию, автоматически генерируют код для клиентов). 2) HTTP/2 (эта версия HTTP поддерживает двунаправленный дуплексный поток для передачи данных в двоичном формате, можно одновременно отправлять/получать несколько запросов). По архитекттуре gRPC состоит из клиента и сервера.
  6. В каким случаях лучше использовать gRPC, а когда REST? REST: веб-архитектура, общедоступные интерфейсы для легкого внешнего понимания пользователями, простой обмен данными. gRPC: высокопроизводительные системы, много данных, приложения реального времени.
  7. Какую версию HTTP использует gRPC? gRPC API использует версию HTTP 2. Она не имеет универсальной поддержки браузеров (в отличие от HTTP 1.1). Это может сделать gRPC менее привлекательным вариантом при разработке веб-приложений.
  8. Что такое MQTT (Message Queuing Telemetry Transport)? Протокол обмена сообщениями по шаблону издатель-подписчик (pub/sub). Часто применяется в IoT.
  9. Что такое брокер сообщений? Это программный компонент, который служит посредником между компонентами распределенной системы. Удобно использовать при микросервисной архитектуре: брокер выступает в качестве центрального роутера, каждый сервис подписывается на свой тип сообщений (тема, топик). Также используется в мобильных приложениях (push-уведомления, транзакционные системы). Схема: продюсер -> брокер -> потребитель
  10. Какие выгоды применения брокеров сообщений знаете? 1. Организация связи между службами, даже если одна из них не работает (т е потребитель может быть недоступен). 2. Асинхронная обработка сообщений увеличивает скорость работы 3. Надежность доставки - брокеры дают возможность многократно отправлять сообщения. 4. Сглаживание пиковых нагрузок.
  11. Какие недостатки применения брокеров знаете? 1. Усложнение системы в целом 2. Зависимость от надежности сети 3. Асинхронность может давать непредсказуемые ошибки
  12. Особенности брокера RabbitMQ. Протокол AMQP. Инициатор информационного обмена - продюсер (подписчик сам не может запросить, push). Поддерживается обоюдное подтверждение доставки (брокер подтверждает продюсеру, подписчик подтверждает брокеру). Если получение не произошло - отправляется информационное сообщение, а сообщение остается в очереди до получения подписчиком. Возможен роутинг - сообщение на пути к подписчику может проходить несколько промежуточных узлов, которые могут перенаправлять его в различные очереди. Удаляет сообщение после доставки.
  13. Особенности брокера Apache Kafka. Протоколы: HTTP, MQTT, WebSocket. Инициатор обмена - подписчик (pull). Все сообщения хранятся в виде распределенного лога. Порядок сообщений в логе отражает порядок поступления. Продюсеры пишут в лог, сообщение в логе хранится в течение определенного времени, подписчики запрашивают сообщения.
Protobuf example: product.proto

syntax = "proto3";

package api;

import "price.proto";

message Product {
    message Id {
        uint32 value = 1;
    }
    Id id = 1;
    string name = 2;
    string text = 3;
    string url = 4;
    Price price = 5;
}
15 СЕНТЯБРЯ / 2023
Как вам материал?

Читайте также