6.29-Hangzhou Endpoint Technology-резюме вопросов интервью

внешний интерфейс опрос
6.29-Hangzhou Endpoint Technology-резюме вопросов интервью

предисловие

6.29 Встреча с Shenzhen Health 160 утром, сдача экзамена днем ​​+ встреча с конечным пунктом в Ханчжоу + Wistron Ниже приведены вопросы интервью конечной точки Ханчжоу (43 минуты интервью, передняя часть тянет промежность, задняя часть немного лучше) и ее резюме:

裂开.jpg

1. Представление себя + представление проекта

2. Принцип двусторонней привязки данных Vue

Мой ответ:

В комбинированном режиме «издатель-подписчик» «Data Hill» установщик и получатель Object.definedProperty() захватывают отдельные свойства DATA, когда данные изменяются, подписчик уведомляется о необходимости запуска соответствующего обратного вызова монитора.

3. Массив прослушивания Vue

Мой ответ:

Я сказал, что он, кажется, не может слушать массив, но я помню, что могу слушать глубоко (глубоко: правда), но я не сказал...
Проверьте информацию, также сказанную, чтобы переписать метод массива...

4. Vuex

Мой ответ:

Vuex — это режим управления состоянием Vue, который эквивалентен общему хранилищу, к которому могут обращаться другие страницы; в Vuex есть пять свойств:

  1. Состояние, в котором хранятся данные.

  2. Геттеры: получают данные, которые эквивалентны вычислительным свойствам (computed).

  3. Мутации: единственный способ изменить состояние хранилища — синхронно.

  4. Действия: Отправьте данные, измененные Mutations, которые являются асинхронными.

  5. Модуль: если файл хранилища слишком велик, его можно разделить на несколько модулей и объединить вместе.

Сводный ответ:

1. Vuex是Vue的状态管理模式,相当于一个共享仓库,其他页面可以访问这个仓库;

2. Vuex状态存储是响应式的,当Vue组件从store中读取状态时,如果store的状态改变了,那么用到这个store的组件也会更新;

3. State: 存储数据;组件使用 store.state. 获取数据。

4. Getters: 获取数据,相当于state计算属性( computed ),通过this.$store.getters.获取。

5. Mutations: 唯一能修改store状态的方式,只能是同步函数 this.$store.commit(方法名,值)。

6. Actions: 提交Mutations修改的数据,异步操作。

7. Module: 模块化Vuex,当一个store文件太大了,可以拆分成多个模块,让每一个模块都有自己的State、Getters、Mutations、Actions、Module。

5. перехватчик аксиом

Мой ответ:

Был использован только перехватчик ответа, и страница ошибки открывается, когда возвращаемый код состояния не равен 200. (не вдаваясь в подробности...)

Сводный ответ:

Следует сказать, что возвращаемые коды состояния разные и заходят на разные страницы (403: Нет доступа; 404: Ресурс не существует; 500: Внутренняя ошибка сервера; 503: Запрос слишком частый, повторите попытку позже).

6. тип данных js для определения эталонного типа данных

Мой ответ:

  1. Основные типы данных: Число, Строка, Логическое значение, Null, Undefined, Symbol (новое в ES6), BigInt (новое в ES11);

  2. Справочные типы данных: функция, массив, объект, дата, регулярное выражение. (Забыл упомянуть разницу между ними...)

3.instanceof и Object.prototype.toString.call()Сводный ответ:

  1. скажи какие

  2. Основные типы данных хранятся в стеке, ссылочные типы данных хранятся в куче, а их указатели хранятся в стеке.

  3. typeof: может определить базовый тип данных

  4. Как судить об эталонном типе данных: вы можете использовать instanceof для оценки;

    Вы также можете использовать Object.prototype.toString.call()

    Оцените массив: Array.isArray()

7. Ограничения экземпляра

Мой ответ:Я ответил: instanceof оценивает null и undefined... (сообщит об ошибке)

Сводный ответ:Левая часть instanceof должна быть объектом

Red Book P142: проблема с использованием instanceof заключается в том, что он предполагает наличие только одного глобального контекста выполнения. Если на веб-странице есть несколько фреймов, могут быть задействованы два разных контекста времени выполнения, поэтому будут две разные версии конструктора Array. Если массив должен передаваться из одного фрейма в другой, конструктор этого массива будет отличаться от массива, созданного локально во втором фрейме.

Так что есть ещеArray.isArray(), который определяет, является ли значение массивом, независимо от контекста глобального выполнения, в котором он был создан.

8. Принцип instanceof

Мой ответ:Проверьте, есть ли метод на прототипе.

Сводный ответ:Описание MDN: оператор instanceof используется для определения того, появляется ли свойство прототипа конструктора в цепочке прототипов объекта экземпляра.

9. Реализовать instanceof

Мой ответ:создать экземпляр, указав его свойство __proto__ на прототип конструктора

Сводный ответ: instanceof原理.png

10. Прототипы, цепочки прототипов

Мой ответ:У каждого объекта есть прототип, если он унаследован, то обращаться к методу по прототипу конструктора, если такого метода по прототипу конструктора нет, то он будет искать прототип прототипа конструктора, формируя таким образом цепочка.Вверху находится Object.

Сводный ответ:

Концепция прототипа: когда каждый объект javascript (кроме null) создается, он будет связан с другим объектом, этот объект является тем, что мы называем прототипом, и каждый объект «наследует» свойства от прототипа.

原型1.png

person. __ proto __ == Person.prototype

Person = Person.prototype.constructor

11. Наследование

Мой ответ:Я сказал, что есть 6 типов, но не стал их перечислять, потому что забыл преимущества и недостатки каждого...

Сводный ответ:

  1. Заимствованные конструкторы: используйте call() или apply() в конструкторах подклассов.

  2. Наследование цепочки прототипов: экземпляр родительского класса действует как прототип дочернего класса.

  3. Композиционное наследование: сочетание лучшего из обоих миров

  4. Прототипное наследование: используйте пустой объект в качестве середины, назначьте объект прототипу конструктора пустого объекта (поверхностная копия)

  5. Паразитическое наследование: используйте прототипное наследование, чтобы сделать поверхностную копию целевого объекта, чтобы расширить возможности этой поверхностной копии.

  6. Паразитическое композиционное наследование: сочетание заимствованных параметров передачи конструктора и паразитного шаблона для достижения наследования (наиболее рекомендуемый метод).

Отдельная статья будет позже.

12. Процесс создания экземпляра объекта с новыми

Мой ответ:

  1. новый пустой объект
  2. Укажите __proto__ объекта на прототип конструктора

Я забыл позже (изменить это на точку)

Сводный ответ:

  1. Создать пустой объект пусть человек = {}

  2. Направьте прототип нового объекта на прототип конструктора человек.__прото__ = Человек.прототип

  3. Измените это, чтобы указать на Person.call(человек) //{}.constructor()

  4. Сохраните адрес инициализированного нового объекта в переменную слева от знака равенства

13. это указывает на (строгий режим)

Мой ответ:

  1. глобальный контекст
  2. внутри функции
  3. оценка (не рекомендуется)
  4. В строгом режиме: это не определено

Сводный ответ:

  1. В глобальном контексте, будь то в строгом или нестрогом режиме, это указывает на окно

  2. Контекст функции, нестрогий режим: это указывает на вызывающую функцию, нестрогий режим: это не определено

  3. оценочное рассмотрение

  4. this стрелочной функции: this внешней обычной функции, ближайшей к ней, и не может быть изменена

  5. При вызове функции с новым ключевым словом это указывает на объект экземпляра

  6. вызов объекта, указывающий на объект

14. Измените метод, указанный этим

Мой ответ:

  1. call(): входящие параметры идут один за другим

  2. apply(): входящий параметр представляет собой массив

  3. bind(): возвращает новую функцию, множественные привязки действительны только в первый раз.

15. {} === {}

Мой ответ:false, объект является ссылочным типом и существует в куче, и каждый объект имеет свое собственное пространство.

16. Замыкания, плюсы и минусы

Мой ответ:Формально функция внутренне возвращает функцию, которая содержит ссылку на переменную в родительской области. Преимущества: приватные переменные (привилегированные методы конструкторов), расширенная область видимости переменных Недостаток: отсутствие освобождения вызывает утечку памяти (занимает память и делает нас непригодными для использования)

17. Стабилизация и дросселирование

Мой ответ:

Anti-shake: Поле ввода постоянно вводится и устанавливается фиксированное время.Если в течение этого времени нет ввода, функция выполняется.

Сценарии применения:

  1. Поиск контента в поле ввода, экономия трафика за счет анти-шейка;

  2. Постоянно запускайте событие window.resize (изменение размера окна), вы можете использовать анти-шейк.

Код: таймер防抖.pngТроттлинг: в течение заданного времени, независимо от того, сколько раз он срабатывает, выполняется только последний раз, то есть только одно выполнение в единицу времени.

Сценарий приложения: мышь непрерывно щелкается и выполняется только один раз в единицу времени.

Код:

  1. отметка времени

节流.png

  1. таймер

节流2.png

18. Отличие стрелочных функций от обычных функций

Мой ответ:

  1. Опустите ключевое слово function и return;

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

  3. У него нет самого this, он наследует this от ближайшей обычной функции в текущем контексте и не может изменить this point;

  4. Не может использоваться в качестве конструктора, не может использовать new для создания экземпляра объекта, поэтому нет прототипа (прототипа);

  5. Вместо аргументов можно использовать rest.

19. js ленивая загрузка

Мой ответ:Неправильный ответ, я думал, что асинхронная загрузка - это ленивая загрузка...

Теги скрипта могут устанавливать атрибуты отсрочки и асинхронности для реализации ленивой загрузки. отложить: асинхронно загружает скрипт и выполняет скрипт до тех пор, пока документ не будет проанализирован (упорядоченно) async: асинхронно загружает шаги и выполняется сразу после завершения загрузки.После выполнения шагов (порядок выполнения не гарантируется) страница продолжает анализироваться.

Сводный ответ:

Ленивая загрузка:

  1. Ленивая загрузка с setTimeout;

  2. js-скрипт в конце.

Асинхронная загрузка:

  1. defer: асинхронно загружает сценарий и выполняет его до тех пор, пока документ не будет проанализирован (по порядку);

  2. async: асинхронно загружает шаги и выполняется сразу после завершения загрузки.После выполнения шагов (порядок выполнения не гарантируется) страница продолжает анализироваться.

20. document.write и document.innerHTML

Мой ответ:Интервьюер сказал это два или три раза. Я не понял, что сказал первый. Я услышал document.innerHTML в конце. Я подумал, что это document.right. Я все еще думаю, я не видел этого раньше , это. . . Наконец я ответил на innerHTML и innerText.

Сводный ответ:Просмотрите innerHTML и innerText:

  1. innerHTML: получить текстовую информацию, включая теги
  2. innerText: Получить текстовую информацию, за исключением меток

21. Перекомпоновка и перерисовка

Мой ответ:

Рефлоу еще называют рефлоу: при добавлении или удалении DOM ноды меняется размер позиции, что вызовет рефлоу;

Перерисовка: изменение цвета, шрифта и видимости элемента вызовет перерисовку.

Рот зачерпнул, и наконец поправил: рефлоу неизбежно перерисует, а рефлоу не будет рефлоу.

22. Какие операции в JS могут вызвать утечки памяти

Мой ответ:

  1. Закрытие

  2. Неожиданная глобальная переменная (глобальная переменная, объявленная внутри функции)

  3. Несброшенные таймеры и таймеры

23. Потоки событий

Мой ответ:Фаза захвата -> Фаза событий -> Фаза для пузырьков, например.

Сводный ответ:

Уровень DOM2, прослушиватель событий addEventListener, есть всплывающие окна событий;

Фаза захвата -> Фаза события -> Фаза пузыря

Фаза захвата: Окно -> Документ -> ->

...
-> Стадия бульканья: ->
... -> -> Document -> Window

Пример: если щелкнуть , вывод 1, щелкнуть

, вывод 2;
  1. Нажмите , он сначала выведет 1, а затем выведет 2;
  2. Нажмите на
    , выведите только 2.

    24. Event.target и Event.currentTarget.

    Мой ответ:Слышит один Event.target, а другой слышит Event.parentTarget....

    Сводный ответ:Event.target: целевой объект (элемент триггера события) Event.currentTarget: объект, к которому привязано событие (текущий элемент, к которому привязано событие).

    25 Цикл событий браузера

    Мой ответ:Упоминается только цикл событий браузера, но цикл событий Node не упоминается:

    Браузер разделен на синхронные задачи и асинхронные задачи.Синхронные задачи выполняются последовательно в основном потоке, а асинхронные задачи попадают в очередь задач.Очередь задач делится на макро задачи и микро задачи.

    1. После выполнения задачи синхронизации проверьте очередь задач, если есть макрозадачи и микрозадачи, сначала выполните микрозадачи, а затем макрозадачи;
    2. Если во время выполнения микрозадачи генерируется микрозадача, она будет добавлена ​​в очередь микрозадач и будет выполняться последовательно до тех пор, пока не будут выполнены все микрозадачи, а затем будет выполнена макрозадача;
    3. Если во время выполнения макрозадачи генерируется микрозадача, микрозадача будет выполнена после выполнения текущей макрозадачи, а макрозадача будет выполнена после выполнения всех микрозадач.

    26 макрозадач и микрозадач

    Мой ответ:

    Задачи макроса браузера: ввод/вывод, setTimeout, setInterval, requestAnimationFrame

    Микрозадачи браузера: Promise.then .catch .finally, MutationObserver

    Макрозадачи узла: ввод/вывод, setTimeout, setInterval, setImmediate

    Микрозадачи узла: process.nextTick, Promise.then .catch .finally

    К задачам макроса относятся:

    MacroTask браузер Node
    I/O
    setTimeout
    setInterval
    setImmediate
    requestAnimationFrame

    К микрозадачам относятся:

    MicroTask браузер Node
    process.nextTick
    MutationObserver
    Promise.then catch finally

    27. Понимание обещаний

    Мой ответ:Решение для асинхронного программирования, оптимизирующее callback hell Промис получает два параметра (разрешить, отклонить), оба являются функциями; есть три состояния: ожидание, выполнено успешно, отклонено с ошибкой, и возвращаемый результат также является объектом промиса, Состояние можно изменить только один раз.

    28 Статический метод обещания

    Мой ответ:Promise.all и Promise.race

    29. Что нового в ES6

    1. пусть, константа
    2. class
    3. присваивание деструктуризации
    4. стрелочная функция
    5. promise
    6. асинхронно и жду

    30. Разница между let и const и var

    Мой ответ:

    1. Есть переменная раскрутка, есть временная мертвая зона, при ее использовании заранее будет выдано сообщение об ошибке;

    2. Существует блочная область видимости, var — нет;

    3. Переменные нельзя объявлять повторно;

    4. Объявленным переменным const должны быть присвоены значения, объявленные константы не могут быть изменены, а объявленные объекты могут изменять свойства.

    31. для... из и для... в

    Мой ответ:for...of: Обход массива, вы не можете перемещаться только по обычным объектам, вам нужно использовать Object.keys() for...in: Обход имен свойств итерируемого объекта, не рекомендуется обходить массив

    32. Коды состояния HTTP

    Мой ответ:

    1. 200:OK  //返回成功
    2. 301:Moved Permanently  //永久重定向
    3. 302:Found  //临时重定向
    4. 304:Not Modified  //资源未修改,使用协商缓存
    5. 307:Temporary Direction  //与302类似,临时重定向,使用GET方式
    6. 400:Bad Request  //请求报文出现语法错误
    7. 401:Unauthorized  //未登录,需要请求认证
    8. 403:Forbidden  //无权限访问,被拒绝
    9. 404: Not Found  //资源不存在
    10. 408:Request Time-out  //请求超时
    11. 500: Internal Server Error  //服务器内部错误
    12. 503: Service Unavailable  //服务器繁忙或维护(请求太频繁)
    13. 505:HTTP Version not Supported  //不支持请求的HTTP版本
    

    33. Надежный кеш и кеш согласования

    Вы можете перейти к этой статье

    34. Зачем нужны три рукопожатия

    Мой ответ:

    Первый раз: Докажите, что клиент можетотправить данные;

    Второй раз: Докажите, что сервер можетПолучить данныеа такжеотправить данные;

    Третий раз: Докажите, что клиенты тоже могутПолучить данные.

    35. BFC

    Мой ответ:Контекст форматирования блока, полезный для решения проблемы перекрытия внешних полей двух блоков единого родительского элемента;

    Условия срабатывания:

    1. корневой элемент тела (самый большой BFC);

    2. положение: абсолютное или фиксированное;

    3. display(inline-block table-cell table-caption flex);

    4. float не None;

    5. переполнение не является видимым (скрыто, прокручивается, автоматически, наследуется).

    36. Flex

    1. flex-direction:Определить направление главной оси:

       row (默认值):水平方向,从左边开始。
       row-reverse:水平方向,从右边开始。
       column:垂直方向,从上往下。
       column-reverse:垂直方向,从下往上。
      
    2. flex-wrap:Оборачивает ли элемент:

       nowrap (默认值):不换行。 (1,2,3,4,5,6)
       
       wrap:换行,第一行在上面。    (1,2,3,4)
                                   (5,6)
                                   
       wrap-reverse:换行,第一行下面。  (5,6)
                                       (1,2,3,4)
      
    3. flex-flow: (flex-направление) (flex-wrap). По умолчанию: row nowrap

    4. justify-content: Расположение элементов на главной оси

      1. flex-start: выравнивание по левому краю
      2. flex-end: выравнивание по правому краю
      3. центр: центр
      4. space-between: Два абзаца выровнены с одинаковым интервалом между элементами и равными делениями.
      5. пространство вокруг: одинаковое расстояние с обеих сторон каждого элемента, поэтому элементы располагаются в два раза дальше, чем края
    5. align-items: выравнивание элемента по поперечной оси

      1. flex-start: выравнивание начала поперечной оси
      2. flex-end: выравнивание фокуса по поперечной оси
      3. center: Выровнять центр поперечной оси
      4. baseline: выравнивание по базовой линии первой строки текста
      5. stretch: значение по умолчанию, высота не задана или задано значение auto, занимающее контейнер
    6. align-content: При наличии нескольких осей выравнивание элемента по поперечной оси (одна ось, это свойство недопустимо)

      1. flex-start: выравнивание по левому краю
      2. flex-end: выравнивание по правому краю
      3. центр: центр
      4. space-between: Два абзаца выровнены с одинаковым интервалом между элементами и равными делениями.
      5. пространство вокруг: одинаковое расстояние с обеих сторон каждого элемента, поэтому элементы располагаются в два раза дальше, чем края

      Ссылаться наjustify-content

    37. Фиксированная ширина слева, адаптивная ширина справа

    Мой ответ:

    1. Установите ширину и высоту слева и плавайте влево; право дает только высоту, ширина равна 100%, а поле слева: ширина левого поля;
    2. Родительский дисплей: flex, установить ширину и высоту слева и слева, а высоту дать только справа, а ширина 100%;
    3. Позиционирование, абсолютное позиционирование слева, только высота справа, поле слева: ширина левого поля;
    4. BFC, float слева, переполнение справа: скрыто.

    38. TypeScript

    Мой ответ: Используется мало, в реактивных проектах используются дженерики и интерфейсы, выявляются ошибки при написании кода, кодирование стандартизировано.

    39. Риторический вопрос

    Требования к стажерам

    метод исследования

    наконец

    Вообще говоря, эти очки знаний в основном известны, но ответы не слишком полные, в этот раз я не поступил, два месяца упорно работал и ждал осеннего набора. Ну давай же!