82 lines
6.2 KiB
Markdown
82 lines
6.2 KiB
Markdown
# Диагностика уровня — пакет (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 как добор. Зависание = 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`.
|