Несколько интересных вопросов для фронтенд-интервью

опрос

Это моя первая статья о том, как начать

Всем привет, меня зовут Бай Ци, я впервые публикую статью о Наггетс. Я недавно готовился к интервью, поэтому я хотел бы поделиться с вами несколькими вопросами для интервью, которые я считаю довольно интересными в банке вопросов для интервью, который я недавно просматривал. (личное мнение Кайдзи, не распыляйте ово, если вам не нравится)

1. В чем разница между Object.is() и исходными операторами сравнения "==" и "==="?

  • Два знака равенства равны, и при сравнении будет выполняться преобразование типов;
  • Три знака равно равны (суждение строгое), при сравнении не выполняется неявное преобразование типов (если типы разные, будет возвращено false);
  • Object.is() специально обрабатывает NaN, -0 и +0 на основе суждения о трех равенствах, гарантируя, что -0 и +0 больше не совпадают, аObject.is(NaN,NaN) вернет true.
  • Object.is() следует рассматривать для его специального назначения, и его не следует использовать, чтобы думать, что он слабее или строже, чем другие сравнения равенства.

2. Каковы преимущества виртуального DOM?

На самом деле ответ, который хочет услышать интервьюер, состоит не в том, чтобы сказать, что «производительность прямых/частых манипуляций с DOM плохая». Если производительность манипуляций с DOM настолько невыносима, то jQuery не будет так популярен. Таким образом, интервьюер действительно хочет услышать о проблеме, которую хочет решить VDOM, и почему частые операции с DOM будут иметь низкую производительность.

Для начала нам нужно знать: движок DOM и движок JS не зависят друг от друга, но работают в одном потоке (главном потоке). Когда JS-код вызывает DOM API, он должен приостановить работу JS-движка, преобразовать входящие данные параметров, активировать DOM-движок, преобразовать возможные возвращаемые значения после перерисовки DOM и, наконец, активировать JS-движок и продолжить выполнение при частых Вызовы DOM API и просмотр Если производитель сервера не выполняет оптимизацию "пакетной обработки", удельные затраты на переключение между движками будут быстро накапливаться. потребление производительности.

Второе — это разница и оптимизация VDOM и реального DOM:

  • Виртуальный DOM не сразу выполняет операции набора и перерисовки
  • Виртуальный DOM часто модифицируется, а затем части, которые необходимо изменить в реальном DOM, сравниваются и модифицируются одновременно, и, наконец, верстка и перерисовка выполняются в реальном DOM, чтобы уменьшить потери при верстке и перерисовке лишнего. DOM-узлы.
  • Виртуальный DOM эффективно сокращает перерисовку и верстку большой области реального DOM, потому что окончательное сравнение с реальным DOM отличается, и может быть отрендерена только часть.

3. В чем разница между введением модуля в common.js и es6?

Common.js — это спецификация модуля, которая изначально применялась к Nodejs и стала спецификацией модуля Nodejs. JavaScript, работающий на стороне браузера, также не имеет подобных спецификаций.До выхода ES6 интерфейс также реализовывал набор той же спецификации модуля (например: AMD) для управления модулями интерфейса. Начиная с ES6, был введен новый набор спецификаций модуля ES6, который реализует функцию модуля на уровне языкового стандарта, и реализация довольно проста, ожидается, что он станет общим модульным решением для браузеров и серверов. Однако в настоящее время браузер не очень совместим с модулем ES6.Экспорт и импорт, которые мы обычно используем в Webpack, будут преобразованы Babel в спецификацию CommonJs.

Основные отличия в использовании:

  • Модуль CommonJs выводит копию значения, модуль ES6 выводит ссылку на значение, модуль CommonJS загружается во время выполнения, а модуль ES6 является интерфейсом вывода времени компиляции.
  • CommonJs — это экспорт одного значения, модуль ES6 может экспортировать несколько
  • CommonJs — это динамическая грамматика, которая может быть написана на суждениях, а статическая грамматика модуля ES6 может быть написана только на верхнем уровне.
  • Этот модуль CommonJs является текущим модулем, а этот модуль ES6 не определен.

4. Что означает использовать строго в коде JS? В чем разница между до и после использования?

use strict — это (строгий) режим запуска, добавленный ECMAscript5, который заставляет Javascript работать в более строгих условиях. Цель установления «строгого режима» в основном заключается в следующем:

  • Устраните некоторые необоснованные и неточные аспекты синтаксиса Javascript и уменьшите количество странного поведения Устраните некоторые небезопасные аспекты работы кода, чтобы обеспечить безопасность работы кода;
  • Улучшить эффективность компилятора и увеличить скорость работы;
  • Чтобы проложить путь для будущих новых версий Javascript.

разница:

  1. Использование оператора with запрещено.
  2. Ключевому слову this запрещено указывать на глобальный объект.
  3. Объекты не могут иметь свойства с одинаковыми именами.

Пожалуйста, используйте JS, чтобы определить, является ли данная строка изоморфной.

Идея: вы можете использовать функцию карты в JS, чтобы определить значение и индекс строки.

Код:

const isIsomorphic = (s, t) => {
  if (s === t || s === '') return true
  let mapS = new Map(), mapT = new Map()
  for (let i = 0; i < s.length; i++) {
    if (mapS.has(s[i]) || mapT.has(t[i])) {
      if (mapS.get(s[i]) !== mapT.get(t[i])) return false
    }
    mapS.set(s[i], i)
    mapT.set(t[i], i)
  }
  return true
}