Термин DevOps , без сомнения, вошел в модную фазу своей жизни. Все используют его, чтобы что-то означать, и нет недостатка в людях, готовых брать с вас небольшое состояние, чтобы показать вам, как правильно внедрить DevOps в вашей команде. Подвох: практически нет единого мнения о том, что на самом деле означает этот термин.
Многие скажут вам, что сложность определения DevOps связана с тем, что DevOps — это не «вещь» как таковая, а «философия» или «культура» — нечто мистическое и несколько неуловимое. Что странно, потому что большинство людей согласятся с тем, что DevOps, в конечном счете, должен быть практичным.
Для целей этой статьи мы возьмем очень простое и широкое определение: DevOps-инженер — это тот, кто обладает опытом кодирования и разработки программного обеспечения («dev»), а также опытом эксплуатации и инфраструктуры («ops»). Вдобавок ко всему, они немного одержимы эффективностью и инструментами. Это люди, которые могут анализировать сложные системы, а затем выявлять и устранять узкие места, часто используя для этого специальные инструменты.
Вы, вероятно, захотите работать с такими людьми, потому что сочетание этих навыков встречается редко и может принести пользу почти всем командам, от небольших стартапов до крупных корпораций.
Сложно нанять людей DevOps отчасти из-за отсутствия согласованного определения того, кем они являются. Однако также сложно использовать традиционное собеседование (состоящее из смеси теоретических вопросов собеседования и практических задач по кодированию) для оценки широты навыков, которые требуются инженерам DevOps.
Если вы хотите нанять кого-то, кто поможет вам с DevOps, и вы не знаете, как их оценивать, прочитайте некоторые вопросы и ответы, чтобы доказать, что они хорошо разбираются в необходимых вам навыках.
Многие скажут вам, что сложность определения DevOps связана с тем, что DevOps — это не «вещь» как таковая, а «философия» или «культура» — нечто мистическое и несколько неуловимое. Что странно, потому что большинство людей согласятся с тем, что DevOps, в конечном счете, должен быть практичным.
Для целей этой статьи мы возьмем очень простое и широкое определение: DevOps-инженер — это тот, кто обладает опытом кодирования и разработки программного обеспечения («dev»), а также опытом эксплуатации и инфраструктуры («ops»). Вдобавок ко всему, они немного одержимы эффективностью и инструментами. Это люди, которые могут анализировать сложные системы, а затем выявлять и устранять узкие места, часто используя для этого специальные инструменты.
Вы, вероятно, захотите работать с такими людьми, потому что сочетание этих навыков встречается редко и может принести пользу почти всем командам, от небольших стартапов до крупных корпораций.
Сложно нанять людей DevOps отчасти из-за отсутствия согласованного определения того, кем они являются. Однако также сложно использовать традиционное собеседование (состоящее из смеси теоретических вопросов собеседования и практических задач по кодированию) для оценки широты навыков, которые требуются инженерам DevOps.
Если вы хотите нанять кого-то, кто поможет вам с DevOps, и вы не знаете, как их оценивать, прочитайте некоторые вопросы и ответы, чтобы доказать, что они хорошо разбираются в необходимых вам навыках.
Учитывайте тип DevOps инженера
Вы будете сидеть за столом напротив того, кто утверждает, что обладает значительными знаниями в области DevOps, и вам нужно убедиться, что это правда. У вас будет совсем немного времени, чтобы оценить этого человека в трех специализированных областях: разработка программного обеспечения, операции и специализированные инструменты.
Ниже приведены несколько примеров вопросов, которые вы можете использовать для проверки знаний кандидата во всех трех областях. В зависимости от точного характера должности, на которую вы нанимаетесь, вы, вероятно, будете больше ценить одну или две из трех областей:
- В небольшой компании вам, вероятно, потребуется, чтобы ваш инженер DevOps умел писать код и привносил знания в области разработки программного обеспечения.
- В большой команде знание программирования по-прежнему является важным навыком, позволяющим человеку хорошо работать с вашей существующей командой разработчиков программного обеспечения, но становится менее важным, чем его способность понимать сложные системы, состоящие из людей и программного обеспечения, а также находить и устранять узкие места.
DevOps: вопросы, которые следует задать: разминка
Прежде чем вы слишком углубитесь в конкретные компетенции, вам нужно, чтобы у вашего кандидата было время, чтобы подготовиться к собеседованию. Одна из самых важных вещей, о которой следует помнить во время собеседования, заключается в том, что у каждого есть недостатки в характере или два. Цель собеседования не в том, чтобы поймать кандидата и выявить его слабости (хотя понять их полезно), а в том, чтобы понять сильные стороны кандидата и посмотреть, пересекаются ли они с тем, что вы ищете.
Хороший способ понять сильные стороны человека — спросить, в чем он хорош. Однако, особенно в условиях собеседования, это часто может привести к очень общим и расплывчатым ответам, например: «Я хорошо решаю проблемы» или «Я хорошо осваиваю новые навыки». Чтобы быть более конкретным, отличный стартовый вопрос для собеседования DevOps звучит так:
Расскажите мне о самой сложной проблеме, которую вы когда-либо решали
И/или: «Расскажи мне, каким достижением ты больше всего гордишься».
Кандидат на собеседование с DevOps-инженером, вероятно, сможет довольно легко ответить на этот вопрос (каждый рад рассказать о ярких моментах из своей истории), так что это хороший вопрос для ледокола.
Но вместо того, чтобы быть просто способом введения, это также может дать вам быструю отправную точку, чтобы найти конкретные детали для остальной части интервью. После широкого введения вы можете задать подробные вопросы о конкретных частях проблемы или достижениях, связанных с навыками, которые вы хотите нанять.
Например, если кандидат говорит о масштабировании веб-приложения для десятков тысяч пользователей, а вы ищете DevOps-инженера, ориентированного на инструменты, вы можете спросить, какие инструменты он использовал для достижения этой цели, почему они выбрали эти инструменты, как они научились их использовать и так далее.
Если вы ищете инженера DevOps, ориентированного на эксплуатацию, вы можете спросить, какую инфраструктуру он использовал, какие услуги или оборудование, как он справился с аппаратными сбоями, и изучить достижения с точки зрения вашей компании.
В зависимости от того, сколько времени у вас есть на DevOps-интервью, вы можете многому научиться, потратив 10–20 минут на задавание все более подробных вопросов о проекте кандидата.
В зависимости от уровня старшинства, на который вы нанимаете, вполне вероятно, что кандидат выберет что-то специализированное и выходящее за рамки ваших собственных знаний, так что это также хорошая возможность оценить его коммуникативные способности и, в частности, их способность объяснить что-то сложное в соответствующего уровня (т. е. тому, кто обладает общими знаниями, но не имеет опыта работы в конкретной теме).
Вот почему вопрос «Расскажите мне через три минуты о самой сложной проблеме, которую вы решили» или «Расскажите мне через три минуты, каким достижением вы больше всего гордитесь» — это всегда отличное начало .
Разработка программного обеспечения: теоретические вопросы интервью DevOps
Вы хотите, чтобы ваш кандидат на инженера DevOps обладал глубокими знаниями в области разработки программного обеспечения, даже если вы не ожидаете, что он будет писать много кода в своей роли. Это означает, что они должны понимать как основы программирования, такие как базовые алгоритмы и структуры данных, так и основы разработки программного обеспечения, например, как (и зачем!) использовать контроль версий.
Отличный вопрос для интервью DevOps, чтобы проверить, насколько хорошо кто-то знает о программировании, — это спросить о конкретной структуре данных, такой как хеш-таблица. Большинство людей так или иначе готовятся к техническим собеседованиям, поэтому лучше начать с простого вопроса, например:
Что такое хэш-таблица? Каковы его самые важные свойства?
Задавая вопрос «Что такое хеш-таблица и каковы ее наиболее важные свойства?», имейте в виду, что это только отправная точка для проверки того, что кандидат может дать вам что-то вроде хэш-таблицы — это сопоставление ключ-значение с O( 1) поиск в ответ. Однако этого ответа недостаточно, чтобы доказать нечто большее, чем механическое знание. Чтобы доказать более глубокое понимание, вы должны задать несколько дополнительных вопросов, например:
Можете ли вы привести пример подходящего сценария использования хеш-таблицы?
И/или: «А как насчет неподходящего сценария использования хеш-таблиц?»
Ключевое понимание, которое вы ищете здесь, заключается в том, что хэш-таблица обеспечивает эффективный поиск произвольных ключей, но она не упорядочена. Классическим примером подходящего сценария для хеш-таблиц может быть цифровая телефонная книга, в которой пользователь вводит имя человека и получает номер телефона.
Вполне возможно, что кандидату будет сложнее придумать неподходящий сценарий, поэтому будьте готовы дать несколько намеков. Одним из примеров может быть хранение списка стран, которые должны отображаться для пользователя в алфавитном порядке — вам не нужно каждый раз заново сортировать страны!
Если вы хотите более глубоко изучить теоретические знания в области программного обеспечения, это одна из самых простых областей для проверки знаний, поскольку здесь можно задать почти безграничное количество вопросов. Например, вы можете спросить:
В каком сценарии целесообразно использовать структуру данных Trie?
Где вы хотите увидеть, что кандидат понимает структуру данных Trie и как он может эффективно сортировать слова по префиксу, например, для создания инструмента автозаполнения. Или вы можете спросить:
Что такое фильтр Блума и когда его можно использовать?
Задавая вопрос об использовании фильтра Блума, подобный этому, вы сможете увидеть, понимают ли они, как найти компромисс между памятью и правильностью, используя эту структуру данных.
Примером использования фильтра Блума может быть кеш веб-прокси. Поскольку фильтр Блума может быстро сказать вам, если что-то определенно отсутствует в наборе, вы можете быстро выбрать обход кеша и получить новую страницу, когда это необходимо.
Разработка программного обеспечения: практические вопросы на собеседовании по DevOps
Замечательно, если ваш кандидат DevOps обладает «книжным умом» и знает о хеш-таблицах. Но вы захотите убедиться, что они действительно могут написать базовый код! Известное теперь исследование показало, что многие люди, работающие профессиональными кодерами, блефом пробивались на работу, для которой они не квалифицированы, и, по сути, не могут даже написать «FizzBuzz» без посторонней помощи.
(«FizzBuzz» — это базовое задание по программированию, в котором кандидата просят написать программу, которая выводит все числа от 1 до 100, но заменяет каждое число, которое точно делится на 3, на «Fizz», каждое число, которое точно делится на 5 с «Buzz» и каждое число, которое делится на 3 и 5 с «FizzBuzz».)
Эта задача теперь достаточно известна, и люди, скорее всего, запомнят решение, если не уверены, что смогут написать его по требованию, так что вы, вероятно, захотите немного изменить его. Например, вы можете спросить кандидата:
Пожалуйста, ответьте на следующее:
Для заданного целого числа i нас интересует, что произойдет, если мы суммируем цифры, составляющие квадрат этого целого числа, которое мы называем r. Например, для i=11 квадрат равен 121, а сумма цифр 1,2,1 равна 4, поэтому r=4. Найдите iв диапазоне [0,100], который дает наибольшее значение r. Что такое iи что есть r?
При собеседовании на роль DevOps вы, вероятно, не слишком заботитесь о языке, который кандидат выбирает для решения этой задачи, но если есть жесткое требование, это также хороший момент, чтобы проверить, знает ли кандидат базовый синтаксис. языка, в котором вам нужны знания. Вы должны убедиться, что кандидат может создать что-то вроде следующего кода:
largest_value = 0
largest_index = -1
for i in range(100):
x = str(i**2)
s = sum([int(j) for j in x])
if s > largest_value:
largest_value = s
largest_index = i
print(largest_index, largest_value)
# >> 83 31
Чтобы более глубоко проверить знания кандидата в области кодирования и опираться на некоторые теоретические вопросы, которые мы задавали, вы можете задать следующие вопросы:
Набросайте (используя код) дизайн и базовую реализацию хеш-таблицы, предполагая, что у вас есть доступ к другим базовым структурам данных (например, к массиву).
Вы, вероятно, не хотите тратить время, наблюдая, как кандидат записывает весь код для хеш-таблицы, но вам следует убедиться, что он понимает основной принцип (хэш-значения в заранее определенном диапазоне и сохранение их по индексу в массиве). и может записывать наиболее важные методы, такие как добавление новых значений в таблицу и их повторное получение.
Теперь, когда вы уверены, что ваш кандидат что-то знает о «Разработке», пришло время приступить к рассмотрению «Эксплуатации».
Знание операций: теоретические вопросы интервью DevOps
Опять же, вопросы, которые вы решите задать в этом разделе, будут сильно зависеть от вашей организации и от того, какие навыки вам нужны. Если вы уже зависите от конкретного облачного провайдера, такого как AWS, Azure или GCE, и хотите, чтобы ваш новый инженер DevOps участвовал в настройке служб там, вы должны убедиться, что у него уже есть опыт или он сможет быстро собери.
На данный момент мы предположим, что вам нужен кто-то со знаниями в области технических операций, т. е. с навыками, которые могут быть у традиционного системного администратора или системного администратора. Обратите внимание, что также довольно часто в ролях DevOps больше внимания уделяется бизнес-операциям — если это так для вас, вы можете заменить вопросы в этом разделе вопросами, адаптированными к вашей области и размеру бизнеса.
Если все ваши операции выполняются на одном или двух серверах, опыт работы с облачными технологиями будет менее важным, и вместо этого вы захотите проверить опыт кандидата в области базового управления сервером. Например, если вы используете веб-сервер на базе Linux, и вам потребуется инженер DevOps для его настройки, вы должны убедиться, что он имеет опыт использования команд Linux.
Если вы используете собственное оборудование локально, вам следует проверить, есть ли у кандидата опыт закупок и оптимизации затрат.
Во многих случаях вы захотите, чтобы кандидат обладал фундаментальными знаниями и опытом, по крайней мере, в области компьютерных сетей и операционных систем, а также мог определить или сделать обоснованное предположение о том, в чем заключаются проблемы, основываясь на неясных симптомах.
Хороший, хотя и несколько заезженный, вопрос для проверки знаний о сети:
Расскажите как можно подробнее: что происходит, когда я набираю google.com в адресной строке браузера и нажимаю ввод?
В зависимости от того, что вы считаете более важным, вы можете попросить кандидата сосредоточиться на конкретных частях вопроса, например, на том, как операция проходит через сетевой стек, когда разные типы машин взаимодействуют друг с другом, или на представлении более высокого уровня. для объяснения портов, сокетов, DNS, различного оборудования (например, маршрутизаторов) и т.д.
Вышеизложенное должно дать вам хорошее представление об опыте кандидата в области сетей, но вы, вероятно, захотите, чтобы ваш инженер DevOps также имел глубокие знания об операционных системах. Даже если их повседневные задачи могут не требовать от них использования этих знаний, они будут полезны в таких ситуациях, как сбои, проблемы с масштабированием или любой другой сценарий, когда что-то не так и никто не знает, что именно.
Хороший способ проверить обширные знания операционных систем — спросить кандидата о задержке. Отличным ресурсом для этого является известная публикация «Числа, которые должен знать каждый программист» . Вероятно, не важно, что кандидат может дословно назвать обсуждаемые там числа, но он должен иметь возможность хотя бы обсудить относительные задержки: например, он должен иметь возможность поговорить о различных уровнях кэширования процессора, а также об оперативной и виртуальной памяти. или функциональность таблицы страниц.
Если они знакомы с некоторыми стандартными алгоритмами кэширования, такими как наименее часто используемые (LRU) или наименее часто используемые (LFU), то разговор об этих алгоритмах также может быть полезным. Вопрос, который вы могли бы задать, чтобы начать обсуждение всех этих тем:
Рассмотрим следующий сценарий:
Мы выбираем оборудование для нашего нового парка серверов. Продавец предоставил нам несколько вариантов с различными комбинациями процессоров, оперативной памяти и жестких дисков. Они много говорили о разных скоростях и кэшировании, но я не очень понял. Не могли бы вы рассказать мне больше о том, когда мне понадобится более мощный процессор по сравнению с более качественным жестким диском? Каковы компромиссы между различными типами кешей?
Это открытый вопрос, поэтому также интересно посмотреть, на чем кандидат хочет сосредоточиться. Вы хотите убедиться, что он понимает, как все работает на низком уровне, и сможет учитывать это при выполнении повседневных задач (которые, вероятно, будут включать оптимизацию систем и процессов на более высоком уровне).
Трудно проверить практические знания операционных систем в условиях собеседования, поэтому вы, вероятно, захотите просто пропустить попытку задать какие-либо более практические вопросы. Если вы считаете, что это важно, вы можете настроить виртуальную машину с «вылетевшим» веб-приложением и попросить кандидата попытаться выяснить, что не так, пока вы смотрите. Однако это, скорее всего, займет много времени и не даст вам много информации, кроме того, насколько хорошо кандидат справляется с давлением.
Инструменты, оптимизация и компромиссы
Низкоуровневые знания о программировании и операционных системах важны для кандидата DevOps, чтобы он мог принимать хорошо информированные решения более высокого уровня, но во многих ролях DevOps кандидату не нужно будет использовать эти навыки напрямую.
Вместо этого суть многих должностей DevOps заключается в том, чтобы получить общее представление о компании или системе и внедрить техническую оптимизацию в узких местах. Но из-за такого внимания к оптимизации инженеры DevOps часто хотят оптимизировать каждую систему и процесс, с которыми они контактируют.
Любые улучшения, сделанные где-либо, кроме узкого места, являются иллюзией.
Важно убедиться, что ваш кандидат не одержим оптимизацией до такой степени, что он будет настаивать на оптимизации тех разделов системы, которые на самом деле не выиграют от них. Или, в более общем плане, кандидат должен уметь принимать решения, связанные с компромиссами .
Найти недостатки в большой системе несложно. Предложить оптимизацию так же легко. Внедрение предлагаемых оптимизаций более полезно, но во многих сценариях все еще относительно просто.
Трудная часть DevOps часто заключается в том, чтобы понять, когда какой-то компонент неэффективен, но все же достаточно хорош . Поэтому иногда важнее (но и сложнее) проверить, что кандидат знает, где не оптимизировать .
Трудно найти общие вопросы для проверки знаний кандидата в области оптимизации в условиях собеседования, но один вопрос, который часто может стать началом поучительной дискуссии, звучит так:
Как бы вы оценили, следует ли постепенно улучшать пятилетнюю систему с множеством неэффективностей и проблем или выбросить ее и перестроить с нуля?
Это что-то вроде вопроса с подвохом, потому что вы в первую очередь хотите подтвердить, что кандидат понимает опасность отказа от устаревшей системы, предполагая, что в следующий раз она может стать «построенной собственностью». Новичкам свойственно быстро выявлять и критиковать все сломанные или плохие системы и процессы, и вы хотите, чтобы ваш кандидат имел опыт, чтобы признать, что это почти никогда не будет правильным решением начать все сначала.
Тем не менее, также обратите внимание на исключения, которые, как мы надеемся, упомянет кандидат:
- Если бы исходные требования были совершенно другими,
- Если теперь доступно больше времени и ресурсов, или
- Если текущая система или процесс настолько плохи, что из-за них бизнес регулярно теряет большие суммы денег и не может быть спасен.
Еще один отличный общий вопрос, который поможет разобраться в способности кандидата идти на жесткие и правильные компромиссы, — это задать прямо:
Расскажите мне о случае, когда вы столкнулись с трудным компромиссом и сделали неправильный выбор. Что случилось? Что бы произошло, если бы вы сделали другой выбор?
Не так уж важно, о чем кандидат хочет говорить, но вы слушаете доказательства того, что он явно потратил много времени на размышления о компромиссах и тщательно размышлял о тех случаях, когда он сделал неправильный выбор с целью добиться успеха. лучший выбор в будущем. Если кандидат может быстро придумать хороший технический пример (например, он использовал фреймворк $X$, тогда как фреймворк $Y$ помог бы ему), попросите также нетехнический пример, например, время, когда он отдавал приоритет построению. то, что на самом деле не нужно, над чем-то, что очень нужно.
На этом заключительном этапе собеседования вы также должны проверить свое знакомство с конкретными инструментами. Хотя инженеры DevOps должны быть в состоянии очень легко освоить новые инструменты, если ваша компания уже вложила значительные средства в определенные инструменты, вы можете использовать глубокий опыт в тех же или подобных инструментах в качестве «разрешителя конфликтов», чтобы выбрать одного кандидата вместо другого, если они очень похожи во всех других аспектах.
Подведение итогов
Завершите собеседование, спросив кандидата, есть ли у него вопросы о вас, компании или процессе найма. Хотя это часто делается из вежливости по отношению к кандидату, оценка не должна останавливаться на этом. Хороший кандидат придет с некоторыми вопросами и продемонстрирует, что он уже имеет представление о компании, о том, как она работает и какие у нее могут быть проблемы, задавая вопросы.
DevOps — одна из самых сложных ролей для собеседования, не в последнюю очередь из-за отсутствия общепринятого определения того, что влечет за собой эта роль, но стоит приложить усилия, потому что отличный DevOps-инженер может принести пользу всей компании. Вы должны быть в состоянии использовать конкретные вопросы выше или адаптировать их, чтобы они были более актуальными для вашей компании, чтобы оценить, насколько хорош кандидат DevOps, и насколько он подходит для ваших нужд.
Наше агентство по подбору ИТ-персонала предлагает вам найти квалифицированных DevOps инженеров за срок менее 2 недель. Свяжитесь с нами прямо сейчас, чтобы узнать подробнее о возможностях расширения вашего будущего проекта. Мы обеспечиваем подбор лучших кандидатов по разумной цене. За 10 лет работы в этой сфере мы успешно заполнили свыше 5500 вакансий и сформировали 25+ команд с нуля. Проверьте отзывы от наших клиентов об агентстве и убедитесь в нашей компетентности! Если требуются дополнительные рекомендации, пишите нам в Telegram.