Основы веба
Сквозные знания о вебе для фронтенд-инженеров — форматы изображений, сетевые протоколы, доступность, тестирование компонентов и headless UI-киты.
5 вопросов
MiddleТеорияИногдаЧем различаются HTTP, WebSocket и TCP против UDP?
Чем различаются HTTP, WebSocket и TCP против UDP?
HTTP — запрос/ответ поверх TCP. WebSocket — полнодуплексное постоянное соединение по TCP, открываемое через HTTP-upgrade для real-time-push. TCP — с соединением, надёжный, упорядоченный, с рукопожатием и ретрансмиссией. UDP — без соединения, без гарантий доставки, но с низкими накладными расходами — для видео, игр и DNS.
Типичные ошибки
- ✗Думать, что HTTP работает поверх UDP, а не TCP
- ✗Менять местами роли надёжности TCP и UDP
- ✗Называть WebSocket запрос/ответ вместо полнодуплексного
Уточняющие вопросы
- →Чем именно обменивается HTTP-upgrade-рукопожатие WebSocket?
- →Почему HTTP/3 переходит с TCP на QUIC поверх UDP?
JuniorТеорияРедкоКогда для веб-изображения использовать JPG, а когда PNG?
Когда для веб-изображения использовать JPG, а когда PNG?
JPEG — с потерями и без прозрачности, идеален для фотографий с маленькими файлами. PNG — без потерь и с альфа-прозрачностью, лучше для логотипов, иконок, чётких краёв и текста. JPEG для фото, PNG для резких краёв и прозрачности. WebP и AVIF часто выигрывают по размеру.
Типичные ошибки
- ✗Думать, что JPEG поддерживает прозрачность (это не так)
- ✗Использовать PNG для больших фото и отдавать огромные файлы
- ✗Считать PNG форматом с потерями или с лимитом 256 цветов (это GIF)
Уточняющие вопросы
- →Что WebP и AVIF дают сверх JPEG и PNG?
- →Когда SVG лучше любого растрового формата?
MiddleТеорияРедкоЧто делает UI-компонент доступным и как это проверить?
Что делает UI-компонент доступным и как это проверить?
Доступность означает, что компонент управляется с клавиатуры с видимым фокусом, использует семантический HTML плюс ARIA-роли и метки для вспомогательных технологий, корректно управляет фокусом, соблюдает контраст цвета и учитывает reduced-motion. Проверяют клавиатурой, скринридером, автоаудитами вроде axe и контрастом — автоматизация недостаточна.
Типичные ошибки
- ✗Убирать обводку фокуса через
outline: noneбез альтернативы - ✗Сыпать ARIA вместо того, чтобы сначала взять семантический HTML
- ✗Считать, что один автоаудит доказывает доступность
Уточняющие вопросы
- →Когда применять ARIA-роль вместо нативного HTML-элемента?
- →Как удержать и вернуть фокус при открытии и закрытии модального окна?
MiddleТеорияРедкоЧем для UI-компонентов отличаются snapshot- и screenshot-тесты?
Чем для UI-компонентов отличаются snapshot- и screenshot-тесты?
Snapshot-тесты сериализуют DOM в текст и сравнивают с сохранённым снимком — дёшево и быстро, но слепо к регрессиям CSS/раскладки. Screenshot-тесты рендерят пиксели и сравнивают изображения, ловя визуальные поломки, но медленнее и flaky, требуют сервиса эталонов. Практика: unit-тесты для логики, visual-regression для внешнего вида, snapshot умеренно.
Типичные ошибки
- ✗Ждать, что snapshot-тесты поймают регрессии CSS/внешнего вида
- ✗Коммитить огромные хрупкие снимки, которые потом слепо обновляют
- ✗Считать screenshot-тесты детерминированными, несмотря на flaky шрифты/сглаживание
Уточняющие вопросы
- →Зачем screenshot-тестам нужен сервис эталонов или шаг ревью?
- →Когда interaction-тест лучше, чем snapshot или screenshot?
MiddleТеорияРедкоЧто такое headless UI-библиотеки вроде Radix UI или Headless UI?
Что такое headless UI-библиотеки вроде Radix UI или Headless UI?
Headless-библиотеки дают поведение, состояние и доступность без стилей или разметки. Они обеспечивают навигацию с клавиатуры, ARIA и управление фокусом; стилизацию вы приносите свою. Это позволяет дизайн-системе оставаться уникальной, наследуя надёжную, протестированную логику взаимодействия.
Типичные ошибки
- ✗Думать, что headless-киты поставляют стили, которые нельзя менять
- ✗Считать, что они опускают доступность, а не дают её
- ✗Путать их с утилитарными CSS-фреймворками вроде Tailwind
Уточняющие вопросы
- →Почему переиспользовать a11y-логику headless-библиотеки безопаснее, чем писать её заново?
- →Как headless-библиотека отдаёт состояние, не рендеря разметку за вас?