Основы computer science для собеседования
База, которая не устаревает вместе с языками и фреймворками: как растёт сложность, как устроены хеш-таблица и куча, почему быстрая сортировка иногда медленная и как ищут путь на карте. Алгоритмы можно пройти по шагам и на своих данных.
- 01Что такое алгоритм A* и чем он лучше Дейкстры?
A — Дейкстра с подсказкой направления: вершины выбираются по f = g + h, где g — пройденное расстояние, h — оценка остатка до цели.
Middle - 02Что такое амортизированная сложность?
Амортизированная сложность — средняя стоимость операции в длинной серии: редкие дорогие операции «размазываются» по многим дешёвым.
Junior - 03Чем массив отличается от связного списка?
Массив — элементы подряд в памяти: доступ по индексу O(1), вставка в середину O(n); связный список — узлы со ссылками: вставка по известному месту O(1), доступ по индексу O(n).
Junior - 04Чем асинхронность отличается от многопоточности?
Многопоточность — несколько потоков ОС, их переключает ядро. Асинхронность — одна (или немного) нить выполнения переключается между задачами сама, в точках ожидания (await).
Middle - 05Что такое атомарные операции и CAS?
CAS (compare-and-swap) — инструкция процессора «если в ячейке ещё A, запиши B» за один неделимый шаг. На ней строят атомарные счётчики и структуры без блокировок.
Middle - 06Почему индексы в базах данных устроены как B-дерево?
B-дерево — сбалансированное дерево с широкими узлами: в узле сотни ключей, узел = страница на диске (8–16 КБ). Высота 3–4 даже для миллиардов строк — значит, 3–4 чтения страницы.
Middle - 07Чем обход в ширину (BFS) отличается от обхода в глубину (DFS)?
BFS идёт по уровням через очередь и находит кратчайший путь по числу рёбер; DFS идёт вглубь до упора через стек или рекурсию.
Junior - 08Что такое О-большое (Big O) и зачем оценивать сложность алгоритма?
О-большое описывает, как растёт время или память алгоритма с ростом входа n, отбрасывая константы и младшие слагаемые.
Junior - 09Что такое двоичное дерево поиска и зачем его балансировать?
В двоичном дереве поиска для каждого узла слева — меньшие ключи, справа — большие; поиск идёт по одной ветке — O(высоты).
Junior - 10Как работает бинарный поиск?
В отсортированном массиве сравниваем искомое с серединой и отбрасываем половину, где его быть не может: O(log n) шагов.
Junior - 11Какие битовые операции вы знаете и где они применяются?
AND &, OR |, XOR ^, NOT ~, сдвиги << и >> работают с каждым битом отдельно и стоят один такт.
Junior - 12Что делает CDN и когда он нужен?
CDN — сеть серверов по всему миру (или стране), которые кэшируют копии ваших файлов и отдают их пользователю с ближайшего узла. Сайт грузится быстрее (меньше расстояние и…
Junior - 13Что такое переключение контекста и почему оно дорогое?
Ядро останавливает один поток, сохраняет его регистры и состояние и загружает другой. Прямая цена — единицы микросекунд, но главное — остывшие кэши процессора.
Middle - 14Что такое CSRF и как он связан с CORS?
CSRF — чужой сайт заставляет браузер жертвы отправить запрос на ваш сайт; браузер сам приложит cookie, и запрос выполнится от имени пользователя. CORS — правила, когда скрипт с…
Middle - 15Что такое взаимная блокировка и как её избежать?
Взаимная блокировка — потоки ждут друг друга по кругу: первый держит A и ждёт B, второй держит B и ждёт A. Никто не продвинется.
Middle - 16Как проверить DNS-записи домена через dig или nslookup?
dig example.ru — A-запись (IPv4) и оставшийся TTL; dig example.ru AAAA, MX, TXT, CNAME, NS — другие типы; dig +short — только ответ. dig @8.8.8.8 example.ru — спросить конкретный…
Junior - 17Как работает алгоритм Дейкстры?
Дейкстра находит кратчайшие пути от одной вершины во взвешенном графе с неотрицательными весами: каждый раз берёт ближайшую ещё не обработанную вершину и ослабляет рёбра из неё.
Middle - 18Как сменить DNS-запись (например, переехать на новый сервер) без простоя?
Резолверы держат запись до истечения TTL, поэтому переключение не мгновенное. План: заранее (за время не меньше текущего TTL) понизить TTL до минут → поднять новый сервер и…
Middle - 19Как работает DNS?
DNS — распределённая иерархическая база «имя → адрес». Рекурсивный резолвер спрашивает по цепочке: корневые серверы → серверы зоны .ru → авторитетный сервер домена.
Junior - 20Что такое динамическое программирование?
Динамическое программирование — решать задачу через ответы на перекрывающиеся подзадачи, считая каждую один раз и сохраняя в таблицу.
Middle - 21Что такое файловый дескриптор?
Файловый дескриптор — небольшое целое число, по которому процесс обращается к открытому ресурсу: файлу, сокету, каналу, устройству.
Junior - 22Почему 0.1 + 0.2 не равно 0.3?
double хранит число как двоичную дробь: знак, порядок и 52 бита мантиссы. 0.1 в двоичной системе бесконечна, как 1/3 в десятичной, — хранится приближение.
Junior - 23Как представить граф в программе?
Два основных способа: матрица смежности (таблица V×V) и список смежности (для каждой вершины — список соседей).
Junior - 24Как устроена хеш-таблица?
Хеш-таблица — массив «корзин»: хеш-функция превращает ключ в номер корзины, поэтому поиск, вставка и удаление в среднем — O(1).
Junior - 25Чем хеширование отличается от шифрования и кодирования?
Кодирование (Base64, URL-кодирование) — смена формата, обратимо без секрета. Шифрование — обратимо только с ключом. Хеширование — необратимый отпечаток фиксированной длины.
Junior - 26Что такое двоичная куча и очередь с приоритетом?
Двоичная куча — дерево, где родитель не больше потомков (min-heap): минимум всегда в корне, вставка и извлечение — O(log n).
Junior - 27Чем отличаются HTTP/1.1, HTTP/2 и HTTP/3?
HTTP/1.1 — текст, один запрос за раз в соединении. HTTP/2 — бинарные кадры, много потоков в одном TCP-соединении. HTTP/3 — то же поверх QUIC (UDP), без общей блокировки при потере…
Middle - 28Что происходит при переполнении целого числа?
Результат не влезает в разрядность — в Java, Go, C# он молча заворачивается по модулю 2ⁿ: MAX_VALUE + 1 = MIN_VALUE.
Junior - 29Какие аномалии бывают при параллельных транзакциях и от чего защищает каждый уровень изоляции?
Уровни изоляции — компромисс между параллельностью и корректностью: чем ниже уровень, тем больше аномалий пропускается.
Middle - 30Какие порядки задержек нужно знать разработчику?
Наносекунды — процессор и кэши, ~100 нс — оперативная память, десятки–сотни микросекунд — SSD и сеть внутри дата-центра, миллисекунды — диск HDD и другой город, ~100 мс — другой…
Middle - 31Что такое LSM-дерево и чем оно отличается от B-дерева?
LSM-дерево превращает случайные записи в последовательные: запись идёт в журнал и в память (memtable), при заполнении memtable сбрасывается на диск отсортированным неизменяемым…
Senior - 32Почему один поток может не увидеть изменение, сделанное другим?
Компилятор, JIT и процессор переупорядочивают и кэшируют операции с памятью — для одного потока результат тот же, для другого нет. Без синхронизации запись может стать видна…
Middle - 33Как работает сортировка слиянием?
Делим массив пополам, рекурсивно сортируем половины и сливаем их, каждый раз беря меньший из двух первых элементов.
Junior - 34Как хранить денежные суммы в коде и в базе?
Деньги — в целых минимальных единицах (копейках) или в десятичном типе: BigDecimal, Decimal, NUMERIC в базе. Не в double.
Junior - 35Чем мьютекс отличается от семафора?
Мьютекс — замок на одного: в критической секции один поток, отпустить может только владелец. Семафор — счётчик разрешений: одновременно до N потоков.
Junior - 36Что такое MVCC и как он позволяет читать без блокировок?
Многоверсионность: изменение строки создаёт новую версию, а старая остаётся. Каждая транзакция читает снимок — версии, подтверждённые до её начала (или до начала запроса).
Middle - 37Чем оптимистическая блокировка отличается от пессимистической и когда какую выбрать?
Пессимистическая — сначала блокируем строку (SELECT ... FOR UPDATE), потом меняем; остальные ждут. Оптимистическая — не блокируем, а при записи проверяем версию: UPDATE ... WHERE…
Middle - 38Как планировщик ОС решает, какой поток выполнять?
Планировщик выдаёт потокам, готовым к работе, кванты времени на ядрах и вытесняет их по таймеру — так один поток не захватит процессор.
Middle - 39Расскажите про модель OSI и стек TCP/IP.
Сеть устроена слоями: каждый решает свою задачу и пользуется нижним. OSI — учебная модель из 7 уровней, на практике работает TCP/IP из 4.
Junior - 40Почему повторное чтение файла быстрее первого?
ОС кэширует содержимое файлов в свободной памяти — page cache. Повторное чтение берётся из памяти, а запись сначала попадает в кэш и на диск уходит позже.
Middle - 41Как правильно хранить пароли пользователей?
Не хранить пароль вовсе — только результат медленной функции с солью: argon2id, bcrypt или scrypt. При входе считаем то же самое и сравниваем.
Junior - 42Чем процесс отличается от потока?
Процесс — запущенная программа со своим адресным пространством и ресурсами. Поток — ход выполнения внутри процесса; потоки делят память процесса.
Junior - 43Как реализовать схему производитель — потребитель?
Производители кладут задачи в ограниченную блокирующую очередь, потребители забирают. Полная очередь останавливает производителя, пустая — потребителя.
Middle - 44Как работает быстрая сортировка и когда она работает медленно?
Выбираем опорный элемент, разбиваем массив: меньшие — влево, большие — вправо, опорный встаёт на своё место; затем рекурсивно сортируем части.
Junior - 45Что такое состояние гонки?
Гонка — результат зависит от того, в каком порядке потоки выполнили свои шаги. Классика: count++ — это три шага (прочитать, прибавить, записать), и два потока теряют обновления.
Junior - 46Что такое рекурсия и мемоизация?
Рекурсия — функция вызывает саму себя для меньшей задачи и останавливается на базовом случае; мемоизация — кэш уже посчитанных результатов.
Junior - 47Чем строковое хранение отличается от колоночного?
Строковое: строка лежит целиком подряд — быстро прочитать или изменить одну запись (OLTP). Колоночное: каждая колонка лежит отдельно — быстро посчитать агрегат по нескольким…
Middle - 48Чем SIGTERM отличается от SIGKILL и как правильно завершать сервис?
SIGTERM — вежливая просьба завершиться: процесс может её перехватить и закончить работу. SIGKILL — убийство ядром, перехватить нельзя.
Middle - 49Можно ли отсортировать быстрее, чем за O(n log n)?
Сравнениями — нельзя: любой алгоритм, который только сравнивает элементы, в худшем случае делает Ω(n log n) сравнений. Без сравнений — можно при ограничениях на ключи.
Middle - 50Какие алгоритмы сортировки вы знаете и чем они отличаются?
Простые — пузырьком, вставками, выбором — O(n²); эффективные — слиянием, быстрая, пирамидальная — O(n log n). Отличаются худшим случаем, памятью и устойчивостью.
Junior - 51Что такое SQL-инъекция и как от неё защититься?
Инъекция — данные пользователя попадают в текст запроса и меняют его смысл: ' OR '1'='1 превращает проверку пароля в «всегда истина».
Junior - 52Что такое устойчивая (стабильная) сортировка и когда это важно?
Устойчивая сортировка сохраняет исходный порядок элементов с равными ключами.
Junior - 53Чем стек отличается от очереди и где они применяются?
Стек — последним пришёл, первым ушёл (LIFO); очередь — первым пришёл, первым ушёл (FIFO). Основные операции — O(1).
Junior - 54Чем стек отличается от кучи?
Стек — память для вызовов функций: локальные переменные и адрес возврата, выделяется и освобождается автоматически при входе и выходе. Куча — память для данных, чьё время жизни не…
Junior - 55Как выложить статический сайт и подключить к нему свой домен?
Статический сайт — готовые HTML, CSS, JS и картинки, которые отдаются как файлы. Его кладут на статический хостинг (GitHub Pages, облачное объектное хранилище, Netlify и аналоги)…
Junior - 56Чем симметричное шифрование отличается от асимметричного и что такое цифровая подпись?
Симметричное — один общий ключ шифрует и расшифровывает (AES): быстро, но ключ надо как-то передать. Асимметричное — пара ключей: открытый знают все, закрытый — только владелец…
Middle - 57Что такое системный вызов и чем режим ядра отличается от пользовательского?
Программы работают в пользовательском режиме без прямого доступа к железу. Всё, что требует привилегий — файлы, сеть, память, процессы, — делается системным вызовом в ядро.
Middle - 58Как устанавливается и закрывается TCP-соединение?
Установка — SYN → SYN-ACK → ACK: стороны обмениваются начальными номерами последовательности. Один оборот (RTT) до первых данных.
Middle - 59Как TCP обеспечивает надёжную доставку и не перегружает сеть?
Каждый байт пронумерован, получатель подтверждает принятое (ACK), неподтверждённое отправляется повторно — по таймауту или по трём повторным ACK.
Middle - 60Чем TCP отличается от UDP?
TCP — надёжный упорядоченный поток байтов с установкой соединения. UDP — отдельные датаграммы без гарантий: быстро и просто.
Junior - 61Зачем нужен пул потоков и как выбрать его размер?
Пул держит заранее созданные потоки и очередь задач: не платим за создание потока на каждую задачу и ограничиваем параллелизм.
Middle - 62Что такое компромисс между временем и памятью?
Часто можно ускорить алгоритм, потратив больше памяти — сохранить промежуточные результаты, индекс или предвычисленную таблицу — и наоборот.
Junior - 63Как работает HTTPS и TLS-рукопожатие?
TLS даёт шифрование, целостность и подлинность сервера. В рукопожатии стороны согласуют общий ключ (обмен Диффи — Хеллмана), сервер доказывает владение сертификатом, дальше данные…
Middle - 64Как в компьютере хранятся отрицательные целые числа?
Почти везде — дополнительный код (two's complement): старший бит отрицательный, его вес −2ⁿ⁻¹.
Junior - 65Чем Unicode отличается от UTF-8?
Unicode — таблица: каждому символу номер (кодовую точку), U+0416 — «Ж». UTF-8 — способ записать эти номера байтами.
Junior - 66Что такое виртуальная память?
Каждый процесс видит своё виртуальное адресное пространство; процессор с ОС переводят виртуальные адреса в физические страницами (обычно по 4 КБ).
Middle - 67Что такое журнал предзаписи (WAL) и зачем он нужен?
Сначала запись в журнал, потом в данные. Перед изменением страниц база дописывает в конец журнала, что собирается изменить, и делает fsync. После сбоя журнал проигрывается заново…
Middle - 68Что происходит, когда вы вводите адрес сайта в браузере и нажимаете Enter?
DNS находит IP → TCP-рукопожатие → TLS-рукопожатие → HTTP-запрос → сервер (балансировщик, приложение, база) → ответ → браузер разбирает HTML, догружает ресурсы и рисует страницу.
Junior - 69Что такое XSS и как от неё защищаться?
XSS — злоумышленник заставляет сайт выполнить его JavaScript в браузере другого пользователя: скрипт работает с правами сайта — читает данные страницы, отправляет запросы от имени…
Junior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.