проверка права записи

This commit is contained in:
2026-09-23 17:16:04 +07:00
parent 165dd5619d
commit 469bc1f4e7
2 changed files with 522 additions and 0 deletions
+505
View File
@@ -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/<pid>/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 в локальном сегменте"
}
]
}
+17
View File
@@ -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"
]
}
}
}