Подборка вопросов

Основы computer science для собеседования

База, которая не устаревает вместе с языками и фреймворками: как растёт сложность, как устроены хеш-таблица и куча, почему быстрая сортировка иногда медленная и как ищут путь на карте. Алгоритмы можно пройти по шагам и на своих данных.

69вопросов
38Junior
30Middle
1Senior
  1. 01Что такое алгоритм A* и чем он лучше Дейкстры?

    A — Дейкстра с подсказкой направления: вершины выбираются по f = g + h, где g — пройденное расстояние, h — оценка остатка до цели.

    Middle
  2. 02Что такое амортизированная сложность?

    Амортизированная сложность — средняя стоимость операции в длинной серии: редкие дорогие операции «размазываются» по многим дешёвым.

    Junior
  3. 03Чем массив отличается от связного списка?

    Массив — элементы подряд в памяти: доступ по индексу O(1), вставка в середину O(n); связный список — узлы со ссылками: вставка по известному месту O(1), доступ по индексу O(n).

    Junior
  4. 04Чем асинхронность отличается от многопоточности?

    Многопоточность — несколько потоков ОС, их переключает ядро. Асинхронность — одна (или немного) нить выполнения переключается между задачами сама, в точках ожидания (await).

    Middle
  5. 05Что такое атомарные операции и CAS?

    CAS (compare-and-swap) — инструкция процессора «если в ячейке ещё A, запиши B» за один неделимый шаг. На ней строят атомарные счётчики и структуры без блокировок.

    Middle
  6. 06Почему индексы в базах данных устроены как B-дерево?

    B-дерево — сбалансированное дерево с широкими узлами: в узле сотни ключей, узел = страница на диске (8–16 КБ). Высота 3–4 даже для миллиардов строк — значит, 3–4 чтения страницы.

    Middle
  7. 07Чем обход в ширину (BFS) отличается от обхода в глубину (DFS)?

    BFS идёт по уровням через очередь и находит кратчайший путь по числу рёбер; DFS идёт вглубь до упора через стек или рекурсию.

    Junior
  8. 08Что такое О-большое (Big O) и зачем оценивать сложность алгоритма?

    О-большое описывает, как растёт время или память алгоритма с ростом входа n, отбрасывая константы и младшие слагаемые.

    Junior
  9. 09Что такое двоичное дерево поиска и зачем его балансировать?

    В двоичном дереве поиска для каждого узла слева — меньшие ключи, справа — большие; поиск идёт по одной ветке — O(высоты).

    Junior
  10. 10Как работает бинарный поиск?

    В отсортированном массиве сравниваем искомое с серединой и отбрасываем половину, где его быть не может: O(log n) шагов.

    Junior
  11. 11Какие битовые операции вы знаете и где они применяются?

    AND &, OR |, XOR ^, NOT ~, сдвиги << и >> работают с каждым битом отдельно и стоят один такт.

    Junior
  12. 12Что делает CDN и когда он нужен?

    CDN — сеть серверов по всему миру (или стране), которые кэшируют копии ваших файлов и отдают их пользователю с ближайшего узла. Сайт грузится быстрее (меньше расстояние и…

    Junior
  13. 13Что такое переключение контекста и почему оно дорогое?

    Ядро останавливает один поток, сохраняет его регистры и состояние и загружает другой. Прямая цена — единицы микросекунд, но главное — остывшие кэши процессора.

    Middle
  14. 14Что такое CSRF и как он связан с CORS?

    CSRF — чужой сайт заставляет браузер жертвы отправить запрос на ваш сайт; браузер сам приложит cookie, и запрос выполнится от имени пользователя. CORS — правила, когда скрипт с…

    Middle
  15. 15Что такое взаимная блокировка и как её избежать?

    Взаимная блокировка — потоки ждут друг друга по кругу: первый держит A и ждёт B, второй держит B и ждёт A. Никто не продвинется.

    Middle
  16. 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. 17Как работает алгоритм Дейкстры?

    Дейкстра находит кратчайшие пути от одной вершины во взвешенном графе с неотрицательными весами: каждый раз берёт ближайшую ещё не обработанную вершину и ослабляет рёбра из неё.

    Middle
  18. 18Как сменить DNS-запись (например, переехать на новый сервер) без простоя?

    Резолверы держат запись до истечения TTL, поэтому переключение не мгновенное. План: заранее (за время не меньше текущего TTL) понизить TTL до минут → поднять новый сервер и…

    Middle
  19. 19Как работает DNS?

    DNS — распределённая иерархическая база «имя → адрес». Рекурсивный резолвер спрашивает по цепочке: корневые серверы → серверы зоны .ru → авторитетный сервер домена.

    Junior
  20. 20Что такое динамическое программирование?

    Динамическое программирование — решать задачу через ответы на перекрывающиеся подзадачи, считая каждую один раз и сохраняя в таблицу.

    Middle
  21. 21Что такое файловый дескриптор?

    Файловый дескриптор — небольшое целое число, по которому процесс обращается к открытому ресурсу: файлу, сокету, каналу, устройству.

    Junior
  22. 22Почему 0.1 + 0.2 не равно 0.3?

    double хранит число как двоичную дробь: знак, порядок и 52 бита мантиссы. 0.1 в двоичной системе бесконечна, как 1/3 в десятичной, — хранится приближение.

    Junior
  23. 23Как представить граф в программе?

    Два основных способа: матрица смежности (таблица V×V) и список смежности (для каждой вершины — список соседей).

    Junior
  24. 24Как устроена хеш-таблица?

    Хеш-таблица — массив «корзин»: хеш-функция превращает ключ в номер корзины, поэтому поиск, вставка и удаление в среднем — O(1).

    Junior
  25. 25Чем хеширование отличается от шифрования и кодирования?

    Кодирование (Base64, URL-кодирование) — смена формата, обратимо без секрета. Шифрование — обратимо только с ключом. Хеширование — необратимый отпечаток фиксированной длины.

    Junior
  26. 26Что такое двоичная куча и очередь с приоритетом?

    Двоичная куча — дерево, где родитель не больше потомков (min-heap): минимум всегда в корне, вставка и извлечение — O(log n).

    Junior
  27. 27Чем отличаются HTTP/1.1, HTTP/2 и HTTP/3?

    HTTP/1.1 — текст, один запрос за раз в соединении. HTTP/2 — бинарные кадры, много потоков в одном TCP-соединении. HTTP/3 — то же поверх QUIC (UDP), без общей блокировки при потере…

    Middle
  28. 28Что происходит при переполнении целого числа?

    Результат не влезает в разрядность — в Java, Go, C# он молча заворачивается по модулю 2ⁿ: MAX_VALUE + 1 = MIN_VALUE.

    Junior
  29. 29Какие аномалии бывают при параллельных транзакциях и от чего защищает каждый уровень изоляции?

    Уровни изоляции — компромисс между параллельностью и корректностью: чем ниже уровень, тем больше аномалий пропускается.

    Middle
  30. 30Какие порядки задержек нужно знать разработчику?

    Наносекунды — процессор и кэши, ~100 нс — оперативная память, десятки–сотни микросекунд — SSD и сеть внутри дата-центра, миллисекунды — диск HDD и другой город, ~100 мс — другой…

    Middle
  31. 31Что такое LSM-дерево и чем оно отличается от B-дерева?

    LSM-дерево превращает случайные записи в последовательные: запись идёт в журнал и в память (memtable), при заполнении memtable сбрасывается на диск отсортированным неизменяемым…

    Senior
  32. 32Почему один поток может не увидеть изменение, сделанное другим?

    Компилятор, JIT и процессор переупорядочивают и кэшируют операции с памятью — для одного потока результат тот же, для другого нет. Без синхронизации запись может стать видна…

    Middle
  33. 33Как работает сортировка слиянием?

    Делим массив пополам, рекурсивно сортируем половины и сливаем их, каждый раз беря меньший из двух первых элементов.

    Junior
  34. 34Как хранить денежные суммы в коде и в базе?

    Деньги — в целых минимальных единицах (копейках) или в десятичном типе: BigDecimal, Decimal, NUMERIC в базе. Не в double.

    Junior
  35. 35Чем мьютекс отличается от семафора?

    Мьютекс — замок на одного: в критической секции один поток, отпустить может только владелец. Семафор — счётчик разрешений: одновременно до N потоков.

    Junior
  36. 36Что такое MVCC и как он позволяет читать без блокировок?

    Многоверсионность: изменение строки создаёт новую версию, а старая остаётся. Каждая транзакция читает снимок — версии, подтверждённые до её начала (или до начала запроса).

    Middle
  37. 37Чем оптимистическая блокировка отличается от пессимистической и когда какую выбрать?

    Пессимистическая — сначала блокируем строку (SELECT ... FOR UPDATE), потом меняем; остальные ждут. Оптимистическая — не блокируем, а при записи проверяем версию: UPDATE ... WHERE…

    Middle
  38. 38Как планировщик ОС решает, какой поток выполнять?

    Планировщик выдаёт потокам, готовым к работе, кванты времени на ядрах и вытесняет их по таймеру — так один поток не захватит процессор.

    Middle
  39. 39Расскажите про модель OSI и стек TCP/IP.

    Сеть устроена слоями: каждый решает свою задачу и пользуется нижним. OSI — учебная модель из 7 уровней, на практике работает TCP/IP из 4.

    Junior
  40. 40Почему повторное чтение файла быстрее первого?

    ОС кэширует содержимое файлов в свободной памяти — page cache. Повторное чтение берётся из памяти, а запись сначала попадает в кэш и на диск уходит позже.

    Middle
  41. 41Как правильно хранить пароли пользователей?

    Не хранить пароль вовсе — только результат медленной функции с солью: argon2id, bcrypt или scrypt. При входе считаем то же самое и сравниваем.

    Junior
  42. 42Чем процесс отличается от потока?

    Процесс — запущенная программа со своим адресным пространством и ресурсами. Поток — ход выполнения внутри процесса; потоки делят память процесса.

    Junior
  43. 43Как реализовать схему производитель — потребитель?

    Производители кладут задачи в ограниченную блокирующую очередь, потребители забирают. Полная очередь останавливает производителя, пустая — потребителя.

    Middle
  44. 44Как работает быстрая сортировка и когда она работает медленно?

    Выбираем опорный элемент, разбиваем массив: меньшие — влево, большие — вправо, опорный встаёт на своё место; затем рекурсивно сортируем части.

    Junior
  45. 45Что такое состояние гонки?

    Гонка — результат зависит от того, в каком порядке потоки выполнили свои шаги. Классика: count++ — это три шага (прочитать, прибавить, записать), и два потока теряют обновления.

    Junior
  46. 46Что такое рекурсия и мемоизация?

    Рекурсия — функция вызывает саму себя для меньшей задачи и останавливается на базовом случае; мемоизация — кэш уже посчитанных результатов.

    Junior
  47. 47Чем строковое хранение отличается от колоночного?

    Строковое: строка лежит целиком подряд — быстро прочитать или изменить одну запись (OLTP). Колоночное: каждая колонка лежит отдельно — быстро посчитать агрегат по нескольким…

    Middle
  48. 48Чем SIGTERM отличается от SIGKILL и как правильно завершать сервис?

    SIGTERM — вежливая просьба завершиться: процесс может её перехватить и закончить работу. SIGKILL — убийство ядром, перехватить нельзя.

    Middle
  49. 49Можно ли отсортировать быстрее, чем за O(n log n)?

    Сравнениями — нельзя: любой алгоритм, который только сравнивает элементы, в худшем случае делает Ω(n log n) сравнений. Без сравнений — можно при ограничениях на ключи.

    Middle
  50. 50Какие алгоритмы сортировки вы знаете и чем они отличаются?

    Простые — пузырьком, вставками, выбором — O(n²); эффективные — слиянием, быстрая, пирамидальная — O(n log n). Отличаются худшим случаем, памятью и устойчивостью.

    Junior
  51. 51Что такое SQL-инъекция и как от неё защититься?

    Инъекция — данные пользователя попадают в текст запроса и меняют его смысл: ' OR '1'='1 превращает проверку пароля в «всегда истина».

    Junior
  52. 52Что такое устойчивая (стабильная) сортировка и когда это важно?

    Устойчивая сортировка сохраняет исходный порядок элементов с равными ключами.

    Junior
  53. 53Чем стек отличается от очереди и где они применяются?

    Стек — последним пришёл, первым ушёл (LIFO); очередь — первым пришёл, первым ушёл (FIFO). Основные операции — O(1).

    Junior
  54. 54Чем стек отличается от кучи?

    Стек — память для вызовов функций: локальные переменные и адрес возврата, выделяется и освобождается автоматически при входе и выходе. Куча — память для данных, чьё время жизни не…

    Junior
  55. 55Как выложить статический сайт и подключить к нему свой домен?

    Статический сайт — готовые HTML, CSS, JS и картинки, которые отдаются как файлы. Его кладут на статический хостинг (GitHub Pages, облачное объектное хранилище, Netlify и аналоги)…

    Junior
  56. 56Чем симметричное шифрование отличается от асимметричного и что такое цифровая подпись?

    Симметричное — один общий ключ шифрует и расшифровывает (AES): быстро, но ключ надо как-то передать. Асимметричное — пара ключей: открытый знают все, закрытый — только владелец…

    Middle
  57. 57Что такое системный вызов и чем режим ядра отличается от пользовательского?

    Программы работают в пользовательском режиме без прямого доступа к железу. Всё, что требует привилегий — файлы, сеть, память, процессы, — делается системным вызовом в ядро.

    Middle
  58. 58Как устанавливается и закрывается TCP-соединение?

    Установка — SYN → SYN-ACK → ACK: стороны обмениваются начальными номерами последовательности. Один оборот (RTT) до первых данных.

    Middle
  59. 59Как TCP обеспечивает надёжную доставку и не перегружает сеть?

    Каждый байт пронумерован, получатель подтверждает принятое (ACK), неподтверждённое отправляется повторно — по таймауту или по трём повторным ACK.

    Middle
  60. 60Чем TCP отличается от UDP?

    TCP — надёжный упорядоченный поток байтов с установкой соединения. UDP — отдельные датаграммы без гарантий: быстро и просто.

    Junior
  61. 61Зачем нужен пул потоков и как выбрать его размер?

    Пул держит заранее созданные потоки и очередь задач: не платим за создание потока на каждую задачу и ограничиваем параллелизм.

    Middle
  62. 62Что такое компромисс между временем и памятью?

    Часто можно ускорить алгоритм, потратив больше памяти — сохранить промежуточные результаты, индекс или предвычисленную таблицу — и наоборот.

    Junior
  63. 63Как работает HTTPS и TLS-рукопожатие?

    TLS даёт шифрование, целостность и подлинность сервера. В рукопожатии стороны согласуют общий ключ (обмен Диффи — Хеллмана), сервер доказывает владение сертификатом, дальше данные…

    Middle
  64. 64Как в компьютере хранятся отрицательные целые числа?

    Почти везде — дополнительный код (two's complement): старший бит отрицательный, его вес −2ⁿ⁻¹.

    Junior
  65. 65Чем Unicode отличается от UTF-8?

    Unicode — таблица: каждому символу номер (кодовую точку), U+0416 — «Ж». UTF-8 — способ записать эти номера байтами.

    Junior
  66. 66Что такое виртуальная память?

    Каждый процесс видит своё виртуальное адресное пространство; процессор с ОС переводят виртуальные адреса в физические страницами (обычно по 4 КБ).

    Middle
  67. 67Что такое журнал предзаписи (WAL) и зачем он нужен?

    Сначала запись в журнал, потом в данные. Перед изменением страниц база дописывает в конец журнала, что собирается изменить, и делает fsync. После сбоя журнал проигрывается заново…

    Middle
  68. 68Что происходит, когда вы вводите адрес сайта в браузере и нажимаете Enter?

    DNS находит IP → TCP-рукопожатие → TLS-рукопожатие → HTTP-запрос → сервер (балансировщик, приложение, база) → ответ → браузер разбирает HTML, догружает ресурсы и рисует страницу.

    Junior
  69. 69Что такое XSS и как от неё защищаться?

    XSS — злоумышленник заставляет сайт выполнить его JavaScript в браузере другого пользователя: скрипт работает с правами сайта — читает данные страницы, отправляет запросы от имени…

    Junior
Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования