проверка права записи
This commit is contained in:
@@ -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 в локальном сегменте"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user