предисловие
6.29 Встреча с Shenzhen Health 160 утром, сдача экзамена днем + встреча с конечным пунктом в Ханчжоу + Wistron Ниже приведены вопросы интервью конечной точки Ханчжоу (43 минуты интервью, передняя часть тянет промежность, задняя часть немного лучше) и ее резюме:
1. Представление себя + представление проекта
2. Принцип двусторонней привязки данных Vue
Мой ответ:
В комбинированном режиме «издатель-подписчик» «Data Hill» установщик и получатель Object.definedProperty() захватывают отдельные свойства DATA, когда данные изменяются, подписчик уведомляется о необходимости запуска соответствующего обратного вызова монитора.
3. Массив прослушивания Vue
Мой ответ:
Я сказал, что он, кажется, не может слушать массив, но я помню, что могу слушать глубоко (глубоко: правда), но я не сказал...
Проверьте информацию, также сказанную, чтобы переписать метод массива...
4. Vuex
Мой ответ:
Vuex — это режим управления состоянием Vue, который эквивалентен общему хранилищу, к которому могут обращаться другие страницы; в Vuex есть пять свойств:
-
Состояние, в котором хранятся данные.
-
Геттеры: получают данные, которые эквивалентны вычислительным свойствам (computed).
-
Мутации: единственный способ изменить состояние хранилища — синхронно.
-
Действия: Отправьте данные, измененные Mutations, которые являются асинхронными.
-
Модуль: если файл хранилища слишком велик, его можно разделить на несколько модулей и объединить вместе.
Сводный ответ:
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 для определения эталонного типа данных
Мой ответ:
-
Основные типы данных: Число, Строка, Логическое значение, Null, Undefined, Symbol (новое в ES6), BigInt (новое в ES11);
-
Справочные типы данных: функция, массив, объект, дата, регулярное выражение. (Забыл упомянуть разницу между ними...)
3.instanceof и Object.prototype.toString.call()Сводный ответ:
-
скажи какие
-
Основные типы данных хранятся в стеке, ссылочные типы данных хранятся в куче, а их указатели хранятся в стеке.
-
typeof: может определить базовый тип данных
-
Как судить об эталонном типе данных: вы можете использовать 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__ на прототип конструктора
Сводный ответ:
10. Прототипы, цепочки прототипов
Мой ответ:У каждого объекта есть прототип, если он унаследован, то обращаться к методу по прототипу конструктора, если такого метода по прототипу конструктора нет, то он будет искать прототип прототипа конструктора, формируя таким образом цепочка.Вверху находится Object.
Сводный ответ:
Концепция прототипа: когда каждый объект javascript (кроме null) создается, он будет связан с другим объектом, этот объект является тем, что мы называем прототипом, и каждый объект «наследует» свойства от прототипа.
person. __ proto __ == Person.prototype
Person = Person.prototype.constructor
11. Наследование
Мой ответ:Я сказал, что есть 6 типов, но не стал их перечислять, потому что забыл преимущества и недостатки каждого...
Сводный ответ:
-
Заимствованные конструкторы: используйте call() или apply() в конструкторах подклассов.
-
Наследование цепочки прототипов: экземпляр родительского класса действует как прототип дочернего класса.
-
Композиционное наследование: сочетание лучшего из обоих миров
-
Прототипное наследование: используйте пустой объект в качестве середины, назначьте объект прототипу конструктора пустого объекта (поверхностная копия)
-
Паразитическое наследование: используйте прототипное наследование, чтобы сделать поверхностную копию целевого объекта, чтобы расширить возможности этой поверхностной копии.
-
Паразитическое композиционное наследование: сочетание заимствованных параметров передачи конструктора и паразитного шаблона для достижения наследования (наиболее рекомендуемый метод).
Отдельная статья будет позже.
12. Процесс создания экземпляра объекта с новыми
Мой ответ:
- новый пустой объект
- Укажите __proto__ объекта на прототип конструктора
Я забыл позже (изменить это на точку)
Сводный ответ:
-
Создать пустой объект пусть человек = {}
-
Направьте прототип нового объекта на прототип конструктора человек.__прото__ = Человек.прототип
-
Измените это, чтобы указать на Person.call(человек) //{}.constructor()
-
Сохраните адрес инициализированного нового объекта в переменную слева от знака равенства
13. это указывает на (строгий режим)
Мой ответ:
- глобальный контекст
- внутри функции
- оценка (не рекомендуется)
- В строгом режиме: это не определено
Сводный ответ:
-
В глобальном контексте, будь то в строгом или нестрогом режиме, это указывает на окно
-
Контекст функции, нестрогий режим: это указывает на вызывающую функцию, нестрогий режим: это не определено
-
оценочное рассмотрение
-
this стрелочной функции: this внешней обычной функции, ближайшей к ней, и не может быть изменена
-
При вызове функции с новым ключевым словом это указывает на объект экземпляра
-
вызов объекта, указывающий на объект
14. Измените метод, указанный этим
Мой ответ:
-
call(): входящие параметры идут один за другим
-
apply(): входящий параметр представляет собой массив
-
bind(): возвращает новую функцию, множественные привязки действительны только в первый раз.
15. {} === {}
Мой ответ:false, объект является ссылочным типом и существует в куче, и каждый объект имеет свое собственное пространство.
16. Замыкания, плюсы и минусы
Мой ответ:Формально функция внутренне возвращает функцию, которая содержит ссылку на переменную в родительской области. Преимущества: приватные переменные (привилегированные методы конструкторов), расширенная область видимости переменных Недостаток: отсутствие освобождения вызывает утечку памяти (занимает память и делает нас непригодными для использования)
17. Стабилизация и дросселирование
Мой ответ:
Anti-shake: Поле ввода постоянно вводится и устанавливается фиксированное время.Если в течение этого времени нет ввода, функция выполняется.
Сценарии применения:
-
Поиск контента в поле ввода, экономия трафика за счет анти-шейка;
-
Постоянно запускайте событие window.resize (изменение размера окна), вы можете использовать анти-шейк.
Код:
таймерТроттлинг: в течение заданного времени, независимо от того, сколько раз он срабатывает, выполняется только последний раз, то есть только одно выполнение в единицу времени.
Сценарий приложения: мышь непрерывно щелкается и выполняется только один раз в единицу времени.
Код:
- отметка времени
- таймер
18. Отличие стрелочных функций от обычных функций
Мой ответ:
-
Опустите ключевое слово function и return;
-
При наличии только одного параметра круглые скобки можно опустить, при наличии нескольких параметров необходимо использовать круглые скобки, при наличии в коде только одной строки фигурные скобки можно опустить;
-
У него нет самого this, он наследует this от ближайшей обычной функции в текущем контексте и не может изменить this point;
-
Не может использоваться в качестве конструктора, не может использовать new для создания экземпляра объекта, поэтому нет прототипа (прототипа);
-
Вместо аргументов можно использовать rest.
19. js ленивая загрузка
Мой ответ:Неправильный ответ, я думал, что асинхронная загрузка - это ленивая загрузка...
Теги скрипта могут устанавливать атрибуты отсрочки и асинхронности для реализации ленивой загрузки. отложить: асинхронно загружает скрипт и выполняет скрипт до тех пор, пока документ не будет проанализирован (упорядоченно) async: асинхронно загружает шаги и выполняется сразу после завершения загрузки.После выполнения шагов (порядок выполнения не гарантируется) страница продолжает анализироваться.
Сводный ответ:
Ленивая загрузка:
-
Ленивая загрузка с setTimeout;
-
js-скрипт в конце.
Асинхронная загрузка:
-
defer: асинхронно загружает сценарий и выполняет его до тех пор, пока документ не будет проанализирован (по порядку);
-
async: асинхронно загружает шаги и выполняется сразу после завершения загрузки.После выполнения шагов (порядок выполнения не гарантируется) страница продолжает анализироваться.
20. document.write и document.innerHTML
Мой ответ:Интервьюер сказал это два или три раза. Я не понял, что сказал первый. Я услышал document.innerHTML в конце. Я подумал, что это document.right. Я все еще думаю, я не видел этого раньше , это. . . Наконец я ответил на innerHTML и innerText.
Сводный ответ:Просмотрите innerHTML и innerText:
- innerHTML: получить текстовую информацию, включая теги
- innerText: Получить текстовую информацию, за исключением меток
21. Перекомпоновка и перерисовка
Мой ответ:
Рефлоу еще называют рефлоу: при добавлении или удалении DOM ноды меняется размер позиции, что вызовет рефлоу;
Перерисовка: изменение цвета, шрифта и видимости элемента вызовет перерисовку.
Рот зачерпнул, и наконец поправил: рефлоу неизбежно перерисует, а рефлоу не будет рефлоу.
22. Какие операции в JS могут вызвать утечки памяти
Мой ответ:
-
Закрытие
-
Неожиданная глобальная переменная (глобальная переменная, объявленная внутри функции)
-
Несброшенные таймеры и таймеры
23. Потоки событий
Мой ответ:Фаза захвата -> Фаза событий -> Фаза для пузырьков, например.
Сводный ответ:
Уровень DOM2, прослушиватель событий addEventListener, есть всплывающие окна событий;
Фаза захвата -> Фаза события -> Фаза пузыря
Фаза захвата: Окно -> Документ -> ->
...Пример: если щелкнуть , вывод 1, щелкнуть Мой ответ:Слышит один Event.target, а другой слышит Event.parentTarget.... Сводный ответ:Event.target: целевой объект (элемент триггера события)
Event.currentTarget: объект, к которому привязано событие (текущий элемент, к которому привязано событие). Мой ответ:Упоминается только цикл событий браузера, но цикл событий Node не упоминается: Браузер разделен на синхронные задачи и асинхронные задачи.Синхронные задачи выполняются последовательно в основном потоке, а асинхронные задачи попадают в очередь задач.Очередь задач делится на макро задачи и микро задачи. Мой ответ: Задачи макроса браузера: ввод/вывод, setTimeout, setInterval, requestAnimationFrame Микрозадачи браузера: Promise.then .catch .finally, MutationObserver Макрозадачи узла: ввод/вывод, setTimeout, setInterval, setImmediate Микрозадачи узла: process.nextTick, Promise.then .catch .finally К задачам макроса относятся: К микрозадачам относятся: Мой ответ:Решение для асинхронного программирования, оптимизирующее callback hell
Промис получает два параметра (разрешить, отклонить), оба являются функциями; есть три состояния: ожидание, выполнено успешно, отклонено с ошибкой, и возвращаемый результат также является объектом промиса,
Состояние можно изменить только один раз. Мой ответ:Promise.all и Promise.race Мой ответ: Есть переменная раскрутка, есть временная мертвая зона, при ее использовании заранее будет выдано сообщение об ошибке; Существует блочная область видимости, var — нет; Переменные нельзя объявлять повторно; Объявленным переменным const должны быть присвоены значения, объявленные константы не могут быть изменены, а объявленные объекты могут изменять свойства. Мой ответ:for...of: Обход массива, вы не можете перемещаться только по обычным объектам, вам нужно использовать Object.keys()
for...in: Обход имен свойств итерируемого объекта, не рекомендуется обходить массив Мой ответ: Вы можете перейти к этой статье Мой ответ: Первый раз: Докажите, что клиент можетотправить данные; Второй раз: Докажите, что сервер можетПолучить данныеа такжеотправить данные; Третий раз: Докажите, что клиенты тоже могутПолучить данные. Мой ответ:Контекст форматирования блока, полезный для решения проблемы перекрытия внешних полей двух блоков единого родительского элемента; Условия срабатывания: корневой элемент тела (самый большой BFC); положение: абсолютное или фиксированное; display(inline-block table-cell table-caption flex); float не None; переполнение не является видимым (скрыто, прокручивается, автоматически, наследуется). flex-direction:Определить направление главной оси: flex-wrap:Оборачивает ли элемент: flex-flow: (flex-направление) (flex-wrap). По умолчанию: row nowrap justify-content: Расположение элементов на главной оси align-items: выравнивание элемента по поперечной оси align-content: При наличии нескольких осей выравнивание элемента по поперечной оси (одна ось, это свойство недопустимо) Ссылаться наjustify-content Мой ответ: Мой ответ: Используется мало, в реактивных проектах используются дженерики и интерфейсы, выявляются ошибки при написании кода, кодирование стандартизировано. Требования к стажерам метод исследования Вообще говоря, эти очки знаний в основном известны, но ответы не слишком полные, в этот раз я не поступил, два месяца упорно работал и ждал осеннего набора. Ну давай же!
24. Event.target и Event.currentTarget.
25 Цикл событий браузера
26 макрозадач и микрозадач
MacroTask
браузер
Node
I/O
✅
✅
setTimeout
✅
✅
setInterval
✅
✅
setImmediate
❌
✅
requestAnimationFrame
✅
❌
MicroTask
браузер
Node
process.nextTick
❌
✅
MutationObserver
✅
❌
Promise.then catch finally
✅
✅
27. Понимание обещаний
28 Статический метод обещания
29. Что нового в ES6
30. Разница между let и const и var
31. для... из и для... в
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
36. Flex
row (默认值):水平方向,从左边开始。
row-reverse:水平方向,从右边开始。
column:垂直方向,从上往下。
column-reverse:垂直方向,从下往上。
nowrap (默认值):不换行。 (1,2,3,4,5,6)
wrap:换行,第一行在上面。 (1,2,3,4)
(5,6)
wrap-reverse:换行,第一行下面。 (5,6)
(1,2,3,4)
37. Фиксированная ширина слева, адаптивная ширина справа
38. TypeScript
39. Риторический вопрос
наконец