Files
eduplan-cpp-eltex/WEEK7.md
T

13 KiB
Raw Blame History

ИУП — интенсив 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 электроника.