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