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