36 KiB
База перед тех-скринингом (HR, видеосвязь)
Собрано под вакансию Eltex «Разработчик C/C++» (Новосибирск, 1–3 года, ключевые навыки C/C++, Linux, TCP/IP). Формат — вопрос → короткий ответ. Читать подряд, вслух проговаривая ответы: на скрининге важно не «знаю», а «скажу связно за 20 секунд».
1. ООП (спрашивают почти всегда)
▪ 1.1 Что такое ООП? ||Парадигма, где программа — набор объектов, обменивающихся сообщениями; объект объединяет данные и поведение.||
▪ 1.2 Три кита? ||Инкапсуляция, наследование, полиморфизм. (Иногда добавляют абстракцию.)||
▪ 1.3 Инкапсуляция? ||Сокрытие внутреннего состояния за публичным интерфейсом: поля private, доступ через методы.||
▪ 1.4 Наследование? ||Переиспользование и расширение: класс-наследник получает члены базового.||
▪ 1.5 Полиморфизм?
||Один интерфейс — разные реализации. В C++ динамический полиморфизм — через virtual (решение принимается в рантайме по фактическому типу), статический — перегрузка и шаблоны (на компиляции).||
▪ 1.6 Класс и объект? ||Класс — описание (чертёж), объект — экземпляр в памяти.||
▪ 1.7 struct и class в C++? ||Разница только в доступе по умолчанию: у struct public, у class private.||
▪ 1.8 Что такое виртуальная функция? ||Функция, вызываемая по фактическому типу объекта. Реализуется через таблицу виртуальных функций (vtable) — отсюда +указатель на объект.||
▪ 1.9 Зачем виртуальный деструктор?
||Если удалять наследника через Base* без него — UB, деструктор наследника не вызовется, ресурсы утекут.||
▪ 1.10 Можно ли вызвать virtual из конструктора? ||Можно, но вызовется версия текущего класса, а не наследника: объект ещё не достроен.||
▪ 1.11 Абстрактный класс?
||Класс с хотя бы одной чисто виртуальной функцией (= 0), экземпляр создать нельзя. В C++ нет отдельного interface — его роль играет такой класс.||
▪ 1.12 Перегрузка и переопределение — в чём разница? ||Перегрузка: несколько функций с одним именем и разными параметрами в одной области видимости. Переопределение: virtual-функция наследника с той же сигнатурой.||
▪ 1.13 Что такое static-член?
||Общий для всех объектов класса, живёт вне объекта; у static-метода нет this.||
▪ 1.14 Что такое SOLID? ||S — единственная ответственность, O — открыт для расширения/закрыт для изменения, L — подстановка Лисков, I — разделение интерфейсов, D — инверсия зависимостей. Достаточно назвать и объяснить одну-две.||
▪ 1.15 Композиция или наследование? ||Предпочитают композицию: наследование жёстко связывает классы, композиция гибче.||
2. C/C++ (ядро вакансии)
▪ 2.1 Указатель и ссылка — разница? ||Указатель — адрес, может быть null, его можно менять и арифметикой ходить. Ссылка — псевдоним существующего объекта, не бывает null, перепривязать нельзя.||
▪ 2.2 new/delete против malloc/free?
||new вызывает конструктор и возвращает типизированный указатель, malloc даёт сырой блок; new бросает исключение, malloc возвращает NULL; delete вызывает деструктор.||
▪ 2.3 Стек и куча?
||Стек — автоматическая память (локальные переменные, быстрая, ограничена). Куча — динамическая (new/malloc, больше, но освобождать вручную).||
▪ 2.4 Что такое утечка памяти? ||Выделили и не освободили. Ищется ASAN (LeakSanitizer), valgrind.||
▪ 2.5 RAII?
||Ресурс захватывается в конструкторе, освобождается в деструкторе — утечек нет даже при исключениях. Так работают std::vector, std::ifstream, умные указатели.||
▪ 2.6 unique_ptr и shared_ptr?
||unique_ptr — единственный владелец, без счётчика, дешевле. shared_ptr — общий, считает ссылки, есть накладные расходы и проблема циклических ссылок (weak_ptr).||
▪ 2.7 Правило трёх/пяти? ||Если класс владеет ресурсом и задан деструктор — надо определить копирование и перемещение (в C++11+: конструктор/присваивание копированием и перемещением).||
▪ 2.8 Что делает std::move?
||Ничего сам по себе — это static_cast к rvalue-ссылке. Перемещение выполняет конструктор/присваивание перемещением.||
▪ 2.9 Что такое UB? ||Undefined behavior — стандарт не накладывает требований. Примеры: выход за границы, знаковое переполнение, сдвиг в знаковый бит, разыменование null, гонка данных.||
▪ 2.10 Что проверяют ASAN и UBSAN? ||ASAN — выходы за границы, use-after-free, двойное освобождение, утечки. UBSAN — неопределённое поведение (переполнения, сдвиги, выравнивание).||
▪ 2.11 sizeof(struct { char a; int b; char c; }) на x86-64?
||12: a в 0, padding 1–3, b в 4–7, c в 8, padding 9–11 до выравнивания структуры по 4.||
▪ 2.12 Порядок вычисления аргументов f(a(), b()) задан? ||Нет, не определён — нельзя полагаться.||
▪ 2.13 Что делает const после сигнатуры метода?
||Делает this указателем на константу: метод не меняет поля объекта, и его можно вызывать у const-объекта.||
▪ 2.14 Что такое перегрузка операторов и зачем?
||Своя семантика для +, ==, [] и т.п., чтобы тип вёл себя как встроенный. Нельзя перегружать ., ::, ?:, sizeof.||
▪ 2.15 Компиляция по шагам?
||Препроцессор (#include, #define) → компиляция в объектные файлы → линковка в исполняемый. Ошибка «undefined reference» — от линковщика.||
▪ 2.16 Зачем header guards? ||Чтобы заголовок не подключался дважды — иначе повторное определение типа.||
▪ 2.17 Что такое forward declaration?
||Объявление класса/функции без определения, чтобы не тянуть #include; достаточно для указателей и ссылок.||
▪ 2.18 Что такое шаблон (template)? ||Обобщённый код, тип подставляется при компиляции. Цена — ошибки и раздувание кода.||
▪ 2.19 Что такое лямбда?
||Анонимная функция с захватом контекста ([&], [=]). Синтаксический сахар над функтором.||
▪ 2.20 Что такое пространство имён?
||Способ избежать конфликта имён; std:: — пример.||
▪ 2.21 volatile — что это?
||Говорит компилятору не кэшировать значение в регистре (регистры железа, переменные, меняемые извне). Это не про многопоточность — для неё std::atomic.||
3. STL (обязательно, спрашивают про сложности)
▪ 3.1 Какие контейнеры знаешь?
||Последовательные: vector, list, deque, array. Ассоциативные: map, set (деревья, O(log n)). Хеш-таблицы: unordered_map, unordered_set (O(1) в среднем). Адаптеры: stack, queue, priority_queue.||
▪ 3.2 vector — сложности? ||Доступ по индексу O(1), push_back амортизированное O(1), вставка/удаление в середине O(n), поиск O(n).||
▪ 3.3 Почему push_back амортизированное O(1)? ||Ёмкость удваивается, реаллокация O(n) случается редко — в среднем одна операция O(1).||
▪ 3.4 list — сложности? ||Доступ по номеру O(n), вставка/удаление при известном узле O(1), поиск O(n). Память дороже из-за указателей.||
▪ 3.5 map против unordered_map?
||map — красно-чёрное дерево: O(log n), ключи упорядочены. unordered_map — хеш-таблица: O(1) в среднем, порядок не определён, нужен std::hash.||
▪ 3.6 Что быстрее и когда?
||Поиск — обычно unordered_map. Если нужен порядок обхода или диапазонные запросы — map.||
▪ 3.7 Итераторы и их инвалидация?
||Итератор — обобщённый указатель на элемент. У vector реаллокация инвалидирует все итераторы, у list — только итератор удалённого элемента.||
▪ 3.8 Как удалить элементы из vector по условию?
||Идиома erase-remove: v.erase(std::remove_if(v.begin(), v.end(), pred), v.end());.||
▪ 3.9 reserve и resize?
||reserve меняет ёмкость (память), не размер. resize меняет размер (создаёт/удаляет элементы).||
▪ 3.10 emplace_back против push_back?
||emplace_back конструирует объект на месте — без копирования/перемещения.||
▪ 3.11 Как работает priority_queue?
||Бинарная куча поверх vector: вставка O(log n), извлечение максимума O(log n), доступ к максимуму O(1). По умолчанию max-куча.||
▪ 3.12 Какие алгоритмы STL знаешь?
||sort (O(n log n), неустойчив), stable_sort, find, count, lower_bound/upper_bound (O(log n) на отсортированном), accumulate, remove_if, unique, next_permutation.||
▪ 3.13 Что такое функтор и предикат?
||Объект с operator(). Предикат — функция/функтор, возвращающий bool, используется в алгоритмах.||
▪ 3.14 string — это контейнер?
||Да, std::basic_string<char>: size(), substr, find, append; данные лежат непрерывно, .c_str() даёт C-строку.||
4. Linux и ОС
▪ 4.1 Процесс и поток? ||Процесс — программа в исполнении со своим адресным пространством и PID. Поток — единица выполнения внутри процесса: общая память, свой стек и регистры.||
▪ 4.2 Что делает fork()? ||Создаёт копию процесса. Возвращает дважды: в родителе — PID ребёнка, в ребёнке — 0, при ошибке −1.||
▪ 4.3 Что с памятью при fork()? ||Copy-on-write: страницы общие, копируются при первой записи.||
▪ 4.4 exec?
||Заменяет образ текущего процесса (код, данные, стек). При успехе не возвращается. fork + exec — запуск внешней программы.||
▪ 4.5 Зачем waitpid? ||Забрать код возврата и не оставлять зомби.||
▪ 4.6 Зомби и сирота?
||Зомби — завершившийся процесс, чья запись ждёт wait. Сирота — процесс, чей родитель умер; его усыновляет init (PID 1).||
▪ 4.7 Коды возврата 137 и 139? ||137 = 128+9 (SIGKILL), 139 = 128+11 (SIGSEGV). Так кодирует оболочка.||
▪ 4.8 Сигналы, основные? ||SIGINT (2, Ctrl+C), SIGKILL (9, не перехватить), SIGTERM (15, корректное завершение), SIGSEGV (11), SIGPIPE (13, запись в закрытый сокет), SIGCHLD (17).||
▪ 4.9 SIGTERM против SIGKILL? ||SIGTERM можно перехватить и завершиться аккуратно, SIGKILL нельзя ни перехватить, ни проигнорировать.||
▪ 4.10 Файловый дескриптор? ||Число, по которому программа обращается к открытому файлу, сокету, pipe. 0/1/2 — stdin/stdout/stderr.||
▪ 4.11 Что такое epoll?
||Механизм мультиплексирования: ядро сообщает о готовых дескрипторах, сложность O(1) на событие. select/poll перебирают все дескрипторы — O(n).||
▪ 4.12 mmap? ||Отображает файл в память: страницы подгружаются по обращению, вместо read/write работаешь с указателем.||
▪ 4.13 Виртуальная память и страница? ||Каждому процессу — своё адресное пространство; память делится на страницы (обычно 4 КБ), отображаемые на физическую.||
▪ 4.14 Что такое swap? ||Выгрузка страниц на диск при нехватке памяти. Медленно, но спасает от OOM.||
▪ 4.15 Что такое inode? ||Структура метаданных файла (права, размер, владелец, указатели на блоки). Имя файла — отдельно, в каталоге.||
▪ 4.16 Права доступа 755?
||Владелец rwx, группа r-x, остальные r-x. chmod, chown — смена прав и владельца.||
▪ 4.17 Что такое pipe и перенаправление?
||| соединяет вывод одной программы со входом другой; >, >>, 2>&1 перенаправляют потоки.||
▪ 4.18 Как посмотреть процессы и нагрузку?
||ps aux, top/htop, pidstat; free -h — память, df -h — диски, iostat — ввод-вывод.||
▪ 4.19 Что такое демон?
||Фоновый процесс без управляющего терминала; запускается systemd (unit-файлы, systemctl start/status).||
▪ 4.20 Что такое ядро и системный вызов?
||Ядро управляет ресурсами; программа обращается к нему через системные вызовы (open, read, write, fork). strace показывает эти вызовы.||
▪ 4.21 Мьютекс, семафор, атомик? ||Мьютекс — блокировка на одного владельца. Семафор — счётчик на N владельцев. Атомик — операция без блокировки, аппаратно.||
▪ 4.22 Что такое гонка данных и дедлок? ||Гонка — несинхронизированный доступ к общей памяти (ловит ThreadSanitizer). Дедлок — потоки ждут ресурсы друг друга; лечится единым порядком захвата.||
▪ 4.23 Условие переменная (condition_variable)?
||Способ ждать событие: ждать в цикле с предикатом (while (!ready) cv.wait(lock);) — защита от ложных пробуждений.||
5. Сети: OSI, TCP/IP, TCP, UDP (ядро вакансии)
▪ 5.1 Семь уровней OSI? ||Физический, канальный, сетевой, транспортный, сеансовый, представления, прикладной. Практически работают с пятью.||
▪ 5.2 Что на каждом уровне? ||L1 — биты и среды (витая пара, оптика). L2 — кадры, MAC, коммутатор. L3 — пакеты, IP, маршрутизатор. L4 — TCP/UDP, порты. L5–L7 — сессии, кодирование, прикладные протоколы (HTTP, DNS).||
▪ 5.3 TCP/IP модель? ||Канальный, интернет, транспортный, прикладной. Соответствует OSI снизу.||
▪ 5.4 Инкапсуляция? ||Каждый уровень добавляет свой заголовок: Ethernet (14 байт) → IP (20) → TCP (20) → данные. При передаче пакет кладут внутрь кадра.||
▪ 5.5 Сколько байт в Ethernet-заголовке? ||14 (MAC получателя 6, MAC отправителя 6, тип 2). VLAN 802.1Q добавляет 4.||
▪ 5.6 MAC-адрес? ||48 бит, физический адрес интерфейса, действует в пределах сегмента.||
▪ 5.7 ARP? ||Находит MAC по IP в локальном сегменте: широковещательный запрос → ответ.||
▪ 5.8 MTU? ||Максимальный размер полезной нагрузки кадра, для Ethernet 1500 байт. Больше — фрагментация или ошибка.||
▪ 5.9 IPv4-заголовок, что важно? ||Минимум 20 байт: версия/IHL, длина, TTL, протокол, контрольная сумма заголовка, адреса источника и назначения. TTL уменьшается на 1 на каждом маршрутизаторе.||
▪ 5.10 Маски и подсети?
||Маска делит адрес на сеть и узел. /24 — 254 узла, /26 — 62, /30 — 2 (точка-точка). Широковещательный адрес — все единицы в хостовой части.||
▪ 5.11 Маршрутизация? ||Узел сравнивает адрес со своей маской: своя подсеть — ARP и напрямую, чужая — на шлюз. Шлюз по умолчанию — выход в другие сети.||
▪ 5.12 ICMP?
||Служебные сообщения: ping (echo request/reply), traceroute (истечение TTL), «destination unreachable».||
▪ 5.13 Порядок установки TCP-соединения? ||SYN → SYN-ACK → ACK (трёхстороннее рукопожатие).||
▪ 5.14 Как закрывается TCP? ||FIN → ACK → FIN → ACK; сторона, закрывшая первой, ждёт TIME_WAIT (2×MSL), чтобы добить потерянные сегменты.||
▪ 5.15 Флаги TCP? ||SYN, ACK, FIN, RST, PSH, URG.||
▪ 5.16 Что даёт TCP? ||Надёжность: нумерация, подтверждения, ретрансмиссии по таймауту, окно (управление потоком), контроль перегрузки, сохранение порядка.||
▪ 5.17 Что такое окно? ||Сколько байт можно отправить без подтверждения. Управляет скоростью и защищает от переполнения получателя.||
▪ 5.18 UDP? ||Без соединения и гарантий: заголовок 8 байт, порядок и доставка не гарантируются. Быстро и дёшево: DNS, DHCP, VoIP, игры, стриминг.||
▪ 5.19 TCP или UDP — когда что? ||TCP — когда важна целостность (файлы, HTTP, SSH). UDP — когда важна задержка или данные самодостаточны (DNS, видео, телеметрия).||
▪ 5.20 Что такое порт? ||Номер приложения на узле (16 бит). Известные: 22 SSH, 53 DNS, 80 HTTP, 443 HTTPS.||
▪ 5.21 DNS? ||Превращает имя в IP. Обычно UDP/53, при больших ответах — TCP/53.||
▪ 5.22 DHCP? ||Автоматическая выдача IP, маски, шлюза, DNS.||
▪ 5.23 NAT? ||Подмена адресов при выходе в интернет: много внутренних устройств через один внешний IP.||
▪ 5.24 Сокеты: как устроен сервер?
||socket → bind → listen → accept → read/write → close. Клиент: socket → connect. Для множества соединений — epoll и неблокирующие сокеты.||
▪ 5.25 Что такое неблокирующий сокет и EAGAIN?
||Вызов не ждёт данных: если их нет, возвращает −1 и errno = EAGAIN — надо вернуться позже.||
▪ 5.26 Чем смотрят трафик?
||tcpdump, Wireshark. Базово: tcpdump -i eth0 -nn port 80.||
6. Многопоточность (в вакансии: многопоточные приложения)
▪ 6.1 Как создать поток в C++?
||std::thread t(f, args); t.join(); (или detach, но тогда следи за временем жизни).||
▪ 6.2 Как защитить общие данные?
||std::mutex + std::lock_guard/std::unique_lock; для счётчиков — std::atomic.||
▪ 6.3 Что такое ложное пробуждение?
||wait может вернуться без сигнала — поэтому ждут в цикле с предикатом.||
▪ 6.4 Как избежать дедлока?
||Единый порядок захвата мьютексов, std::lock/std::scoped_lock для нескольких сразу, не держать блокировку при вызове чужого кода.||
▪ 6.5 Producer/consumer — как? ||Очередь + мьютекс + condition_variable: производитель кладёт и уведомляет, потребитель ждёт и забирает.||
▪ 6.6 Пул потоков зачем? ||Создание потока дорого; пул переиспользует N потоков и очередь задач.||
▪ 6.7 Потокобезопасный size()? ||Нужен либо атомарный счётчик, либо мьютекс: без этого чтение и запись — гонка данных.||
7. Git
▪ 7.1 Основной цикл работы?
||git clone → git checkout -b feature → правки → git add → git commit → git push → pull request.||
▪ 7.2 Что такое коммит, ветка, HEAD? ||Коммит — снимок состояния с родителями. Ветка — подвижный указатель на коммит. HEAD — где ты сейчас.||
▪ 7.3 merge и rebase? ||merge создаёт коммит слияния, история ветвится. rebase переносит коммиты поверх другой ветки — история линейная, но переписываются хеши.||
▪ 7.4 Конфликт — что делать?
||Git помечает файлы, правишь вручную, git add, git merge --continue (или --abort).||
▪ 7.5 reset, revert, checkout?
||reset двигает ветку (может потерять коммиты), revert создаёт обратный коммит — безопасно для общей ветки, checkout/switch переключает ветки и файлы.||
▪ 7.6 stash?
||Отложить незакоммиченные изменения: git stash, потом git stash pop.||
▪ 7.7 fetch и pull?
||fetch скачивает без слияния, pull = fetch + merge (или rebase).||
▪ 7.8 Как посмотреть историю и что менялось?
||git log --oneline --graph, git diff, git show <commit>, git blame.||
▪ 7.9 Что не коммитить?
||Секреты, артефакты сборки, большие бинарники — через .gitignore.||
8. Docker
▪ 8.1 Образ и контейнер? ||Образ — неизменяемый шаблон (слои файловой системы). Контейнер — запущенный экземпляр образа плюс своё изменяемое состояние.||
▪ 8.2 Чем отличается от виртуальной машины? ||Контейнер использует ядро хоста и изолирует процессы (namespaces, cgroups) — легче и стартует за секунды; VM несёт своё ядро.||
▪ 8.3 Dockerfile — ключевые инструкции?
||FROM, RUN, COPY, WORKDIR, ENV, CMD/ENTRYPOINT, EXPOSE.||
▪ 8.4 Зачем слои и порядок инструкций? ||Каждая инструкция — слой, слои кэшируются; часто меняющееся (код) ставят после редко меняющегося (зависимости), чтобы кэш работал.||
▪ 8.5 Volume и bind mount? ||Volume — управляемое Docker хранилище (данные переживают контейнер). Bind mount — каталог хоста внутри контейнера.||
▪ 8.6 Сети в Docker?
||По умолчанию bridge с внутренними IP; порты публикуются через -p 8080:80. Есть host и overlay для swarm.||
▪ 8.7 docker-compose?
||Описание нескольких сервисов в одном YAML: docker compose up -d.||
▪ 8.8 Где это в Eltex? ||Воспроизводимая сборка и тесты: один образ у всех, «у меня работает» перестаёт быть аргументом.||
9. GDB и отладка
▪ 9.1 Как запустить?
||g++ -g -O0 prog.cpp -o prog (обязательно -g), затем gdb ./prog, run.||
▪ 9.2 Основные команды?
||break main / break file:line, run, next (по шагам, через вызовы), step (внутрь), continue, print x, bt (стек вызовов), frame N, watch var, info threads.||
▪ 9.3 Как отладить падение?
||Запустить, получить bt, посмотреть кадр с падением, print указателей; либо core dump (ulimit -c unlimited, затем gdb prog core).||
▪ 9.4 Что такое core dump? ||Снимок памяти процесса в момент падения; позволяет разобраться постфактум.||
▪ 9.5 Санитайзеры?
||ASAN (память), UBSAN (UB), TSan (гонки), MSan (неинициализированная память) — включаются флагом -fsanitize=....||
▪ 9.6 valgrind? ||Инструмент поиска утечек и ошибок памяти без пересборки; медленнее санитайзеров.||
10. Bash и инструменты
▪ 10.1 Что такое скрипт и его шапка?
||#!/usr/bin/env bash плюс set -euo pipefail — падать на ошибках, на необъявленных переменных и в конвейерах.||
▪ 10.2 Переменные и аргументы?
||name=value, $name, $1..$9, $#, $@, $? (код возврата), $$ (PID).||
▪ 10.3 grep, awk, sed — для чего? ||grep — поиск по шаблону, awk — обработка по колонкам и подсчёты, sed — замена/правка потока. Для больших файлов — только они, а не bash-цикл по строкам.||
▪ 10.4 Пайплайны и перенаправления?
||cmd1 | cmd2, >, >>, 2>, 2>&1, tee.||
▪ 10.5 Как найти файлы и выполнить команду?
||find /path -name '*.log' -mtime -1, find ... -exec ... {} +, xargs.||
▪ 10.6 Полезное на каждый день?
||ps/top, ss -tulpn (порты), df -h, du -sh, tail -f, journalctl -u сервис, systemctl status.||
11. Embedded и SoC (в вакансии «плюс», знать обзорно)
▪ 11.1 Что такое bringup? ||Запуск новой платы: uboot → ядро → корневая ФС → периферия. Задача — довести устройство до стабильной работы.||
▪ 11.2 uboot? ||Загрузчик: инициализирует железо, грузит ядро и передаёт ему параметры (device tree).||
▪ 11.3 Модуль ядра?
||Код, загружаемый в ядро (insmod/rmmod), с init/exit; печатает через printk, видно в dmesg.||
▪ 11.4 Символьный драйвер?
||Даёт доступ к устройству как к файлу через file_operations (open, read, write, ioctl).||
▪ 11.5 Device tree? ||Описание железа (адреса, прерывания, шины) для ядра — отдельно от кода.||
▪ 11.6 Cross-compile?
||Сборка под другую архитектуру (например ARM на x86) тулчейном arm-linux-gnueabihf-gcc.||
▪ 11.7 Что сказать честно? ||Опыта продуктовой разработки драйверов нет, теорию знаю: модуль, драйвер, device tree, cross-compile; готов добирать на месте.||
12. Вопросы, которые задаст HR (и хорошие ответы)
▪ 12.1 Расскажи о себе. ||40 секунд: кто, сколько лет в разработке, на чём пишешь (C/C++, Linux), чем занимался последним, почему интересна встраиваемая разработка и сети.||
▪ 12.2 Почему Eltex? ||Продукт настоящий и низкоуровневый: коммутаторы, маршрутизаторы, GPON. Хочу расти в C++/Linux/сетях на реальном железе, а не на абстрактных сервисах.||
▪ 12.3 Что знаешь о компании? ||Более 2000 человек, Новосибирск, телекоммуникационное оборудование (Ethernet-коммутаторы, сервисные маршрутизаторы, Wi-Fi, GPON, IoT), свои SoC-устройства.||
▪ 12.4 Почему уходишь с текущего места? ||Без негатива: хочу ближе к системной разработке и сетям, где больше глубины.||
▪ 12.5 Готов к офису/гибриду в Новосибирске? ||Отвечай прямо, как есть; если релокация — скажи, что готов обсуждать сроки.||
▪ 12.6 Ожидания по зарплате? ||Назови вилку с обоснованием по рынку и добавь «готов обсуждать по итогам интервью».||
▪ 12.7 Сильные и слабые стороны? ||Сильная — довожу до работающего результата, разбираюсь в отладке. Слабая — называй реальную и что делаешь: например, «раньше писал по памяти, теперь веду заметки и проверяю сложности по коду».||
▪ 12.8 Готов к задачам на алгоритмы? ||Да, тренируюсь: базовые структуры, сложности, типовые задачи на строки/массивы/графы.||
▪ 12.9 Есть вопросы к нам? ||Обязательно спроси: какой продукт и команда, на каком стеке и железе, как устроен онбординг, как выглядит процесс разработки и ревью, что считается успехом в первые месяцы.||
▪ 12.10 Что почитать про нас перед интервью? ||Сайт Eltex, раздел про продукты и вакансию; интервью и доклады сотрудников на конференциях.||
13. Шпаргалка чисел (выучить наизусть)
- Ethernet-заголовок 14 байт, VLAN-тег +4, MTU 1500.
- IPv4-заголовок 20 байт, TCP-заголовок 20 байт, UDP-заголовок 8 байт.
- MAC 48 бит, IPv4 32 бита, порт 16 бит.
- Подсети: /24 → 254 узла, /26 → 62, /30 → 2.
- log₂(1000) ≈ 10, log₂(10⁶) ≈ 20.
- 137 = SIGKILL (128+9), 139 = SIGSEGV (128+11), 143 = SIGTERM (128+15).
- Порты: 22 SSH, 53 DNS, 80 HTTP, 443 HTTPS.