пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Поговорим сегодня про Cisco SVI – Switch VLAN Interface и о том, как его настроить. Для начала вспомним основы – для связи между оконечными устройствами в локальной сети (LAN) требуется коммутаторы, а для связи между различными локальными сетями требуется маршрутизатор. VLAN 2 уровня также создает новый широковещательный домен, то есть если отправить бродкаст в этой подсети – все устройства, подключенные к этому VLAN’у получат его (не важно, к какому или каким коммутаторам они подключены). Причем все устройства в этом VLAN’е могут общаться между собой без какого-либо устройства 3 уровня. Однако, если требуется связаться с другим VLAN’ом, то будет необходима маршрутизация в том или ином виде. Для сегментации и связи между VLAN’ами необходим либо маршрутизатор, либо коммутатор 3 уровня. Если мы используем роутер для сегментации, то это означает, что каждый интерфейс на маршрутизаторе являет собой отдельный широковещательный домен, то есть отдельный сегмент. В случае использования коммутатора 3 уровня, мы предварительно создаем несколько обычных VLAN’ов на коммутаторе, то есть несколько широковещательных доменов. Затем для каждого VLAN’а необходимо создать соответствующий интерфейс на коммутаторе, который будет отвечать за маршрутизацию. Этот интерфейс и есть SVI. Таким образом, порядок действий следующий – создается обычный VLAN, и затем назначается сетевой адрес на этом VLAN’е. Главная особенность в том, что SVI – виртуальный интерфейс, то есть все клиенты в данном VLAN’е будут использовать SVI как шлюз по умолчанию. По умолчанию, SVI создан на свитчах Cisco 3 уровня на VLAN 1 для целей управления устройством. Настройка Итак, схема ниже: А теперь мы покажем пример настройки двух SVI на коммутаторе 3 уровня, в соответствии со схемой выше. Сначала – VLAN 10: MERION-SW(config)#vlan 10 MERION-SW(config)#interface vlan 10 MERION-SW(config-if)#description WORKSTATIONS MERION-SW(config-if)#ip address 10.0.0.1 255.255.255.0 Мы создали VLAN, назначили сетевой адрес и поставили описание. Теперь повторим тоже самое для VLAN 20: MERION-SW(config)#vlan 20 MERION-SW(config)#interface vlan 20 MERION-SW(config-if)#description SERVERS MERION-SW(config-if)#ip address 10.0.1.1 255.255.255.0 Еще раз – зачем это все нужно? Вы спросите, зачем это нужно и почему бы не использовать вариант с физическими интерфейсами маршрутизатора или «роутер-на-палке» (router on a stick)? Использовать SVI проще и чаще всего дешевле – банально поэтому. Кроме того, использование SVI на коммутаторе 3 уровня также является более эффективным с точки зрения сходимости и управления – так как весь функционал 2 и 3 уровня управляется на одном коммутаторе 3 уровня.
img
Сегодня мы посмотрим на движок JavaScript V8 с точки зрения внутреннего устройства и разберемся, как именно выполняются программы JavaScript.  Справка Сетевые стандарты – это набор правил, которые реализует браузер. Они определяют и описывают составляющие Всемирной паутины. W3C – это международное сообщество, которое занимается разработкой открытых стандартов для Интернета. Они следят за тем, чтобы все придерживались одних и тех же рекомендаций, вследствие чего пропадет необходимость поддерживать десятки совершенно разных сред. Современный браузер – это достаточно мудрёное программное обеспечение с кодовой базой, которая состоит из десятка миллионов строк кода. И потому его, как правило, разбивают на несколько модулей, каждый из которых отвечает за разную логику.  Две самых важных части браузера – это движок JavaScript и механизм визуализации. Blink - это механизм визуализации, который отвечает за весь конвейер визуализации, в том числе DOM-деревья, стили, события, интеграцию с V8. Он анализирует DOM-дерево, задает стили и определяет наглядную геометрию всех элементов. Blink расцвечивает содержимое на вашем экране, постоянно отслеживая динамические изменения при помощи кадров анимации. Движок JS – это большая часть браузера, но мы еще эту тему не разбирали. Движок JavaScript 101 Движок JavaScript выполняет и компилирует код JavaScript в собственный машинный код. У каждого крупного браузера есть свой собственный разработанный движок JS: Google Chrome использует V8, Safari – JavaScriptCore, а Firefox – SpiderMonkey.  Мы будем работать исключительно с V8, так как он используется в Node.js и Electron, но при этом нужно понимать, что другие движки построены аналогично.  На каждом этапе будет присутствовать ссылка на код, ответственный за этот конкретный этап, чтобы у вас была возможность ознакомиться с кодовой базой и продолжить работу за рамками данной статьи.  Мы будем работать с зеркалом (зеркальным сервером) V8 на GitHub. Оно предоставляет удобный и хорошо знакомый пользовательский интерфейс для навигации по кодовой базе. Подготовка исходного кода Для начала V8 должен загрузить исходный код. Это можно сделать через сеть, из кэша или в этом вам может помочь квалифицированный работник.  После того, как вы получите код, нам необходимо изменить его так, чтобы его смог понять компилятор. Этот процесс называется синтаксическим анализом. В нем участвуют два компонента: сканер и сам синтаксический анализатор.  Сканер берет файл JS и конвертирует его в список известных токенов. Список всех токенов JS есть в файле  keywords.txt . Синтаксический анализатор берет этот список и формирует дерево абстрактного синтаксического анализа (AST – Abstract Syntax Tree). AST – это древовидное представление исходного кода. Каждый узел дерева – это конструкция, которая встречается в коде.  Давайте посмотрим на простой пример: function foo() {  let bar = 1;  return bar; } Этот код образует следующее дерево: Пример AST-дерева Вы можете выполнить этот код, выполнив обход дерева в ширину (корень, левая ветка, правая ветка): Определите функцию  foo . Объявите переменную  bar . Присвойте значение  1 переменной  bar . Верните переменную  bar как результат работы функции.  Вы также увидите  VariableProxy . Это элемент, который связывает абстрактную переменную с местом в памяти. Процесс разрешения  VariableProxy называется анализом области видимости переменных.   В нашем примере в качестве результата мы получим все  VariableProxy , которые указывают на одну и ту же переменную  bar . JIT-парадигма Согласно общим правилам, для того, чтобы выполнить код, язык программирования нужно преобразовать в машинный код. Есть несколько способов, как это можно сделать.  Самый распространённый способ преобразования кода – это компиляция перед выполнением. Работает это так же, как и звучит: код преобразуется в машинный непосредственно перед выполнением программы на этапе компиляции.  Такой подход используют многие языки программирования, например, C++, Java и другие. С другой стороны, у нас есть интерпретирование: каждая строка кода выполняется непосредственно по время выполнения программы. Такой подход, как правило, используют языки с динамической типизацией, например, JavaScript и Python, так как до выполнения точный тип данных неизвестен.  Так как компиляция перед выполнением позволяет оценить весь код сразу, она может обеспечить лучшую оптимизацию, а, соответственно, и получить более производительный код. Но при этом интерпретирование проще с точки зрения реализации, но, как правило, медленнее, чем вариант с компиляцией. Для того, чтобы быстрее и эффективнее преобразовывать код, написанный на динамических языках программирования, был разработан новый подход, который называется JIT-компиляцией (Just-In-Time-компиляция – компиляция «на лету»). Этот подход сочетает в себе лучшие качества интерпретирования и компиляции. V8 можнет использовать интерпретирование в качестве основного метода и находить функции, которые используются чаще, чем остальные, и компилировать их, используя информацию о типах из предыдущих запусков программы.  Однако существует вероятность того, что тип изменится. Вместе с тем, нам нужно деоптимизировать скомпилированный код и повторно запустить интерпретирование (после этого, когда мы получим обратную связь нового типа, мы можем снова скомпилировать функцию). Давайте изучим каждую составляющую JIT-компиляции подробнее.  Интерпретатор V8 использует интерпретатор, который называется Ignition. Прежде всего он берет дерево абстрактного синтаксического анализа и генерирует байт-код. У команд байт-кода также есть метаданные, такие как позиции исходной строки для дальнейшей отладки. Как правило, команды байт-кода согласуются с абстракциями JS.  А теперь возьмем наш пример и сгенерируем байт-код для него вручную: LdaSmi #1 // write 1 to accumulator {записывает 1 в аккумулятор} Star r0 // read to r0 (bar) from accumulator {считывает (bar) в r0 из аккумулятора} Ldar r0 // write from r0 (bar) to accumulator {записывает (bar) из r0 в аккумулятор} Return  // returns accumulator (возвращает аккумулятор) В Ignition есть нечто, что называется аккумулятором – место, где вы можете хранить или откуда вы можете считывать значения.  Аккумулятор позволяет избежать ситуаций, когда необходимо добавлять и вытаскивать вершину стека. Он также является неявно определенным аргументом для многих байт-кодов и, как правило, хранит результат операции. Return неявно возвращает аккумулятор. Весь доступный байт-код вы можете извлечь  из соответствующего исходного кода .  Выполнение После того, как будет сгенерирован байт-код, Ignition будет интерпретировать команды с помощью таблицы обработчиков с доступом по ключу в виде байт-кода. Для каждого байт-кода Ignition может найти соответствующие функции-обработчики и выполнить их с предлагаемыми аргументами. Как уже упоминалось ранее, этап выполнения также предоставляет обратную связь типа кода. Давайте разберемся, как это все получается и как этим управлять.  Для начала, обсудим, как объекты JavaScript могу быть представлены в памяти. При самом простом подходе мы можем создать словарь для каждого объекта и связать его с памятью. Первый подход к хранению объектов Однако, как правило, есть много объектов с одинаковой структурой, поэтому хранить большое количество одинаковых словарей будет неэффективно.  Для того, чтобы избежать таких ситуаций, V8 отделяет структуру объекта от самих значений с помощью форм объектов (Map) и вектора значений в памяти.  Например, мы создаем объектный литерал: let c = { x: 3 } let d = { x: 5 } c.y = 4 В первой строке он создаст форму  Map[c] , которая имеет свойство  x со смещением 0. Во второй строке V8 будет повторно использовать ту же форму для новой переменной.  После третьей строки он создаст новую форму  Map[c1] , у которой будет свойство  y со смещением 1, а также ссылку на предыдущую форму  Map[c] . Пример форм объектов В приведенном выше примере каждый объект может иметь ссылку на форму объекта, где для каждого свойства V8 может найти смещение для значения, хранящегося в памяти. Формы объектов – это, по сути, связные списки. То есть, если вы напишите  c.x , то V8 перейдет в начало списка, найдет там  y , перейдет к связанной форме и, наконец, получит  x и считает из него смещение. После чего он перейдет к вектору памяти и вернет из него первый элемент.  Как вы уже могли понять, в большом веб-приложении будет огромное количество таких связных форм. И при этом на выполнение поиска по связному списку затрачивается линейное время, что делает поиск свойств достаточно затратной операцией.  Для того, чтобы решить данную проблему в V8, вы можете использовать встроенный кэш (IC – Inline Cache). В нем сохраняется информация о том, где можно найти свойства объектов. Таким образом, количество поисков сокращается.  Вы можете представить, что это некое прослушивающее устройство в вашем коде: он отслеживает все события CALL, STORE и LOAD внутри функции и записывает все проходящие через нее формы. Структура данных, которая используется для хранения IC, называется вектором обратной связи. Это просто массив, в котором хранятся все IC функции.  function load(a) {  return a.key; } Для функции выше вектор обратной связи будет выглядеть следующим образом:  [{ slot: 0, icType: LOAD, value: UNINIT }] Это простая функция, у которой есть только один IC, который имеет тип LOAD и значение  UNINIT . Это значит, что он не был инициализирован, и мы не знаем, что будет происходить дальше.  Давайте вызовем эту функцию, передав ей другие аргументы, и посмотрим, как изменится встроенный кэш. let first = { key: 'first' } // shape A {форма А} let fast = { key: 'fast' } // the same shape A {та же форма А} let slow = { foo: 'slow' } // new shape B {новая форма В} load(first) load(fast) load(slow) После первого вызова функции  load наш встроенный кэш получит обновленное значение: [{ slot: 0, icType: LOAD, value: MONO(A) }] Теперь это значение стало мономорфным, а это значит, то кэш разрешается только в форму А.  После второго вызова V8 проверит значение IC и увидит, что оно мономорфно и имеет ту же форму, что и переменная  fast . В связи с чем, он тут же вернет смещение и разрешит его.  При третьем вызове форма будет отличаться от сохраненной. Поэтому V8 вручную разрешит его и обновит значение до «полиморфный» с помощью массива из двух возможных форм.  [{ slot: 0, icType: LOAD, value: POLY[A,B] }] Теперь при каждом вызове этой функции V8 должен проверять не одну форму, а перебрать несколько вариантов.  Для того, чтобы ускорить ваш код, вы можете инициализировать объекты одинаковыми типами и не слишком усердствовать, меняя их структуру.  Примечание: возьмите это на заметку, но если это может привести к дублированию кода или если ваш код станет менее выразительным, то не делайте этого.  Встроенные кэши также отслеживают то, как часто они вызываются, чтобы понять, хорошо ли Turbofan справляется с оптимизацией компилятора.  Компилятор Ignition помогает только до определенного времени. Если функция становится достаточно медленной, то она оптимизируется в компиляторе Turbofan.  Turbofan берет байт-код из Ignition и обратную связь типа (вектор обратной связи) функции, применяет набор преобразований на его основе и выдает машинный код. И как мы уже видели до этого, обратная связь типа не всегда гарантирует, что функция останется неизменной. Например, код, который был оптимизирован с помощью Turbofan, основан на том предположении, что некоторая операция сложения всегда прибавляет целые числа.  Но что будет, если функция получит строку? Этот процесс называется деоптимизацией. Мы отбрасываем оптимизированный код, возвращаемся к интерпретируемому, возобновляем выполнение и обновляем обратную связь типа.  Подведем итог В этой статье мы рассмотрели реализацию движка JS и четкие этапы выполнения кода на JavaScript. Подведем итог и взглянем на процесс компиляции, так сказать, сверху. Общая схема V8 Рассмотрим процесс шаг за шагом: Все начинается с того, что мы получаем код JavaScript из сети. V8 анализирует код с точки зрения синтаксиса и превращает его в дерево абстрактного синтаксического анализа (AST). Беря за основу это дерево AST, интерпретатор Ignition может приступить к своей работе и начать формировать байт-код. На этом этапе движок запускает код и собирает обратную связь типов. Чтобы ускорить работу, байт-код можно отправить оптимизирующему компилятору вместе с данными обратной связи. Оптимизирующий компилятор создает на его основе некие предположения, после чего выдает высокооптимизированный машинный код.  Если в какой-то момент оказывается, что одно из предположений неверно, то оптимизирующий компилятор деоптимизирует код и возвращается к интерпретатору.
img
Смотря какой fabric смотря сколько details — разбираемся насколько сильно нужен английский айтишнику, для чего стоит его учить и какие преимущества дает знание языка.  Английский язык уже давно утвердился как неотъемлемая часть IT-индустрии. Он поможет построить карьеру в иностранной компании, изучить первоисточники, разобраться в терминах, получить доступ к самым свежим исследованиям или участвовать в мировых IT-событиях.  Преимущества знания английского языка в ИТ Доступ к актуальным знаниям. Большинство современных исследований, технической документации, учебных материалов и курсов в области информационных технологий написаны  на английском языке. Знание языка позволяет быть в курсе последних тенденций и актуальных новостей. Возможности для карьерного роста. Многие ведущие технологические компании и стартапы работают в международном контексте и требуют знания английского языка для общения с командой, клиентами и партнерами по всему миру. Участие в международных проектах. Английский язык открывает двери для работы над глобальными проектами и сотрудничества с международными командами. Это обогащает опыт и расширяет профессиональные горизонты. Работа в зарубежной компании. Знание английского языка значительно увеличивает шансы на трудоустройство в иностранные компании или получение предложений о работе за рубежом. Как дополнительная опция — можно запустить свой международный стартап и привлекать коллег с разных уголков мира. Улучшение коммуникативных навыков. Владение английским языком улучшает общение в профессиональной среде, помогает эффективнее работать в команде и участвовать без затруднений в обсуждении. Доступ к международным конференциям и семинарам. Английский язык позволяет посещать международные конференции, семинары и воркшопы, где можно обменяться опытом с экспертами индустрии. Развитие софт скиллс. Изучение иностранного языка стимулирует когнитивные функции, улучшает память и способствует развитию критического мышления. Создание профессионального портфолио. Владение английским языком позволяет публиковать статьи, разработки и проекты на международных платформах, тем самым формируя авторитетное портфолио. Культурное обогащение. С навыками английского языка вы сможете лучше понять культуру разных стран, что полезно не только в профессиональной, но и в личной жизни. IT-специалистам необходим технический английский, который включает в себя несколько ключевых аспектов: Чтение технической документации и литературы. Это важный навык, потому что в своей работе вы наверняка столкнетесь с тематической литературой, которую надо понять и проанализировать. Вас ждут: технические статьи, руководства, спецификации, API-документация и книги по программированию и IT. Коммуникация в команде. В международных командах вся коммуникация проходит на английском языке. Это включает обсуждение технических задач, участие в митингах и написание отчетов и писем. Написание кода и комментариев. Часто код пишется с использованием англоязычных идентификаторов и комментариев.  Поиск информации и решение проблем. Чтобы решить задачу, вам придется искать ответы, читать форумы (например, Stack Overflow), блоги и другие ресурсы. Как правило, они ведутся на английском языке, а еще в англоязычных источниках больше информации про нетипичные ошибки и трудные ситуации.  Прохождение интервью и профессиональное развитие. Если вы стремитесь попасть в международный проект, вам не избежать собеседования. Для него важно уметь проходить технические интервью на английском языке, писать резюме и сопроводительные письма. Профессиональное развитие включает участие в конференциях, воркшопах и курсах повышения квалификации, которые часто проводятся на английском языке. Как учить английский, если совсем нет времени  Для начала вам следует определиться, зачем вам нужен английский язык: для чтения технической документации, общения с коллегами, участия в международных проектах или для переезда в англоязычную страну. Это поможет сосредоточить усилия на наиболее важных аспектах. Важный шаг для тех, кто пытается вписать изучение языка в плотный график — привычка искать нужную информацию на английском. Если пока сложно понимать оригинальные тексты, можно обратиться к специальным программам — установите расширение Яндекс- или Google-переводчика, чтобы не переключаться между вкладками. Можем посоветовать несколько плагинов, которые переводят слова в зависимости от контекста, формируют карточки для тренировки, проводят тесты и позволяют сформировать свой личный словарик по уровню и целям. Это расширения:  Rememberry ,  Toucan или  Fluent . Для перевода текста хорошо подойдет  DeepL Translate , работающий на базе ИИ-редактора. Помните, что просто запоминать слова недостаточно — нужно использовать их в реальном общении при любой возможности. Это поможет быстрее их запомнить. Важную роль в изучении языка играет общение. Присоединяйтесь к международным IT-сообществам и форумам, таким как  Stack Overflow ,  GitHub ,  Reddit . Участие в обсуждениях поможет не только улучшить языковые навыки, расширить словарный запас, но и вникнуть в контекст. Если вы смотрите много видео, включите функцию перевода на YouTube или воспользуйтесь функцией нейроперевода видео. Окружите себя англоязычным контентом – так вы будете в центре актуальных новостей мира IT. Для восприятия информации на слух полезно слушать подкасты в оригинале, даже если на замедленной скорости.  Где еще можно учить английский язык  Для IT-специалистов существует много полезных ресурсов. Часть из них мы уже упоминали выше, теперь поделимся другими способами прокачать свои навыки.   Интенсивные курсы и языковые школы. Если у вас есть возможность, посещайте курсы английского языка или занимайтесь с репетитором, особенно если вам нужен быстрый прогресс.  Приложения для общения:  - Tandem и HelloTalk позволяют найти партнеров для языкового обмена. Здесь вы можете практиковать английский с носителями языка. - Duolingo и Memrise — популярные приложения для изучения языка в игровой форме. Вы не пропустите уведомление от зеленой совы.  Подкасты про технологии . Такой вариант подойдет для тех, кто может слушать и понимать подкасты в оригинале, а вот новичку скорее всего будет сложно разобраться.  Книги и учебники на английском. Здесь все зависит от вашего уровня владения английским. Несомненно, это сложно и займет больше времени, чем если бы вы читали текст на привычном языке.  Технические блоги и новостные сайты.  TechCrunch - один из ведущих сайтов, посвященных высоким технологиям и стартапам. Публикует новости, анализы и обзоры новых продуктов и технологий. GitHub Blog - блог платформы GitHub, на котором собраны новости и практики разработки программного обеспечения. Wired - журнал и веб-сайт, занимающийся исследованием, как технологии влияют на культуру, экономику и политику. Ars Technica - сайт для IT-профессионалов и энтузиастов, предлагающий глубокие аналитические статьи и новости в сфере технологий. Собрали все в один курс  Если вы поняли, что для работы в IT вам необходим английский язык — мы собрали для вас все самое полезное в наш курс . Здесь необходимая лексика и фразы для работы в программах и для коммуникации с командой. Статьи и материалы, которые необходимо прочитать, чтобы быть в курсе.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59