[{"data":1,"prerenderedAt":1341},["ShallowReactive",2],{"$f-QI4QcUZgAXtFaBgRhJ5ozaTssWc6X3Cj6x2ZK18fGE":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":118,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":121,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":126,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":471,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":693,"mdc--jfm8qa-key":713,"mdc-ppwmtj-key":725,"mdc--m3y337-key":733,"mdc--xhympc-key":741,"mdc-o64mam-key":749,"mdc-mmnwr6-key":757,"mdc-gmf2wo-key":811,"mdc--5jmk5q-key":826,"mdc--v5s5xr-key":883,"mdc--7oo5js-key":891,"mdc--wppw4x-key":950,"mdc--dovpz1-key":1007,"mdc--8vc0hj-key":1034,"mdc-1k8jqo-key":1055,"mdc--le1yc2-key":1077,"mdc--tn32k3-key":1212,"mdc-9aso9-key":1232,"mdc--aizizj-key":1310,"mdc-6iwqxy-key":1333},{"content":4,"quizQuestionContent":89,"type":108,"pageMeta":109},[5,9,13,16,20,24,28,31,35,38,42,45,49,52,56,59,62,66,69,72,76,79,83,86],{"id":6,"value":7,"isTypeH1":8},"1899","Как браузер после домена находит сайт: DNS, IP и HTTP",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4347","Теория: от домена к сайту","theory-from-domain-to-site",{"id":14,"value":15,"isTypeParagraph":8},"9992","Домен сам по себе не содержит «сайт»; домен — это удобное имя, которое через DNS сопоставляется с данными (часто с IP-адресами), нужными для установления соединения.  \nВ вебе «откуда брать сайт» сводится к тому, чтобы определить origin (схема + хост + порт) и найти сетевую точку назначения, способную отвечать именно для этого origin.\n\nDNS устроен как иерархическое пространство имён и набор ресурсных записей, которые запрашиваются у DNS-серверов.  \nНа практике браузер обычно получает IP через записи `A` (IPv4) и/или `AAAA` (IPv6), а в современных конфигурациях дополнительно может использовать записи `HTTPS`/`SVCB`, чтобы узнать параметры подключения заранее (например, предпочтительный протокол или альтернативную конечную точку).",{"id":17,"description":18,"titleAlert":19,"isTypeAlertWarning":8},"685","DNS без криптографической защиты может быть целью подмены ответов, поэтому в реальных системах важны HTTPS/TLS и проверка сертификата, а также защитные механизмы резолвинга (вплоть до защищённых транспортов для DNS).",null,{"id":21,"value":22,"anchor":23,"isTypeH2":8},"4348","Пошаговый разбор","step-by-step",{"id":25,"value":26,"anchor":27,"isTypeH3":8},"4349","Интерпретация введённого текста","interpretation-of-the-entered-text",{"id":29,"value":30,"isTypeParagraph":8},"9993","В адресной строке определяется, является ли введённое значение URL (например, `https://example.com/path`) или только доменным именем (например, `example.com`), после чего формируется полный URL с схемой и путём по умолчанию.  \nЕсли схема — `http` или `https`, то «кто имеет право отвечать» определяется компонентом authority (хост + опциональный порт), а порт по умолчанию — 80 для `http` и 443 для `https`.",{"id":32,"value":33,"anchor":34,"isTypeH3":8},"4350","Получение IP и параметров через DNS","getting-ip-and-parameters-via-dns",{"id":36,"value":37,"isTypeParagraph":8},"9994","Запрашивается DNS у настроенного резолвера (часто системного), который рекурсивно получает ответ, проходя по делегированиям в иерархии DNS до авторитативных серверов зоны.  \nОбычно целевыми являются `A`/`AAAA`, но при наличии могут запрашиваться `HTTPS`/`SVCB`, которые «подсказывают» клиенту, как лучше подключаться к сервису и к каким альтернативным endpoint’ам.\n\nСхема (упрощённо):\n\n```\nДомен в адресной строке  \n→ DNS-кэш (браузер/ОС)  \n→ Резолвер (локальный/провайдера/DoH)  \n→ Root DNS → TLD DNS → Authoritative DNS  \n→ Ответ: A/AAAA (и, возможно, HTTPS/SVCB)  \n→ Выбор адреса и протокола  \n```",{"id":39,"value":40,"anchor":41,"isTypeH3":8},"4351","Выбор адреса и попытка подключения","selecting-an-address-and-attempting-to-connect",{"id":43,"value":44,"isTypeParagraph":8},"9995","Если получено несколько адресов (IPv6 и IPv4, несколько IP), применяется стратегия параллельных попыток, чтобы снизить задержку при недоступности или «плохом» маршруте к одному из адресов (Happy Eyeballs).  \nПри использовании `HTTPS`/`SVCB` записи могут заранее подсказать поддерживаемый протокол/порт и дать альтернативные варианты, чтобы подключение было быстрее и устойчивее.",{"id":46,"value":47,"anchor":48,"isTypeH3":8},"4352","Установление защищённого канала и определение нужного виртуального хоста","establishing-a-secure-channel-and-determining-the-required-virtual-host",{"id":50,"value":51,"isTypeParagraph":8},"9996","Для `https` устанавливается TLS поверх выбранного транспорта, после чего выполняется HTTP-обмен.  \nОдин IP-адрес может обслуживать много доменов (виртуальный хостинг), поэтому в запросе указывается доменное имя (на уровне TLS через имя сервера и на уровне HTTP через заголовки/псевдозаголовки), и сервер по этому имени выбирает правильный сайт.",{"id":53,"value":54,"anchor":55,"isTypeH3":8},"4353","HTTP-запрос и получение ресурсов страницы","http-request-and-retrieval-of-page-resources",{"id":57,"value":58,"isTypeParagraph":8},"9997","Отправляется запрос (часто `GET /`), сервер возвращает HTML, затем браузер загружает связанные ресурсы (CSS, JS, изображения, шрифты) по URL-ам, которые снова проходят тот же цикл «URL → DNS (если нужно) → соединение → HTTP».  \nЕсли сервер отвечает перенаправлением (например, 301/302), браузер повторяет процесс уже для нового URL.",{"id":25,"value":60,"anchor":61,"isTypeH2":8},"Практика и примеры","practice-and-examples",{"id":63,"value":64,"anchor":65,"isTypeH3":8},"4354","Какие DNS-записи важны","which-dns-records-matter",{"id":67,"value":68,"isTypeParagraph":8},"9998","| Запись DNS | Что даёт | Зачем нужно браузеру |\n|---|---|---|\n| `A` | IPv4-адрес | Подключение к серверу по IPv4 |\n| `AAAA` | IPv6-адрес | Подключение к серверу по IPv6 |\n| `CNAME` | Алиас на другое имя | Переадресация имени на другое имя перед поиском `A/AAAA` |\n| `HTTPS` / `SVCB` | Параметры и альтернативные endpoint’ы | Быстрее и точнее выбрать, как подключаться (протокол/порт/варианты) |",{"id":70,"description":71,"titleAlert":19,"isTypeAlertInfo":8},"631","`HTTPS`/`SVCB` — современный способ передавать «инструкции доступа к сервису» через DNS (актуально для оптимизации подключения в новых конфигурациях).",{"id":73,"value":74,"anchor":75,"isTypeH3":8},"4355","Диагностика через консоль","console-diagnostics",{"id":77,"value":78,"isTypeParagraph":8},"9999","Примеры команд (в зависимости от ОС и наличия утилит):\n\n`nslookup example.com`  \n`dig example.com A`  \n`dig example.com AAAA`  \n`dig example.com HTTPS`\n\nПример типового вывода (формат сокращённый и условный):\n\n```\nexample.com.    300 IN A     93.184.216.34\nexample.com.    300 IN AAAA  2606:2800:220:1:248:1893:25c8:1946\nexample.com.    300 IN HTTPS 1 . alpn=\"h2,h3\" port=443\n```\n\nЗдесь `A/AAAA` дают адреса, а `HTTPS` сообщает, что сервис ожидается на 443 и может поддерживать несколько протоколов приложения (через идею согласования протокола).",{"id":80,"value":81,"anchor":82,"isTypeH3":8},"4356","Мини-модель «что делает клиент»","client-mini-model",{"id":84,"value":85,"isTypeParagraph":8},"10000","Упрощённый псевдокод процесса (не конкретный браузер, а учебная модель):\n\n```\ninput = \"example.com\"\n\nurl = normalize_to_url(input)\nscheme = url.scheme_default_if_missing()\nhost = url.host\nport = default_port_for_scheme_if_missing(scheme)\n\ndns_result = resolve_dns(host)\nsvc = try_resolve_https_or_svcb(host)  // если поддерживается и есть смысл\n\nendpoint_list = build_endpoints(dns_result, svc, scheme, port)\n\nip_candidates = select_ips_with_happy_eyeballs(endpoint_list)  // параллельные попытки\n\nconn = connect(ip_candidates)  // TCP+TLS или QUIC, зависит от выбранного варианта\nresponse = http_request(conn, host, url.path, scheme)\n\nrender(response)\n```\n\nВ этом алгоритме ключевая идея: домен превращается в «куда подключаться» через DNS, а «какой именно сайт» на одном IP различается по имени хоста на уровнях TLS/HTTP.",{"id":87,"value":88,"isTypeParagraph":8},"10001","Кратко: После ввода домена определяется URL и origin (схема/хост/порт), затем через DNS получается информация для подключения (обычно A/AAAA, иногда HTTPS/SVCB), выбирается IP (часто с параллельными попытками), устанавливается соединение и отправляется HTTP-запрос с указанием домена, по которому сервер отдаёт нужный сайт.",{"id":90,"options":91,"hint":105,"solution":106,"description":107},"1138",[92,96,99,102],{"id":93,"label":94,"isCorrect":95},"4684","Браузер после ввода домена обращается к регистратору домена и получает от него готовый «адрес сайта» и список файлов, после чего скачивает HTML/CSS/JS напрямую из базы регистратора, а DNS используется только для проверки, что домен существует",false,{"id":97,"label":98,"isCorrect":8},"4685","Браузер преобразует домен в сетевой адрес через DNS (получая, например, A/AAAA и иногда HTTPS/SVCB записи), выбирает подходящий IP и протокол, устанавливает соединение (TCP+TLS или QUIC), отправляет HTTP-запрос с нужным хостом и получает ответ от сервера, где и расположен сайт",{"id":100,"label":101,"isCorrect":95},"4686","Браузер «понимает сайт» по содержимому TLS‑сертификата: сначала скачивается сертификат по доменному имени без DNS, из сертификата берётся IP-адрес сервера и путь к сайту, а затем выполняется загрузка страниц уже по найденному пути",{"id":103,"label":104,"isCorrect":95},"4687","Браузер использует поисковую систему как справочник: после ввода домена выполняется запрос в поисковый индекс, откуда возвращается текущий IP нужного сайта, затем браузер подключается к этому IP; DNS при этом не нужен, потому что всю информацию хранит поисковик","Следует держать в голове цепочку: `домен` → `DNS (A/AAAA, иногда HTTPS/SVCB)` → `выбор IP (Happy Eyeballs)` → `соединение (TCP/TLS или QUIC)` → `HTTP-запрос с указанием хоста` → `ответ сервера и загрузка ресурсов`.","**Правильный ответ: 2** - Браузер преобразует домен в сетевой адрес через DNS (получая, например, A/AAAA и иногда HTTPS/SVCB записи), выбирает подходящий IP и протокол, устанавливает соединение (TCP+TLS или QUIC), отправляет HTTP-запрос с нужным хостом и получает ответ от сервера, где и расположен сайт.","Как браузер после ввода домена понимает, откуда брать сайт?","quizQuestion",{"title":107,"description":110,"ogTitle":7,"ogDescription":110,"ogImageUrl":111,"canonical":19,"ogLocale":112,"ogSiteName":113,"ogImageType":114,"ogImageWidth":115,"ogImageHeight":116,"ogType":117,"ogUrl":19},"Простое объяснение цепочки: домен → DNS-записи → IP/endpoint → соединение (TCP/TLS или QUIC) → HTTP-запрос и ответ","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":119,"siteUrl":120},"GOOD WEB JOB!","https://goodwebjob.ru",[122],{"label":123,"slug":124,"to":125},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":127,"navigationSublist":135},[128,131],{"path":125,"isActive":95,"name":129,"icon":130,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":132,"isActive":8,"name":133,"icon":134,"isNavbarMobileDisabled":95},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[136,145,172,184,190,331,355,364,370,432,453,459],{"title":137,"list":138,"isOpened":95},"Bash",[139,142],{"name":140,"path":141,"isActive":95},"Дан фрагмент 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":143,"path":144,"isActive":95},"Дан фрагмент 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":146,"list":147,"isOpened":95},"CSS",[148,151,154,157,160,163,166,169],{"name":149,"path":150,"isActive":95},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":152,"path":153,"isActive":95},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":155,"path":156,"isActive":95},"Есть шаблон вложенного 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":158,"path":159,"isActive":95},"Есть шаблон вложенного 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":161,"path":162,"isActive":95},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":164,"path":165,"isActive":95},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":167,"path":168,"isActive":95},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":170,"path":171,"isActive":95},"Есть 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":173,"list":174,"isOpened":95},"Git",[175,178,181],{"name":176,"path":177,"isActive":95},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":179,"path":180,"isActive":95},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":182,"path":183,"isActive":95},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":185,"list":186,"isOpened":95},"HTML",[187],{"name":188,"path":189,"isActive":95},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":191,"list":192,"isOpened":95},"JavaScript",[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,295,298,301,304,307,310,313,316,319,322,325,328],{"name":194,"path":195,"isActive":95},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":197,"path":198,"isActive":95},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":200,"path":201,"isActive":95},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":203,"path":204,"isActive":95},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":206,"path":207,"isActive":95},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":209,"path":210,"isActive":95},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":212,"path":213,"isActive":95},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение 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":215,"path":216,"isActive":95},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":218,"path":219,"isActive":95},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":221,"path":222,"isActive":95},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":224,"path":225,"isActive":95},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":227,"path":228,"isActive":95},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":230,"path":231,"isActive":95},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":233,"path":234,"isActive":95},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":236,"path":237,"isActive":95},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":239,"path":240,"isActive":95},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":242,"path":243,"isActive":95},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":245,"path":246,"isActive":95},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":248,"path":249,"isActive":95},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":251,"path":252,"isActive":95},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":254,"path":255,"isActive":95},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":257,"path":258,"isActive":95},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":260,"path":261,"isActive":95},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":263,"path":264,"isActive":95},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":266,"path":267,"isActive":95},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":269,"path":270,"isActive":95},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":272,"path":273,"isActive":95},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":275,"path":276,"isActive":95},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":278,"path":279,"isActive":95},"Вернуть массив от 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":281,"path":282,"isActive":95},"Дана строка: '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":284,"path":285,"isActive":95},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":287,"path":288,"isActive":95},"Для каждого вложенного объекта нужно добавить свойство 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":290,"path":291,"isActive":95},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":293,"path":294,"isActive":95},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":296,"path":297,"isActive":95},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":299,"path":300,"isActive":95},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":302,"path":303,"isActive":95}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":305,"path":306,"isActive":95},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":308,"path":309,"isActive":95},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":311,"path":312,"isActive":95},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":314,"path":315,"isActive":95},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":317,"path":318,"isActive":95},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":320,"path":321,"isActive":95},"Реализовать функцию, принимающую аргументы \"*\", \"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":323,"path":324,"isActive":95},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":326,"path":327,"isActive":95},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":329,"path":330,"isActive":95},"Числа от 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":332,"list":333,"isOpened":95},"React",[334,337,340,343,346,349,352],{"name":335,"path":336,"isActive":95},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":338,"path":339,"isActive":95},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":341,"path":342,"isActive":95},"Если убрать в 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":344,"path":345,"isActive":95},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":347,"path":348,"isActive":95},"Есть код, в котором список и кнопка. Что в реальном 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":350,"path":351,"isActive":95},"Зачем нужен 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":353,"path":354,"isActive":95},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":356,"list":357,"isOpened":95},"Алгоритмы",[358,361],{"name":359,"path":360,"isActive":95},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":362,"path":363,"isActive":95},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":365,"list":366,"isOpened":95},"Дебаггинг",[367],{"name":368,"path":369,"isActive":95},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":371,"list":372,"isOpened":95},"Компьютерные сети",[373,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,420,423,426,429],{"name":107,"path":374,"isActive":95},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":376,"path":377,"isActive":95},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":379,"path":380,"isActive":95},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":382,"path":383,"isActive":95},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":385,"path":386,"isActive":95},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":388,"path":389,"isActive":95},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":391,"path":392,"isActive":95},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":394,"path":395,"isActive":95},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":397,"path":398,"isActive":95},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":400,"path":401,"isActive":95},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":403,"path":404,"isActive":95},"Чем отличаются 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":406,"path":407,"isActive":95},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":409,"path":410,"isActive":95},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":412,"path":413,"isActive":95},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":415,"path":416,"isActive":95},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":418,"path":419,"isActive":95},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":421,"path":422,"isActive":95},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":424,"path":425,"isActive":95},"Все данные зашифрованы, используется 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":427,"path":428,"isActive":95},"Есть веб-приложение. Помимо 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":430,"path":431,"isActive":95},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":433,"list":434,"isOpened":95},"Отрисовка в браузере",[435,438,441,444,447,450],{"name":436,"path":437,"isActive":95},"Что происходит, когда 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":439,"path":440,"isActive":95},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":442,"path":443,"isActive":95},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":445,"path":446,"isActive":95},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":448,"path":449,"isActive":95},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":451,"path":452,"isActive":95},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":454,"list":455,"isOpened":95},"Ревью кода",[456],{"name":457,"path":458,"isActive":95},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":460,"list":461,"isOpened":95},"Теория вероятности",[462,465,468],{"name":463,"path":464,"isActive":95},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":466,"path":467,"isActive":95},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":469,"path":470,"isActive":95},"Как гарантированно найти лёгкую фальшивую монету среди 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":472},[473,476,478,480,482,485,488,490,492,494,496,498,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,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,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,683,685,687,689,691],{"name":474,"value":475},"Теоретические задания","theoretical-tasks",{"name":230,"value":477},"what-this-code-will-return-typeof-function",{"name":129,"value":479},"where-to-begin",{"name":197,"value":481},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":483,"value":484},"Backend","backend",{"name":486,"value":487},"Frontend","frontend",{"name":194,"value":489},"prototype-what-logical-values-will-be-received-in-console-log",{"name":311,"value":491},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":302,"value":493},"find-non-repeating-numbers-in-an-array",{"name":275,"value":495},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":281,"value":497},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":499,"value":500},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":287,"value":502},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":203,"value":504},"what-value-will-the-console-output-with-object-property",{"name":206,"value":506},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":278,"value":508},"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":308,"value":510},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":314,"value":512},"determines-whether-a-word-is-a-palindrome",{"name":293,"value":514},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":320,"value":516},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":284,"value":518},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":290,"value":520},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":296,"value":522},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":329,"value":524},"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":299,"value":526},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":305,"value":528},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":209,"value":530},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":212,"value":532},"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":224,"value":534},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":227,"value":536},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":326,"value":538},"unifying-values-in-an-array",{"name":317,"value":540},"flattening-the-array",{"name":215,"value":542},"what-will-the-book-get-upper-name-method-return",{"name":323,"value":544},"string-compression",{"name":221,"value":546},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":233,"value":548},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":107,"value":550},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":379,"value":552},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":382,"value":554},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":385,"value":556},"key-differences-between-tcp-and-udp",{"name":388,"value":558},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":391,"value":560},"what-is-http-and-what-does-it-consist-of",{"name":394,"value":562},"what-are-http-headers-and-why-do-we-need-them",{"name":397,"value":564},"what-are-http-parameters",{"name":400,"value":566},"where-is-the-html-code-located-in-the-http-response-structure",{"name":188,"value":568},"what-is-html",{"name":403,"value":570},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":406,"value":572},"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":409,"value":574},"what-is-a-cookie",{"name":412,"value":576},"who-initiates-the-cookie-recording-in-the-browser",{"name":415,"value":578},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":580,"value":581},"Лайвкодинг","livecoding",{"name":200,"value":583},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":421,"value":585},"is-everything-that-goes-through-https-secure",{"name":424,"value":587},"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":427,"value":589},"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":439,"value":591},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":436,"value":593},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":442,"value":595},"what-is-blocking-the-page-rendering-in-the-browser",{"name":445,"value":597},"what-is-dom-in-a-browser-what-is-cssom",{"name":448,"value":599},"what-are-nodes-in-the-dom",{"name":451,"value":601},"what-does-cssom-consist-of",{"name":149,"value":603},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":152,"value":605},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":155,"value":607},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":158,"value":609},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":161,"value":611},"there-is-an-html-code-will-font-weight-affect-span",{"name":164,"value":613},"what-are-the-differences-between-flexbox-and-grid",{"name":167,"value":615},"do-flexbox-and-grid-replace-each-other",{"name":170,"value":617},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":133,"value":619},"tasks",{"name":236,"value":621},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":239,"value":623},"what-is-this-in-javascript",{"name":242,"value":625},"what-is-an-event-loop-and-how-does-it-work",{"name":245,"value":627},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":248,"value":629},"what-does-the-typeof-operator-show-in-javascript",{"name":251,"value":631},"what-types-of-data-exist-in-javascript",{"name":254,"value":633},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":257,"value":635},"what-will-typeof-return-for-an-array",{"name":260,"value":637},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":263,"value":639},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":266,"value":641},"what-does-typeof-return-for-new-set-in-javascript",{"name":335,"value":643},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":341,"value":645},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":344,"value":647},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":347,"value":649},"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":350,"value":651},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":368,"value":653},"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":176,"value":655},"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":179,"value":657},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":182,"value":659},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":457,"value":661},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":140,"value":663},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":143,"value":665},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":359,"value":667},"what-is-algorithmic-complexity",{"name":362,"value":669},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":269,"value":671},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":430,"value":673},"how-can-a-user-be-authorized-on-a-website",{"name":272,"value":675},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":463,"value":677},"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":466,"value":679},"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":469,"value":681},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":123,"value":124},{"name":418,"value":684},"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":376,"value":686},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":218,"value":688},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":338,"value":690},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":353,"value":692},"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":694,"copyright":697,"reportError":698,"socialNetwork":700},{"link":695,"title":696},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":699,"link":695},"Сообщить об ошибке",{"label":701,"socialNetworkList":702},"Мы в соцсетях:",[703,706,709],{"icon":19,"link":704,"title":705},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":707,"link":695,"title":708},"ic:baseline-telegram","Telegram",{"icon":710,"link":711,"title":712},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":714,"body":715},{},{"type":716,"children":717},"root",[718],{"type":719,"tag":720,"props":721,"children":722},"element","p",{},[723],{"type":724,"value":107},"text",{"data":726,"body":727},{},{"type":716,"children":728},[729],{"type":719,"tag":720,"props":730,"children":731},{},[732],{"type":724,"value":94},{"data":734,"body":735},{},{"type":716,"children":736},[737],{"type":719,"tag":720,"props":738,"children":739},{},[740],{"type":724,"value":98},{"data":742,"body":743},{},{"type":716,"children":744},[745],{"type":719,"tag":720,"props":746,"children":747},{},[748],{"type":724,"value":101},{"data":750,"body":751},{},{"type":716,"children":752},[753],{"type":719,"tag":720,"props":754,"children":755},{},[756],{"type":724,"value":104},{"data":758,"body":759},{},{"type":716,"children":760},[761],{"type":719,"tag":720,"props":762,"children":763},{},[764,766,773,775,781,782,788,789,795,796,802,803,809],{"type":724,"value":765},"Следует держать в голове цепочку: ",{"type":719,"tag":767,"props":768,"children":770},"code",{"className":769},[],[771],{"type":724,"value":772},"домен",{"type":724,"value":774}," → ",{"type":719,"tag":767,"props":776,"children":778},{"className":777},[],[779],{"type":724,"value":780},"DNS (A/AAAA, иногда HTTPS/SVCB)",{"type":724,"value":774},{"type":719,"tag":767,"props":783,"children":785},{"className":784},[],[786],{"type":724,"value":787},"выбор IP (Happy Eyeballs)",{"type":724,"value":774},{"type":719,"tag":767,"props":790,"children":792},{"className":791},[],[793],{"type":724,"value":794},"соединение (TCP/TLS или QUIC)",{"type":724,"value":774},{"type":719,"tag":767,"props":797,"children":799},{"className":798},[],[800],{"type":724,"value":801},"HTTP-запрос с указанием хоста",{"type":724,"value":774},{"type":719,"tag":767,"props":804,"children":806},{"className":805},[],[807],{"type":724,"value":808},"ответ сервера и загрузка ресурсов",{"type":724,"value":810},".",{"data":812,"body":813},{},{"type":716,"children":814},[815],{"type":719,"tag":720,"props":816,"children":817},{},[818,824],{"type":719,"tag":819,"props":820,"children":821},"strong",{},[822],{"type":724,"value":823},"Правильный ответ: 2",{"type":724,"value":825}," - Браузер преобразует домен в сетевой адрес через DNS (получая, например, A/AAAA и иногда HTTPS/SVCB записи), выбирает подходящий IP и протокол, устанавливает соединение (TCP+TLS или QUIC), отправляет HTTP-запрос с нужным хостом и получает ответ от сервера, где и расположен сайт.",{"data":827,"body":828},{},{"type":716,"children":829},[830,841],{"type":719,"tag":720,"props":831,"children":832},{},[833,835,839],{"type":724,"value":834},"Домен сам по себе не содержит «сайт»; домен — это удобное имя, которое через DNS сопоставляется с данными (часто с IP-адресами), нужными для установления соединения.",{"type":719,"tag":836,"props":837,"children":838},"br",{},[],{"type":724,"value":840},"\nВ вебе «откуда брать сайт» сводится к тому, чтобы определить origin (схема + хост + порт) и найти сетевую точку назначения, способную отвечать именно для этого origin.",{"type":719,"tag":720,"props":842,"children":843},{},[844,846,849,851,857,859,865,867,873,875,881],{"type":724,"value":845},"DNS устроен как иерархическое пространство имён и набор ресурсных записей, которые запрашиваются у DNS-серверов.",{"type":719,"tag":836,"props":847,"children":848},{},[],{"type":724,"value":850},"\nНа практике браузер обычно получает IP через записи ",{"type":719,"tag":767,"props":852,"children":854},{"className":853},[],[855],{"type":724,"value":856},"A",{"type":724,"value":858}," (IPv4) и/или ",{"type":719,"tag":767,"props":860,"children":862},{"className":861},[],[863],{"type":724,"value":864},"AAAA",{"type":724,"value":866}," (IPv6), а в современных конфигурациях дополнительно может использовать записи ",{"type":719,"tag":767,"props":868,"children":870},{"className":869},[],[871],{"type":724,"value":872},"HTTPS",{"type":724,"value":874},"/",{"type":719,"tag":767,"props":876,"children":878},{"className":877},[],[879],{"type":724,"value":880},"SVCB",{"type":724,"value":882},", чтобы узнать параметры подключения заранее (например, предпочтительный протокол или альтернативную конечную точку).",{"data":884,"body":885},{},{"type":716,"children":886},[887],{"type":719,"tag":720,"props":888,"children":889},{},[890],{"type":724,"value":18},{"data":892,"body":893},{},{"type":716,"children":894},[895],{"type":719,"tag":720,"props":896,"children":897},{},[898,900,906,908,914,916,919,921,927,929,935,937,942,944,949],{"type":724,"value":899},"В адресной строке определяется, является ли введённое значение URL (например, ",{"type":719,"tag":767,"props":901,"children":903},{"className":902},[],[904],{"type":724,"value":905},"https://example.com/path",{"type":724,"value":907},") или только доменным именем (например, ",{"type":719,"tag":767,"props":909,"children":911},{"className":910},[],[912],{"type":724,"value":913},"example.com",{"type":724,"value":915},"), после чего формируется полный URL с схемой и путём по умолчанию.",{"type":719,"tag":836,"props":917,"children":918},{},[],{"type":724,"value":920},"\nЕсли схема — ",{"type":719,"tag":767,"props":922,"children":924},{"className":923},[],[925],{"type":724,"value":926},"http",{"type":724,"value":928}," или ",{"type":719,"tag":767,"props":930,"children":932},{"className":931},[],[933],{"type":724,"value":934},"https",{"type":724,"value":936},", то «кто имеет право отвечать» определяется компонентом authority (хост + опциональный порт), а порт по умолчанию — 80 для ",{"type":719,"tag":767,"props":938,"children":940},{"className":939},[],[941],{"type":724,"value":926},{"type":724,"value":943}," и 443 для ",{"type":719,"tag":767,"props":945,"children":947},{"className":946},[],[948],{"type":724,"value":934},{"type":724,"value":810},{"data":951,"body":952},{},{"type":716,"children":953},[954,990,995],{"type":719,"tag":720,"props":955,"children":956},{},[957,959,962,964,969,970,975,977,982,983,988],{"type":724,"value":958},"Запрашивается DNS у настроенного резолвера (часто системного), который рекурсивно получает ответ, проходя по делегированиям в иерархии DNS до авторитативных серверов зоны.",{"type":719,"tag":836,"props":960,"children":961},{},[],{"type":724,"value":963},"\nОбычно целевыми являются ",{"type":719,"tag":767,"props":965,"children":967},{"className":966},[],[968],{"type":724,"value":856},{"type":724,"value":874},{"type":719,"tag":767,"props":971,"children":973},{"className":972},[],[974],{"type":724,"value":864},{"type":724,"value":976},", но при наличии могут запрашиваться ",{"type":719,"tag":767,"props":978,"children":980},{"className":979},[],[981],{"type":724,"value":872},{"type":724,"value":874},{"type":719,"tag":767,"props":984,"children":986},{"className":985},[],[987],{"type":724,"value":880},{"type":724,"value":989},", которые «подсказывают» клиенту, как лучше подключаться к сервису и к каким альтернативным endpoint’ам.",{"type":719,"tag":720,"props":991,"children":992},{},[993],{"type":724,"value":994},"Схема (упрощённо):",{"type":719,"tag":996,"props":997,"children":1001},"pre",{"className":998,"code":1000,"language":724},[999],"language-text","Домен в адресной строке  \n→ DNS-кэш (браузер/ОС)  \n→ Резолвер (локальный/провайдера/DoH)  \n→ Root DNS → TLD DNS → Authoritative DNS  \n→ Ответ: A/AAAA (и, возможно, HTTPS/SVCB)  \n→ Выбор адреса и протокола  \n",[1002],{"type":719,"tag":767,"props":1003,"children":1005},{"__ignoreMap":1004},"",[1006],{"type":724,"value":1000},{"data":1008,"body":1009},{},{"type":716,"children":1010},[1011],{"type":719,"tag":720,"props":1012,"children":1013},{},[1014,1016,1019,1021,1026,1027,1032],{"type":724,"value":1015},"Если получено несколько адресов (IPv6 и IPv4, несколько IP), применяется стратегия параллельных попыток, чтобы снизить задержку при недоступности или «плохом» маршруте к одному из адресов (Happy Eyeballs).",{"type":719,"tag":836,"props":1017,"children":1018},{},[],{"type":724,"value":1020},"\nПри использовании ",{"type":719,"tag":767,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":724,"value":872},{"type":724,"value":874},{"type":719,"tag":767,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":724,"value":880},{"type":724,"value":1033}," записи могут заранее подсказать поддерживаемый протокол/порт и дать альтернативные варианты, чтобы подключение было быстрее и устойчивее.",{"data":1035,"body":1036},{},{"type":716,"children":1037},[1038],{"type":719,"tag":720,"props":1039,"children":1040},{},[1041,1043,1048,1050,1053],{"type":724,"value":1042},"Для ",{"type":719,"tag":767,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":724,"value":934},{"type":724,"value":1049}," устанавливается TLS поверх выбранного транспорта, после чего выполняется HTTP-обмен.",{"type":719,"tag":836,"props":1051,"children":1052},{},[],{"type":724,"value":1054},"\nОдин IP-адрес может обслуживать много доменов (виртуальный хостинг), поэтому в запросе указывается доменное имя (на уровне TLS через имя сервера и на уровне HTTP через заголовки/псевдозаголовки), и сервер по этому имени выбирает правильный сайт.",{"data":1056,"body":1057},{},{"type":716,"children":1058},[1059],{"type":719,"tag":720,"props":1060,"children":1061},{},[1062,1064,1070,1072,1075],{"type":724,"value":1063},"Отправляется запрос (часто ",{"type":719,"tag":767,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":724,"value":1069},"GET /",{"type":724,"value":1071},"), сервер возвращает HTML, затем браузер загружает связанные ресурсы (CSS, JS, изображения, шрифты) по URL-ам, которые снова проходят тот же цикл «URL → DNS (если нужно) → соединение → HTTP».",{"type":719,"tag":836,"props":1073,"children":1074},{},[],{"type":724,"value":1076},"\nЕсли сервер отвечает перенаправлением (например, 301/302), браузер повторяет процесс уже для нового URL.",{"data":1078,"body":1079},{},{"type":716,"children":1080},[1081],{"type":719,"tag":1082,"props":1083,"children":1084},"table",{},[1085,1109],{"type":719,"tag":1086,"props":1087,"children":1088},"thead",{},[1089],{"type":719,"tag":1090,"props":1091,"children":1092},"tr",{},[1093,1099,1104],{"type":719,"tag":1094,"props":1095,"children":1096},"th",{},[1097],{"type":724,"value":1098},"Запись DNS",{"type":719,"tag":1094,"props":1100,"children":1101},{},[1102],{"type":724,"value":1103},"Что даёт",{"type":719,"tag":1094,"props":1105,"children":1106},{},[1107],{"type":724,"value":1108},"Зачем нужно браузеру",{"type":719,"tag":1110,"props":1111,"children":1112},"tbody",{},[1113,1135,1156,1184],{"type":719,"tag":1090,"props":1114,"children":1115},{},[1116,1125,1130],{"type":719,"tag":1117,"props":1118,"children":1119},"td",{},[1120],{"type":719,"tag":767,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":724,"value":856},{"type":719,"tag":1117,"props":1126,"children":1127},{},[1128],{"type":724,"value":1129},"IPv4-адрес",{"type":719,"tag":1117,"props":1131,"children":1132},{},[1133],{"type":724,"value":1134},"Подключение к серверу по IPv4",{"type":719,"tag":1090,"props":1136,"children":1137},{},[1138,1146,1151],{"type":719,"tag":1117,"props":1139,"children":1140},{},[1141],{"type":719,"tag":767,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":724,"value":864},{"type":719,"tag":1117,"props":1147,"children":1148},{},[1149],{"type":724,"value":1150},"IPv6-адрес",{"type":719,"tag":1117,"props":1152,"children":1153},{},[1154],{"type":724,"value":1155},"Подключение к серверу по IPv6",{"type":719,"tag":1090,"props":1157,"children":1158},{},[1159,1168,1173],{"type":719,"tag":1117,"props":1160,"children":1161},{},[1162],{"type":719,"tag":767,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":724,"value":1167},"CNAME",{"type":719,"tag":1117,"props":1169,"children":1170},{},[1171],{"type":724,"value":1172},"Алиас на другое имя",{"type":719,"tag":1117,"props":1174,"children":1175},{},[1176,1178],{"type":724,"value":1177},"Переадресация имени на другое имя перед поиском ",{"type":719,"tag":767,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":724,"value":1183},"A/AAAA",{"type":719,"tag":1090,"props":1185,"children":1186},{},[1187,1202,1207],{"type":719,"tag":1117,"props":1188,"children":1189},{},[1190,1195,1197],{"type":719,"tag":767,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":724,"value":872},{"type":724,"value":1196}," / ",{"type":719,"tag":767,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":724,"value":880},{"type":719,"tag":1117,"props":1203,"children":1204},{},[1205],{"type":724,"value":1206},"Параметры и альтернативные endpoint’ы",{"type":719,"tag":1117,"props":1208,"children":1209},{},[1210],{"type":724,"value":1211},"Быстрее и точнее выбрать, как подключаться (протокол/порт/варианты)",{"data":1213,"body":1214},{},{"type":716,"children":1215},[1216],{"type":719,"tag":720,"props":1217,"children":1218},{},[1219,1224,1225,1230],{"type":719,"tag":767,"props":1220,"children":1222},{"className":1221},[],[1223],{"type":724,"value":872},{"type":724,"value":874},{"type":719,"tag":767,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":724,"value":880},{"type":724,"value":1231}," — современный способ передавать «инструкции доступа к сервису» через DNS (актуально для оптимизации подключения в новых конфигурациях).",{"data":1233,"body":1234},{},{"type":716,"children":1235},[1236,1241,1277,1282,1291],{"type":719,"tag":720,"props":1237,"children":1238},{},[1239],{"type":724,"value":1240},"Примеры команд (в зависимости от ОС и наличия утилит):",{"type":719,"tag":720,"props":1242,"children":1243},{},[1244,1250,1253,1259,1262,1268,1271],{"type":719,"tag":767,"props":1245,"children":1247},{"className":1246},[],[1248],{"type":724,"value":1249},"nslookup example.com",{"type":719,"tag":836,"props":1251,"children":1252},{},[],{"type":719,"tag":767,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":724,"value":1258},"dig example.com A",{"type":719,"tag":836,"props":1260,"children":1261},{},[],{"type":719,"tag":767,"props":1263,"children":1265},{"className":1264},[],[1266],{"type":724,"value":1267},"dig example.com AAAA",{"type":719,"tag":836,"props":1269,"children":1270},{},[],{"type":719,"tag":767,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":724,"value":1276},"dig example.com HTTPS",{"type":719,"tag":720,"props":1278,"children":1279},{},[1280],{"type":724,"value":1281},"Пример типового вывода (формат сокращённый и условный):",{"type":719,"tag":996,"props":1283,"children":1286},{"className":1284,"code":1285,"language":724},[999],"example.com.    300 IN A     93.184.216.34\nexample.com.    300 IN AAAA  2606:2800:220:1:248:1893:25c8:1946\nexample.com.    300 IN HTTPS 1 . alpn=\"h2,h3\" port=443\n",[1287],{"type":719,"tag":767,"props":1288,"children":1289},{"__ignoreMap":1004},[1290],{"type":724,"value":1285},{"type":719,"tag":720,"props":1292,"children":1293},{},[1294,1296,1301,1303,1308],{"type":724,"value":1295},"Здесь ",{"type":719,"tag":767,"props":1297,"children":1299},{"className":1298},[],[1300],{"type":724,"value":1183},{"type":724,"value":1302}," дают адреса, а ",{"type":719,"tag":767,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":724,"value":872},{"type":724,"value":1309}," сообщает, что сервис ожидается на 443 и может поддерживать несколько протоколов приложения (через идею согласования протокола).",{"data":1311,"body":1312},{},{"type":716,"children":1313},[1314,1319,1328],{"type":719,"tag":720,"props":1315,"children":1316},{},[1317],{"type":724,"value":1318},"Упрощённый псевдокод процесса (не конкретный браузер, а учебная модель):",{"type":719,"tag":996,"props":1320,"children":1323},{"className":1321,"code":1322,"language":724},[999],"input = \"example.com\"\n\nurl = normalize_to_url(input)\nscheme = url.scheme_default_if_missing()\nhost = url.host\nport = default_port_for_scheme_if_missing(scheme)\n\ndns_result = resolve_dns(host)\nsvc = try_resolve_https_or_svcb(host)  // если поддерживается и есть смысл\n\nendpoint_list = build_endpoints(dns_result, svc, scheme, port)\n\nip_candidates = select_ips_with_happy_eyeballs(endpoint_list)  // параллельные попытки\n\nconn = connect(ip_candidates)  // TCP+TLS или QUIC, зависит от выбранного варианта\nresponse = http_request(conn, host, url.path, scheme)\n\nrender(response)\n",[1324],{"type":719,"tag":767,"props":1325,"children":1326},{"__ignoreMap":1004},[1327],{"type":724,"value":1322},{"type":719,"tag":720,"props":1329,"children":1330},{},[1331],{"type":724,"value":1332},"В этом алгоритме ключевая идея: домен превращается в «куда подключаться» через DNS, а «какой именно сайт» на одном IP различается по имени хоста на уровнях TLS/HTTP.",{"data":1334,"body":1335},{},{"type":716,"children":1336},[1337],{"type":719,"tag":720,"props":1338,"children":1339},{},[1340],{"type":724,"value":88},1775735660387]