[{"data":1,"prerenderedAt":1543},["ShallowReactive",2],{"$f_pvhfzZQWZbFAzCl8J1O3mYG29-_5tVEjTwJCY_47cA":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":82,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":85,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":90,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":435,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":657,"mdc--ndfq1r-key":677,"mdc--u2qx0j-key":689,"mdc--fbw98z-key":697,"mdc--gfke48-key":705,"mdc-dfiwkj-key":713,"mdc-lhm4y-key":721,"mdc--9879bg-key":729,"mdc--v2rq0q-key":744,"mdc--8ncpwt-key":758,"mdc-b1cupn-key":766,"mdc--oj4f51-key":1049,"mdc--ympae9-key":1154,"mdc-qdy43x-key":1162,"mdc--ppn7i4-key":1245,"mdc--7fkerm-key":1527,"mdc-e797v-key":1535},{"content":4,"quizQuestionContent":53,"type":72,"pageMeta":73},[5,9,13,16,20,24,27,31,34,37,40,44,47,50],{"id":6,"value":7,"isTypeH1":8},"1952","HTTP: что это и из чего состоит",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4539","Что такое HTTP","what-is-http",{"id":14,"value":15,"isTypeParagraph":8},"10431","HTTP (Hypertext Transfer Protocol) — прикладной протокол, построенный вокруг обмена сообщениями в модели запрос–ответ, предназначенный для взаимодействия с ресурсами (веб‑страницы, API, файлы) в распределённых системах.\n\nПротокол является «stateless» в том смысле, что на уровне HTTP не требуется хранить состояние между запросами как обязательное свойство протокола (состояние обычно надстраивается поверх HTTP дополнительными механизмами).",{"id":17,"description":18,"titleAlert":19,"isTypeAlertInfo":8},"691","В актуальной стандартизации семантика HTTP и способы её передачи разделены: отдельно описывается смысл (методы, статусы, поля, контент), а отдельно — конкретные версии, определяющие формат и доставку сообщений (например, HTTP/1.1 и HTTP/3).",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4540","Из чего состоит HTTP","what-http-consists-of",{"id":25,"value":26,"isTypeParagraph":8},"10432","Практически HTTP удобно разбирать на две части: семантика (что означает запрос/ответ) и сообщения (как это представлено в байтах и доставлено по сети).\n\nК семантике относятся:\n- Методы (например, `GET`, `POST`, `PUT`, `DELETE`): задают намерение операции.\n- Коды статуса (например, `200`, `404`, `503`): фиксируют результат обработки.\n- Поля (заголовки): метаданные и параметры управления.\n- Контент: данные, смысл которых определяется методом, статусом и полями.\n\nК сообщениям и их структуре относятся:\n- Стартовая строка: request-line для запроса или status-line для ответа.\n- Заголовки: строки вида `имя: значение`.\n- Пустая строка: отделяет заголовки от тела.\n- Тело сообщения (необязательное): байты контента.\n- Фрейминг: правила, как определить границы тела (например, по `Content-Length` или `Transfer-Encoding` в HTTP/1.1).\n\nТакже как часть «из чего состоит HTTP» обычно рассматривается окружение:\n- Цель запроса (request target/URI) и адресация ресурса.\n- Версия HTTP и связанный с ней способ кодирования/передачи сообщений (HTTP/1.1 vs HTTP/3).\n- Транспорт и защита (TCP/TLS или QUIC), так как они влияют на поведение (задержки, мультиплексирование, обработка потерь).\n\nТаблица: «семантика vs формат»\n| Слой | Что описывает | Примеры |\n|---|---|---|\n| Семантика HTTP | Намерение и результат операции | `GET`, `POST`, статусы `2xx/4xx/5xx`, правила допустимости контента |\n| Сообщения/кодирование | Как семантика упакована в байты | стартовая строка, заголовки, пустая строка, тело, правила длины тела |\n| Транспорт/защита | Как байты доставляются | HTTP/1.1 поверх TCP; HTTPS поверх TLS; HTTP/3 поверх QUIC |",{"id":28,"value":29,"anchor":30,"isTypeH2":8},"4541","Структура HTTP-сообщений (HTTP/1.1)","http-1-1-message-structure",{"id":32,"value":33,"isTypeParagraph":8},"10433","Сообщение HTTP/1.1 концептуально выглядит так:\n- start-line\n- 0..N заголовков\n- пустая строка\n- необязательное тело (message body)\n\nФормальная запись (в стиле спецификаций) часто приводится так:\n\n```\nHTTP-message = start-line CRLF *( field-line CRLF ) CRLF [ message-body ]\n```\n\nПример запроса (сырой HTTP/1.1):\n\n```\nGET /api/users?limit=10 HTTP/1.1\nHost: example.com\nAccept: application/json\nUser-Agent: demo-client/1.0\n```\n\nПример ответа (сырой HTTP/1.1):\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/json\nContent-Length: 27\n\n{\"items\":[{\"id\":1}]}\n```\n\nСтартовая строка запроса:\n\n```\nrequest-line = method SP request-target SP HTTP-version\n```\n\nСтрока статуса ответа:\n\n```\nstatus-line = HTTP-version SP status-code SP reason-phrase\n```",{"id":35,"description":36,"titleAlert":19,"isTypeAlertWarning":8},"756","Некорректный или «слишком терпимый» разбор HTTP-сообщений (например, неожиданные пробелы, странные переносы строк, неоднозначное определение длины тела) способен приводить к уязвимостям на стыке прокси/балансировщиков/приложений; поэтому следует опираться на строгие правила фрейминга и парсинга.",{"id":38,"value":39,"isTypeParagraph":8},"10434","Как определяется длина тела (упрощённо для HTTP/1.1):\n- Если присутствует `Transfer-Encoding` и последним указан `chunked`, длина определяется чтением чанков до нулевого чанка.\n- Если `Transfer-Encoding` присутствует, но `chunked` не является финальным, в ряде сценариев длина может определяться закрытием соединения (чаще для ответов), однако это источник неоднозначностей и ошибок.\n- Если `Transfer-Encoding` отсутствует, применяется `Content-Length` (если задан) для определения длины тела.\n\nПример chunked-ответа (на уровне сообщения):\n\n```\nHTTP/1.1 200 OK\nTransfer-Encoding: chunked\nContent-Type: text/plain\n\n5\nhello\n1\n!\n0\n```",{"id":41,"value":42,"anchor":43,"isTypeH2":8},"4542","Версии, методы и коды статуса","http-versions-methods-status-codes",{"id":45,"value":46,"isTypeParagraph":8},"10435","Методы задают намерение запроса, а коды статуса описывают результат обработки запроса сервером.\n\nТаблица: классы кодов статуса\n| Класс | Диапазон | Смысл |\n|---|---:|---|\n| 1xx | 100–199 | Информационные ответы (временные) |\n| 2xx | 200–299 | Успешная обработка |\n| 3xx | 300–399 | Перенаправления/дополнительные действия |\n| 4xx | 400–499 | Ошибка клиента |\n| 5xx | 500–599 | Ошибка сервера |\n\nТаблица: распространённые методы и смысл контента\n| Метод | Типичное назначение | Как трактуется контент |\n|---|---|---|\n| GET | Получение представления ресурса | Контент ответа представляет данные ресурса/представление |\n| HEAD | Как GET, но без тела | Тело отсутствует, метаданные аналогичны GET |\n| POST | Передача данных на обработку | Контент запроса — данные для обработки целевым ресурсом |\n| PUT | Задание/замена состояния ресурса | Контент запроса — желаемое состояние ресурса |\n| CONNECT | Установление туннеля | При успехе соединение становится туннелем |\n\nСхема «одна семантика — разные способы доставки»:\n\n```\n[клиент]\n  |  HTTP семантика: метод, цель, поля, статус, контент\n  v\n(кодирование сообщений)\n  - HTTP/1.1: start-line + headers + CRLF + body\n  - HTTP/3: HEADERS/DATA кадры поверх QUIC-стримов\n  v\n(транспорт)\n  - TCP (+TLS для https)\n  - QUIC (для HTTP/3)\n```\n\nHTTP/3 определяется как перенос HTTP-семантики поверх QUIC и использует стримы QUIC, что даёт мультиплексирование без «блокировки заголовка очереди» на уровне единого TCP-потока.\n\nВ HTTP/3 не применяется `Transfer-Encoding` из HTTP/1.1, поскольку формат сообщений и фрейминг задаются иначе (через кадры и свойства QUIC/HTTP/3).",{"id":48,"description":49,"titleAlert":19,"isTypeAlertInfo":8},"692","Для веб‑разработчика полезно помнить, что при работе с fetch/axios/браузером обычно видна семантика (методы, статусы, заголовки, тело), а различия HTTP/1.1 vs HTTP/3 чаще проявляются в производительности и сетевом поведении, а не в прикладном коде.",{"id":51,"value":52,"isTypeParagraph":8},"10436","Кратко: HTTP — прикладной протокол запрос–ответ; «состоит» из семантики (методы, статусы, заголовки, правила для контента) и формата сообщений (стартовая строка, заголовки, пустая строка, тело и фрейминг), при этом HTTP/1.1 и HTTP/3 различаются способом кодирования и транспортом (TCP/TLS против QUIC).",{"id":54,"options":55,"hint":69,"solution":70,"description":71},"1181",[56,60,63,66],{"id":57,"label":58,"isCorrect":59},"4868","HTTP — это транспортный протокол, который отвечает за доставку пакетов между узлами и гарантирует порядок байтов; он состоит из сегментов, окон перегрузки и подтверждений доставки, а веб-запросы являются лишь частным случаем его полезной нагрузки.",false,{"id":61,"label":62,"isCorrect":8},"4869","HTTP — это прикладной протокол взаимодействия по модели запрос–ответ, который задаёт смысл операций (методы), результат обработки (коды статуса) и формат самодокументируемых сообщений (стартовая строка, заголовки, пустая строка, необязательное тело/контент), обычно поверх TCP/TLS или QUIC.",{"id":64,"label":65,"isCorrect":59},"4870","HTTP — это язык разметки веб-страниц, который описывает структуру документа и стили отображения; он состоит из тегов, атрибутов, селекторов и правил каскадирования, а сервер возвращает «HTTP» как готовый HTML.",{"id":67,"label":68,"isCorrect":59},"4871","HTTP — это закрытый двоичный протокол с обязательным состоянием сессии, где каждый запрос должен продолжать предыдущий; он состоит из фиксированных кадров, обязательного тела и симметричного шифрования, без заголовков и кодов статуса.","Для ответа удобно использовать план: 1) определить HTTP как прикладной протокол запрос–ответ; 2) разделить «семантику» и «сообщения»; 3) перечислить части сообщения (start-line, headers, пустая строка, body/content); 4) добавить, что версии (HTTP/1.1 и HTTP/3) по‑разному кодируют одну семантику и используют разные транспорты.","**Правильный ответ: 2** - HTTP — это прикладной протокол взаимодействия по модели запрос–ответ, который задаёт смысл операций (методы), результат обработки (коды статуса) и формат самодокументируемых сообщений (стартовая строка, заголовки, пустая строка, необязательное тело/контент), обычно поверх TCP/TLS или QUIC.","Что такое HTTP и из чего состоит?","quizQuestion",{"title":71,"description":74,"ogTitle":7,"ogDescription":74,"ogImageUrl":75,"canonical":19,"ogLocale":76,"ogSiteName":77,"ogImageType":78,"ogImageWidth":79,"ogImageHeight":80,"ogType":81,"ogUrl":19},"Определение HTTP, состав протокола, структура сообщений и версии (HTTP/1.1 и HTTP/3), примеры и важные нюансы.","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":83,"siteUrl":84},"GOOD WEB JOB!","https://goodwebjob.ru",[86],{"label":87,"slug":88,"to":89},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":91,"navigationSublist":99},[92,95],{"path":89,"isActive":59,"name":93,"icon":94,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":96,"isActive":8,"name":97,"icon":98,"isNavbarMobileDisabled":59},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[100,109,136,148,154,295,319,328,334,396,417,423],{"title":101,"list":102,"isOpened":59},"Bash",[103,106],{"name":104,"path":105,"isActive":59},"Дан фрагмент 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":107,"path":108,"isActive":59},"Дан фрагмент 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":110,"list":111,"isOpened":59},"CSS",[112,115,118,121,124,127,130,133],{"name":113,"path":114,"isActive":59},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":116,"path":117,"isActive":59},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":119,"path":120,"isActive":59},"Есть шаблон вложенного 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":122,"path":123,"isActive":59},"Есть шаблон вложенного 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":125,"path":126,"isActive":59},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":128,"path":129,"isActive":59},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":131,"path":132,"isActive":59},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":134,"path":135,"isActive":59},"Есть 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":137,"list":138,"isOpened":59},"Git",[139,142,145],{"name":140,"path":141,"isActive":59},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":143,"path":144,"isActive":59},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":146,"path":147,"isActive":59},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":149,"list":150,"isOpened":59},"HTML",[151],{"name":152,"path":153,"isActive":59},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":155,"list":156,"isOpened":59},"JavaScript",[157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292],{"name":158,"path":159,"isActive":59},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":161,"path":162,"isActive":59},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":164,"path":165,"isActive":59},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":167,"path":168,"isActive":59},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":170,"path":171,"isActive":59},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":173,"path":174,"isActive":59},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":176,"path":177,"isActive":59},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение 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":179,"path":180,"isActive":59},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":182,"path":183,"isActive":59},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":185,"path":186,"isActive":59},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":188,"path":189,"isActive":59},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":191,"path":192,"isActive":59},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":194,"path":195,"isActive":59},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":197,"path":198,"isActive":59},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":200,"path":201,"isActive":59},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":203,"path":204,"isActive":59},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":206,"path":207,"isActive":59},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":209,"path":210,"isActive":59},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":212,"path":213,"isActive":59},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":215,"path":216,"isActive":59},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":218,"path":219,"isActive":59},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":221,"path":222,"isActive":59},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":224,"path":225,"isActive":59},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":227,"path":228,"isActive":59},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":230,"path":231,"isActive":59},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":233,"path":234,"isActive":59},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":236,"path":237,"isActive":59},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":239,"path":240,"isActive":59},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":242,"path":243,"isActive":59},"Вернуть массив от 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":245,"path":246,"isActive":59},"Дана строка: '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":248,"path":249,"isActive":59},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":251,"path":252,"isActive":59},"Для каждого вложенного объекта нужно добавить свойство 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":254,"path":255,"isActive":59},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":257,"path":258,"isActive":59},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":260,"path":261,"isActive":59},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":263,"path":264,"isActive":59},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":266,"path":267,"isActive":59}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":269,"path":270,"isActive":59},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":272,"path":273,"isActive":59},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":275,"path":276,"isActive":59},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":278,"path":279,"isActive":59},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":281,"path":282,"isActive":59},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":284,"path":285,"isActive":59},"Реализовать функцию, принимающую аргументы \"*\", \"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":287,"path":288,"isActive":59},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":290,"path":291,"isActive":59},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":293,"path":294,"isActive":59},"Числа от 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":296,"list":297,"isOpened":59},"React",[298,301,304,307,310,313,316],{"name":299,"path":300,"isActive":59},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":302,"path":303,"isActive":59},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":305,"path":306,"isActive":59},"Если убрать в 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":308,"path":309,"isActive":59},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":311,"path":312,"isActive":59},"Есть код, в котором список и кнопка. Что в реальном 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":314,"path":315,"isActive":59},"Зачем нужен 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":317,"path":318,"isActive":59},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":320,"list":321,"isOpened":59},"Алгоритмы",[322,325],{"name":323,"path":324,"isActive":59},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":326,"path":327,"isActive":59},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":329,"list":330,"isOpened":59},"Дебаггинг",[331],{"name":332,"path":333,"isActive":59},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":335,"list":336,"isOpened":59},"Компьютерные сети",[337,340,343,346,349,352,355,357,360,363,366,369,372,375,378,381,384,387,390,393],{"name":338,"path":339,"isActive":59},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":341,"path":342,"isActive":59},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":344,"path":345,"isActive":59},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":347,"path":348,"isActive":59},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":350,"path":351,"isActive":59},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":353,"path":354,"isActive":59},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":71,"path":356,"isActive":59},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":358,"path":359,"isActive":59},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":361,"path":362,"isActive":59},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":364,"path":365,"isActive":59},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":367,"path":368,"isActive":59},"Чем отличаются 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":370,"path":371,"isActive":59},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":373,"path":374,"isActive":59},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":376,"path":377,"isActive":59},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":379,"path":380,"isActive":59},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":382,"path":383,"isActive":59},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":385,"path":386,"isActive":59},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":388,"path":389,"isActive":59},"Все данные зашифрованы, используется 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":391,"path":392,"isActive":59},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/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":394,"path":395,"isActive":59},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":397,"list":398,"isOpened":59},"Отрисовка в браузере",[399,402,405,408,411,414],{"name":400,"path":401,"isActive":59},"Что происходит, когда 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":403,"path":404,"isActive":59},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":406,"path":407,"isActive":59},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":409,"path":410,"isActive":59},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":412,"path":413,"isActive":59},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":415,"path":416,"isActive":59},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":418,"list":419,"isOpened":59},"Ревью кода",[420],{"name":421,"path":422,"isActive":59},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":424,"list":425,"isOpened":59},"Теория вероятности",[426,429,432],{"name":427,"path":428,"isActive":59},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":430,"path":431,"isActive":59},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":433,"path":434,"isActive":59},"Как гарантированно найти лёгкую фальшивую монету среди 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":436},[437,440,442,444,446,449,452,454,456,458,460,462,465,467,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,640,642,644,646,647,649,651,653,655],{"name":438,"value":439},"Теоретические задания","theoretical-tasks",{"name":194,"value":441},"what-this-code-will-return-typeof-function",{"name":93,"value":443},"where-to-begin",{"name":161,"value":445},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":447,"value":448},"Backend","backend",{"name":450,"value":451},"Frontend","frontend",{"name":158,"value":453},"prototype-what-logical-values-will-be-received-in-console-log",{"name":275,"value":455},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":266,"value":457},"find-non-repeating-numbers-in-an-array",{"name":239,"value":459},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":245,"value":461},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":463,"value":464},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":251,"value":466},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":167,"value":468},"what-value-will-the-console-output-with-object-property",{"name":170,"value":470},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":242,"value":472},"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":272,"value":474},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":278,"value":476},"determines-whether-a-word-is-a-palindrome",{"name":257,"value":478},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":284,"value":480},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":248,"value":482},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":254,"value":484},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":260,"value":486},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":293,"value":488},"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":263,"value":490},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":269,"value":492},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":173,"value":494},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":176,"value":496},"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":188,"value":498},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":191,"value":500},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":290,"value":502},"unifying-values-in-an-array",{"name":281,"value":504},"flattening-the-array",{"name":179,"value":506},"what-will-the-book-get-upper-name-method-return",{"name":287,"value":508},"string-compression",{"name":185,"value":510},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":197,"value":512},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":338,"value":514},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":344,"value":516},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":347,"value":518},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":350,"value":520},"key-differences-between-tcp-and-udp",{"name":353,"value":522},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":71,"value":524},"what-is-http-and-what-does-it-consist-of",{"name":358,"value":526},"what-are-http-headers-and-why-do-we-need-them",{"name":361,"value":528},"what-are-http-parameters",{"name":364,"value":530},"where-is-the-html-code-located-in-the-http-response-structure",{"name":152,"value":532},"what-is-html",{"name":367,"value":534},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":370,"value":536},"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":373,"value":538},"what-is-a-cookie",{"name":376,"value":540},"who-initiates-the-cookie-recording-in-the-browser",{"name":379,"value":542},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":544,"value":545},"Лайвкодинг","livecoding",{"name":164,"value":547},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":385,"value":549},"is-everything-that-goes-through-https-secure",{"name":388,"value":551},"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":391,"value":553},"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":403,"value":555},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":400,"value":557},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":406,"value":559},"what-is-blocking-the-page-rendering-in-the-browser",{"name":409,"value":561},"what-is-dom-in-a-browser-what-is-cssom",{"name":412,"value":563},"what-are-nodes-in-the-dom",{"name":415,"value":565},"what-does-cssom-consist-of",{"name":113,"value":567},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":116,"value":569},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":119,"value":571},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":122,"value":573},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":125,"value":575},"there-is-an-html-code-will-font-weight-affect-span",{"name":128,"value":577},"what-are-the-differences-between-flexbox-and-grid",{"name":131,"value":579},"do-flexbox-and-grid-replace-each-other",{"name":134,"value":581},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":97,"value":583},"tasks",{"name":200,"value":585},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":203,"value":587},"what-is-this-in-javascript",{"name":206,"value":589},"what-is-an-event-loop-and-how-does-it-work",{"name":209,"value":591},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":212,"value":593},"what-does-the-typeof-operator-show-in-javascript",{"name":215,"value":595},"what-types-of-data-exist-in-javascript",{"name":218,"value":597},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":221,"value":599},"what-will-typeof-return-for-an-array",{"name":224,"value":601},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":227,"value":603},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":230,"value":605},"what-does-typeof-return-for-new-set-in-javascript",{"name":299,"value":607},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":305,"value":609},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":308,"value":611},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":311,"value":613},"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":314,"value":615},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":332,"value":617},"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":140,"value":619},"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":143,"value":621},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":146,"value":623},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":421,"value":625},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":104,"value":627},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":107,"value":629},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":323,"value":631},"what-is-algorithmic-complexity",{"name":326,"value":633},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":233,"value":635},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":394,"value":637},"how-can-a-user-be-authorized-on-a-website",{"name":236,"value":639},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":427,"value":641},"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":430,"value":643},"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":433,"value":645},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":87,"value":88},{"name":382,"value":648},"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":341,"value":650},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":182,"value":652},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":302,"value":654},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":317,"value":656},"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":658,"copyright":661,"reportError":662,"socialNetwork":664},{"link":659,"title":660},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":663,"link":659},"Сообщить об ошибке",{"label":665,"socialNetworkList":666},"Мы в соцсетях:",[667,670,673],{"icon":19,"link":668,"title":669},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":671,"link":659,"title":672},"ic:baseline-telegram","Telegram",{"icon":674,"link":675,"title":676},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":678,"body":679},{},{"type":680,"children":681},"root",[682],{"type":683,"tag":684,"props":685,"children":686},"element","p",{},[687],{"type":688,"value":71},"text",{"data":690,"body":691},{},{"type":680,"children":692},[693],{"type":683,"tag":684,"props":694,"children":695},{},[696],{"type":688,"value":58},{"data":698,"body":699},{},{"type":680,"children":700},[701],{"type":683,"tag":684,"props":702,"children":703},{},[704],{"type":688,"value":62},{"data":706,"body":707},{},{"type":680,"children":708},[709],{"type":683,"tag":684,"props":710,"children":711},{},[712],{"type":688,"value":65},{"data":714,"body":715},{},{"type":680,"children":716},[717],{"type":683,"tag":684,"props":718,"children":719},{},[720],{"type":688,"value":68},{"data":722,"body":723},{},{"type":680,"children":724},[725],{"type":683,"tag":684,"props":726,"children":727},{},[728],{"type":688,"value":69},{"data":730,"body":731},{},{"type":680,"children":732},[733],{"type":683,"tag":684,"props":734,"children":735},{},[736,742],{"type":683,"tag":737,"props":738,"children":739},"strong",{},[740],{"type":688,"value":741},"Правильный ответ: 2",{"type":688,"value":743}," - HTTP — это прикладной протокол взаимодействия по модели запрос–ответ, который задаёт смысл операций (методы), результат обработки (коды статуса) и формат самодокументируемых сообщений (стартовая строка, заголовки, пустая строка, необязательное тело/контент), обычно поверх TCP/TLS или QUIC.",{"data":745,"body":746},{},{"type":680,"children":747},[748,753],{"type":683,"tag":684,"props":749,"children":750},{},[751],{"type":688,"value":752},"HTTP (Hypertext Transfer Protocol) — прикладной протокол, построенный вокруг обмена сообщениями в модели запрос–ответ, предназначенный для взаимодействия с ресурсами (веб‑страницы, API, файлы) в распределённых системах.",{"type":683,"tag":684,"props":754,"children":755},{},[756],{"type":688,"value":757},"Протокол является «stateless» в том смысле, что на уровне HTTP не требуется хранить состояние между запросами как обязательное свойство протокола (состояние обычно надстраивается поверх HTTP дополнительными механизмами).",{"data":759,"body":760},{},{"type":680,"children":761},[762],{"type":683,"tag":684,"props":763,"children":764},{},[765],{"type":688,"value":18},{"data":767,"body":768},{},{"type":680,"children":769},[770,775,780,858,863,915,920,938,943],{"type":683,"tag":684,"props":771,"children":772},{},[773],{"type":688,"value":774},"Практически HTTP удобно разбирать на две части: семантика (что означает запрос/ответ) и сообщения (как это представлено в байтах и доставлено по сети).",{"type":683,"tag":684,"props":776,"children":777},{},[778],{"type":688,"value":779},"К семантике относятся:",{"type":683,"tag":781,"props":782,"children":783},"ul",{},[784,821,848,853],{"type":683,"tag":785,"props":786,"children":787},"li",{},[788,790,797,799,805,806,812,813,819],{"type":688,"value":789},"Методы (например, ",{"type":683,"tag":791,"props":792,"children":794},"code",{"className":793},[],[795],{"type":688,"value":796},"GET",{"type":688,"value":798},", ",{"type":683,"tag":791,"props":800,"children":802},{"className":801},[],[803],{"type":688,"value":804},"POST",{"type":688,"value":798},{"type":683,"tag":791,"props":807,"children":809},{"className":808},[],[810],{"type":688,"value":811},"PUT",{"type":688,"value":798},{"type":683,"tag":791,"props":814,"children":816},{"className":815},[],[817],{"type":688,"value":818},"DELETE",{"type":688,"value":820},"): задают намерение операции.",{"type":683,"tag":785,"props":822,"children":823},{},[824,826,832,833,839,840,846],{"type":688,"value":825},"Коды статуса (например, ",{"type":683,"tag":791,"props":827,"children":829},{"className":828},[],[830],{"type":688,"value":831},"200",{"type":688,"value":798},{"type":683,"tag":791,"props":834,"children":836},{"className":835},[],[837],{"type":688,"value":838},"404",{"type":688,"value":798},{"type":683,"tag":791,"props":841,"children":843},{"className":842},[],[844],{"type":688,"value":845},"503",{"type":688,"value":847},"): фиксируют результат обработки.",{"type":683,"tag":785,"props":849,"children":850},{},[851],{"type":688,"value":852},"Поля (заголовки): метаданные и параметры управления.",{"type":683,"tag":785,"props":854,"children":855},{},[856],{"type":688,"value":857},"Контент: данные, смысл которых определяется методом, статусом и полями.",{"type":683,"tag":684,"props":859,"children":860},{},[861],{"type":688,"value":862},"К сообщениям и их структуре относятся:",{"type":683,"tag":781,"props":864,"children":865},{},[866,871,884,889,894],{"type":683,"tag":785,"props":867,"children":868},{},[869],{"type":688,"value":870},"Стартовая строка: request-line для запроса или status-line для ответа.",{"type":683,"tag":785,"props":872,"children":873},{},[874,876,882],{"type":688,"value":875},"Заголовки: строки вида ",{"type":683,"tag":791,"props":877,"children":879},{"className":878},[],[880],{"type":688,"value":881},"имя: значение",{"type":688,"value":883},".",{"type":683,"tag":785,"props":885,"children":886},{},[887],{"type":688,"value":888},"Пустая строка: отделяет заголовки от тела.",{"type":683,"tag":785,"props":890,"children":891},{},[892],{"type":688,"value":893},"Тело сообщения (необязательное): байты контента.",{"type":683,"tag":785,"props":895,"children":896},{},[897,899,905,907,913],{"type":688,"value":898},"Фрейминг: правила, как определить границы тела (например, по ",{"type":683,"tag":791,"props":900,"children":902},{"className":901},[],[903],{"type":688,"value":904},"Content-Length",{"type":688,"value":906}," или ",{"type":683,"tag":791,"props":908,"children":910},{"className":909},[],[911],{"type":688,"value":912},"Transfer-Encoding",{"type":688,"value":914}," в HTTP/1.1).",{"type":683,"tag":684,"props":916,"children":917},{},[918],{"type":688,"value":919},"Также как часть «из чего состоит HTTP» обычно рассматривается окружение:",{"type":683,"tag":781,"props":921,"children":922},{},[923,928,933],{"type":683,"tag":785,"props":924,"children":925},{},[926],{"type":688,"value":927},"Цель запроса (request target/URI) и адресация ресурса.",{"type":683,"tag":785,"props":929,"children":930},{},[931],{"type":688,"value":932},"Версия HTTP и связанный с ней способ кодирования/передачи сообщений (HTTP/1.1 vs HTTP/3).",{"type":683,"tag":785,"props":934,"children":935},{},[936],{"type":688,"value":937},"Транспорт и защита (TCP/TLS или QUIC), так как они влияют на поведение (задержки, мультиплексирование, обработка потерь).",{"type":683,"tag":684,"props":939,"children":940},{},[941],{"type":688,"value":942},"Таблица: «семантика vs формат»",{"type":683,"tag":944,"props":945,"children":946},"table",{},[947,971],{"type":683,"tag":948,"props":949,"children":950},"thead",{},[951],{"type":683,"tag":952,"props":953,"children":954},"tr",{},[955,961,966],{"type":683,"tag":956,"props":957,"children":958},"th",{},[959],{"type":688,"value":960},"Слой",{"type":683,"tag":956,"props":962,"children":963},{},[964],{"type":688,"value":965},"Что описывает",{"type":683,"tag":956,"props":967,"children":968},{},[969],{"type":688,"value":970},"Примеры",{"type":683,"tag":972,"props":973,"children":974},"tbody",{},[975,1013,1031],{"type":683,"tag":952,"props":976,"children":977},{},[978,984,989],{"type":683,"tag":979,"props":980,"children":981},"td",{},[982],{"type":688,"value":983},"Семантика HTTP",{"type":683,"tag":979,"props":985,"children":986},{},[987],{"type":688,"value":988},"Намерение и результат операции",{"type":683,"tag":979,"props":990,"children":991},{},[992,997,998,1003,1005,1011],{"type":683,"tag":791,"props":993,"children":995},{"className":994},[],[996],{"type":688,"value":796},{"type":688,"value":798},{"type":683,"tag":791,"props":999,"children":1001},{"className":1000},[],[1002],{"type":688,"value":804},{"type":688,"value":1004},", статусы ",{"type":683,"tag":791,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":688,"value":1010},"2xx/4xx/5xx",{"type":688,"value":1012},", правила допустимости контента",{"type":683,"tag":952,"props":1014,"children":1015},{},[1016,1021,1026],{"type":683,"tag":979,"props":1017,"children":1018},{},[1019],{"type":688,"value":1020},"Сообщения/кодирование",{"type":683,"tag":979,"props":1022,"children":1023},{},[1024],{"type":688,"value":1025},"Как семантика упакована в байты",{"type":683,"tag":979,"props":1027,"children":1028},{},[1029],{"type":688,"value":1030},"стартовая строка, заголовки, пустая строка, тело, правила длины тела",{"type":683,"tag":952,"props":1032,"children":1033},{},[1034,1039,1044],{"type":683,"tag":979,"props":1035,"children":1036},{},[1037],{"type":688,"value":1038},"Транспорт/защита",{"type":683,"tag":979,"props":1040,"children":1041},{},[1042],{"type":688,"value":1043},"Как байты доставляются",{"type":683,"tag":979,"props":1045,"children":1046},{},[1047],{"type":688,"value":1048},"HTTP/1.1 поверх TCP; HTTPS поверх TLS; HTTP/3 поверх QUIC",{"data":1050,"body":1051},{},{"type":680,"children":1052},[1053,1058,1081,1086,1098,1103,1112,1117,1126,1131,1140,1145],{"type":683,"tag":684,"props":1054,"children":1055},{},[1056],{"type":688,"value":1057},"Сообщение HTTP/1.1 концептуально выглядит так:",{"type":683,"tag":781,"props":1059,"children":1060},{},[1061,1066,1071,1076],{"type":683,"tag":785,"props":1062,"children":1063},{},[1064],{"type":688,"value":1065},"start-line",{"type":683,"tag":785,"props":1067,"children":1068},{},[1069],{"type":688,"value":1070},"0..N заголовков",{"type":683,"tag":785,"props":1072,"children":1073},{},[1074],{"type":688,"value":1075},"пустая строка",{"type":683,"tag":785,"props":1077,"children":1078},{},[1079],{"type":688,"value":1080},"необязательное тело (message body)",{"type":683,"tag":684,"props":1082,"children":1083},{},[1084],{"type":688,"value":1085},"Формальная запись (в стиле спецификаций) часто приводится так:",{"type":683,"tag":1087,"props":1088,"children":1092},"pre",{"className":1089,"code":1091,"language":688},[1090],"language-text","HTTP-message = start-line CRLF *( field-line CRLF ) CRLF [ message-body ]\n",[1093],{"type":683,"tag":791,"props":1094,"children":1096},{"__ignoreMap":1095},"",[1097],{"type":688,"value":1091},{"type":683,"tag":684,"props":1099,"children":1100},{},[1101],{"type":688,"value":1102},"Пример запроса (сырой HTTP/1.1):",{"type":683,"tag":1087,"props":1104,"children":1107},{"className":1105,"code":1106,"language":688},[1090],"GET /api/users?limit=10 HTTP/1.1\nHost: example.com\nAccept: application/json\nUser-Agent: demo-client/1.0\n",[1108],{"type":683,"tag":791,"props":1109,"children":1110},{"__ignoreMap":1095},[1111],{"type":688,"value":1106},{"type":683,"tag":684,"props":1113,"children":1114},{},[1115],{"type":688,"value":1116},"Пример ответа (сырой HTTP/1.1):",{"type":683,"tag":1087,"props":1118,"children":1121},{"className":1119,"code":1120,"language":688},[1090],"HTTP/1.1 200 OK\nContent-Type: application/json\nContent-Length: 27\n\n{\"items\":[{\"id\":1}]}\n",[1122],{"type":683,"tag":791,"props":1123,"children":1124},{"__ignoreMap":1095},[1125],{"type":688,"value":1120},{"type":683,"tag":684,"props":1127,"children":1128},{},[1129],{"type":688,"value":1130},"Стартовая строка запроса:",{"type":683,"tag":1087,"props":1132,"children":1135},{"className":1133,"code":1134,"language":688},[1090],"request-line = method SP request-target SP HTTP-version\n",[1136],{"type":683,"tag":791,"props":1137,"children":1138},{"__ignoreMap":1095},[1139],{"type":688,"value":1134},{"type":683,"tag":684,"props":1141,"children":1142},{},[1143],{"type":688,"value":1144},"Строка статуса ответа:",{"type":683,"tag":1087,"props":1146,"children":1149},{"className":1147,"code":1148,"language":688},[1090],"status-line = HTTP-version SP status-code SP reason-phrase\n",[1150],{"type":683,"tag":791,"props":1151,"children":1152},{"__ignoreMap":1095},[1153],{"type":688,"value":1148},{"data":1155,"body":1156},{},{"type":680,"children":1157},[1158],{"type":683,"tag":684,"props":1159,"children":1160},{},[1161],{"type":688,"value":36},{"data":1163,"body":1164},{},{"type":680,"children":1165},[1166,1171,1231,1236],{"type":683,"tag":684,"props":1167,"children":1168},{},[1169],{"type":688,"value":1170},"Как определяется длина тела (упрощённо для HTTP/1.1):",{"type":683,"tag":781,"props":1172,"children":1173},{},[1174,1194,1213],{"type":683,"tag":785,"props":1175,"children":1176},{},[1177,1179,1184,1186,1192],{"type":688,"value":1178},"Если присутствует ",{"type":683,"tag":791,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":688,"value":912},{"type":688,"value":1185}," и последним указан ",{"type":683,"tag":791,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":688,"value":1191},"chunked",{"type":688,"value":1193},", длина определяется чтением чанков до нулевого чанка.",{"type":683,"tag":785,"props":1195,"children":1196},{},[1197,1199,1204,1206,1211],{"type":688,"value":1198},"Если ",{"type":683,"tag":791,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":688,"value":912},{"type":688,"value":1205}," присутствует, но ",{"type":683,"tag":791,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":688,"value":1191},{"type":688,"value":1212}," не является финальным, в ряде сценариев длина может определяться закрытием соединения (чаще для ответов), однако это источник неоднозначностей и ошибок.",{"type":683,"tag":785,"props":1214,"children":1215},{},[1216,1217,1222,1224,1229],{"type":688,"value":1198},{"type":683,"tag":791,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":688,"value":912},{"type":688,"value":1223}," отсутствует, применяется ",{"type":683,"tag":791,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":688,"value":904},{"type":688,"value":1230}," (если задан) для определения длины тела.",{"type":683,"tag":684,"props":1232,"children":1233},{},[1234],{"type":688,"value":1235},"Пример chunked-ответа (на уровне сообщения):",{"type":683,"tag":1087,"props":1237,"children":1240},{"className":1238,"code":1239,"language":688},[1090],"HTTP/1.1 200 OK\nTransfer-Encoding: chunked\nContent-Type: text/plain\n\n5\nhello\n1\n!\n0\n",[1241],{"type":683,"tag":791,"props":1242,"children":1243},{"__ignoreMap":1095},[1244],{"type":688,"value":1239},{"data":1246,"body":1247},{},{"type":680,"children":1248},[1249,1254,1259,1377,1382,1496,1501,1510,1515],{"type":683,"tag":684,"props":1250,"children":1251},{},[1252],{"type":688,"value":1253},"Методы задают намерение запроса, а коды статуса описывают результат обработки запроса сервером.",{"type":683,"tag":684,"props":1255,"children":1256},{},[1257],{"type":688,"value":1258},"Таблица: классы кодов статуса",{"type":683,"tag":944,"props":1260,"children":1261},{},[1262,1284],{"type":683,"tag":948,"props":1263,"children":1264},{},[1265],{"type":683,"tag":952,"props":1266,"children":1267},{},[1268,1273,1279],{"type":683,"tag":956,"props":1269,"children":1270},{},[1271],{"type":688,"value":1272},"Класс",{"type":683,"tag":956,"props":1274,"children":1276},{"align":1275},"right",[1277],{"type":688,"value":1278},"Диапазон",{"type":683,"tag":956,"props":1280,"children":1281},{},[1282],{"type":688,"value":1283},"Смысл",{"type":683,"tag":972,"props":1285,"children":1286},{},[1287,1305,1323,1341,1359],{"type":683,"tag":952,"props":1288,"children":1289},{},[1290,1295,1300],{"type":683,"tag":979,"props":1291,"children":1292},{},[1293],{"type":688,"value":1294},"1xx",{"type":683,"tag":979,"props":1296,"children":1297},{"align":1275},[1298],{"type":688,"value":1299},"100–199",{"type":683,"tag":979,"props":1301,"children":1302},{},[1303],{"type":688,"value":1304},"Информационные ответы (временные)",{"type":683,"tag":952,"props":1306,"children":1307},{},[1308,1313,1318],{"type":683,"tag":979,"props":1309,"children":1310},{},[1311],{"type":688,"value":1312},"2xx",{"type":683,"tag":979,"props":1314,"children":1315},{"align":1275},[1316],{"type":688,"value":1317},"200–299",{"type":683,"tag":979,"props":1319,"children":1320},{},[1321],{"type":688,"value":1322},"Успешная обработка",{"type":683,"tag":952,"props":1324,"children":1325},{},[1326,1331,1336],{"type":683,"tag":979,"props":1327,"children":1328},{},[1329],{"type":688,"value":1330},"3xx",{"type":683,"tag":979,"props":1332,"children":1333},{"align":1275},[1334],{"type":688,"value":1335},"300–399",{"type":683,"tag":979,"props":1337,"children":1338},{},[1339],{"type":688,"value":1340},"Перенаправления/дополнительные действия",{"type":683,"tag":952,"props":1342,"children":1343},{},[1344,1349,1354],{"type":683,"tag":979,"props":1345,"children":1346},{},[1347],{"type":688,"value":1348},"4xx",{"type":683,"tag":979,"props":1350,"children":1351},{"align":1275},[1352],{"type":688,"value":1353},"400–499",{"type":683,"tag":979,"props":1355,"children":1356},{},[1357],{"type":688,"value":1358},"Ошибка клиента",{"type":683,"tag":952,"props":1360,"children":1361},{},[1362,1367,1372],{"type":683,"tag":979,"props":1363,"children":1364},{},[1365],{"type":688,"value":1366},"5xx",{"type":683,"tag":979,"props":1368,"children":1369},{"align":1275},[1370],{"type":688,"value":1371},"500–599",{"type":683,"tag":979,"props":1373,"children":1374},{},[1375],{"type":688,"value":1376},"Ошибка сервера",{"type":683,"tag":684,"props":1378,"children":1379},{},[1380],{"type":688,"value":1381},"Таблица: распространённые методы и смысл контента",{"type":683,"tag":944,"props":1383,"children":1384},{},[1385,1406],{"type":683,"tag":948,"props":1386,"children":1387},{},[1388],{"type":683,"tag":952,"props":1389,"children":1390},{},[1391,1396,1401],{"type":683,"tag":956,"props":1392,"children":1393},{},[1394],{"type":688,"value":1395},"Метод",{"type":683,"tag":956,"props":1397,"children":1398},{},[1399],{"type":688,"value":1400},"Типичное назначение",{"type":683,"tag":956,"props":1402,"children":1403},{},[1404],{"type":688,"value":1405},"Как трактуется контент",{"type":683,"tag":972,"props":1407,"children":1408},{},[1409,1426,1444,1461,1478],{"type":683,"tag":952,"props":1410,"children":1411},{},[1412,1416,1421],{"type":683,"tag":979,"props":1413,"children":1414},{},[1415],{"type":688,"value":796},{"type":683,"tag":979,"props":1417,"children":1418},{},[1419],{"type":688,"value":1420},"Получение представления ресурса",{"type":683,"tag":979,"props":1422,"children":1423},{},[1424],{"type":688,"value":1425},"Контент ответа представляет данные ресурса/представление",{"type":683,"tag":952,"props":1427,"children":1428},{},[1429,1434,1439],{"type":683,"tag":979,"props":1430,"children":1431},{},[1432],{"type":688,"value":1433},"HEAD",{"type":683,"tag":979,"props":1435,"children":1436},{},[1437],{"type":688,"value":1438},"Как GET, но без тела",{"type":683,"tag":979,"props":1440,"children":1441},{},[1442],{"type":688,"value":1443},"Тело отсутствует, метаданные аналогичны GET",{"type":683,"tag":952,"props":1445,"children":1446},{},[1447,1451,1456],{"type":683,"tag":979,"props":1448,"children":1449},{},[1450],{"type":688,"value":804},{"type":683,"tag":979,"props":1452,"children":1453},{},[1454],{"type":688,"value":1455},"Передача данных на обработку",{"type":683,"tag":979,"props":1457,"children":1458},{},[1459],{"type":688,"value":1460},"Контент запроса — данные для обработки целевым ресурсом",{"type":683,"tag":952,"props":1462,"children":1463},{},[1464,1468,1473],{"type":683,"tag":979,"props":1465,"children":1466},{},[1467],{"type":688,"value":811},{"type":683,"tag":979,"props":1469,"children":1470},{},[1471],{"type":688,"value":1472},"Задание/замена состояния ресурса",{"type":683,"tag":979,"props":1474,"children":1475},{},[1476],{"type":688,"value":1477},"Контент запроса — желаемое состояние ресурса",{"type":683,"tag":952,"props":1479,"children":1480},{},[1481,1486,1491],{"type":683,"tag":979,"props":1482,"children":1483},{},[1484],{"type":688,"value":1485},"CONNECT",{"type":683,"tag":979,"props":1487,"children":1488},{},[1489],{"type":688,"value":1490},"Установление туннеля",{"type":683,"tag":979,"props":1492,"children":1493},{},[1494],{"type":688,"value":1495},"При успехе соединение становится туннелем",{"type":683,"tag":684,"props":1497,"children":1498},{},[1499],{"type":688,"value":1500},"Схема «одна семантика — разные способы доставки»:",{"type":683,"tag":1087,"props":1502,"children":1505},{"className":1503,"code":1504,"language":688},[1090],"[клиент]\n  |  HTTP семантика: метод, цель, поля, статус, контент\n  v\n(кодирование сообщений)\n  - HTTP/1.1: start-line + headers + CRLF + body\n  - HTTP/3: HEADERS/DATA кадры поверх QUIC-стримов\n  v\n(транспорт)\n  - TCP (+TLS для https)\n  - QUIC (для HTTP/3)\n",[1506],{"type":683,"tag":791,"props":1507,"children":1508},{"__ignoreMap":1095},[1509],{"type":688,"value":1504},{"type":683,"tag":684,"props":1511,"children":1512},{},[1513],{"type":688,"value":1514},"HTTP/3 определяется как перенос HTTP-семантики поверх QUIC и использует стримы QUIC, что даёт мультиплексирование без «блокировки заголовка очереди» на уровне единого TCP-потока.",{"type":683,"tag":684,"props":1516,"children":1517},{},[1518,1520,1525],{"type":688,"value":1519},"В HTTP/3 не применяется ",{"type":683,"tag":791,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":688,"value":912},{"type":688,"value":1526}," из HTTP/1.1, поскольку формат сообщений и фрейминг задаются иначе (через кадры и свойства QUIC/HTTP/3).",{"data":1528,"body":1529},{},{"type":680,"children":1530},[1531],{"type":683,"tag":684,"props":1532,"children":1533},{},[1534],{"type":688,"value":49},{"data":1536,"body":1537},{},{"type":680,"children":1538},[1539],{"type":683,"tag":684,"props":1540,"children":1541},{},[1542],{"type":688,"value":52},1775735660352]