Я был по обе стороны стола в качестве интервьюера и интервьюируемого для ролей DevOps и SRE. В этом блоге я пытаюсь поделиться некоторыми вопросами, которые мне задавали или я сам задавал.
Примечание: Это просто обмен знаниями, опытом и некоторые забавные вопросы.
Устранение неполадок Linux
Любое собеседование DevOps и SRE обычно начинается с вопросов по устранению неполадок, где интервьюер пытается подтолкнуть вас к внутренним знаниям Linux и некоторым основным базовым концепциям. Вот некоторые из них на мой взгляд
1. Что происходит при загрузке системы Linux, пока вы не получите приглашение к входу в систему.
Этот тип вопросов обычно поступает от компаний, где до сих пор используются «голые металлы» и не используются публичные облака. Итак, давайте посмотрим, что происходит.
Подробный ответ можно найти здесь
2. Что происходит, когда вы набираете ls в терминале
Вопросы такого типа используются для того, чтобы понять, насколько интервьюер внимателен к деталям и глубоко знает внутреннее устройство Linux. В основном интервьюер хочет знать, знаете ли вы системные вызовы
forks()
иexec()
.
shell читает то, что вы набрали, используя функциюgetline()
и функциюstrtok()
, которая принимает строку для токенизации. Shell также проверяет, является ли 1-й токенls
псевдонимом Shell или нет. Если это не встроенная функция, shell найдет переменнуюPATH
в каталоге. Поскольку она содержит абсолютные пути ко всем исполняемым двоичным файлам. Как только она находит двоичный файл дляls
, программа загружается в память и выполняется системный вызовfork()
. Это создает дочерний процессls
, а оболочка будет родительским процессом. Вызовfork()
возвращает0
дочернему процессу, чтобы он знал, что должен действовать как дочерний, и возвращает PID дочернего процесса родительскому процессу (т.е. оболочке).
Далее процесс ls выполняет системный вызовexecve()
, который предоставляет ему совершенно новое адресное пространство с программой, которую он должен запустить. Теперь ls может начать выполнение своей программы. Утилитаls
использует функцию для чтения каталогов и файлов с диска путем обращения к записям inode базовой файловой системы.
Когда процессls
закончит выполнение, он вызовет системный вызов_exit()
с целым числом0
, что означает нормальное выполнение, и ядро освободит свои ресурсы.
Примечание: вы можете использоватьstrace
ls
для более глубокого изучения системных вызовов.
3. Объяснить Иноды Linux
Номер Inode указывает на Inode. Inode — это структура данных, которая хранит информацию о файле или папке.
Подробный ответ доступен здесь
4. Авария и паника
Авария обычно происходит, когда возникает
ловушка
, когда приложение пытается неправильно получить доступ к памяти. Паника обычно происходит, когда приложение внезапно завершает работу. Основное различие между крахом и паникой заключается в том, что крах инициируется оборудованием или ОС, а паника обычно имитируется приложением путем вызова функцииabort()
. Некоторые приложения используют специальную функцию, называемую обработчиком сигнала, для создания информации о ловушке, другие могут использоватьgdb
для сбора информации о ней.
Наиболее распространенными сигналами плохого программирования являютсяSIGSEGV
,SIGBUS
иSIGILL
, обычно вызванные плохим управлением памятью, плохим указателем, неинициализированными значениями или повреждением памяти.
5. Объясните файловую систему /proc
.
6. Когда я получаю ошибку filesystem is full
, но df
показывает, что свободное место есть.
Проверьте, видите ли вы нулевое значение
IFree
, используяdf -i
. Если это не так, проверьте, не используются ли еще удаленные файлы с помощьюlsof
и перезапустите эти процессы.
7. Какие инструменты производительности вы бы использовали на Linux-машине?
Подробный ответ доступен здесь
8. Объясните файловую систему Linux
Интервьюер хочет знать, насколько вы разбираетесь в файловых системах linux. Определенный тип формата хранения данных, такой как
EXT3
,EXT4
,BTRFS
,XFS
и так далее. Linux поддерживает почти 100 типов файловых систем.Подробный ответ можно найти здесь
9. Объясните пространство ядра и пространство пользователя
Это может быть вопрос-кроличья нора, интервьюер может пойти как можно глубже, чтобы увидеть, каковы ваши пределы. Это также самая интересная тема о Linux, как управление переходит от пространства пользователя к пространству ядра и почему это важно. Почему мы не можем напрямую обращаться к пространству ядра. Для чего используются внутренние библиотеки, такие как
libc
, и почему нам нужен системный вызов.Подробный ответ доступен здесь
10. Как устранить проблему высокого уровня ввода-вывода
Подробный ответ доступен здесь
11. Что такое processes
и threads
?
Процесс — это программы, которые отправляются из состояния готовности и планируются в центральном процессоре для выполнения. PCB (блок управления процессом) хранит концепцию процесса. Процесс может создавать другие процессы, которые известны как дочерние процессы. Процессу требуется больше времени для завершения, и он изолирован, что означает, что он не делит память с другими процессами.
Подробный ответ доступен здесь
12. Объясните управление памятью ядра
Это не тривиальный вопрос. Он очень глубокий и запутанный. Поэтому я надеюсь, что интервьюер просто попытается проверить, понимаете ли вы основы управления памятью ядра.
Подробный ответ доступен здесь
13. Объясните processes
и threads
?
Подробный ответ доступен здесь
14. Объясните различные типы состояния задачи?
Подробный ответ доступен здесь
15. Объясните, что такое параллелизм и условия гонки в Linux?
Подробный ответ доступен здесь
16. Объясните STACK
и HEAP
в операционной системе?
Подробный ответ доступен здесь
17. Объясните, что такое утечка памяти?
Наивное определение: Неспособность освободить
недоступную
память, которая больше не может быть выделена снова каким-либо процессом во время выполнения выделяющего процесса. В основном это можно вылечить с помощью методов GC (Garbage Collection) или обнаружить с помощью автоматизированных инструментов.
Тонкое определение: Неспособность освободитьдоступную
память, которая больше не нужна для правильного функционирования вашей программы. Это практически невозможно обнаружить с помощью автоматизированных инструментов или программистами, не знакомыми с кодом. Хотя технически это не утечка, она имеет те же последствия, что и наивная утечка. Это не только моя собственная идея. Вы можете встретить проекты, написанные на языке, собирающем мусор, но при этом упоминающие об устранении утечек памяти в своих журналах изменений.
18. Как Linux обрабатывает прерывания?
Подробный ответ можно найти здесь
19. Объясните, что такое Load Average?
Лучшее определение и внутренняя информация о средней нагрузке может быть объяснена здесь. Я бы рекомендовал всем посетить этот сайт для более глубокого понимания внутренних процессов.
20. Что происходит, когда вы пытаетесь curl
на сайт?
Это очень известный вопрос, и он возникает время от времени. Однако я думаю, что все мы должны знать о внутреннем процессе, происходящем при выполнении команды curl www.google.com . Лучшее подробное объяснение, которое я нашел, находится здесь. Можно, конечно, возразить, что это слишком подробное объяснение, но нет ничего плохого в том, чтобы знать все досконально, вы можете не рассказывать обо всем этом, когда вас спросят, но вы должны знать об этом.
Другие интересные ресурсы для подготовки к собеседованию
-
Интервью инженера-технолога Facebook
-
Интервью с инженером по производству Facebook
-
Собеседование по надежности сайта
-
Интервью с менеджером по инжинирингу
-
Собеседование Google SWE
-
Собеседование с Amazon SWE
-
Хорошие советы и рекомендации по устранению неполадок
-
Хорошие ссылки Что такое кипение
-
Анализ производительности Linux
-
Масштабируемость, надежность и производительность для больших систем
Я только что предпринял попытку собрать все это в одном месте. Я буду продолжать отслеживать их и собирать здесь по частям… так что следите за новостями!!!
Счастливого устранения неполадок и удачи!!!