Приветствую, ниже список вопросов которые я задавал devops инженеру на этапе собеседования (собеседование с командой). Зачастую, мы отыгрывали модель хороший-плохой коп :). Я старался быть хорошим, обычно более жесткую технику спрашивали на первом этапе собеседовании или же коллега из R&D/Производства. Вопросы уже неактуальны, давались 2 года назад мной (я был еще более зеленым). Скорее просто нашел старую заметку - удалять жалко
Сразу оговорюсь, что нам на самом деле был нужен просто толковый админ с зачатками программирования и более-менее хорошей производственной культурой (тесты, воспроизводимость результата и т.д.).
Обычно адекватно оценить соискателя просто — «поговорить за жизнь». Т.е. о работе что делал, с какими проблемами сталкивался, как решали. А как бы он решил, если бы эти ограничения сняли?
Общий вопрос
- Расскажи, что такое CI и что такое CD? Что в себя включает каждый этап? А в чем разница между Continuous Deployment (деплой на бой по клику) и Continuous Delivery (все тесты прошли - автоматом деплой)?
- Какая любимая операционка? А почему? Какие IDE используешь в повседневе? А инструменты?
- Что такое кеширование и почему это важно?
- Что такое statefull и stateless приложения? В чем плюсы последнего (Ответ: идеальное горизонтальное масштабирование - мы не сохраняем состояния. Пример stateefull-бд)
- Опиши, что такое IaC? (Инфра как код, например Ansible/Puppet/Chef и т.д). С какими системами управления конфигурациями работал? Почему именно с ними, в чем между ними разница?
- Как ты управляешь артефактом после сборки ? Какие хранилища используешь?
- Вот у тебя NodeJS проект - стоит задача юзать на проекте ноду - необходимо обеспечить возможность быстрого обновления ноды - как ты это сделаешь? (Ответ - поставлю nvm)
GIT и процессы - Какой у вас git-flow был? А как апдейты выкатывали ? (Вдогонку уточняющий - Собирали ли отдельно каждый Pull Request, или уже после влития в dev. Если да - то как собирали, как гарантировали, что не поломаете dev после влития). Как вообще Git работает?
- А как бы построил CI/CD для группы программистов? Как бы ты осуществлял бы деплой билда и проверял его корректность?
На чем бы строил? (Jenkins, team city, bamboo, gitlab, что-нибудь другое).
А почему? А как сине-зеленые билды делал? А что такое канореечные релизы ? (Ответ - когда выкатываешь апдейт на прод рядом со старой версией и на новую сажаешь ограниченное количество пользователей и смотришь как оно себя ведет) - Опиши TDD процесс, как ты тесты вплетал бы в CI процесс? Опиши свой идеальный по твоему мнению CI процесс. А статический анализатор внедрял и на каком этапе, а какой?
Jenkins - вопросы в общем виде - Если есть опыт работы с Jenkins - в дополнение, к предыдущему вопросу - с какими способами описания пайплайна работал? (Groovy файл (?), Jenkinsfile, Обычная Джоба). Как организовать MultiBranch Pipeline и для чего он нужен? (Отсылка к 8-ому вопросу), тут можно еще спросить - как контролировал статус Pull request’a, что он ничего не ломает
- Из частной практики - вот у тебя Jenkins (стоит локально на машине) не может достучаться до Docker на этой же машины - вопрос почему? Вот он ругается на права доступа, что надо сделать? (Ответ: Добавить пользователя Jenkins в группу докера)
- Как бы сделал CD используя Jenkins ? (Лить билды под ssh, в хранилище docker образов и забирать оттуда, можно крутить сразу на Jenkins-Slave ноде).
- Как выполнять одну глобальную джобу на нескольких нодах (Jenkins-Slave)? (Ответ - глобальная джоба запускается, а поддждобы запускаются на нужных нодах).
- Есть ли опыт разработки плагинов для дженкинса?
Docker - У тебя стоит виртуалка - твоя задача максимально быстро развернуть на нее всю нужную инфру. Как ты это сделаешь ? Погонять про docker-compose.
- Какие утилиты знаешь, для удобного управления доккер контейнерами? А с упором на неподготовленного пользователя - где есть GUI какой-нибудь, а не консоль. (Может быть несколько - я юзаю portioner - через веб интерфейс).
- А есть готовые утилитка для организации CD на Кубер? Какие смотрел?
Nginx и балансировка нагрузки - Как ты сделаешь балансировку на хост ? Вводные у тебя 2 машины - трафик должен литься на них в зависимости от их нагрузки, что предложишь использовать в качестве балансёра (HaProxy, Nginx, X5). А чем они отличаются? (Nginx не учитывает нагрузку машины - HaProxy, учитывает, X5- не знаю)
- Чем плоха схема когда трафик льется сразу на ноду? (Ответ: Задержки, от конкретной ноды, тем более под нагрузкой).
А в чем узкое место схемы с балансёром? (1 балансёром который пускает на себя трафик на 3 ноды, если балансёром приляжет - упадет все).
Какие варианты организации тут ты можешь предложить? (Просто посмотреть, что предложит)
- Практическая задача на nginx: тебе по определенному адресу необходимо обеспечивать трафик на одну из машин как ты это сделаешь? (Задача на reverse proxy - должен рассказать кейс как у нас на sc.link был), а если необходимо отрабатывать частно все роуты api кроме api/docs, а если дефолтный роут - перекидывать на бекенд, а часть на фронтент? (Ответ: задачка на регулярку которая у нас на sc.link юзается. Есть второй способ из документации - nginx опрашивает все хосты и пытается найти адрес, но у нас не сработало на нашем кейсе и это фича Enterprise версии. Вообще, Ромыч переписал конфиг за мной и теперь регулярку нет необходимости юзать :) )
.
Что ты тут предложишь? - Практический вопрос: У тебя Nginx крутится на хосте с ssl шифрованием, в режиме reverse proxy (мы прикидываем https) - по какому протоколу будешь делать reverse proxy на результирующие машинки (спрятаны за vpn). А что будет быстрее - результирующий трафик гнать на https спрятанной машины или по http? А почему? (Правильный ответ: С результирующего хоста гнать на машинку по http, потому что гнать трафик по https->https более накладно по времени). Поспрашивать про HttpV2 - общую эрудированность
- <Всякие уже linux-specific вещи. Как на эрудированность, так и узкие моменты/способы подловить>
- <Вопросы по куберу>
No comments:
Post a Comment