ENIGMA AI
ENIGMA AI

Linux на технических собеседованиях: от системных вызовов до eBPF

Вопросы по технологиям

Разбор сложных вопросов по Linux: eBPF, управление памятью, контейнеризация и отладка системных вызовов. Подготовьтесь к интервью.

В 2026 году знание Linux для разработчика не ограничивается командами ls и cd. На интервью уровня Middle+ проверяют понимание подсистем ядра, механизмов изоляции контейнеров и инструментов динамической трассировки. Ожидается, что кандидат понимает разницу между процессами и потоками на уровне планировщика CFS и умеет диагностировать утечки дескрипторов или блокировки ввода-вывода.

Управление памятью и OOM Killer

На собеседованиях часто спрашивают, как ядро Linux распределяет память и что происходит, когда она заканчивается. Важно понимать механизм Overcommit. По умолчанию Linux разрешает выделять больше виртуальной памяти, чем есть физической (RAM + Swap). Это работает, пока процессы не начинают активно использовать выделенные страницы.

Когда свободная память исчерпана, включается OOM (Out Of Memory) Killer. Он выбирает жертву на основе параметра oom_score. На этот балл влияет объем используемой памяти и время жизни процесса. Разработчику полезно знать про /proc/[pid]/oom_score_adj — этот файл позволяет вручную защитить критически важные процессы (например, базу данных) от завершения ядром.

Стек и куча на уровне ОС

Если программа падает с Segmentation Fault при глубокой рекурсии, это признак переполнения стека. В Linux размер стека потока обычно ограничен (посмотрите ulimit -s, стандарт — 8 МБ). В отличие от кучи, стек выделяется и освобождается автоматически при выходе из области видимости, что делает его быстрее, но менее гибким.

Процессы, потоки и планировщик

В Linux нет жесткого разделения между процессами и потоками на уровне реализации — и то, и другое создается через системный вызов clone(). Разница лишь в флагах: разделяют ли сущности адресное пространство, таблицу файловых дескрипторов и обработчики сигналов.

Состояния процессов

Кандидат должен различать состояния: R (Running/Runnable), S (Interruptible Sleep) и D (Uninterruptible Sleep). Состояние D критично для диагностики: процесс «завис» в ожидании ответа от железа или сетевой ФС (NFS). Его нельзя убить сигналом SIGKILL, так как он находится в контексте ядра.

Файловая система и дескрипторы

В Linux «все есть файл». Это означает, что работа с сокетами, пайпами и устройствами идет через одинаковый интерфейс. Лимит на открытые файлы (file-max) часто становится узким местом в высоконагруженных Go или Java приложениях.

Иноды (Inodes)

Частая задача на интервью: «Место на диске есть (df -h показывает свободные ГБ), но создать файл нельзя. Почему?». Ответ: закончились иноды (df -i). Инода — это структура данных, описывающая файл (права, владелец, ссылки на блоки данных), но не содержащая его имени. Имена хранятся в специальных файлах-директориях.

Диагностика и отладка: strace, lsof, tcpdump

Инженер уровня Senior должен уметь «заглянуть под капот» работающего приложения без доступа к исходному коду. Основные инструменты:

  • strace: перехват системных вызовов. Позволяет увидеть, какой файл программа пытается открыть или почему завис сетевой запрос.
  • lsof: список всех открытых файлов и сетевых соединений процесса. Помогает найти утечки дескрипторов.
  • eBPF (Extended Berkeley Packet Filter): технология 2026 года. Позволяет запускать безопасный код внутри ядра для мониторинга без заметного влияния на производительность. Инструменты вроде bpftrace заменяют собой старые методы отладки.

Сетевой стек и очереди

Понимание работы TCP/IP в Linux включает знание очередей backlog. Если приложение не успевает вызывать accept(), очередь заполняется, и новые клиенты получают Connection Refused. Настройка параметров net.core.somaxconn и tcp_max_syn_backlog — база для оптимизации нагруженных систем.

Контейнеризация: Namespaces и Cgroups

Docker — это не магия, а комбинация двух функций ядра:

  1. Namespaces (Пространства имен): обеспечивают изоляцию. PID namespace делает так, чтобы процесс внутри контейнера видел себя как PID 1, при этом в хост-системе у него будет другой номер.
  2. Control Groups (Cgroups): ограничивают ресурсы (CPU, RAM, I/O). Именно через cgroups v2 в современных дистрибутивах реализуется лимит памяти, при превышении которого контейнер получает OOM Kill.

Часто задаваемые вопросы

Сколько зарабатывают DevOps-инженеры?

Linux — ключевой навык для DevOps. Узнайте зарплаты

Смотреть зарплаты