ИУП: интенсив 7 дней + диагностический пакет (32 вопроса, 9 задач с автопроверкой)
This commit is contained in:
@@ -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,
|
||||
остальное после оффера.
|
||||
Reference in New Issue
Block a user