ИУП: интенсив 7 дней + диагностический пакет (32 вопроса, 9 задач с автопроверкой)

This commit is contained in:
Kodlo-chan
2026-09-23 16:05:09 +07:00
commit 4cd63b3d4d
40 changed files with 2464 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
# ИУП: подготовка под «Разработчик 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,
остальное после оффера.