Была ли у вас кроссплатформенная сетевая платформа?
Что проверяют
Работали ли вы с сетью ниже уровня готового HTTP-клиента и сталкивались ли с реальными различиями платформ. Формулировка расплывчатая, поэтому интервьюер смотрит, как вы сами обозначите масштаб и свою роль. Следом спрашивают про модель ввода-вывода: как у вас обслуживались тысячи соединений.
Как отвечать
Если опыт был, разложите его по пунктам:
- система и ваша роль: сервер, клиентская библиотека, SDK для игры или устройства; какие ОС поддерживали; писали ядро или интегрировали готовое;
- сетевой стек: Boost.Asio или standalone Asio, libuv, libevent, Qt Network, gRPC. Своя обёртка над сокетами тоже честный ответ;
- модель ввода-вывода: под капотом
epollна Linux,kqueueна macOS и BSD, IOCP на Windows. Хорошо сказать, что Asio прячет разницу между реактором и проактором, но она всё равно всплывает в деталях; - различия платформ: на Windows нужен
WSAStartup, ошибки берутся изWSAGetLastError(), а не изerrno,SOCKETне то же, чтоint, закрытие черезclosesocket. На POSIX запись в закрытый сокет присылаетSIGPIPE. В бинарном протоколе важны порядок байтов и выравнивание; - сборка и проверка: CMake, vcpkg или Conan, CI с матрицей ОС и компиляторов (MSVC, GCC, Clang), санитайзеры, тесты на обрывы и потерю пакетов;
- результат: число соединений, задержка, стабильность. Только ваши реальные цифры.
Если такой платформы не было, не выдумывайте. Скажите, что было ближе всего: кроссплатформенное приложение без своей сети или сетевой сервис под одну ОС. И покажите, что понимаете, что пришлось бы решать при переносе: абстракцию над сокетами, различия системных API, сборку и тестирование на каждой платформе.
Где спотыкаются
Отвечают «да, на Boost.Asio» и замолкают. Без роли, масштаба и конкретной проблемы это звучит как строчка из резюме.
Не могут объяснить, чем асинхронная модель отличается от потока на каждое соединение и почему второй вариант плохо масштабируется на тысячах клиентов.
Считают, что библиотека решила всё. Интервьюер обычно ждёт хотя бы одну историю про платформенный баг: разное поведение таймаутов, иная семантика SO_REUSEADDR на Windows, кодировка путей.