Files
eduplan-cpp-eltex/WEEK7.md
T

146 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ИУП — интенсив 7 дней (фуллтайм, собеседование ≤ 1 неделя)
Срок: собеседование максимум через неделю, подготовка — фуллтайм (~8 ч/день).
Цель интенсива: закрыть ровно то, что спросят на входе в Eltex (C/C++, базовые алгоритмы и
структуры данных, Linux, L2/L3-сети, инструменты), и не утонуть в глубине.
## Правила интенсива
1. Каждый день — три блока: **утро (3 ч) алгоритмы**, **день (3 ч) системное/язык**,
**вечер (2 ч) практика + разбор**. Блок не начинается, пока не закрыта вчерашняя точка.
2. День закрыт, только если: решены задачи дня **без подсказки**, написан/починен код дня,
сделана **одна задача вслух на таймер** (10 мин: 2 мин на разбор + код + сложность).
3. Всё пишем, а не читаем: теория — только под конкретную задачу, максимум 40 минут.
4. Трекер: `/home/pi/eduplan/diag/submissions/` или файл у себя — что решено, где встал,
сколько минут. Это вход для калибровки на следующий день.
5. Что осознанно НЕ лезет в неделю: полноценное ядро (модуль+драйвер), электроника,
Docker-продакшн. Ядро — обзорно на D6, электроника — после оффера (см. `PLAN.md`).
6. Если день провален — не догоняем всё, а переносим хвост в D7 (день повтора) и режем
второстепенное (M8-обзор, docker).
Материалы: cppreference (C и C++), man7.org (разделы 2/3/7), LKMPG, docs.kernel.org,
OSTEP (главы про процессы/память), Beej's Guide to Network Programming, RFC 791/793,
Wireshark wiki. Задачи: Codeforces с фильтром по тегам и рейтингу 800–1400
(`https://codeforces.com/problemset?tags=two+pointers,800-1400` — менять тег),
Яндекс Тренировки по алгоритмам (бесплатные контесты с разборами,
`https://yandex.ru/yaintern/training/algorithm-training`), классика LeetCode — по названию
(ссылки на leetcode.com открываются только в браузере).
---
## D0 — 23.09, диагностика (3–4 ч)
- Квиз: `python3 quiz.py` (или ответы строкой в чат), 32 вопроса, 4 домена.
- Задачи: `python3 grade.py` — 9 задач с автопроверкой (ASAN/UBSAN).
- Разбор промахов вместе со мной, калибровка: какие дни усилить, что срезать.
- **Точка:** есть `results_quiz.json` и `results_tasks.json`, названы 3 слабейших темы.
## D1 — 24.09: массивы/строки + память в C + процессы Linux
- Утро (3 ч) — алгоритмы: два указателя, скользящее окно, префиксные суммы, бинарный
поиск и `lower_bound` руками. Задачи: Two Sum, Valid Palindrome, Container With Most
Water, Longest Substring Without Repeating Characters, Binary Search + 6–8 задач с
Codeforces по тегам `two pointers` и `binary search`, рейтинг 800–1400.
- День (3 ч) — C и память: указатели и арифметика, выравнивание и padding, UB
(signed overflow, strict aliasing, неинициализированная память), malloc/free,
переполнение буфера; сборка с `-Wall -Wextra -Werror -fsanitize=address,undefined`.
Практика: переписать `tasks/01_bits` и `tasks/03_ring` на чистом C (без C++-обёрток),
прогнать под санитайзерами.
- Вечер (2 ч) — Linux: `fork/exec/wait`, зомби, сигналы, коды возврата. Практика: свой
мини-шелл (fork + exec + wait, обработка `exit`) — это прямой вопрос на собеседовании.
- **Точка:** 10+ задач решены; мини-шелл запускает `ls`/`cat`; ASAN чистый; лог дня.
## D2 — 25.09: хеш-таблицы и сортировки + C++ (RAII, владение, STL) + git/Makefile
- Утро (3 ч) — алгоритмы: хеш-таблицы и множества (коллизии, открытая адресация vs
цепочки), сортировки и компараторы, stability. Задачи: Group Anagrams, Top K Frequent
Elements, Two Sum II, Merge Intervals, Sort Colors + 6–8 задач с тегами `hashing`,
`sortings`.
- День (3 ч) — C++: RAII, правило 0/3/5, move-семантика и `std::move`, умные указатели
(unique/shared/weak, циклы ссылок), контейнеры STL и итераторы, лямбды, исключения и
гарантии безопасности. Практика: свой `unique_ptr` и свой `vector` (упрощённый), класс-
владелец с правилом пяти; сборка с `-Werror`.
- Вечер (2 ч) — git (ветки, rebase, конфликты, `bisect`) и сборка: Makefile руками, затем
CMake для своих задач. Практика: репозиторий с 3 задачами, где сборка/тесты — одной
командой.
- **Точка:** мини-библиотека собирается с `-Werror`; git-сценарии (rebase, bisect) пройдены
руками; 10+ задач.
## D3 — 26.09: списки/стек + многопоточность + gdb
- Утро (3 ч) — алгоритмы: связные списки (разворот, цикл Флойда, k-й с конца), стек/
очередь/ring buffer, монотонный стек. Задачи: Reverse Linked List, Merge Two Sorted
Lists, Linked List Cycle, Valid Parentheses, Daily Temperatures + 6–8 задач с тегами
`linked list`, `stack`.
- День (3 ч) — многопоточность: `std::thread`, mutex/`lock_guard`, `condition_variable`
и predicate-цикл, атомики и `memory_order`, гонки, дедлоки, ложные пробуждения;
паттерны producer/consumer и пул потоков. Практика: довести `tasks/06_threads` до
продакшн-вида + написать пул потоков. TSan на этой машине недоступен (VMA) — проверяем
инвариантами + ASAN, в логе это помечено.
- Вечер (2 ч) — gdb: breakpoints, `watch`, `bt`, `frame`, отладка потоков, разбор
падения. Практика: `tasks/09_gdb` + своё падение (переполнение буфера) с письменным
разбором.
- **Точка:** 10+ задач; пул потоков проходит счётчики 4×4×20k; падение разобрано в gdb
письменно.
## D4 — 27.09: деревья/куча + Linux-системное (epoll) + L2/L3
- Утро (3 ч) — алгоритмы: бинарные деревья и BST, обходы (рекурсия и итерация), куча и
`priority_queue`, heapify за O(n), top-K, LCA. Задачи: Invert Binary Tree, Validate
Binary Search Tree, Binary Tree Level Order Traversal, Kth Largest Element, Lowest
Common Ancestor + 6–8 задач с тегами `trees`, `heaps`.
- День (3 ч) — Linux: файловый ввод-вывод (`open/read/write/lseek`), `mmap`,
мультиплексирование `select → poll → epoll` (LT/ET), неблокирующие сокеты,
`SO_REUSEADDR`, обработка `EAGAIN/EINTR`. Практика: `tasks/07_epoll` — эхо-сервер
довести до вида «не падает под нагрузкой» + клиент, нагрузочный тест своими руками.
- Вечер (2 ч) — сети L2/L3: OSI и TCP/IP, инкапсуляция, Ethernet (14 байт заголовка),
MAC, ARP, VLAN 802.1Q, IPv4-заголовок и контрольная сумма, маски и подсети, ICMP.
Практика: `tasks/04_ipv4` + два письменных разбора дампов (`tcpdump`: ARP-обмен и
TCP-handshake).
- **Точка:** сервер держит 3+ одновременных соединения и не течёт по дескрипторам;
2 разбора дампов письменно; 10+ задач.
## D5 — 28.09: графы + TCP глубоко + bash/proc
- Утро (3 ч) — алгоритмы: представления графа, BFS/DFS, топологическая сортировка,
компоненты связности, Дейкстра (неотрицательные веса), union-find. Задачи: Number of
Islands, Course Schedule, Clone Graph, Network Delay Time, Redundant Connection + 6–8
задач с тегами `graphs`, `dfs and similar`, `dsu`.
- День (3 ч) — сети глубже: TCP-автомат состояний, окно и подтверждения, ретрансмиссии и
таймеры, закрытие соединения, UDP, порты, NAT, DNS/DHCP минимум; работа с
`tcpdump`/Wireshark. Практика: 3 письменных разбора дампов (ретрансмиссия, ICMP
unreachable, DNS) + свой захват трафика своей же программой.
- Вечер (2 ч) — Linux-быт: `/proc`, `ulimit`, systemd-юниты обзорно; bash (пайплайны,
`set -euo pipefail`, awk/sed для логов). Практика: `tasks/08_bash` + свой скрипт
диагностики сети/логов.
- **Точка:** 8+ задач; 3 разбора дампов; скрипт работает на логе в 100k строк за секунды.
## D6 — 29.09: ДП + ядро/embedded обзорно + docker + резюме
- Утро (3 ч) — алгоритмы: ДП — состояния и переходы, рюкзак, LIS за O(n log n), строковые
задачи. Задачи: Climbing Stairs, House Robber, Coin Change, Longest Increasing
Subsequence, Edit Distance, Word Break + 5–6 задач с тегом `dp`, рейтинг 800–1400.
- День (3 ч) — ядро и embedded обзорно: модуль ядра (сборка, insmod/rmmod, printk,
параметры, `/proc`), символьный драйвер (`file_operations`), device tree и cross-compile
— по касательной, ровно чтобы отвечать словами. Практика: hello-модуль + простейший
символьный драйвер (в QEMU, если на этой машине сборка не встанет).
- Вечер (2 ч) — docker (образ под сборку/тесты) и **резюме + сопроводительное под Eltex**
(учесть: рассматривают офисный формат).
- **Точка:** модуль грузится/выгружается; черновик резюме отревьюен.
## D7 — 30.09: повтор, два мок-интервью, выход
- 2 ч — утренний повтор: только слабые места из трекера (не всё подряд).
- 3 ч — мок-интервью №1: алгоритмы, 2 задачи вслух с таймером, я веду и разбираю.
- 2 ч — мок-интервью №2: C/C++ + Linux + сети (вопросы по кругу, включая разбор дампа).
- 1 ч — вопросы работодателю, легенда по опыту, финальная вычитка резюме.
- **Точка:** ≤ 1 грубая ошибка на сессию; резюме и сопроводительное готовы.
---
## После собеседования
Незакрытое (полный трек `PLAN.md`): M2 хвост (битовые/строковые алгоритмы, математика),
M6 глубина (STP, маршрутизация, HTTP), M7 полностью (Docker в бою, bisect на реальном
репозитории), M8 ядро (полноценный драйвер, uboot/bringup), M9 электроника.