[{"data":1,"prerenderedAt":1070},["ShallowReactive",2],{"$fSjwmNqi1MzT9tJp7lnw4NV6ywE5B8Mbi8x-wjAhZ0O8":3,"$f-KhKwB8J0md5Q3U1oyqNCQbHxVpirjaanlJWCGo_ht4":91,"$fkVWEWXZHbLy86BhC78gDVDJ_00TY4k_DsdZD3Mz6ZO0":94,"$fqGwjmVbyPxmA5lnsLz9nF3m-ncS8WzLIlTsTA85cuZA":99,"$fVMSX_HWVzVkzv-u5ATHiOgClblPaIGZfXUn_Cq8LKn4":446,"$fw0tI3d-iV2W3zZtbRjyPNNRSgXGobrmwsMU7a1fynls":667,"mdc--4o2e98-key":687,"mdc--3bp3qj-key":748,"mdc--b5gyss-key":756,"mdc--n6hg4c-key":795,"mdc--bsojhx-key":841,"mdc-dle6k4-key":850,"mdc--5qbyuy-key":1054},{"content":4,"livecodingContent":44,"type":80,"pageMeta":81},[5,9,13,16,20,23,27,30,34,38,41],{"id":6,"value":7,"isTypeH1":8},"1990","Найти в массиве неповторяющиеся числа",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4632","Теория по задаче","theory-for-the-task",{"id":14,"value":15,"isTypeParagraph":8},"10671","Задача относится к классу задач на “частоты” (сколько раз встречается каждое значение). Правильная формулировка: необходимо вернуть те элементы массива, которые имеют частоту 1.",{"id":17,"value":18,"anchor":19,"isTypeH3":8},"4684","Шаг 1. Построение частотного словаря","step-1-build-frequency-map",{"id":21,"value":22,"isTypeParagraph":8},"10672","Частотный словарь — это структура вида “значение → количество”. На практике для JavaScript удобны две формы: `Map` и обычный объект (словарь).\n\nПошаговая иллюстрация для `[1, 2, 3, 4, 1, 2]`:\n```\nВход: [1, 2, 3, 4, 1, 2]\n\nПодсчёт:\n- встретилось 1 -> count(1) = 1\n- встретилось 2 -> count(2) = 1\n- встретилось 3 -> count(3) = 1\n- встретилось 4 -> count(4) = 1\n- встретилось 1 -> count(1) = 2\n- встретилось 2 -> count(2) = 2\n\nИтог:\n1 -> 2\n2 -> 2\n3 -> 1\n4 -> 1\n```",{"id":24,"value":25,"anchor":26,"isTypeH3":8},"4685","Шаг 2. Отбор значений с частотой 1","step-2-select-values-with-frequency-1",{"id":28,"value":29,"isTypeParagraph":8},"10673","После подсчёта выполняется проход по исходному массиву и проверка: если `count(value) === 1`, элемент добавляется в результат. Это удобно делать через `filter()`, потому что он возвращает новый массив из тех элементов, которые прошли проверку.\n\nЭквивалентная запись без `filter()` (то же самое, но “вручную”):\n```\nfunction getUniqueNums(nums) {\n  const counts = new Map();\n  for (const n of nums) counts.set(n, (counts.get(n) ?? 0) + 1);\n\n  const result = [];\n  for (const n of nums) {\n    if (counts.get(n) === 1) result.push(n);\n  }\n  return result;\n}\n```",{"id":31,"description":32,"titleAlert":33,"isTypeAlertInfo":8},"713","Два прохода по массиву (подсчёт, затем отбор) — нормальная и часто оптимальная схема: сначала “собираются факты” (частоты), затем применяется правило отбора.\n",null,{"id":35,"value":36,"anchor":37,"isTypeH2":8},"4633","Сложность и сравнение подходов","complexity-and-approach-comparison",{"id":39,"value":40,"isTypeParagraph":8},"10674","Обозначения:\n- `n` — длина массива.\n- `k` — количество различных значений в массиве.\n\nТаблица сравнения:\n\n| Подход | Идея | Время | Память | Порядок как в исходном |\n|---|---|---:|---:|---|\n| Map + подсчёт + filter | Частоты, затем `=== 1` | O(n) | O(k) | Да |\n| Object + подсчёт + filter | Частоты в объекте | O(n) | O(k) | Да |\n| indexOf + lastIndexOf | Первый индекс = последний | O(n²) | O(1) | Да |\n\nПрактический вывод:\n- Если массив может быть большим, обычно выбирается вариант с `Map` (или объектом при гарантии “только числа”).\n- Вариант с `indexOf/lastIndexOf` подходит как учебный и для небольших массивов.",{"id":42,"value":43,"isTypeParagraph":8},"10675","Кратко: неповторяющиеся элементы — это элементы с частотой 1; наиболее устойчивое решение строится через подсчёт частот (обычно `Map`) и последующую фильтрацию исходного массива, что даёт линейную сложность и сохраняет порядок.",{"id":45,"functionTestData":46,"functionName":76,"functionTemplateCode":77,"solution":78,"description":79},"431",[47,55,61,68,72],[48,54],[49],[50,51,52,53,50,51],1,2,3,4,[52,53],[56,60],[57],[51,58,51,59,52,52],56,46,[58,59],[62,67],[63],[51,64,51,65,52,52,66,53,53],16,6,5,[64,65,66],[69,71],[70],[51],[51],[73,75],[74],[51,52,52,51],[],"getUniqueNums","function getUniqueNums(arr) {\n    // ваш код здесь\n}","**Вариант 1** — Map: подсчёт + filter (рекомендуемый)\nПодход: сначала подсчитывается, сколько раз встретилось каждое число, затем возвращаются только те элементы исходного массива, для которых счётчик равен 1.\n\n```\nfunction getUniqueNums(nums) {\n  const counts = new Map();\n\n  for (const n of nums) {\n    counts.set(n, (counts.get(n) ?? 0) + 1);\n  }\n\n  return nums.filter((n) => counts.get(n) === 1);\n}\n```\n\nПочему это удобно:\n- Время работы линейное: массив проходится ограниченное число раз.\n- Итоговый порядок сохраняется, потому что фильтрация идёт по исходному массиву.\n\n**Вариант 2** — Object: подсчёт частот (быстро, но с оговорками)\nПодход похож на `Map`, но ключи объекта являются строками, поэтому происходит преобразование ключа в строку.\n\n```\nfunction getUniqueNums(nums) {\n  const counts = Object.create(null);\n\n  for (const n of nums) {\n    const key = String(n);\n    counts[key] = (counts[key] ?? 0) + 1;\n  }\n\n  return nums.filter((n) => counts[String(n)] === 1);\n}\n```\n\nЕсли позже входные данные перестанут быть строго числами (например, появятся строки, `null`, объекты), вариант с объектом может привести к неожиданным совпадениям ключей из‑за строкового преобразования; в таких ситуациях обычно устойчивее применять `Map`.\n\n**Вариант 3** — filter + indexOf/lastIndexOf (просто, но медленно)\nИдея: число встречается ровно один раз, если его первая позиция в массиве равна последней позиции.\n\n```\nfunction getUniqueNums(nums) {\n  return nums.filter((n) => nums.indexOf(n) === nums.lastIndexOf(n));\n}\n```\n\nТакой вариант часто имеет квадратичную сложность на больших массивах, потому что для каждого элемента выполняется поиск по массиву.","Дан массив:\n\n```\nconst arr = [1,2,3,4,1,2];\n```\n\nНеобходимо написать функцию `getUniqueNums`, которая аргументом принимает массив чисел и возвращает массив неповторяющихся чисел:\n\n```\ngetUniqueNums(arr)  // [3,4]\n```\n\nПримеры:\n\n```\n[1,2,3,4,1,2] --> [3,4]\n[2,56,2,46,3,3] --> [56,46]\n[2,16,2,6,3,3,5,4,4] --> [16,6,5]\n[2] --> [2]\n[2,3,3,2] --> []\n```","livecoding",{"title":7,"description":82,"ogTitle":7,"ogDescription":83,"ogImageUrl":84,"canonical":33,"ogLocale":85,"ogSiteName":86,"ogImageType":87,"ogImageWidth":88,"ogImageHeight":89,"ogType":90,"ogUrl":33},"Дан массив: const arr = [1,2,3,4,1,2];\nНеобходимо найти в массиве неповторяющиеся числа","Дан массив: const arr = [1,2,3,4,1,2]. Необходимо найти в массиве неповторяющиеся числа","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":92,"siteUrl":93},"GOOD WEB JOB!","https://goodwebjob.ru",[95],{"label":96,"slug":97,"to":98},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":100,"navigationSublist":109},[101,105],{"path":98,"isActive":102,"name":103,"icon":104,"isNavbarMobileDisabled":8},false,"С чего начать?","material-symbols:visibility-outline-rounded",{"path":106,"isActive":8,"name":107,"icon":108,"isNavbarMobileDisabled":102},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[110,119,146,158,164,305,329,338,344,407,428,434],{"title":111,"list":112,"isOpened":102},"Bash",[113,116],{"name":114,"path":115,"isActive":102},"Дан фрагмент 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":117,"path":118,"isActive":102},"Дан фрагмент 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":120,"list":121,"isOpened":102},"CSS",[122,125,128,131,134,137,140,143],{"name":123,"path":124,"isActive":102},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":126,"path":127,"isActive":102},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":129,"path":130,"isActive":102},"Есть шаблон вложенного 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":132,"path":133,"isActive":102},"Есть шаблон вложенного 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":135,"path":136,"isActive":102},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":138,"path":139,"isActive":102},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":141,"path":142,"isActive":102},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":144,"path":145,"isActive":102},"Есть 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":147,"list":148,"isOpened":102},"Git",[149,152,155],{"name":150,"path":151,"isActive":102},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/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":153,"path":154,"isActive":102},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":156,"path":157,"isActive":102},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":159,"list":160,"isOpened":102},"HTML",[161],{"name":162,"path":163,"isActive":102},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":165,"list":166,"isOpened":102},"JavaScript",[167,170,173,176,179,182,185,188,191,194,197,200,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281,284,287,290,293,296,299,302],{"name":168,"path":169,"isActive":102},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":171,"path":172,"isActive":102},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":174,"path":175,"isActive":102},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":177,"path":178,"isActive":102},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":180,"path":181,"isActive":102},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":183,"path":184,"isActive":102},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":186,"path":187,"isActive":102},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение 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":189,"path":190,"isActive":102},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":192,"path":193,"isActive":102},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":195,"path":196,"isActive":102},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":198,"path":199,"isActive":102},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":201,"path":202,"isActive":102},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":204,"path":205,"isActive":102},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":207,"path":208,"isActive":102},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":210,"path":211,"isActive":102},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":213,"path":214,"isActive":102},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":216,"path":217,"isActive":102},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":219,"path":220,"isActive":102},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":222,"path":223,"isActive":102},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":225,"path":226,"isActive":102},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":228,"path":229,"isActive":102},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":231,"path":232,"isActive":102},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":234,"path":235,"isActive":102},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":237,"path":238,"isActive":102},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":240,"path":241,"isActive":102},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":243,"path":244,"isActive":102},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":246,"path":247,"isActive":102},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":249,"path":250,"isActive":102},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":252,"path":253,"isActive":102},"Вернуть массив от 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":255,"path":256,"isActive":102},"Дана строка: '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":258,"path":259,"isActive":102},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":261,"path":262,"isActive":102},"Для каждого вложенного объекта нужно добавить свойство 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":264,"path":265,"isActive":102},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":267,"path":268,"isActive":102},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":270,"path":271,"isActive":102},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":273,"path":274,"isActive":102},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":276,"path":277,"isActive":102}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":279,"path":280,"isActive":102},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":282,"path":283,"isActive":102},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":285,"path":286,"isActive":102},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":288,"path":289,"isActive":102},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":291,"path":292,"isActive":102},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":294,"path":295,"isActive":102},"Реализовать функцию, принимающую аргументы \"*\", \"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":297,"path":298,"isActive":102},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":300,"path":301,"isActive":102},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":303,"path":304,"isActive":102},"Числа от 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":306,"list":307,"isOpened":102},"React",[308,311,314,317,320,323,326],{"name":309,"path":310,"isActive":102},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":312,"path":313,"isActive":102},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":315,"path":316,"isActive":102},"Если убрать в 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":318,"path":319,"isActive":102},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":321,"path":322,"isActive":102},"Есть код, в котором список и кнопка. Что в реальном 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":324,"path":325,"isActive":102},"Зачем нужен 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":327,"path":328,"isActive":102},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/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":330,"list":331,"isOpened":102},"Алгоритмы",[332,335],{"name":333,"path":334,"isActive":102},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":336,"path":337,"isActive":102},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":339,"list":340,"isOpened":102},"Дебаггинг",[341],{"name":342,"path":343,"isActive":102},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/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":345,"list":346,"isOpened":102},"Компьютерные сети",[347,350,353,356,359,362,365,368,371,374,377,380,383,386,389,392,395,398,401,404],{"name":348,"path":349,"isActive":102},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":351,"path":352,"isActive":102},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":354,"path":355,"isActive":102},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":357,"path":358,"isActive":102},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":360,"path":361,"isActive":102},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":363,"path":364,"isActive":102},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":366,"path":367,"isActive":102},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":369,"path":370,"isActive":102},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":372,"path":373,"isActive":102},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":375,"path":376,"isActive":102},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":378,"path":379,"isActive":102},"Чем отличаются 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":381,"path":382,"isActive":102},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/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":384,"path":385,"isActive":102},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":387,"path":388,"isActive":102},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":390,"path":391,"isActive":102},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":393,"path":394,"isActive":102},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/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":396,"path":397,"isActive":102},"Всё, что идет по HTTPS – оно защищено?","/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":399,"path":400,"isActive":102},"Все данные зашифрованы, используется 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":402,"path":403,"isActive":102},"Есть веб-приложение. Помимо 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":405,"path":406,"isActive":102},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":408,"list":409,"isOpened":102},"Отрисовка в браузере",[410,413,416,419,422,425],{"name":411,"path":412,"isActive":102},"Что происходит, когда 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":414,"path":415,"isActive":102},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":417,"path":418,"isActive":102},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":420,"path":421,"isActive":102},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":423,"path":424,"isActive":102},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":426,"path":427,"isActive":102},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":429,"list":430,"isOpened":102},"Ревью кода",[431],{"name":432,"path":433,"isActive":102},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":435,"list":436,"isOpened":102},"Теория вероятности",[437,440,443],{"name":438,"path":439,"isActive":102},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/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":441,"path":442,"isActive":102},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/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":444,"path":445,"isActive":102},"Как гарантированно найти лёгкую фальшивую монету среди 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":447},[448,451,453,455,457,460,463,465,467,469,471,473,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,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,608,610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656,657,659,661,663,665],{"name":449,"value":450},"Теоретические задания","theoretical-tasks",{"name":204,"value":452},"what-this-code-will-return-typeof-function",{"name":103,"value":454},"where-to-begin",{"name":171,"value":456},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":458,"value":459},"Backend","backend",{"name":461,"value":462},"Frontend","frontend",{"name":168,"value":464},"prototype-what-logical-values-will-be-received-in-console-log",{"name":285,"value":466},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":276,"value":468},"find-non-repeating-numbers-in-an-array",{"name":249,"value":470},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":255,"value":472},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":474,"value":475},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":261,"value":477},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":177,"value":479},"what-value-will-the-console-output-with-object-property",{"name":180,"value":481},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":252,"value":483},"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":282,"value":485},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":288,"value":487},"determines-whether-a-word-is-a-palindrome",{"name":267,"value":489},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":294,"value":491},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":258,"value":493},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":264,"value":495},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":270,"value":497},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":303,"value":499},"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":273,"value":501},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":279,"value":503},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":183,"value":505},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":186,"value":507},"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":198,"value":509},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":201,"value":511},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":300,"value":513},"unifying-values-in-an-array",{"name":291,"value":515},"flattening-the-array",{"name":189,"value":517},"what-will-the-book-get-upper-name-method-return",{"name":297,"value":519},"string-compression",{"name":195,"value":521},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":207,"value":523},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":348,"value":525},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":354,"value":527},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":357,"value":529},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":360,"value":531},"key-differences-between-tcp-and-udp",{"name":363,"value":533},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":366,"value":535},"what-is-http-and-what-does-it-consist-of",{"name":369,"value":537},"what-are-http-headers-and-why-do-we-need-them",{"name":372,"value":539},"what-are-http-parameters",{"name":375,"value":541},"where-is-the-html-code-located-in-the-http-response-structure",{"name":162,"value":543},"what-is-html",{"name":378,"value":545},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":381,"value":547},"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":384,"value":549},"what-is-a-cookie",{"name":387,"value":551},"who-initiates-the-cookie-recording-in-the-browser",{"name":390,"value":553},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":555,"value":80},"Лайвкодинг",{"name":174,"value":557},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":396,"value":559},"is-everything-that-goes-through-https-secure",{"name":399,"value":561},"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":402,"value":563},"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":414,"value":565},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":411,"value":567},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":417,"value":569},"what-is-blocking-the-page-rendering-in-the-browser",{"name":420,"value":571},"what-is-dom-in-a-browser-what-is-cssom",{"name":423,"value":573},"what-are-nodes-in-the-dom",{"name":426,"value":575},"what-does-cssom-consist-of",{"name":123,"value":577},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":126,"value":579},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":129,"value":581},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":132,"value":583},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":135,"value":585},"there-is-an-html-code-will-font-weight-affect-span",{"name":138,"value":587},"what-are-the-differences-between-flexbox-and-grid",{"name":141,"value":589},"do-flexbox-and-grid-replace-each-other",{"name":144,"value":591},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":107,"value":593},"tasks",{"name":210,"value":595},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":213,"value":597},"what-is-this-in-javascript",{"name":216,"value":599},"what-is-an-event-loop-and-how-does-it-work",{"name":219,"value":601},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":222,"value":603},"what-does-the-typeof-operator-show-in-javascript",{"name":225,"value":605},"what-types-of-data-exist-in-javascript",{"name":228,"value":607},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":231,"value":609},"what-will-typeof-return-for-an-array",{"name":234,"value":611},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":237,"value":613},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":240,"value":615},"what-does-typeof-return-for-new-set-in-javascript",{"name":309,"value":617},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":315,"value":619},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":318,"value":621},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":321,"value":623},"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":324,"value":625},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":342,"value":627},"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":150,"value":629},"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":153,"value":631},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":156,"value":633},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":432,"value":635},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":114,"value":637},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":117,"value":639},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":333,"value":641},"what-is-algorithmic-complexity",{"name":336,"value":643},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":243,"value":645},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":405,"value":647},"how-can-a-user-be-authorized-on-a-website",{"name":246,"value":649},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":438,"value":651},"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":441,"value":653},"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":444,"value":655},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":96,"value":97},{"name":393,"value":658},"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":351,"value":660},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":192,"value":662},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":312,"value":664},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":327,"value":666},"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":668,"copyright":671,"reportError":672,"socialNetwork":674},{"link":669,"title":670},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":673,"link":669},"Сообщить об ошибке",{"label":675,"socialNetworkList":676},"Мы в соцсетях:",[677,680,683],{"icon":33,"link":678,"title":679},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":681,"link":669,"title":682},"ic:baseline-telegram","Telegram",{"icon":684,"link":685,"title":686},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":688,"body":689},{},{"type":690,"children":691},"root",[692,700,713,725,734,739],{"type":693,"tag":694,"props":695,"children":696},"element","p",{},[697],{"type":698,"value":699},"text","Дан массив:",{"type":693,"tag":701,"props":702,"children":706},"pre",{"className":703,"code":705,"language":698},[704],"language-text","const arr = [1,2,3,4,1,2];\n",[707],{"type":693,"tag":708,"props":709,"children":711},"code",{"__ignoreMap":710},"",[712],{"type":698,"value":705},{"type":693,"tag":694,"props":714,"children":715},{},[716,718,723],{"type":698,"value":717},"Необходимо написать функцию ",{"type":693,"tag":708,"props":719,"children":721},{"className":720},[],[722],{"type":698,"value":76},{"type":698,"value":724},", которая аргументом принимает массив чисел и возвращает массив неповторяющихся чисел:",{"type":693,"tag":701,"props":726,"children":729},{"className":727,"code":728,"language":698},[704],"getUniqueNums(arr)  // [3,4]\n",[730],{"type":693,"tag":708,"props":731,"children":732},{"__ignoreMap":710},[733],{"type":698,"value":728},{"type":693,"tag":694,"props":735,"children":736},{},[737],{"type":698,"value":738},"Примеры:",{"type":693,"tag":701,"props":740,"children":743},{"className":741,"code":742,"language":698},[704],"[1,2,3,4,1,2] --> [3,4]\n[2,56,2,46,3,3] --> [56,46]\n[2,16,2,6,3,3,5,4,4] --> [16,6,5]\n[2] --> [2]\n[2,3,3,2] --> []\n",[744],{"type":693,"tag":708,"props":745,"children":746},{"__ignoreMap":710},[747],{"type":698,"value":742},{"data":749,"body":750},{},{"type":690,"children":751},[752],{"type":693,"tag":694,"props":753,"children":754},{},[755],{"type":698,"value":15},{"data":757,"body":758},{},{"type":690,"children":759},[760,773,786],{"type":693,"tag":694,"props":761,"children":762},{},[763,765,771],{"type":698,"value":764},"Частотный словарь — это структура вида “значение → количество”. На практике для JavaScript удобны две формы: ",{"type":693,"tag":708,"props":766,"children":768},{"className":767},[],[769],{"type":698,"value":770},"Map",{"type":698,"value":772}," и обычный объект (словарь).",{"type":693,"tag":694,"props":774,"children":775},{},[776,778,784],{"type":698,"value":777},"Пошаговая иллюстрация для ",{"type":693,"tag":708,"props":779,"children":781},{"className":780},[],[782],{"type":698,"value":783},"[1, 2, 3, 4, 1, 2]",{"type":698,"value":785},":",{"type":693,"tag":701,"props":787,"children":790},{"className":788,"code":789,"language":698},[704],"Вход: [1, 2, 3, 4, 1, 2]\n\nПодсчёт:\n- встретилось 1 -> count(1) = 1\n- встретилось 2 -> count(2) = 1\n- встретилось 3 -> count(3) = 1\n- встретилось 4 -> count(4) = 1\n- встретилось 1 -> count(1) = 2\n- встретилось 2 -> count(2) = 2\n\nИтог:\n1 -> 2\n2 -> 2\n3 -> 1\n4 -> 1\n",[791],{"type":693,"tag":708,"props":792,"children":793},{"__ignoreMap":710},[794],{"type":698,"value":789},{"data":796,"body":797},{},{"type":690,"children":798},[799,820,832],{"type":693,"tag":694,"props":800,"children":801},{},[802,804,810,812,818],{"type":698,"value":803},"После подсчёта выполняется проход по исходному массиву и проверка: если ",{"type":693,"tag":708,"props":805,"children":807},{"className":806},[],[808],{"type":698,"value":809},"count(value) === 1",{"type":698,"value":811},", элемент добавляется в результат. Это удобно делать через ",{"type":693,"tag":708,"props":813,"children":815},{"className":814},[],[816],{"type":698,"value":817},"filter()",{"type":698,"value":819},", потому что он возвращает новый массив из тех элементов, которые прошли проверку.",{"type":693,"tag":694,"props":821,"children":822},{},[823,825,830],{"type":698,"value":824},"Эквивалентная запись без ",{"type":693,"tag":708,"props":826,"children":828},{"className":827},[],[829],{"type":698,"value":817},{"type":698,"value":831}," (то же самое, но “вручную”):",{"type":693,"tag":701,"props":833,"children":836},{"className":834,"code":835,"language":698},[704],"function getUniqueNums(nums) {\n  const counts = new Map();\n  for (const n of nums) counts.set(n, (counts.get(n) ?? 0) + 1);\n\n  const result = [];\n  for (const n of nums) {\n    if (counts.get(n) === 1) result.push(n);\n  }\n  return result;\n}\n",[837],{"type":693,"tag":708,"props":838,"children":839},{"__ignoreMap":710},[840],{"type":698,"value":835},{"data":842,"body":843},{},{"type":690,"children":844},[845],{"type":693,"tag":694,"props":846,"children":847},{},[848],{"type":698,"value":849},"Два прохода по массиву (подсчёт, затем отбор) — нормальная и часто оптимальная схема: сначала “собираются факты” (частоты), затем применяется правило отбора.",{"data":851,"body":852},{},{"type":690,"children":853},[854,859,886,891,1021,1026],{"type":693,"tag":694,"props":855,"children":856},{},[857],{"type":698,"value":858},"Обозначения:",{"type":693,"tag":860,"props":861,"children":862},"ul",{},[863,875],{"type":693,"tag":864,"props":865,"children":866},"li",{},[867,873],{"type":693,"tag":708,"props":868,"children":870},{"className":869},[],[871],{"type":698,"value":872},"n",{"type":698,"value":874}," — длина массива.",{"type":693,"tag":864,"props":876,"children":877},{},[878,884],{"type":693,"tag":708,"props":879,"children":881},{"className":880},[],[882],{"type":698,"value":883},"k",{"type":698,"value":885}," — количество различных значений в массиве.",{"type":693,"tag":694,"props":887,"children":888},{},[889],{"type":698,"value":890},"Таблица сравнения:",{"type":693,"tag":892,"props":893,"children":894},"table",{},[895,930],{"type":693,"tag":896,"props":897,"children":898},"thead",{},[899],{"type":693,"tag":900,"props":901,"children":902},"tr",{},[903,909,914,920,925],{"type":693,"tag":904,"props":905,"children":906},"th",{},[907],{"type":698,"value":908},"Подход",{"type":693,"tag":904,"props":910,"children":911},{},[912],{"type":698,"value":913},"Идея",{"type":693,"tag":904,"props":915,"children":917},{"align":916},"right",[918],{"type":698,"value":919},"Время",{"type":693,"tag":904,"props":921,"children":922},{"align":916},[923],{"type":698,"value":924},"Память",{"type":693,"tag":904,"props":926,"children":927},{},[928],{"type":698,"value":929},"Порядок как в исходном",{"type":693,"tag":931,"props":932,"children":933},"tbody",{},[934,969,994],{"type":693,"tag":900,"props":935,"children":936},{},[937,943,954,959,964],{"type":693,"tag":938,"props":939,"children":940},"td",{},[941],{"type":698,"value":942},"Map + подсчёт + filter",{"type":693,"tag":938,"props":944,"children":945},{},[946,948],{"type":698,"value":947},"Частоты, затем ",{"type":693,"tag":708,"props":949,"children":951},{"className":950},[],[952],{"type":698,"value":953},"=== 1",{"type":693,"tag":938,"props":955,"children":956},{"align":916},[957],{"type":698,"value":958},"O(n)",{"type":693,"tag":938,"props":960,"children":961},{"align":916},[962],{"type":698,"value":963},"O(k)",{"type":693,"tag":938,"props":965,"children":966},{},[967],{"type":698,"value":968},"Да",{"type":693,"tag":900,"props":970,"children":971},{},[972,977,982,986,990],{"type":693,"tag":938,"props":973,"children":974},{},[975],{"type":698,"value":976},"Object + подсчёт + filter",{"type":693,"tag":938,"props":978,"children":979},{},[980],{"type":698,"value":981},"Частоты в объекте",{"type":693,"tag":938,"props":983,"children":984},{"align":916},[985],{"type":698,"value":958},{"type":693,"tag":938,"props":987,"children":988},{"align":916},[989],{"type":698,"value":963},{"type":693,"tag":938,"props":991,"children":992},{},[993],{"type":698,"value":968},{"type":693,"tag":900,"props":995,"children":996},{},[997,1002,1007,1012,1017],{"type":693,"tag":938,"props":998,"children":999},{},[1000],{"type":698,"value":1001},"indexOf + lastIndexOf",{"type":693,"tag":938,"props":1003,"children":1004},{},[1005],{"type":698,"value":1006},"Первый индекс = последний",{"type":693,"tag":938,"props":1008,"children":1009},{"align":916},[1010],{"type":698,"value":1011},"O(n²)",{"type":693,"tag":938,"props":1013,"children":1014},{"align":916},[1015],{"type":698,"value":1016},"O(1)",{"type":693,"tag":938,"props":1018,"children":1019},{},[1020],{"type":698,"value":968},{"type":693,"tag":694,"props":1022,"children":1023},{},[1024],{"type":698,"value":1025},"Практический вывод:",{"type":693,"tag":860,"props":1027,"children":1028},{},[1029,1041],{"type":693,"tag":864,"props":1030,"children":1031},{},[1032,1034,1039],{"type":698,"value":1033},"Если массив может быть большим, обычно выбирается вариант с ",{"type":693,"tag":708,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":698,"value":770},{"type":698,"value":1040}," (или объектом при гарантии “только числа”).",{"type":693,"tag":864,"props":1042,"children":1043},{},[1044,1046,1052],{"type":698,"value":1045},"Вариант с ",{"type":693,"tag":708,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":698,"value":1051},"indexOf/lastIndexOf",{"type":698,"value":1053}," подходит как учебный и для небольших массивов.",{"data":1055,"body":1056},{},{"type":690,"children":1057},[1058],{"type":693,"tag":694,"props":1059,"children":1060},{},[1061,1063,1068],{"type":698,"value":1062},"Кратко: неповторяющиеся элементы — это элементы с частотой 1; наиболее устойчивое решение строится через подсчёт частот (обычно ",{"type":693,"tag":708,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":698,"value":770},{"type":698,"value":1069},") и последующую фильтрацию исходного массива, что даёт линейную сложность и сохраняет порядок.",1775575822696]