# ИУП: подготовка под «Разработчик C/C++» (Eltex, Новосибирск) > **Актуальный режим (23.09.2026):** собеседование ≤ 1 недели, подготовка фуллтаймом — > рабочий документ сейчас `WEEK7.md` (интенсив 7 дней). Этот файл — полный трек на > пост-офферный период и калибровка по диагностике. Цель: пройти собеседование на вакансию hh #136775547 (Eltex, embedded C/C++, Linux, TCP/IP) и подтвердить уровень практикой, а не самооценкой. Принципы плана: - каждая точка трека закрывается артефактом, у которого есть машинная или ревью-проверка; - материалы — первопартийные (официальные доки, man-страницы, книги авторов стека); - теории ровно столько, сколько нужно для практики: сначала задача, потом разбор; - ритм недельный, с обязательным «выходом» (код/разбор) каждую неделю; - ревизия плана каждые 4 недели по факту прохождения. ## Диагностика (вход) `/home/pi/eduplan/diag` — квиз по 4 доменам (C/C++, алгоритмы, Linux/OS, сети) и 9 практических задач (биты, связный список, ring buffer, разбор IPv4-пакета, ДП, потоки, epoll-сервер, bash, отладка gdb). Результат задаёт: с каких модулей стартовать, какие закрывать «по касательной», а какие — с нуля. Пока уровня не знаем, все модули помечены как «полный». ## Трек модулей Обозначения: **К** — контрольная точка, **A** — артефакт. Оценка «сдал»: артефакт собирается и проходит автопроверку/ревью; провал — точка не закрыта. ### M0. Диагностика — 1 день - A: `diag/results_quiz.json`, `diag/results_tasks.json`. - К: пройден квиз (≥ 24/32 верных, иначе модуль-дыра уходит в план) и 9 задач. ### M1. Системный C — 1 неделя - Память и владение: malloc/free, утечки, double free, dangling, переполнение буфера. - Указательная арифметика, выравнивание, структуры и padding, bitfields, union. - UB: переполнение знаковых, strict aliasing, неинициализированная память, порядок вычислений; как ловить — `-Wall -Wextra -fsanitize=address,undefined`. - Строки/буферы, `memcpy` vs `strcpy`, `restrict`, endianness, work with bytes. - A: 20 задач (массивы, битовые операции, парсинг бинарных структур) + конспект по UB. - К: A собирается с `-Wall -Wextra -Werror` и проходит автопроверку. - Материалы: cppreference (C), man-страницы 3 раздел, lkmpg (глава про кодинг-стиль и ошибки), OSTEP (глава про адресное пространство и malloc). ### M2. Алгоритмы и структуры данных — 4–6 недель (приоритет по запросу) Порядок — от «спрашивают почти всегда» к «глубина»: 1. Сложность, амортизация, оценка на салфетке. 2. Массив/строка: два указателя, скользящее окно, префиксные суммы, бинарный поиск (в т.ч. lower_bound руками). 3. Сортировки: понимание всех, stability, компараторы; встроенная сортировка с ключом. 4. Хеш-таблицы: коллизии, открытая адресация vs цепочки, нагрузка; unordered_map. 5. Связные списки: разворот, поиск цикла (Флойд), пересечение, k-й с конца. 6. Стек/очередь/ring buffer, монотонный стек/дек. 7. Бинарные деревья и BST, обходы (рекурсия/итерация), LCA; куча и priority_queue (heapify O(n), top-K). 8. Графы: представления, BFS/DFS, топосорт, компоненты, Дейкстра (неотрицательные веса), union-find. 9. ДП: базовые состояния и переходы, задача о рюкзаке, LIS O(n log n), разбор «как доказывать корректность и считать сложность». 10. Битовая арифметика, математика, строковые алгоритмы (хеш/префикс-функция — по остатку). - A: 60 задач (Яндекс-тренировки по алгоритмам + LeetCode/Codeforces-набор), 3 «живых» разбора вслух с замером времени, файл-трекер с датами и статусами. - К: 60% задач решены без подсказки за целевое время; 3 разбора приняты на ревью. - Материалы: официальные Яндекс Тренировки по алгоритмам (бесплатно), cppreference, OSTEP — как базис по структурам; Кормен — как справочник, не как старт. ### M3. C++ как язык — 2 недели - RAII, Rule of 0/3/5, move-семантика, `std::move` vs перемещение, noexcept. - Умные указатели: unique_ptr/shared_ptr/weak_ptr, циклы ссылок. - Шаблоны и STL: контейнеры, итераторы, алгоритмы, лямбды, `auto`, structured bindings. - Исключения и гарантии безопасности (basic/strong), RAII-обёртки. - Виртуальность, vtable, виртуальный деструктор, slicing. - A: своя реализация `vector`/`unique_ptr` + мини-библиотека утилит. - К: сборка с `-Wall -Wextra -Werror` под ASAN/UBSAN, тесты проходят; ревью кода. - Материалы: cppreference (эталон синтаксиса/поведения), Core Guidelines (C++ Core Guidelines — официальный свод), книги автора языка (Страуструп) — выборочно. ### M4. Многопоточность — 2 недели - std::thread, mutex/lock_guard, condition_variable, атомики и memory_order, барьеры. - Гонки, дедлоки, ложное пробуждение, паттерны: producer/consumer, пул потоков, thread-safe singleton, reader-writer. - Инструменты: ThreadSanitizer, `-pthread`, helgrind — по возможности. - A: bounded blocking queue + пул потоков с тестами, гонки ловятся TSan. - К: TSan чистый на 4×4 потоков/20k элементов, счётчики совпадают. - Материалы: cppreference (atomic/thread), документация компилятора по санитайзерам. ### M5. Linux: системное программирование — 3 недели - Процессы: fork/exec/wait, зомби, сигналы и маски, exit-коды. - Файловый ввод-вывод: open/read/write/lseek/mmap, буферизация, права. - IPC: pipes, FIFO, unix-сокеты, shared memory. - Мультиплексирование: select → poll → epoll (LT/ET), неблокирующие сокеты. - Сокеты: TCP/UDP клиент-сервер, SO_REUSEADDR, разбор ошибок errno. - /proc, /sys, ulimit, cgroups (обзор), systemd-юниты (обзор). - A: TCP-эхо-сервер на epoll с поддержкой многих соединений + клиент; конспект по системным вызовам с man-страницами. - К: автотест поднимает сервер, гоняет 3 соединения, проверяет эхо; ревью кода. - Материалы: man7.org (man-страницы, разделы 2/3/7), LKMPG, OSTEP (процессы/потоки), Beej's Guide to Network Programming. ### M6. Сети L2/L3 и анализ трафика — 3 недели - OSI/TCP-IP стеки; инкапсуляция; MTU/фрагментация. - L2: Ethernet, MAC, ARP, VLAN 802.1Q, STP (обзор), коммутация, learning/broadcast. - L3: IPv4-заголовок и контрольная сумма, маски/подсети, маршрутизация, ICMP, TTL. - L4: TCP (handshake, состояния, окно, ретрансмиссии, таймеры), UDP, порты, NAT. - Прикладные: DNS, DHCP, HTTP-минимум. - Инструменты: tcpdump, Wireshark, tcpreplay-разбор дампов, iperf. - A: 5 письменных разборов дампов (ARP-запрос, VLAN-кадр, TCP-handshake, ретрансмиссия, ICMP unreachable) + свой дамп, снятый своей программой (`tcpdump`). - К: разборы приняты на ревью; в каждом названы поля и вывод — что происходит в сети. - Материалы: RFC 791/793 (первоисточники), man-страницы сокетов, Wireshark wiki. ### M7. Инструменты и инженерная гигиена — параллельно с M1–M6 - git: ветки, rebase, cherry-pick, bisect, stash, worktree, конфликты. - gdb: breakpoints/watch/backtrace, разбор падений, core dumps, отладка потоков. - Сборка: Makefile руками → CMake, флаги, санитайзеры, препроцессор. - Docker: образ под сборку/тесты, воспроизводимое окружение. - bash: пайплайны, регулярки, awk/sed на уровне «разобрать лог», set -euo pipefail. - A: скрипт `check.sh` (сборка+тесты+санитайзеры), разбор одного реального падения в gdb, Makefile+CMake для своих задач. - К: скрипт зелёный на чистом клоне; падение разобрано письменно. ### M8. Ядро и embedded (плюс к вакансии) — 2 недели - Модуль ядра: сборка, insmod/rmmod, printk, параметры, /proc. - Символьный драйвер: file_operations, копирование user↔kernel. - Device Tree (обзор), cross-compile (aarch64), uboot и bringup (обзор). - A: рабочий модуль + символьный драйвер, собранные под текущее ядро (или в QEMU). - К: модуль грузится и выгружается, драйвер отдаёт данные `cat`-ом. - Материалы: LKMPG (sysprog21.github.io/lkmpg), docs.kernel.org, эликсир (исходники ядра), kernel.org driver-api. ### M9. Электроника (если проект аппаратный) — 1–2 недели - Основы схемотехники: питание, делители, подтяжки, транзистор как ключ. - Интерфейсы: UART/I2C/SPI, уровни, осциллограмма. - Чтение принципиальной схемы, работа мультиметром/осциллографом, пайка. - A: письменный разбор одной схемы из открытого проекта + замеры (если есть доступ к железу студии). - К: разбор принят на ревью; термины и режимы интерфейсов объяснены без подглядывания. ### M10. Мок-интервью и выход — финальные 2 недели - 3 живые сессии: (1) алгоритмы — 2 задачи вслух с замером, (2) C/C++ глубина + Linux, (3) сети L2/L3 + анализ дампа. - Резюме под вакансию + сопроводительное с готовностью к офисному формату. - A: 3 записи/протокола сессий с разбором ошибок; резюме и cover под Eltex. - К: не больше 1 грубой ошибки на сессию; резюме отревьюено. ## Ритм - Будни: 1.5–2 ч практики (задачи) + 30 мин разбора теории под сегодняшние задачи. - Выходные: 3 ч — «грязный» модуль недели (драйвер/сервер/дампы) с артефактом. - Каждую неделю — отчёт: что закрыто, что нет, где упёрся; каждые 4 недели — ревизия плана (пункты переехать/выбросить/добавить). - Правило: не начинать новый модуль, пока не закрыта контрольная точка предыдущего; исключение — M7 (идёт параллельно). ## Порядок запуска (после диагностики) Старт — с M2 (приоритет Туры) с параллельным добором M1 там, где диагностика показала дыры; M3/M4/M5 — по мере закрытия M2; M6/M7/M8/M9/M10 — по срокам собеседования. Если собеседование ближе 6 недель — сжатый вариант: M2 (ядро) + M5/M6 + M7 + M10, остальное после оффера.