Files
eduplan-cpp-eltex/diag/README.md
T

84 lines
6.4 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.
# Диагностика уровня — пакет (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`.