Вопросы на собеседовании тестировщика (QA)
Теория тестирования и тест-дизайн, работа с API, автоматизация, мобильное тестирование. Ниже — вопросы, которые реально задают QA-инженеру, с разбором.
Почему поиск по ключу в хеш-таблице (dict/set) в среднем O(1), а в списке — O(n)?
A)Список хранит элементы строго отсортированными, а хеш-таблица — вперемешку без порядкаB)В списке элементы занимают меньше памяти, поэтому поиск медленнееC)Хеш по ключу сразу вычисляет позицию (бакет), а список надо обходить подрядD)Разницы нет, оба O(n)показать ответ и разбор
+C)Хеш по ключу сразу вычисляет позицию (бакет), а список надо обходить подряд// разбор: Хеш-функция превращает ключ в индекс бакета за O(1), и мы прыгаем прямо к нему. В списке адреса по значению неизвестны, поэтому линейный поиск обходит элементы один за другим — O(n). Цена O(1): нет порядка и есть накладные расходы на хеширование и коллизии.
Алгоритм работает за O(n). Что это значит на практике?
A)Он выполняет ровно n операций при входе — ни больше, ни меньшеB)Число операций растёт линейно с размером входа nC)В худшем случае он делает порядка n² операцийD)Ему требуется ровно n байт дополнительной памятипоказать ответ и разбор
+B)Число операций растёт линейно с размером входа n// разбор: O(n) — про асимптотику: при росте входа вдвое время растёт примерно вдвое. Это верхняя оценка скорости роста, а не точное число операций и не про память. Константы и младшие члены отбрасывают: O(3n+5) — это O(n).
Бинарный поиск работает за O(log n). Какое условие обязательно для его применения?
A)Массив должен состоять из чисел, строки бинарным поиском искать не получитсяB)Массив (или диапазон) должен быть отсортирован по искомому ключуC)В массиве не должно быть повторяющихся значенийD)Размер массива должен быть степенью двойкипоказать ответ и разбор
+B)Массив (или диапазон) должен быть отсортирован по искомому ключу// разбор: Бинарный поиск на каждом шаге отбрасывает половину диапазона, сравнивая середину с искомым — это возможно только если данные упорядочены по ключу. O(log n) — число делений пополам до одного элемента. Повторы и нечисловые типы допустимы (лишь бы был порядок); степень двойки не требуется.
Стек (stack) — это структура с дисциплиной...
A)LIFO: последним пришёл — первым вышелB)FIFO: первым пришёл — первым вышелC)По приоритету: первым выходит элемент с наименьшим ключом среди всех имеющихсяD)Случайного доступа по индексупоказать ответ и разбор
+A)LIFO: последним пришёл — первым вышел// разбор: Стек — LIFO: push кладёт наверх, pop снимает верхний, оба O(1). Аналогия — стопка тарелок. FIFO — это очередь, приоритет — куча. Стек естественно моделирует вложенность: вызовы функций (call stack), парсинг скобок, откат (undo), обход в глубину.
Что проверяют в ответе API при тестировании?
A)Статус-код, тело (структуру и значения) и ключевые заголовкиB)Достаточно проверить лишь статус-код: если он 2xx, тело и заголовки уже неважныC)Проверяют время ответа и объём тела в байтах, а содержимое полей значения не имеетD)Сверяют заголовки ответа, поскольку тело у REST-эндпоинтов обычно пустоепоказать ответ и разбор
+A)Статус-код, тело (структуру и значения) и ключевые заголовки// разбор: Полноценная проверка ответа складывается из нескольких слоёв. Статус-код — ожидаемый ли исход (201 на создание, 404 на отсутствие). Тело — верна ли структура (нужные поля, типы) и конкретные значения (id совпадает, сумма верна). Заголовки — Content-Type, Location, заголовки кэша и безопасности, пагинации. Проверять только код недостаточно: 200 бывает и с битым телом; проверять только тело — упустить неверный код. Хороший API-тест смотрит все три уровня в меру их важности для сценария.
Чем HTTP-метод GET отличается от POST?
A)GET запрашивает данные и не меняет состояние сервераB)GET передаёт данные в теле запроса, а POST — в адресной строке в виде параметров URLC)GET работает по защищённому протоколу, а POST по обычному незашифрованному соединениюD)GET и POST взаимозаменяемы, различие между ними лишь в названии методапоказать ответ и разбор
+A)GET запрашивает данные и не меняет состояние сервера// разбор: GET — «безопасный» метод чтения: он не должен менять состояние на сервере, параметры идут в query-строке URL, ответ кэшируется. POST отправляет данные в теле запроса и обычно создаёт новый ресурс или запускает обработку, меняя состояние. Ключевое различие для тестировщика: GET можно повторять без последствий, а повтор POST способен создать дубликат. Отсюда и разные ожидаемые коды (200 против 201) и разные риски.
Почему после POST, создавшего запись, проверяют данные ещё и в базе (SQL)?
A)Код 201 не гарантирует, что данные записались верноB)Потому что ответ API приходит зашифрованным, и прочитать его значения можно лишь из БДC)Потому что API не возвращает id созданной записи, и его узнают запросом к базеD)Потому что проверка в БД заменяет собой необходимость проверять сам ответ APIпоказать ответ и разбор
+A)Код 201 не гарантирует, что данные записались верно// разбор: Успешный код ответа говорит, что сервер принял и обработал запрос, но не доказывает, что в хранилище легли правильные данные: могло записаться не то, потеряться поле, сработать неверный дефолт, уйти в другую таблицу. Прямой запрос к БД после API-вызова сверяет фактическое состояние с ожидаемым — так ловят рассогласование между тем, что API «сказал», и что реально сохранил. Это уровень интеграционной проверки, дополняющий проверку ответа. На проде так не делают вслепую, но на тестовом стенде сверка с БД — сильный инструмент против тихих багов записи.
Чем gRPC отличается от привычного REST поверх JSON?
A)GRPC — надстройка над REST, добавляющая к JSON-ответам обязательную цифровую подписьB)GRPC вызывает функции внутри одного процесса, а между сервисами по сети не используетсяC)gRPC гоняет бинарный protobuf поверх HTTP/2 по строгой .proto-схемеD)GRPC — это REST-запросы, завёрнутые в WebSocket для двусторонней связипоказать ответ и разбор
+C)gRPC гоняет бинарный protobuf поверх HTTP/2 по строгой .proto-схеме// разбор: gRPC — способ вызывать методы чужого сервиса (RPC): контракт задаётся в .proto, данные сериализуются в бинарный Protocol Buffers и идут поверх HTTP/2, что даёт компактность, мультиплексирование и стриминг. Это быстрее и строже REST/JSON, но ответ не прочитать глазом и не дёрнуть голым браузером — нужны grpcurl, Postman (есть поддержка gRPC) или сгенерированный клиент. Тестировщику важно: контракт — .proto, ошибки приходят статус-кодами gRPC (не HTTP 4xx/5xx), а проверка требует спец-инструментов.
Что делает DNS, когда вы открываете сайт по имени?
A)Шифрует соединение между браузером и сервером сайтаB)Переводит доменное имя (example.com) в IP-адрес сервераC)Хранит куки и историю посещений сайта в браузереD)Распределяет нагрузку между копиями сервера по очередипоказать ответ и разбор
+B)Переводит доменное имя (example.com) в IP-адрес сервера// разбор: DNS (Domain Name System) — телефонная книга интернета: по доменному имени возвращает IP-адрес сервера, потому что сеть маршрутизирует пакеты по IP, а не по именам. Браузер сперва резолвит имя через DNS (с кэшированием), затем открывает соединение к полученному IP. Тестировщик сталкивается с DNS, когда сайт «не открывается» из-за неверной записи, устаревшего кэша или неправильного окружения (dev/stage резолвится не туда).
это девять из 584
В тренажёре ещё 575 вопросов по теме — с движком повторения.
Разбор прочитать мало: навык ставится практикой. В Сеньорчике вопросы идут сессиями, а движок возвращает темы, где вы плывёте, пока не начнёт отскакивать от зубов. Роль «QA» — 7 тем, 584 вопросов. Начать можно бесплатно.