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