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