# Диагностика уровня — пакет (C/C++, алгоритмы, Linux, сети) Собран под вакансию Eltex «Разработчик C/C++» (Новосибирск, hh #136775547). Цель — не «проверить себя на ощупь», а получить машинную оценку по доменам и список дыр. ## Что внутри - `quiz.json` + `quiz.py` — 32 вопроса по 4 доменам (C/C++ и память, алгоритмы и структуры данных, Linux/ОС, сети L2/L3 и TCP/IP). 24+ верных — уверенный вход. - `tasks/` — 9 практических задач, у каждой автопроверка: | # | Задача | Что проверяется | |---|--------|-----------------| | 01 | `01_bits` | битовые операции, без встроенных popcount | | 02 | `02_list` | связный список: разворот, середина, цикл (Флойд) | | 03 | `03_ring` | кольцевой буфер, wrap-around, ASAN | | 04 | `04_ipv4` | разбор IPv4-заголовка из буфера + контрольная сумма | | 05 | `05_lis` | НВП за O(n log n), тест на 100 000 элементов | | 06 | `06_threads` | ограниченная очередь: mutex/condvar, ThreadSanitizer | | 07 | `07_epoll` | TCP-эхо-сервер на epoll: несколько соединений, SIGTERM | | 08 | `08_bash` | разбор лога доступа: TOTAL/TOP-3/5XX, 110k строк | | 09 | `09_gdb` | отладка ASAN-падения + письменный разбор в `answer.txt` | Добор под слабые домены (добавлено 23.09 после диагностики — квиз 14/32): | # | Задача | Что проверяется | |---|--------|-----------------| | 10 | `10_hash` | хеш-таблица с открытой адресацией: пробирование, перехеширование, erase | | 11 | `11_heap` | куча: `heapify` снизу вверх O(n), `kth_largest`, `top_k` на 3M | | 12 | `12_dijkstra` | Дейкстра на `priority_queue`: неотрицательные веса, 100k вершин | | 13 | `13_subnet` | арифметика IPv4: сеть/broadcast/узлы, `/31`, `/32`, подбор префикса | - `facts.json` + `facts_drill.py` — тренажёр «числа и факты»: 60 карточек (algo 20, linux 14, net 14, c_cpp 12) под конкретные промахи квиза: сложности, байты заголовков, `/26 = 62`, TTL, порядок SYN/SYN-ACK/ACK, паддинг структур, правило трёх/пяти. Маркеры итога: `>=80%` ок, `50–79%` добор, `<50%` дыра. - `grade.py` — прогон задач с автооценкой (`PASS/FAIL`, число проверок, время). - `solutions/` — **эталонные решения, в руки не отдавать**: они лежат здесь, чтобы автопроверка не «протухла» (эталон → все PASS, заглушка → FAIL). ## Как проходить ```bash cd diag python3 quiz.py # вопросы по одному; ответы — номер варианта 1-4 python3 quiz.py --export # вывести вопросы текстом (можно отвечать в чате) python3 grade.py # все задачи (с ASAN/UBSAN/TSAN) python3 grade.py 01 04 # только выбранные python3 grade.py --fast # без санитайзеров, быстрее python3 grade.py --submit # результаты + свои файлы в submissions/ python3 facts_drill.py # 20 карточек, интерактивно python3 facts_drill.py --all # все 60 python3 facts_drill.py --domain algo # только алгоритмы python3 facts_drill.py --answers "20|62|ttl|..." # проверить строку ответов разом ``` Порядок: сначала квиз, потом задачи с 01 по 09 (диагностика), затем 10–13 как добор. Требования: Linux/WSL (или MinGW-w64 для задач 01–06, 10–13). Задачи 07/08/09 под Windows-native пропускаются с пометкой `ПРОПУСК` — это не провал, гоняй их в WSL. Зависание = FAIL (есть таймауты). Правила честности: без встроенных `popcount`/`reverse`-хелперов, без копирования чужих решений, `answer.txt` в задаче 09 — обязательная часть (оценивается ход разбора). ## Что считается результатом - `results_quiz.json`: балл по каждому домену + разбор промахов с пояснениями. - `results_tasks.json`: по задаче — PASS/FAIL, число проверок, время, полный лог сборки. - `results_facts.json`: тренажёр карточек — балл по доменам и список промахов. - Итог и решение по плану (с каких модулей стартовать) собираются по этим файлам. - Рабочий план недели: `WEEK7.md` в корне репозитория; трекер дня — `TRACKER.md`. ## Публикация и доступ Репозиторий: https://git.kodlo.art/Kodlo/eduplan-cpp-eltex — клонируется без пароля, обновляется по ходу недели. Результаты можно присылать веткой `answers/<день>`, файлами в чат или через `grade.py --submit`. Репозиторий: https://git.kodlo.art/Kodlo/eduplan-cpp-eltex (клонируется без пароля, обновляется по ходу недели). Результаты можно присылать веткой `answers/<день>`, файлами в чат или через `grade.py --submit`. - Пакет в каталоге: `/home/pi/eduplan/diag` (мир читает; каталог доступен на исполнение). - Инбокс для ответов: `/home/pi/eduplan/diag/submissions/` (0777). - Архив для скачивания: `/home/pi/eduplan/diag/dist/eduplan_diag.tar.gz`.