Формат v3: уроки D1 (теория+разбор), задачи ступенями, карточки 101 с уровнями и пояснениями
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# ИУП — интенсив 7 дней (фуллтайм, собеседование ≤ 1 неделя)
|
||||
|
||||
**Версия 2, 23.09** — пересобрана по результату диагностики (квиз 14/32).
|
||||
**Версия 3, 23.09** — пересобрана по диагностике (квиз 14/32, карточки 11/60) и правке
|
||||
формата: сначала урок с теорией, потом задачи ступенями.
|
||||
Срок: собеседование максимум через неделю, подготовка фуллтайм (~8 ч/день).
|
||||
Цель: закрыть ровно то, что спросят на входе в Eltex (C/C++, базовые алгоритмы и структуры
|
||||
данных, Linux, L2/L3-сети, инструменты), и не утонуть в глубине.
|
||||
@@ -19,10 +20,24 @@
|
||||
Поэтому в плане появился ежедневный блок карточек (`facts_drill.py`), а C++ урезан:
|
||||
за него отвечает сильная сторона, забирать у неё часы смысла нет.
|
||||
|
||||
## Правила интенсива
|
||||
## Как устроен день (v3, после правки 23.09)
|
||||
|
||||
1. Каждый день — три блока: **карточки (30 мин) → алгоритмы (3 ч) → системное (3 ч) →
|
||||
разбор и код (1,5 ч)**. Блок не начинается, пока не закрыта вчерашняя точка.
|
||||
Первая версия была проверкой — а проверять пока нечего. Теперь каждый день начинается
|
||||
с материала:
|
||||
|
||||
1. **Урок (30–40 мин чтения).** `lessons/D<день>_*.md` — теория по-русски, разобранные
|
||||
примеры с кодом, готовые ответы на вопросы собеседования, ссылки на первопартийные
|
||||
материалы. Ничего не решаешь, просто читаешь и запускаешь примеры.
|
||||
2. **Карточки (20 мин).** `python3 facts_drill.py --level base` — начинать с базы;
|
||||
в режиме `--learn` каждая ошибка объясняется. База закрыта (≥ 80%) — переходишь на
|
||||
уровень `base,core` (по умолчанию), потом `all`.
|
||||
3. **Ступени в задаче.** Каждая задача разбита на шаги по 10–30 минут, после каждого шага
|
||||
прогон. Не «напиши хеш-таблицу», а «сначала хеш-функция, проверь, что 16/32/48 дают
|
||||
разные индексы».
|
||||
4. **Зачёт.** `python3 grade.py <номер>` — критерий `PASS`. Это конец дня, а не начало.
|
||||
|
||||
Итого: **урок → карточки → ступени → зачёт**. Задача без урока впереди — моя ошибка,
|
||||
пиши, и я допишу материал.
|
||||
2. День закрыт, только если: решены задачи дня **без подсказки**, написан/починен код дня,
|
||||
сделана **одна задача вслух на таймер** (10 мин: разбор + код + сложность), заполнен
|
||||
трекер.
|
||||
@@ -51,36 +66,38 @@ Programming, RFC 791/793, Wireshark wiki, OSTEP (процессы/память),
|
||||
`priority_queue`, арифметика подсетей.
|
||||
- `python3 grade.py` — все 13 с автопроверкой (ASAN/UBSAN); `python3 grade.py 10 13` —
|
||||
выборочно; `--fast` — без санитайзеров.
|
||||
- `python3 facts_drill.py` — 60 карточек «числа и факты» (algo 20, linux 14, net 14,
|
||||
c_cpp 12). Маркеры: `>=80%` ок, `50–79%` добор, `<50%` дыра.
|
||||
- `python3 facts_drill.py --level base` — 41 карточка базы с пояснениями (начинать отсюда);
|
||||
`--level base,core` — 93; `--level all` — 101. Уровень `deep` (8 карточек, нишевое:
|
||||
TID в /proc, ulimit, ICMP Time Exceeded и подобное) в базовый прогон не попадает.
|
||||
Маркеры итога: `>=80%` ок, `50–79%` добор, `<50%` дыра.
|
||||
- `lessons/` — уроки по дням: теория, разборы с кодом, ответы на вопросы собеседования.
|
||||
- Трекер дня: `TRACKER.md` в корне репозитория.
|
||||
|
||||
---
|
||||
|
||||
## D0 — 23.09, диагностика (квиз пройден, 14/32)
|
||||
## D0 — 23.09, вход: база и знакомство
|
||||
|
||||
- Квиз: **пройден** — 14/32, слабейшие домены: алгоритмы, Linux, сети (см. таблицу выше).
|
||||
- Осталось: `cd diag && python3 grade.py 01 02 03 04 05 06 07 08 09` — 9 практических задач.
|
||||
- Разбор промахов квиза вместе со мной, калибровка дней (уже сделана в этой версии плана).
|
||||
- **Точка:** есть `results_quiz.json` и `results_tasks.json`, названы 3 слабейших темы.
|
||||
- Квиз **14/32**, карточки **11/60** — значит базы пока нет, и задачи уровня «напиши
|
||||
хеш-таблицу» решать рано. Это нормальный вход, просто порядок другой: сначала уроки.
|
||||
- Сегодня: `python3 facts_drill.py --level base --learn` — 41 карточка базы, каждая ошибка
|
||||
объясняется. Это 20–30 минут и даёт словарь, без которого дальше нечего делать.
|
||||
- Задачи 01–13 сегодня решать не нужно. Смотрим на них как на цель недели, а не как на зачёт.
|
||||
- **Точка:** пройдены базовые карточки, записаны 3 темы, которые «совсем не помню» —
|
||||
по ним я усилю соответствующие дни.
|
||||
|
||||
## D1 — 24.09: инварианты сложности + хеш-таблицы | fork/COW/сигналы
|
||||
|
||||
- Карточки (30 мин) — домен `algo`: бинарный поиск в 1e6, хеш O(1)/worst O(n), heapify O(n),
|
||||
устойчивость сортировок, Дейкстра и условие применимости.
|
||||
- Утро, алгоритмы (3 ч) — **формальные свойства, а не «умение решать»**: O-оценки и
|
||||
амортизация, хеш-таблицы (цепочки vs открытая адресация, загрузка, tombstone, worst O(n)),
|
||||
сортировки и устойчивость, бинарный поиск и `lower_bound` руками.
|
||||
Практика: **`tasks/10_hash`** — своя таблица на линейном зондировании; 6–8 задач
|
||||
Codeforces по тегам `hashing` и `sortings`, рейтинг 800–1400.
|
||||
- День, системное (3 ч) — Linux: `fork/exec/wait`, **COW-страницы**, зомби и `waitpid`,
|
||||
сигналы и коды возврата (137 = 128+9 SIGKILL, 139 = 128+11 SIGSEGV), `errno`.
|
||||
Практика: мини-шелл (fork + exec + wait + `exit` + пайплайн по желанию) — прямой вопрос
|
||||
на собеседовании; прогнать под ASAN.
|
||||
- Разбор и код (1,5 ч) — `tasks/01_bits` и `tasks/03_ring` **на чистом C** (без C++-обёрток),
|
||||
сборка `-Wall -Wextra -Werror -fsanitize=address,undefined`; одна задача вслух; трекер.
|
||||
- **Точка:** 10_hash PASS; мини-шелл запускает `ls`/`cat`; ASAN чистый; карточки `algo` ≥ 80%.
|
||||
## D1 — 24.09: сложность и хеш-таблицы | процессы и сигналы
|
||||
|
||||
- **Урок:** `lessons/D1_algo.md` (сложность, таблица структур, устройство хеш-таблиц,
|
||||
разбор кода) и `lessons/D1_linux.md` (fork/exec/wait, COW, сигналы, разбор мини-шелла).
|
||||
Читать 40 минут, примеры из уроков запустить руками — они рабочие.
|
||||
- **Карточки:** `python3 facts_drill.py --level base` (домен `algo` — обязателен, остальное
|
||||
по времени). Если база даётся легко — `--level base,core`.
|
||||
- **Задача дня:** `tasks/10_hash` — но по ступеням из её `task.md` (Глава IV), по 10–30 минут
|
||||
на шаг, после каждого шага `python3 grade.py 10`. Ступень 1 — это хеш-функция и проверка,
|
||||
что 16/32/48 дают разные индексы, и только шестая ступень — перехеширование.
|
||||
- **Разминка:** `tasks/01_bits` (20 минут, четыре функции) и `tasks/03_ring` (40–60 минут,
|
||||
тоже по ступеням).
|
||||
- **Зачёт дня:** `PASS` по `01`, `03`, `10`; карточки `base` ≥ 80%.
|
||||
## D2 — 25.09: деревья и куча | epoll и неблокирующие сокеты
|
||||
|
||||
- Карточки (30 мин) — `algo`: heap insert O(log n), top-K, обходы деревьев, сложность DFS
|
||||
|
||||
Reference in New Issue
Block a user