From 469bc1f4e7a615747a6f0f2808d3d42e8d50bd3b Mon Sep 17 00:00:00 2001 From: tura Date: Wed, 23 Sep 2026 17:16:04 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diag/results_facts.json | 505 ++++++++++++++++++++++++++++++++++++++++ diag/results_tasks.json | 17 ++ 2 files changed, 522 insertions(+) create mode 100644 diag/results_facts.json create mode 100644 diag/results_tasks.json diff --git a/diag/results_facts.json b/diag/results_facts.json new file mode 100644 index 0000000..b71fd05 --- /dev/null +++ b/diag/results_facts.json @@ -0,0 +1,505 @@ +{ + "seed": 42, + "correct": 60, + "total": 60, + "per_domain": { + "net": { + "total": 14, + "ok": 14 + }, + "linux": { + "total": 14, + "ok": 14 + }, + "c_cpp": { + "total": 12, + "ok": 12 + }, + "algo": { + "total": 20, + "ok": 20 + } + }, + "details": [ + { + "n": 1, + "domain": "net", + "q": "Какое поле IPv4-заголовка уменьшается на 1 на каждом маршрутизаторе?", + "answer": "ttl", + "ok": true, + "correct": "TTL" + }, + { + "n": 2, + "domain": "linux", + "q": "Сложность select против epoll на большом числе дескрипторов?", + "answer": "select o(n), epoll o(1)", + "ok": true, + "correct": "select — O(n) по всем, epoll — O(1) на готовое событие" + }, + { + "n": 3, + "domain": "c_cpp", + "q": "Что делает const после сигнатуры метода?", + "answer": "this const", + "ok": true, + "correct": "делает this const, запрещает менять поля" + }, + { + "n": 4, + "domain": "algo", + "q": "Как найти цикл в связном списке за O(1) дополнительной памяти?", + "answer": "флойд", + "ok": true, + "correct": "алгоритм Флойда: черепаха и заяц" + }, + { + "n": 5, + "domain": "algo", + "q": "Насколько быстро работают операции union-find с эвристиками?", + "answer": "почти o(1)", + "ok": true, + "correct": "почти O(1), O(α(n))" + }, + { + "n": 6, + "domain": "linux", + "q": "Что делает fork()?", + "answer": "создаёт новый процесс", + "ok": true, + "correct": "создаёт новый процесс (свой PID, COW-копия памяти)" + }, + { + "n": 7, + "domain": "c_cpp", + "q": "Определён ли стандартом порядок вычисления аргументов f(a(), b())?", + "answer": "нет", + "ok": true, + "correct": "нет, порядок не задан" + }, + { + "n": 8, + "domain": "c_cpp", + "q": "Правило трёх/пяти — в чём суть?", + "answer": "деструктор + копирование + перемещение", + "ok": true, + "correct": "владеющий ресурсом класс задаёт деструктор, копирование и перемещение" + }, + { + "n": 9, + "domain": "linux", + "q": "Сколько байт в заголовке TCP без опций?", + "answer": "20", + "ok": true, + "correct": "20" + }, + { + "n": 10, + "domain": "algo", + "q": "Структура для поиска слов по префиксу за O(len)?", + "answer": "trie", + "ok": true, + "correct": "trie (префиксное дерево)" + }, + { + "n": 11, + "domain": "algo", + "q": "Средняя сложность quicksort и mergesort?", + "answer": "o(n log n)", + "ok": true, + "correct": "O(n log n)" + }, + { + "n": 12, + "domain": "net", + "q": "Сколько адресов узлов в подсети /26?", + "answer": "62", + "ok": true, + "correct": "62" + }, + { + "n": 13, + "domain": "linux", + "q": "Что делает ulimit -n?", + "answer": "лимит дескрипторов", + "ok": true, + "correct": "показывает/меняет лимит открытых файловых дескрипторов" + }, + { + "n": 14, + "domain": "net", + "q": "По какому протоколу и порту работает DNS?", + "answer": "udp 53", + "ok": true, + "correct": "UDP/53 (при больших ответах TCP/53)" + }, + { + "n": 15, + "domain": "linux", + "q": "Что такое TID (Thread ID) в /proc?", + "answer": "номер задачи", + "ok": true, + "correct": "номер задачи в /proc//task/" + }, + { + "n": 16, + "domain": "c_cpp", + "q": "Что такое UB?", + "answer": "undefined behavior", + "ok": true, + "correct": "undefined behavior: стандарт не накладывает требований" + }, + { + "n": 17, + "domain": "algo", + "q": "При каком условии применим алгоритм Дейкстры?", + "answer": "неотрицательные веса", + "ok": true, + "correct": "веса рёбер неотрицательны" + }, + { + "n": 18, + "domain": "linux", + "q": "Что происходит со страницами памяти при fork()?", + "answer": "cow", + "ok": true, + "correct": "copy-on-write: копируются при первой записи" + }, + { + "n": 19, + "domain": "c_cpp", + "q": "Что делает std::move сам по себе?", + "answer": "static_cast к rvalue", + "ok": true, + "correct": "static_cast к rvalue-ссылке; перемещение делает конструктор/присваивание" + }, + { + "n": 20, + "domain": "algo", + "q": "Чем заменить Дейкстру при отрицательных рёбрах?", + "answer": "беллман-форд", + "ok": true, + "correct": "Беллман–Форд" + }, + { + "n": 21, + "domain": "linux", + "q": "Что означает errno EAGAIN на неблокирующем сокете?", + "answer": "повторить позже", + "ok": true, + "correct": "данных сейчас нет, повторить позже" + }, + { + "n": 22, + "domain": "algo", + "q": "Для какого графа возможна топологическая сортировка?", + "answer": "dag", + "ok": true, + "correct": "для ациклического (DAG)" + }, + { + "n": 23, + "domain": "c_cpp", + "q": "Чем unique_ptr отличается от shared_ptr?", + "answer": "единственный владелец", + "ok": true, + "correct": "unique_ptr — единственный владелец без счётчика; shared_ptr считает ссылки" + }, + { + "n": 24, + "domain": "linux", + "q": "Какой механизм держит десятки тысяч соединений в одном потоке?", + "answer": "epoll", + "ok": true, + "correct": "epoll" + }, + { + "n": 25, + "domain": "net", + "q": "Размер MTU Ethernet по умолчанию?", + "answer": "1500", + "ok": true, + "correct": "1500 байт" + }, + { + "n": 26, + "domain": "linux", + "q": "Что даёт mmap() на файл?", + "answer": "отображает файл в память", + "ok": true, + "correct": "отображает файл в память; страницы подгружаются по обращению" + }, + { + "n": 27, + "domain": "algo", + "q": "Средняя сложность поиска в хеш-таблице при разумной загрузке?", + "answer": "o(1)", + "ok": true, + "correct": "амортизированное O(1)" + }, + { + "n": 28, + "domain": "net", + "q": "Сколько байт в минимальном IPv4-заголовке?", + "answer": "20", + "ok": true, + "correct": "20" + }, + { + "n": 29, + "domain": "linux", + "q": "Зачем родителю waitpid()?", + "answer": "забрать код возврата", + "ok": true, + "correct": "чтобы забрать код возврата и не оставлять зомби" + }, + { + "n": 30, + "domain": "c_cpp", + "q": "Класс владеет ресурсом и имеет деструктор, копирование не объявлено. Что будет?", + "answer": "двойное освобождение", + "ok": true, + "correct": "сгенерируется поверхностное копирование — двойное освобождение" + }, + { + "n": 31, + "domain": "algo", + "q": "Какова нижняя оценка сложности сортировки сравнениями?", + "answer": "o(n log n)", + "ok": true, + "correct": "O(n log n)" + }, + { + "n": 32, + "domain": "linux", + "q": "Код возврата 139 — что это?", + "answer": "sigsegv", + "ok": true, + "correct": "SIGSEGV (128+11) — падение по памяти" + }, + { + "n": 33, + "domain": "net", + "q": "Правильная последовательность установки TCP-соединения?", + "answer": "syn, syn-ack, ack", + "ok": true, + "correct": "SYN -> SYN-ACK -> ACK" + }, + { + "n": 34, + "domain": "linux", + "q": "Что такое процесс-зомби?", + "answer": "завершившийся процесс без wait", + "ok": true, + "correct": "завершившийся процесс, чья запись ждёт wait/waitpid" + }, + { + "n": 35, + "domain": "c_cpp", + "q": "Чему равен sizeof(struct S { char a; int b; char c; }) на x86-64 без pack?", + "answer": "12", + "ok": true, + "correct": "12 (паддинг до выравнивания)" + }, + { + "n": 36, + "domain": "algo", + "q": "BFS или DFS даёт кратчайший путь в невзвешенном графе?", + "answer": "bfs", + "ok": true, + "correct": "BFS" + }, + { + "n": 37, + "domain": "net", + "q": "Сколько байт добавляет VLAN-тег 802.1Q?", + "answer": "4", + "ok": true, + "correct": "4" + }, + { + "n": 38, + "domain": "net", + "q": "На каком уровне OSI работает обычный коммутатор?", + "answer": "l2", + "ok": true, + "correct": "L2 (канальный)" + }, + { + "n": 39, + "domain": "linux", + "q": "Сигнал с номером 15?", + "answer": "sigterm", + "ok": true, + "correct": "SIGTERM — запрос на завершение" + }, + { + "n": 40, + "domain": "c_cpp", + "q": "Зачем нужен виртуальный деструктор у базового класса?", + "answer": "деструктор наследника не вызовется", + "ok": true, + "correct": "иначе delete через Base* — UB, деструктор наследника не вызовется" + }, + { + "n": 41, + "domain": "algo", + "q": "Сложность Дейкстры на priority_queue (двоичная куча)?", + "answer": "o((v+e) log v)", + "ok": true, + "correct": "O((V+E) log V)" + }, + { + "n": 42, + "domain": "net", + "q": "Что означает маска /30 в адресах?", + "answer": "4 адреса, 2 узла", + "ok": true, + "correct": "4 адреса: сеть, 2 узла, broadcast" + }, + { + "n": 43, + "domain": "c_cpp", + "q": "Что проверяет UBSAN?", + "answer": "undefined behavior", + "ok": true, + "correct": "неопределённое поведение: overflow, сдвиги, выравнивание" + }, + { + "n": 44, + "domain": "algo", + "q": "Сколько сравнений в худшем случае у бинарного поиска в массиве из 1 000 000 элементов?", + "answer": "20", + "ok": true, + "correct": "20" + }, + { + "n": 45, + "domain": "linux", + "q": "Код возврата 137 — что это?", + "answer": "sigkill", + "ok": true, + "correct": "SIGKILL (128+9) — убит" + }, + { + "n": 46, + "domain": "net", + "q": "Сколько адресов узлов в подсети /24?", + "answer": "254", + "ok": true, + "correct": "254" + }, + { + "n": 47, + "domain": "algo", + "q": "Сложность построения кучи (heapify) из произвольного массива?", + "answer": "o(n)", + "ok": true, + "correct": "O(n)" + }, + { + "n": 48, + "domain": "net", + "q": "Сколько байт в Ethernet-заголовке без VLAN?", + "answer": "14", + "ok": true, + "correct": "14" + }, + { + "n": 49, + "domain": "c_cpp", + "q": "Чем new отличается от malloc?", + "answer": "вызывает конструктор", + "ok": true, + "correct": "new вызывает конструктор и возвращает типизированный указатель" + }, + { + "n": 50, + "domain": "net", + "q": "На каком уровне OSI работает маршрутизатор?", + "answer": "l3", + "ok": true, + "correct": "L3 (сетевой)" + }, + { + "n": 51, + "domain": "algo", + "q": "Сложность вставки одного элемента в кучу?", + "answer": "o(log n)", + "ok": true, + "correct": "O(log n)" + }, + { + "n": 52, + "domain": "c_cpp", + "q": "Что проверяет ASAN?", + "answer": "выходы за границы", + "ok": true, + "correct": "выходы за границы, use-after-free, утечки" + }, + { + "n": 53, + "domain": "algo", + "q": "Худшая сложность quicksort?", + "answer": "o(n^2)", + "ok": true, + "correct": "O(n²)" + }, + { + "n": 54, + "domain": "algo", + "q": "За какую сложность ищется НВП (LIS) в оптимальном решении?", + "answer": "o(n log n)", + "ok": true, + "correct": "O(n log n)" + }, + { + "n": 55, + "domain": "algo", + "q": "Сложность задачи о рюкзаке 0/1 через ДП по вместимости?", + "answer": "o(n*w)", + "ok": true, + "correct": "O(n * W)" + }, + { + "n": 56, + "domain": "algo", + "q": "Какова сложность по памяти рекурсивного DFS в графе в худшем случае?", + "answer": "o(v)", + "ok": true, + "correct": "O(V) — глубина стека рекурсии" + }, + { + "n": 57, + "domain": "net", + "q": "Что делает ICMP Time Exceeded?", + "answer": "ttl истёк", + "ok": true, + "correct": "сообщает, что TTL истёк (используется в traceroute)" + }, + { + "n": 58, + "domain": "algo", + "q": "Худшая сложность поиска в хеш-таблице (все ключи в одну корзину)?", + "answer": "o(n)", + "ok": true, + "correct": "O(n)" + }, + { + "n": 59, + "domain": "algo", + "q": "Какая сортировка устойчивая: merge, quick, heap или selection?", + "answer": "merge", + "ok": true, + "correct": "merge sort" + }, + { + "n": 60, + "domain": "net", + "q": "Что делает ARP?", + "answer": "mac по ip", + "ok": true, + "correct": "находит MAC по IP в локальном сегменте" + } + ] +} \ No newline at end of file diff --git a/diag/results_tasks.json b/diag/results_tasks.json new file mode 100644 index 0000000..66e3907 --- /dev/null +++ b/diag/results_tasks.json @@ -0,0 +1,17 @@ +{ + "passed": 0, + "total": 1, + "tasks": { + "13_subnet": { + "pass": false, + "checks_ok": 5, + "checks_fail": 24, + "seconds": 0.19, + "timeout": false, + "log": [ + "$ g++ -std=c++17 -O2 -Wall -Wextra -g -fsanitize=address,undefined -fno-omit-frame-pointer test_subnet.cpp -o t_13_subnet\n", + "$ ./t_13_subnet\nFAIL /26: адрес сети 10.0.1.128 (line 16)\nFAIL /26: broadcast 10.0.1.191 (line 17)\nFAIL /26: первый узел 10.0.1.129 (line 18)\nFAIL /26: последний узел 10.0.1.190 (line 19)\nFAIL /26: 62 узла (не 64) (line 20)\nFAIL /24: сеть 192.168.5.0 (line 24)\nFAIL /24: broadcast 192.168.5.255 (line 25)\nFAIL /24: 254 узла (line 26)\nFAIL /30: сеть 172.16.4.8, broadcast 172.16.4.11 (line 28)\nFAIL /30: 2 узла, 9 и 10 (line 30)\nFAIL /32: один адрес, сеть == broadcast == узел (line 33)\nFAIL /31: RFC 3021 — 2 узла без вычета (line 36)\nFAIL /8: сеть 10.0.0.0, broadcast 10.255.255.255 (line 39)\nFAIL /0: вся сеть, узлов 2^32-2 (line 42)\nFAIL /26: 130 и 150 в одной подсети (line 46)\nok /26: 130 и 200 — разные подсети\nok /26: 130 и 127 — разные подсети\nFAIL /16: разные третьи октеты — одна сеть (line 49)\nok /16: 10.0.x и 10.1.x — разные\nFAIL /31: соседи по RFC 3021 (line 51)\nFAIL prefix_for_hosts(62) -> 26 (line 54)\nFAIL prefix_for_hosts(63) -> 25 (63 в /26 не влезает) (line 55)\nFAIL prefix_for_hosts(254) -> 24 (line 56)\nFAIL prefix_for_hosts(255) -> 23 (line 57)\nFAIL prefix_for_hosts(2) -> 30 (line 58)\nFAIL prefix_for_hosts(1) -> 30 (узкая подсеть общего вида) (line 59)\nok prefix_for_hosts(0) -> -1\nok prefix_for_hosts(2^32-1) -> -1 (не влезает)\nFAIL prefix_for_hosts(1000000) -> 12 (line 62)\n\nFAILURES: 24\n" + ] + } + } +} \ No newline at end of file