Какие интерфейсы и протоколы вы использовали в Linux и Windows
Что проверяют
Работали ли вы с системным уровнем руками или знаете его по названиям. Интервьюеру важно, понимаете ли вы, чем модели двух ОС отличаются по сути. Типичное продолжение: «Чем epoll отличается от IOCP?» или «Как вы писали кроссплатформенный код?»
Как отвечать
Разложите ответ на слои и в каждом дайте пару Linux и Windows:
- системный API: POSIX (
open,read,fork/exec,pthread) против Win32 (CreateFileW,CreateProcessW,WaitForSingleObject). Код ошибки в Windows берут черезGetLastError(), в POSIX изerrno; - сокеты: Berkeley sockets и Winsock похожи, но в Windows нужен
WSAStartup, дескриптор имеет типSOCKET, закрывается черезclosesocket, а ошибка читается черезWSAGetLastError(); - асинхронный ввод-вывод:
epollи более новыйio_uringв Linux, IOCP в Windows. Главное отличие:epollсообщает о готовности, а IOCP о завершении операции, поэтому архитектура обработчиков разная; - межпроцессное взаимодействие: пайпы, Unix domain sockets,
shm_openиmmapпротив named pipes иCreateFileMapping/MapViewOfFile; на уровне компонентов D-Bus и COM; - динамические библиотеки:
dlopen/dlsymпротивLoadLibrary/GetProcAddress; - протоколы: TCP и UDP, поверх них HTTP, TLS через OpenSSL или Schannel, gRPC с protobuf, в промышленных задачах MQTT или Modbus.
Закончите тем, как прятали различия: Boost.Asio или свой тонкий слой абстракции, std::thread и std::filesystem из стандарта вместо платформенных вызовов. Говорите о том, с чем реально работали, и приведите пример задачи.
Где спотыкаются
Называют COM протоколом. Это бинарная модель компонентов с интерфейсами и подсчётом ссылок, к сетевым протоколам она отношения не имеет.
Забывают про кодировки: Win32-функции с суффиксом W работают с UTF-16 в wchar_t, а в Linux wchar_t занимает 4 байта. Код, написанный под одну ОС, на другой ломает пути с кириллицей.
Берут select для тысяч соединений. В Linux он ограничен FD_SETSIZE, обычно 1024 дескриптора, и на каждом вызове проходит весь набор.