квиз: результат

This commit is contained in:
2026-09-23 16:39:50 +07:00
parent 16b211eeda
commit 81a988190e
+312
View File
@@ -0,0 +1,312 @@
{
"correct": 8,
"total": 32,
"per_domain": {
"c_cpp": {
"total": 8,
"correct": 0
},
"algo": {
"total": 8,
"correct": 5
},
"linux": {
"total": 8,
"correct": 0
},
"net": {
"total": 8,
"correct": 3
}
},
"details": [
{
"n": 1,
"domain": "c_cpp",
"question": "Чему равен sizeof(struct S { char a; int b; char c; }) на 64-битной платформе без pack-атрибутов?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "a = 1 байт + 3 паддинга, b = 4, c = 1 + 3 хвостового паддинга = 12 (выравнивание структуры по 4)."
},
{
"n": 2,
"domain": "c_cpp",
"question": "Что означает undefined behavior (UB)?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "UB — стандарт не накладывает требований: компилятор может что угодно, вплоть до выкидывания проверок."
},
{
"n": 3,
"domain": "c_cpp",
"question": "std::move(x) — что он делает сам по себе?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "move — это static_cast к rvalue; фактическое перемещение выполняет конструктор/оператор присваивания."
},
{
"n": 4,
"domain": "c_cpp",
"question": "Чем new отличается от malloc?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "new = выделение + конструктор + типизированный указатель + исключение; malloc возвращает void* и nullptr при неудаче."
},
{
"n": 5,
"domain": "c_cpp",
"question": "Класс владеет ресурсом и имеет деструктор, освобождающий его. Копирующий конструктор/присваивание не объявлены. Что будет?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "Правило трёх/пяти: владеющий ресурсом класс должен определить копирование/перемещение или запретить их."
},
{
"n": 6,
"domain": "c_cpp",
"question": "Для чего нужен виртуальный деструктор у базового класса?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "Без virtual-деструктора delete через Base* — UB, деструктор производного не вызовется."
},
{
"n": 7,
"domain": "c_cpp",
"question": "Что делает ключевое слово const после сигнатуры метода (int size() const)?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "const-метод получает this как const-указатель; на изменении поля — ошибка компиляции."
},
{
"n": 8,
"domain": "c_cpp",
"question": "Определён ли стандартом порядок вычисления аргументов функции (f(a(), b()))?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "Порядок аргументов не специфицирован; с C++17 вычисления не чередуются (indeterminately sequenced), но порядок всё равно не задан."
},
{
"n": 9,
"domain": "algo",
"question": "Средняя сложность поиска в хеш-таблице (при разумной нагрузке)?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "Амортизированно O(1) в среднем; худший случай при всех коллизиях — O(n)."
},
{
"n": 10,
"domain": "algo",
"question": "Какая структура лучше подходит для задачи «поиск слов по префиксу»?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Trie даёт проход по префиксу за O(len) и общий префикс хранит один раз."
},
{
"n": 11,
"domain": "algo",
"question": "Сколько сравнений нужно бинарному поиску в худшем случае в отсортированном массиве из 1 000 000 элементов?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "log2(1e6) ≈ 19.9 → 20 итераций."
},
{
"n": 12,
"domain": "algo",
"question": "При каком условии применим алгоритм Дейкстры?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "Отрицательные рёбра ломают инвариант «кратчайший путь найден»; тогда Беллман–Форд."
},
{
"n": 13,
"domain": "algo",
"question": "Какова сложность построения кучи (heapify) из произвольного массива?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Просеивание снизу вверх даёт сумму геометрической прогрессии — O(n), хотя каждый push по отдельности O(log n)."
},
{
"n": 14,
"domain": "algo",
"question": "Какая из сортировок устойчивая (stable)?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "Merge sort сохраняет порядок равных элементов; quicksort/heapsort/selection — нет."
},
{
"n": 15,
"domain": "algo",
"question": "Для какого графа возможна топологическая сортировка?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Цикл делает линейный порядок невозможным; топосорт — признак DAG."
},
{
"n": 16,
"domain": "algo",
"question": "Как найти цикл в связном списке за O(1) дополнительной памяти?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "«Черепаха и заяц»: если цикл есть, указатели встретятся."
},
{
"n": 17,
"domain": "linux",
"question": "Что делает fork()?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "fork = новый процесс (свой PID, COW-копия памяти); execve меняет образ, clone — поток."
},
{
"n": 18,
"domain": "linux",
"question": "Чем поток отличается от процесса в Linux?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "clone с CLONE_VM/CLONE_FILES — потоки; у каждого свой стек и регистры."
},
{
"n": 19,
"domain": "linux",
"question": "Что такое процесс-зомби?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "Запись остаётся в таблице процессов до wait/waitpid; «потерявший родителя» — это сирота (переходит к init)."
},
{
"n": 20,
"domain": "linux",
"question": "Какой механизм в Linux штатно обслуживает десятки тысяч сетевых соединений в одном потоке?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "epoll — O(1) на готовое событие; select линейно по всем дескрипторам."
},
{
"n": 21,
"domain": "linux",
"question": "Что происходит со страницами памяти при fork()?",
"your_answer": 1,
"correct_answer": 3,
"ok": false,
"explain": "COW: страницы помечаются read-only и копируются по факту записи."
},
{
"n": 22,
"domain": "linux",
"question": "Процесс завершился с кодом 137. Что это значит?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "137 = 128 + 9: завершение по SIGKILL; код 139 = 128 + 11 (SIGSEGV)."
},
{
"n": 23,
"domain": "linux",
"question": "Что даёт вызов mmap() на файл?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "Страницы подгружаются по обращению; запись уходит в файл (или в MAP_SHARED-память)."
},
{
"n": 24,
"domain": "linux",
"question": "Зачем нужен waitpid() родителю?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "Без wait завершившиеся дети остаются зомби и держат запись в таблице процессов."
},
{
"n": 25,
"domain": "net",
"question": "Сколько байт в Ethernet-заголовке кадра без VLAN-тега?",
"your_answer": 1,
"correct_answer": 2,
"ok": false,
"explain": "dst MAC (6) + src MAC (6) + EtherType (2) = 14; VLAN 802.1Q добавляет 4 байта."
},
{
"n": 26,
"domain": "net",
"question": "На каком уровне OSI работает обычный коммутатор (switch)?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Коммутация по MAC-адресам и таблице обучения — канальный уровень (L2); маршрутизатор — L3."
},
{
"n": 27,
"domain": "net",
"question": "Что делает протокол ARP?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "ARP-запрос broadcast, ответ unicast; DHCP раздаёт адреса, DNS — имена."
},
{
"n": 28,
"domain": "net",
"question": "Какое поле IPv4-заголовка уменьшается на единицу на каждом маршрутизаторе?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "TTL защищает от петель; при 0 пакет отбрасывается и уходит ICMP Time Exceeded. Контрольная сумма при этом пересчитывается, но не «уменьшается на 1»."
},
{
"n": 29,
"domain": "net",
"question": "Правильная последовательность установки TCP-соединения?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Клиент SYN, сервер SYN-ACK, клиент ACK; номера подтверждения = seq+1."
},
{
"n": 30,
"domain": "net",
"question": "Ключевое отличие TCP от UDP?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "UDP — дейтаграммы «как есть», без гарантий и порядка."
},
{
"n": 31,
"domain": "net",
"question": "Что делает VLAN-тег 802.1Q?",
"your_answer": 1,
"correct_answer": 1,
"ok": true,
"explain": "Тег EtherType 0x8100 + PCP/DEI + 12 бит VID; логически разделяет L2-сегменты."
},
{
"n": 32,
"domain": "net",
"question": "Сколько адресов узлов доступно в подсети /26?",
"your_answer": 1,
"correct_answer": 4,
"ok": false,
"explain": "/26 = 64 адреса, минус адрес сети и broadcast → 62 хоста."
}
]
}