[{"data":1,"prerenderedAt":1169},["ShallowReactive",2],{"$f1-_WLY6WNaY_NfdLvxKaAxPhAFahqx5cUlS5xeb4ReE":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":111,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":114,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":119,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":464,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":686,"mdc--c45a1w-key":706,"mdc-cibogn-key":718,"mdc-h0blmr-key":727,"mdc-9fc9gc-key":736,"mdc-gve2tg-key":745,"mdc-1g02am-key":754,"mdc--tbwqq2-key":762,"mdc-sl221j-key":777,"mdc--rpjuky-key":785,"mdc-cjgk38-key":802,"mdc-gc0utz-key":811,"mdc--ceidsf-key":819,"mdc-qcvvk3-key":846,"mdc-15v9tq-key":860,"mdc--hinbkp-key":868,"mdc--q1q8zs-key":887,"mdc-c5cw77-key":906,"mdc--g9h6yt-key":1084,"mdc-z1feo5-key":1092,"mdc-vxbrmd-key":1161},{"content":4,"quizQuestionContent":81,"type":100,"pageMeta":101},[5,9,13,16,20,23,27,30,34,37,41,44,47,51,54,58,61,65,68,71,75,78],{"id":6,"value":7,"isTypeH1":8},"1883","Протоколы Application Layer в браузере кроме HTTP",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4295","Теория и рамки браузера","theory-and-browser-boundaries",{"id":14,"value":15,"isTypeParagraph":8},"9886","Веб-приложение в браузере ограничено моделью безопасности: прямой доступ к произвольным TCP/UDP-сокетам и к большинству «классических» прикладных протоколов (например, SMTP/IMAP) отсутствует, поэтому выбор протоколов фактически задаётся тем, какие сетевые Web API реализованы в браузере.",{"id":17,"description":18,"titleAlert":19,"isTypeAlertInfo":8},"614","Важно различать «прикладной протокол» и «браузерный API»: браузер предоставляет API (например, `WebSocket`), а под ним работает конкретный стандартизованный протокол и правила обмена (например, WebSocket с handshake и фреймами).",null,{"id":21,"value":22,"isTypeParagraph":8},"9887","В контексте формулировки «помимо HTTP» обычно подразумеваются дополнительные механизмы связи, которые дают иные семантики обмена: двусторонние сообщения, мультиплексированные потоки, P2P-передачу и фоновую доставку событий.\n",{"id":24,"value":25,"anchor":26,"isTypeH2":8},"4296","Ключевые протоколы кроме HTTP","protocols-besides-http",{"id":28,"value":29,"isTypeParagraph":8},"9888","Ниже перечислены наиболее применимые варианты прикладного уровня, которые реально встречаются в браузерных веб-приложениях как дополнительные каналы связи, помимо обычных HTTP-запросов.",{"id":31,"value":32,"anchor":33,"isTypeH3":8},"4308","WebSocket","websocket",{"id":35,"value":36,"isTypeParagraph":8},"9889","WebSocket — протокол для двусторонней связи «клиент–сервер», который начинается с согласования (handshake), а затем работает как постоянный канал сообщений с фреймингом поверх TCP.\n\nОсновная ценность — full‑duplex обмен: сервер и браузер могут отправлять сообщения в любой момент, без «постоянного опроса» через HTTP.\n\nПример инициализации канала в браузере: `const ws = new WebSocket(\"wss://example.com/chat\");`.",{"id":38,"value":39,"anchor":40,"isTypeH3":8},"4309","WebTransport","webtransport",{"id":42,"value":43,"isTypeParagraph":8},"9890","WebTransport — современный веб-транспорт для обмена данными с низкой задержкой, ориентированный на несколько независимых потоков внутри одной сессии, а также на поддержку как надёжной передачи, так и «ненадёжной» доставки (датаграмм) в зависимости от сценария.\n\nТиповая модель — session и streams: в рамках одной сессии допускается открытие нескольких потоков, что помогает разделять трафик по назначениям (например, управление, телеметрия, данные).",{"id":45,"description":46,"titleAlert":19,"isTypeAlertWarning":8},"671","WebTransport — относительно новый стек, и в спецификациях подчёркивается, что API и детали протокола могут заметно меняться по мере стандартизации и внедрения.",{"id":48,"value":49,"anchor":50,"isTypeH3":8},"4310","WebRTC (P2P)","webrtc-p2p",{"id":52,"value":53,"isTypeParagraph":8},"9891","WebRTC — стек реального времени, который позволяет организовывать peer‑to‑peer соединения между браузерами (и другими клиентами), что снижает зависимость от центрального сервера как «транзита» для всего трафика.\n\nКлючевой момент: для установления соединения требуется сигналинг (обмен параметрами), но единый стандартный протокол сигналинга не задан; на практике сигналинг реализуется «как договорено» поверх HTTP или WebSocket.\n\nWebRTC чаще всего ассоциируется с аудио/видео, но также применяется для передачи данных в P2P-сценариях (например, обмен файлами между участниками).",{"id":55,"value":56,"anchor":57,"isTypeH3":8},"4311","Web Push + Push API","web-push-and-push-api",{"id":59,"value":60,"isTypeParagraph":8},"9892","Web Push предназначен для доставки событий в веб-приложение через push service, включая случаи, когда страница не открыта; доставка обрабатывается в контексте Service Worker для соответствующего origin.\n\nВажная особенность — асинхронность: сообщение может прийти «вне активной сессии» с сайтом, что делает механизм полезным для уведомлений и редких важных событий.\n\nСледует учитывать, что push — не замена интерактивному каналу: задержки выше, объёмы сообщений обычно ограничиваются инфраструктурой push service, а частая отправка может приводить к ограничениям со стороны платформы.\n",{"id":62,"value":63,"anchor":64,"isTypeH2":8},"4297","Сравнение по свойствам","feature-comparison",{"id":66,"value":67,"isTypeParagraph":8},"9893","Ниже — компактное сопоставление по семантике и типичным задачам.\n\n| Вариант | Что даёт прикладному уровню | Браузерная точка входа | Модель доставки | Типовые задачи |\n|---|---|---|---|---|\n| WebSocket | Постоянный двусторонний канал сообщений | `new WebSocket(\"wss://...\")` | Full‑duplex сообщения после handshake | Чаты, лайв‑обновления, игры, совместное редактирование |\n| WebTransport | Сессия с множеством потоков и возможными датаграммами | `new WebTransport(\"https://...\")` (концептуально) | Session + streams; возможны разные режимы доставки | Низкая задержка, параллельные потоки данных, сложные интерактивные приложения |\n| WebRTC | P2P‑соединение (часто поверх ICE/relay при необходимости) | `RTCPeerConnection` + сигналинг | P2P обмен; сигналинг отдельно | Видео/аудио, P2P data, сценарии «без центрального транзита» |\n| Web Push | Фоновая доставка событий через push service | Push API + Service Worker | Асинхронная доставка даже без открытой страницы | Уведомления, редкие события, «пробуждение» Service Worker |",{"id":69,"description":70,"titleAlert":19,"isTypeAlertInfo":8},"615","Server‑Sent Events (SSE) часто упоминается рядом с WebSocket, но SSE по смыслу остаётся коммуникацией поверх HTTP (односторонний поток событий), поэтому обычно не относится к «отдельному протоколу помимо HTTP» в строгой трактовке вопроса.",{"id":72,"value":73,"anchor":74,"isTypeH2":8},"4298","Практические замечания и схема","practical-notes-and-diagram",{"id":76,"value":77,"isTypeParagraph":8},"9894","1) WebSocket удобен для сообщений, но обычно остаётся «один логический канал»; приоритеты, типы сообщений и мультиплексирование приходится проектировать на уровне приложения (например, через поля `type`, `channel`, `requestId`).\n\n2) WebTransport естественнее выражает «разные классы трафика» за счёт независимых потоков и возможности отправки датаграмм, что полезно при требованиях к задержке и параллельности обмена.\n\n3) WebRTC почти всегда означает два слоя: сигналинг (часто HTTP/WebSocket) плюс P2P‑обмен; это усложняет архитектуру, но даёт преимущества для медиа и распределённых сценариев.\n\n4) Web Push подходит для фоновых событий, но плохо подходит для частого интерактивного обмена; в реальных системах push чаще служит «триггером», после которого данные догружаются обычным запросом.\n\nСхема (упрощённо):\n\n```\nбраузер  \n  |-- HTTP (fetch) ------------------> web-сервер  \n  |-- WebSocket ---------------------> ws-endpoint  \n  |-- WebTransport ------------------> webtransport endpoint (обычно поверх современного транспорта)  \n  |-- сигналинг (HTTP/WS) -----------> signaling-сервер  \n  |-- WebRTC P2P \u003C------------------> peer (через relay при необходимости)  \n  |-- Push subscription -------------> push service  \n  |\u003C- push message (в service worker) push service  \n```",{"id":79,"value":80,"isTypeParagraph":8},"9895","Итого: помимо HTTP в браузере наиболее применимы WebSocket (full‑duplex сообщения), WebTransport (сессии с несколькими потоками и возможными датаграммами), WebRTC (P2P при наличии сигналинга) и Web Push (фоновая доставка событий в Service Worker).",{"id":82,"options":83,"hint":97,"solution":98,"description":99},"1125",[84,88,91,94],{"id":85,"label":86,"isCorrect":87},"4627","Дополнительно к HTTP в браузерном веб‑приложении применимы raw TCP‑сокеты и raw UDP‑датаграммы как универсальная замена всем прикладным протоколам, а также прямой контроль TLS‑рукопожатия для построения собственных шифрованных протоколов на любых портах без посредников.  ",false,{"id":89,"label":90,"isCorrect":87},"4628","Дополнительно к HTTP в браузерном веб‑приложении применимы ICMP для диагностики сети, ARP для разрешения MAC‑адресов, BGP для маршрутизации и NTP для синхронизации времени; эти протоколы позволяют фронтенду управлять сетью и собирать телеметрию без участия сервера и ОС.  ",{"id":92,"label":93,"isCorrect":8},"4629","Дополнительно к HTTP в браузерном веб‑приложении применимы WebSocket для двусторонних сообщений, WebTransport для многопотоковой передачи и возможных датаграмм, WebRTC для P2P‑соединений с отдельным сигналингом, а также Web Push для фоновой доставки событий в Service Worker.  ",{"id":95,"label":96,"isCorrect":87},"4630","Дополнительно к HTTP в браузерном веб‑приложении напрямую применимы SMTP для отправки писем, IMAP для чтения почты, FTP для файлового обмена и SSH для удалённого администрирования; эти протоколы относятся к прикладному уровню и потому считаются стандартным набором для фронтенда без ограничений. ","Требуется вспомнить, какие браузерные Web API открывают отдельные каналы связи (двусторонний канал сообщений, многопотоковый транспорт/датаграммы, P2P‑соединение, фоновая доставка через push service), а не только выполняют модель запрос‑ответ.","**Правильный ответ: 3** - Дополнительно к HTTP в браузерном веб‑приложении применимы WebSocket для двусторонних сообщений, WebTransport для многопотоковой передачи и возможных датаграмм, WebRTC для P2P‑соединений с отдельным сигналингом, а также Web Push для фоновой доставки событий в Service Worker.  ","Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","quizQuestion",{"title":102,"description":103,"ogTitle":7,"ogDescription":103,"ogImageUrl":104,"canonical":19,"ogLocale":105,"ogSiteName":106,"ogImageType":107,"ogImageWidth":108,"ogImageHeight":109,"ogType":110,"ogUrl":19},"Протоколы прикладного уровня для веб-приложений помимо HTTP","WebSocket, WebTransport, WebRTC и Web Push: что доступно в браузере, как работает и для каких задач подходит.","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":112,"siteUrl":113},"GOOD WEB JOB!","https://goodwebjob.ru",[115],{"label":116,"slug":117,"to":118},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":120,"navigationSublist":128},[121,124],{"path":118,"isActive":87,"name":122,"icon":123,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":125,"isActive":8,"name":126,"icon":127,"isNavbarMobileDisabled":87},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[129,138,165,177,183,324,348,357,363,425,446,452],{"title":130,"list":131,"isOpened":87},"Bash",[132,135],{"name":133,"path":134,"isActive":87},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":136,"path":137,"isActive":87},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":139,"list":140,"isOpened":87},"CSS",[141,144,147,150,153,156,159,162],{"name":142,"path":143,"isActive":87},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":145,"path":146,"isActive":87},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":148,"path":149,"isActive":87},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":151,"path":152,"isActive":87},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":154,"path":155,"isActive":87},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":157,"path":158,"isActive":87},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":160,"path":161,"isActive":87},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":163,"path":164,"isActive":87},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":166,"list":167,"isOpened":87},"Git",[168,171,174],{"name":169,"path":170,"isActive":87},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":172,"path":173,"isActive":87},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":175,"path":176,"isActive":87},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":178,"list":179,"isOpened":87},"HTML",[180],{"name":181,"path":182,"isActive":87},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":184,"list":185,"isOpened":87},"JavaScript",[186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321],{"name":187,"path":188,"isActive":87},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":190,"path":191,"isActive":87},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":193,"path":194,"isActive":87},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":196,"path":197,"isActive":87},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":199,"path":200,"isActive":87},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":202,"path":203,"isActive":87},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":205,"path":206,"isActive":87},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":208,"path":209,"isActive":87},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":211,"path":212,"isActive":87},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":214,"path":215,"isActive":87},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":217,"path":218,"isActive":87},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":220,"path":221,"isActive":87},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":223,"path":224,"isActive":87},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":226,"path":227,"isActive":87},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":229,"path":230,"isActive":87},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":232,"path":233,"isActive":87},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":235,"path":236,"isActive":87},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":238,"path":239,"isActive":87},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":241,"path":242,"isActive":87},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":244,"path":245,"isActive":87},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":247,"path":248,"isActive":87},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":250,"path":251,"isActive":87},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":253,"path":254,"isActive":87},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":256,"path":257,"isActive":87},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":259,"path":260,"isActive":87},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":262,"path":263,"isActive":87},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":265,"path":266,"isActive":87},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":268,"path":269,"isActive":87},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":271,"path":272,"isActive":87},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":274,"path":275,"isActive":87},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":277,"path":278,"isActive":87},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":280,"path":281,"isActive":87},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":283,"path":284,"isActive":87},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":286,"path":287,"isActive":87},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":289,"path":290,"isActive":87},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":292,"path":293,"isActive":87},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":295,"path":296,"isActive":87}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":298,"path":299,"isActive":87},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":301,"path":302,"isActive":87},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":304,"path":305,"isActive":87},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":307,"path":308,"isActive":87},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":310,"path":311,"isActive":87},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":313,"path":314,"isActive":87},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":316,"path":317,"isActive":87},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":319,"path":320,"isActive":87},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":322,"path":323,"isActive":87},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":325,"list":326,"isOpened":87},"React",[327,330,333,336,339,342,345],{"name":328,"path":329,"isActive":87},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":331,"path":332,"isActive":87},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":334,"path":335,"isActive":87},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":337,"path":338,"isActive":87},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":340,"path":341,"isActive":87},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":343,"path":344,"isActive":87},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":346,"path":347,"isActive":87},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":349,"list":350,"isOpened":87},"Алгоритмы",[351,354],{"name":352,"path":353,"isActive":87},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":355,"path":356,"isActive":87},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":358,"list":359,"isOpened":87},"Дебаггинг",[360],{"name":361,"path":362,"isActive":87},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":364,"list":365,"isOpened":87},"Компьютерные сети",[366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,420,422],{"name":367,"path":368,"isActive":87},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":370,"path":371,"isActive":87},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":373,"path":374,"isActive":87},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":376,"path":377,"isActive":87},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":379,"path":380,"isActive":87},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":382,"path":383,"isActive":87},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":385,"path":386,"isActive":87},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":388,"path":389,"isActive":87},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":391,"path":392,"isActive":87},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":394,"path":395,"isActive":87},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":397,"path":398,"isActive":87},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":400,"path":401,"isActive":87},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":403,"path":404,"isActive":87},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":406,"path":407,"isActive":87},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":409,"path":410,"isActive":87},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":412,"path":413,"isActive":87},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":415,"path":416,"isActive":87},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":418,"path":419,"isActive":87},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":99,"path":421,"isActive":87},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":423,"path":424,"isActive":87},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":426,"list":427,"isOpened":87},"Отрисовка в браузере",[428,431,434,437,440,443],{"name":429,"path":430,"isActive":87},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":432,"path":433,"isActive":87},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":435,"path":436,"isActive":87},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":438,"path":439,"isActive":87},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":441,"path":442,"isActive":87},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":444,"path":445,"isActive":87},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":447,"list":448,"isOpened":87},"Ревью кода",[449],{"name":450,"path":451,"isActive":87},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":453,"list":454,"isOpened":87},"Теория вероятности",[455,458,461],{"name":456,"path":457,"isActive":87},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":459,"path":460,"isActive":87},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":462,"path":463,"isActive":87},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"slugs":465},[466,469,471,473,475,478,481,483,485,487,489,491,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,676,678,680,682,684],{"name":467,"value":468},"Теоретические задания","theoretical-tasks",{"name":223,"value":470},"what-this-code-will-return-typeof-function",{"name":122,"value":472},"where-to-begin",{"name":190,"value":474},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":476,"value":477},"Backend","backend",{"name":479,"value":480},"Frontend","frontend",{"name":187,"value":482},"prototype-what-logical-values-will-be-received-in-console-log",{"name":304,"value":484},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":295,"value":486},"find-non-repeating-numbers-in-an-array",{"name":268,"value":488},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":274,"value":490},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":492,"value":493},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":280,"value":495},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":196,"value":497},"what-value-will-the-console-output-with-object-property",{"name":199,"value":499},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":271,"value":501},"returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":301,"value":503},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":307,"value":505},"determines-whether-a-word-is-a-palindrome",{"name":286,"value":507},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":313,"value":509},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":277,"value":511},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":283,"value":513},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":289,"value":515},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":322,"value":517},"the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":292,"value":519},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":298,"value":521},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":202,"value":523},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":205,"value":525},"there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":217,"value":527},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":220,"value":529},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":319,"value":531},"unifying-values-in-an-array",{"name":310,"value":533},"flattening-the-array",{"name":208,"value":535},"what-will-the-book-get-upper-name-method-return",{"name":316,"value":537},"string-compression",{"name":214,"value":539},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":226,"value":541},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":367,"value":543},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":373,"value":545},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":376,"value":547},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":379,"value":549},"key-differences-between-tcp-and-udp",{"name":382,"value":551},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":385,"value":553},"what-is-http-and-what-does-it-consist-of",{"name":388,"value":555},"what-are-http-headers-and-why-do-we-need-them",{"name":391,"value":557},"what-are-http-parameters",{"name":394,"value":559},"where-is-the-html-code-located-in-the-http-response-structure",{"name":181,"value":561},"what-is-html",{"name":397,"value":563},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":400,"value":565},"the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":403,"value":567},"what-is-a-cookie",{"name":406,"value":569},"who-initiates-the-cookie-recording-in-the-browser",{"name":409,"value":571},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":573,"value":574},"Лайвкодинг","livecoding",{"name":193,"value":576},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":415,"value":578},"is-everything-that-goes-through-https-secure",{"name":418,"value":580},"all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":99,"value":582},"there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":432,"value":584},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":429,"value":586},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":435,"value":588},"what-is-blocking-the-page-rendering-in-the-browser",{"name":438,"value":590},"what-is-dom-in-a-browser-what-is-cssom",{"name":441,"value":592},"what-are-nodes-in-the-dom",{"name":444,"value":594},"what-does-cssom-consist-of",{"name":142,"value":596},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":145,"value":598},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":148,"value":600},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":151,"value":602},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":154,"value":604},"there-is-an-html-code-will-font-weight-affect-span",{"name":157,"value":606},"what-are-the-differences-between-flexbox-and-grid",{"name":160,"value":608},"do-flexbox-and-grid-replace-each-other",{"name":163,"value":610},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":126,"value":612},"tasks",{"name":229,"value":614},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":232,"value":616},"what-is-this-in-javascript",{"name":235,"value":618},"what-is-an-event-loop-and-how-does-it-work",{"name":238,"value":620},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":241,"value":622},"what-does-the-typeof-operator-show-in-javascript",{"name":244,"value":624},"what-types-of-data-exist-in-javascript",{"name":247,"value":626},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":250,"value":628},"what-will-typeof-return-for-an-array",{"name":253,"value":630},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":256,"value":632},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":259,"value":634},"what-does-typeof-return-for-new-set-in-javascript",{"name":328,"value":636},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":334,"value":638},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":337,"value":640},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":340,"value":642},"there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":343,"value":644},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":361,"value":646},"how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":169,"value":648},"developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":172,"value":650},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":175,"value":652},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":450,"value":654},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":133,"value":656},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":136,"value":658},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":352,"value":660},"what-is-algorithmic-complexity",{"name":355,"value":662},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":262,"value":664},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":423,"value":666},"how-can-a-user-be-authorized-on-a-website",{"name":265,"value":668},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":456,"value":670},"there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":459,"value":672},"there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":462,"value":674},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":116,"value":117},{"name":412,"value":677},"is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":370,"value":679},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":211,"value":681},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":331,"value":683},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":346,"value":685},"what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"cooperation":687,"copyright":690,"reportError":691,"socialNetwork":693},{"link":688,"title":689},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":692,"link":688},"Сообщить об ошибке",{"label":694,"socialNetworkList":695},"Мы в соцсетях:",[696,699,702],{"icon":19,"link":697,"title":698},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":700,"link":688,"title":701},"ic:baseline-telegram","Telegram",{"icon":703,"link":704,"title":705},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":707,"body":708},{},{"type":709,"children":710},"root",[711],{"type":712,"tag":713,"props":714,"children":715},"element","p",{},[716],{"type":717,"value":99},"text",{"data":719,"body":720},{},{"type":709,"children":721},[722],{"type":712,"tag":713,"props":723,"children":724},{},[725],{"type":717,"value":726},"Дополнительно к HTTP в браузерном веб‑приложении применимы raw TCP‑сокеты и raw UDP‑датаграммы как универсальная замена всем прикладным протоколам, а также прямой контроль TLS‑рукопожатия для построения собственных шифрованных протоколов на любых портах без посредников.",{"data":728,"body":729},{},{"type":709,"children":730},[731],{"type":712,"tag":713,"props":732,"children":733},{},[734],{"type":717,"value":735},"Дополнительно к HTTP в браузерном веб‑приложении применимы ICMP для диагностики сети, ARP для разрешения MAC‑адресов, BGP для маршрутизации и NTP для синхронизации времени; эти протоколы позволяют фронтенду управлять сетью и собирать телеметрию без участия сервера и ОС.",{"data":737,"body":738},{},{"type":709,"children":739},[740],{"type":712,"tag":713,"props":741,"children":742},{},[743],{"type":717,"value":744},"Дополнительно к HTTP в браузерном веб‑приложении применимы WebSocket для двусторонних сообщений, WebTransport для многопотоковой передачи и возможных датаграмм, WebRTC для P2P‑соединений с отдельным сигналингом, а также Web Push для фоновой доставки событий в Service Worker.",{"data":746,"body":747},{},{"type":709,"children":748},[749],{"type":712,"tag":713,"props":750,"children":751},{},[752],{"type":717,"value":753},"Дополнительно к HTTP в браузерном веб‑приложении напрямую применимы SMTP для отправки писем, IMAP для чтения почты, FTP для файлового обмена и SSH для удалённого администрирования; эти протоколы относятся к прикладному уровню и потому считаются стандартным набором для фронтенда без ограничений.",{"data":755,"body":756},{},{"type":709,"children":757},[758],{"type":712,"tag":713,"props":759,"children":760},{},[761],{"type":717,"value":97},{"data":763,"body":764},{},{"type":709,"children":765},[766],{"type":712,"tag":713,"props":767,"children":768},{},[769,775],{"type":712,"tag":770,"props":771,"children":772},"strong",{},[773],{"type":717,"value":774},"Правильный ответ: 3",{"type":717,"value":776}," - Дополнительно к HTTP в браузерном веб‑приложении применимы WebSocket для двусторонних сообщений, WebTransport для многопотоковой передачи и возможных датаграмм, WebRTC для P2P‑соединений с отдельным сигналингом, а также Web Push для фоновой доставки событий в Service Worker.",{"data":778,"body":779},{},{"type":709,"children":780},[781],{"type":712,"tag":713,"props":782,"children":783},{},[784],{"type":717,"value":15},{"data":786,"body":787},{},{"type":709,"children":788},[789],{"type":712,"tag":713,"props":790,"children":791},{},[792,794,800],{"type":717,"value":793},"Важно различать «прикладной протокол» и «браузерный API»: браузер предоставляет API (например, ",{"type":712,"tag":795,"props":796,"children":798},"code",{"className":797},[],[799],{"type":717,"value":32},{"type":717,"value":801},"), а под ним работает конкретный стандартизованный протокол и правила обмена (например, WebSocket с handshake и фреймами).",{"data":803,"body":804},{},{"type":709,"children":805},[806],{"type":712,"tag":713,"props":807,"children":808},{},[809],{"type":717,"value":810},"В контексте формулировки «помимо HTTP» обычно подразумеваются дополнительные механизмы связи, которые дают иные семантики обмена: двусторонние сообщения, мультиплексированные потоки, P2P-передачу и фоновую доставку событий.",{"data":812,"body":813},{},{"type":709,"children":814},[815],{"type":712,"tag":713,"props":816,"children":817},{},[818],{"type":717,"value":29},{"data":820,"body":821},{},{"type":709,"children":822},[823,828,833],{"type":712,"tag":713,"props":824,"children":825},{},[826],{"type":717,"value":827},"WebSocket — протокол для двусторонней связи «клиент–сервер», который начинается с согласования (handshake), а затем работает как постоянный канал сообщений с фреймингом поверх TCP.",{"type":712,"tag":713,"props":829,"children":830},{},[831],{"type":717,"value":832},"Основная ценность — full‑duplex обмен: сервер и браузер могут отправлять сообщения в любой момент, без «постоянного опроса» через HTTP.",{"type":712,"tag":713,"props":834,"children":835},{},[836,838,844],{"type":717,"value":837},"Пример инициализации канала в браузере: ",{"type":712,"tag":795,"props":839,"children":841},{"className":840},[],[842],{"type":717,"value":843},"const ws = new WebSocket(\"wss://example.com/chat\");",{"type":717,"value":845},".",{"data":847,"body":848},{},{"type":709,"children":849},[850,855],{"type":712,"tag":713,"props":851,"children":852},{},[853],{"type":717,"value":854},"WebTransport — современный веб-транспорт для обмена данными с низкой задержкой, ориентированный на несколько независимых потоков внутри одной сессии, а также на поддержку как надёжной передачи, так и «ненадёжной» доставки (датаграмм) в зависимости от сценария.",{"type":712,"tag":713,"props":856,"children":857},{},[858],{"type":717,"value":859},"Типовая модель — session и streams: в рамках одной сессии допускается открытие нескольких потоков, что помогает разделять трафик по назначениям (например, управление, телеметрия, данные).",{"data":861,"body":862},{},{"type":709,"children":863},[864],{"type":712,"tag":713,"props":865,"children":866},{},[867],{"type":717,"value":46},{"data":869,"body":870},{},{"type":709,"children":871},[872,877,882],{"type":712,"tag":713,"props":873,"children":874},{},[875],{"type":717,"value":876},"WebRTC — стек реального времени, который позволяет организовывать peer‑to‑peer соединения между браузерами (и другими клиентами), что снижает зависимость от центрального сервера как «транзита» для всего трафика.",{"type":712,"tag":713,"props":878,"children":879},{},[880],{"type":717,"value":881},"Ключевой момент: для установления соединения требуется сигналинг (обмен параметрами), но единый стандартный протокол сигналинга не задан; на практике сигналинг реализуется «как договорено» поверх HTTP или WebSocket.",{"type":712,"tag":713,"props":883,"children":884},{},[885],{"type":717,"value":886},"WebRTC чаще всего ассоциируется с аудио/видео, но также применяется для передачи данных в P2P-сценариях (например, обмен файлами между участниками).",{"data":888,"body":889},{},{"type":709,"children":890},[891,896,901],{"type":712,"tag":713,"props":892,"children":893},{},[894],{"type":717,"value":895},"Web Push предназначен для доставки событий в веб-приложение через push service, включая случаи, когда страница не открыта; доставка обрабатывается в контексте Service Worker для соответствующего origin.",{"type":712,"tag":713,"props":897,"children":898},{},[899],{"type":717,"value":900},"Важная особенность — асинхронность: сообщение может прийти «вне активной сессии» с сайтом, что делает механизм полезным для уведомлений и редких важных событий.",{"type":712,"tag":713,"props":902,"children":903},{},[904],{"type":717,"value":905},"Следует учитывать, что push — не замена интерактивному каналу: задержки выше, объёмы сообщений обычно ограничиваются инфраструктурой push service, а частая отправка может приводить к ограничениям со стороны платформы.",{"data":907,"body":908},{},{"type":709,"children":909},[910,915],{"type":712,"tag":713,"props":911,"children":912},{},[913],{"type":717,"value":914},"Ниже — компактное сопоставление по семантике и типичным задачам.",{"type":712,"tag":916,"props":917,"children":918},"table",{},[919,953],{"type":712,"tag":920,"props":921,"children":922},"thead",{},[923],{"type":712,"tag":924,"props":925,"children":926},"tr",{},[927,933,938,943,948],{"type":712,"tag":928,"props":929,"children":930},"th",{},[931],{"type":717,"value":932},"Вариант",{"type":712,"tag":928,"props":934,"children":935},{},[936],{"type":717,"value":937},"Что даёт прикладному уровню",{"type":712,"tag":928,"props":939,"children":940},{},[941],{"type":717,"value":942},"Браузерная точка входа",{"type":712,"tag":928,"props":944,"children":945},{},[946],{"type":717,"value":947},"Модель доставки",{"type":712,"tag":928,"props":949,"children":950},{},[951],{"type":717,"value":952},"Типовые задачи",{"type":712,"tag":954,"props":955,"children":956},"tbody",{},[957,989,1022,1056],{"type":712,"tag":924,"props":958,"children":959},{},[960,965,970,979,984],{"type":712,"tag":961,"props":962,"children":963},"td",{},[964],{"type":717,"value":32},{"type":712,"tag":961,"props":966,"children":967},{},[968],{"type":717,"value":969},"Постоянный двусторонний канал сообщений",{"type":712,"tag":961,"props":971,"children":972},{},[973],{"type":712,"tag":795,"props":974,"children":976},{"className":975},[],[977],{"type":717,"value":978},"new WebSocket(\"wss://...\")",{"type":712,"tag":961,"props":980,"children":981},{},[982],{"type":717,"value":983},"Full‑duplex сообщения после handshake",{"type":712,"tag":961,"props":985,"children":986},{},[987],{"type":717,"value":988},"Чаты, лайв‑обновления, игры, совместное редактирование",{"type":712,"tag":924,"props":990,"children":991},{},[992,996,1001,1012,1017],{"type":712,"tag":961,"props":993,"children":994},{},[995],{"type":717,"value":39},{"type":712,"tag":961,"props":997,"children":998},{},[999],{"type":717,"value":1000},"Сессия с множеством потоков и возможными датаграммами",{"type":712,"tag":961,"props":1002,"children":1003},{},[1004,1010],{"type":712,"tag":795,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":717,"value":1009},"new WebTransport(\"https://...\")",{"type":717,"value":1011}," (концептуально)",{"type":712,"tag":961,"props":1013,"children":1014},{},[1015],{"type":717,"value":1016},"Session + streams; возможны разные режимы доставки",{"type":712,"tag":961,"props":1018,"children":1019},{},[1020],{"type":717,"value":1021},"Низкая задержка, параллельные потоки данных, сложные интерактивные приложения",{"type":712,"tag":924,"props":1023,"children":1024},{},[1025,1030,1035,1046,1051],{"type":712,"tag":961,"props":1026,"children":1027},{},[1028],{"type":717,"value":1029},"WebRTC",{"type":712,"tag":961,"props":1031,"children":1032},{},[1033],{"type":717,"value":1034},"P2P‑соединение (часто поверх ICE/relay при необходимости)",{"type":712,"tag":961,"props":1036,"children":1037},{},[1038,1044],{"type":712,"tag":795,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":717,"value":1043},"RTCPeerConnection",{"type":717,"value":1045}," + сигналинг",{"type":712,"tag":961,"props":1047,"children":1048},{},[1049],{"type":717,"value":1050},"P2P обмен; сигналинг отдельно",{"type":712,"tag":961,"props":1052,"children":1053},{},[1054],{"type":717,"value":1055},"Видео/аудио, P2P data, сценарии «без центрального транзита»",{"type":712,"tag":924,"props":1057,"children":1058},{},[1059,1064,1069,1074,1079],{"type":712,"tag":961,"props":1060,"children":1061},{},[1062],{"type":717,"value":1063},"Web Push",{"type":712,"tag":961,"props":1065,"children":1066},{},[1067],{"type":717,"value":1068},"Фоновая доставка событий через push service",{"type":712,"tag":961,"props":1070,"children":1071},{},[1072],{"type":717,"value":1073},"Push API + Service Worker",{"type":712,"tag":961,"props":1075,"children":1076},{},[1077],{"type":717,"value":1078},"Асинхронная доставка даже без открытой страницы",{"type":712,"tag":961,"props":1080,"children":1081},{},[1082],{"type":717,"value":1083},"Уведомления, редкие события, «пробуждение» Service Worker",{"data":1085,"body":1086},{},{"type":709,"children":1087},[1088],{"type":712,"tag":713,"props":1089,"children":1090},{},[1091],{"type":717,"value":70},{"data":1093,"body":1094},{},{"type":709,"children":1095},[1096,1144,1149],{"type":712,"tag":1097,"props":1098,"children":1099},"ol",{},[1100,1129,1134,1139],{"type":712,"tag":1101,"props":1102,"children":1103},"li",{},[1104,1106,1112,1114,1120,1121,1127],{"type":717,"value":1105},"WebSocket удобен для сообщений, но обычно остаётся «один логический канал»; приоритеты, типы сообщений и мультиплексирование приходится проектировать на уровне приложения (например, через поля ",{"type":712,"tag":795,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":717,"value":1111},"type",{"type":717,"value":1113},", ",{"type":712,"tag":795,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":717,"value":1119},"channel",{"type":717,"value":1113},{"type":712,"tag":795,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":717,"value":1126},"requestId",{"type":717,"value":1128},").",{"type":712,"tag":1101,"props":1130,"children":1131},{},[1132],{"type":717,"value":1133},"WebTransport естественнее выражает «разные классы трафика» за счёт независимых потоков и возможности отправки датаграмм, что полезно при требованиях к задержке и параллельности обмена.",{"type":712,"tag":1101,"props":1135,"children":1136},{},[1137],{"type":717,"value":1138},"WebRTC почти всегда означает два слоя: сигналинг (часто HTTP/WebSocket) плюс P2P‑обмен; это усложняет архитектуру, но даёт преимущества для медиа и распределённых сценариев.",{"type":712,"tag":1101,"props":1140,"children":1141},{},[1142],{"type":717,"value":1143},"Web Push подходит для фоновых событий, но плохо подходит для частого интерактивного обмена; в реальных системах push чаще служит «триггером», после которого данные догружаются обычным запросом.",{"type":712,"tag":713,"props":1145,"children":1146},{},[1147],{"type":717,"value":1148},"Схема (упрощённо):",{"type":712,"tag":1150,"props":1151,"children":1155},"pre",{"className":1152,"code":1154,"language":717},[1153],"language-text","браузер  \n  |-- HTTP (fetch) ------------------> web-сервер  \n  |-- WebSocket ---------------------> ws-endpoint  \n  |-- WebTransport ------------------> webtransport endpoint (обычно поверх современного транспорта)  \n  |-- сигналинг (HTTP/WS) -----------> signaling-сервер  \n  |-- WebRTC P2P \u003C------------------> peer (через relay при необходимости)  \n  |-- Push subscription -------------> push service  \n  |\u003C- push message (в service worker) push service  \n",[1156],{"type":712,"tag":795,"props":1157,"children":1159},{"__ignoreMap":1158},"",[1160],{"type":717,"value":1154},{"data":1162,"body":1163},{},{"type":709,"children":1164},[1165],{"type":712,"tag":713,"props":1166,"children":1167},{},[1168],{"type":717,"value":80},1775735659022]