Какие системы связи используются в разработке?
Что проверяют
Вопрос широкий, и проверяют, умеете ли вы разложить его на уровни: как фронт общается с сервером, как части интерфейса общаются между собой и как синхронизируются вкладки. Следом обычно спрашивают, чем WebSocket отличается от SSE или когда оправдан GraphQL.
Как отвечать
Разложите ответ на три слоя. С сервером:
- HTTP-запросы:
fetchили обёртка вроде Axios, стиль REST, коды ответа, отмена черезAbortController; - GraphQL: один эндпоинт, клиент сам описывает нужные поля, нет лишних данных и цепочек запросов. Цена: сложнее HTTP-кеширование, нужен клиент вроде Apollo или urql;
- WebSocket: постоянное двустороннее соединение для чатов, совместного редактирования, котировок. Переподключение и heartbeat пишете сами;
- SSE (
EventSource): поток событий только от сервера к клиенту поверх обычного HTTP, с автоматическим переподключением. Хватает для уведомлений и прогресса; - long polling: запасной вариант, когда постоянное соединение не проходит через инфраструктуру.
Внутри приложения:
- props и колбэки: основной путь в React, данные вниз, события вверх;
- Context: доставка редко меняющихся значений (тема, язык, текущий пользователь) без проброса через каждый уровень;
- сторы: Redux Toolkit, Zustand, MobX для клиентского состояния, TanStack Query или RTK Query для серверных данных с кешем и повторными запросами.
Между вкладками и потоками: BroadcastChannel, postMessage для iframe и Web Worker, событие storage.
Закончите критерием выбора: кто инициирует обмен, нужен ли ответ на каждое сообщение, как часто приходят обновления.
Где спотыкаются
Называют Context стейт-менеджером. При каждом изменении значения перерисовываются все его потребители, и часто меняющееся состояние в нём тормозит интерфейс.
Берут WebSocket для односторонних уведомлений. SSE проще, работает через обычный HTTP и сам переподключается, а WebSocket требует своей логики реконнекта и отдельной настройки прокси.
Кладут серверные данные в Redux руками, с флагами загрузки и ошибок в каждом слайсе. Для этого есть библиотеки серверного состояния, они берут на себя кеш, повторные запросы и инвалидацию.