предисловие
для меня большая честь получитьJingdong Group-Jingdong Mall-Mall User Experience Design Department-Front-end Development Department-Front-end Architecture Groupопрос.
В следующем содержании я дам правильный ответ на основе вопросов.Есть некоторые вопросы, которые оказались затронуты в моей предыдущей колонке, поэтому я прикреплю ссылку на колонку, которую я написал, чтобы ответить на некоторые вопросы.
Я надеюсь, что в дополнение к рассмотрению того, как отвечать на вопросы интервью, я предлагаю вам систематически и более точно понять точки знаний, которые должны быть проверены в каждом пункте интервью, чтобы понять, для чего это, а не этот вопрос, что.
текст
Символическое отверстие
Во-первых, я спросил о своем образовании и рассказал о проектах, которые я делал раньше, а также о том, какие технологические стеки я использовал, и я чувствую, что сталкивался с более сложными функциями в своих проектах.
Здесь, в соответствии с вашей собственной ситуацией, пока ответ ясен, вы можете
Технические проблемы с интерфейсом
1,
vueКаковы жизненные циклы?
-
beforeCreate(до инициализации интерфейса) -
created(после инициализации интерфейса) -
beforeMount(перед рендерингом дома) -
mounted(после рендеринга дома) -
beforeUpdate(до обновления данных) -
updated(после обновления данных) -
beforeDestroy(перед удалением компонентов) -
destroyed(после удаления компонентов)
Примечание: На работе мы можем очень четко знать эти методы жизненного цикла очень четко, но если вы хотите знать, что делает каждый жизненный цикл, прежде чем он выполнен, пожалуйста, перейдите по адресу:Подробный жизненный цикл Vue для достижения
2,
vueКак реализован данные ответа?
В официальной документации есть краткое введение, которое основано наObject.definePropertyдостигать;
Но есть одно требование, т.создавать экземплярVueПеред конструктором все данные для двусторонней привязки должны быть вdataВнутри выполнить инициализацию, даже если это нулевое значение;
Потому что при каждом воплощенииVueбудет провереноdata, просматривать и использовать свойство существованияObject.definePropertyследить;
Каждый раз, когда вам нужно судить или отображать текущие данные оперативного мониторинга, например:
<div>{{name}}</div>
new Vue({
data(){
return {
name:'zhangsan'
}
}
})
При инициализации я связалnameсобственность, она находится вdivотображается внутри;
когда я былdivдобавить внутрьnameПри отображении, на самом деле, когда шаблон скомпилирован, я получаюnameАтрибуты;
Как упоминалось ранее, я привязываю текущее свойствоObject.defineProperty, поэтому при извлечении я позвонюgetметод;
Перед этим я создал экземплярdepочередь, поставьте каждую выборкуnameатрибут место, сделатьpush;
Когда я хочу выполнить модификацию данных, например, поместитьzhangsanсталlisi, затем вsetВ этом методе я обновляю позицию, в которой очередь моего текущего свойства имеет текущее свойство для прослушивания, и обновляю их все;
Наконец положитьdataИзменить значение атрибута в объекте;
Примечание: Это ответ из интервью, но он недостаточно подробный. Если вы хотите подробно узнать, что вы сделали, перейдите к:Анализ исходного кода Vue (перед созданием экземпляра) — принцип реализации адаптивных данных
4, один
urlЧто произошло с момента входа и нажатия клавиши Enter до отображения страницы?
Во-первых, после ввода URL-адреса и нажатия Enter DNS-сервер будет разрешать URL-адрес через текущий URL-адрес в это время.ip;
найти истинуIPПозже, в это время, браузерwebСервер инициируетtcpЗапрос подключения (трехстороннее рукопожатие):
первый раз: Когда связь установлена, клиент отправляетsynпакет на сервер и введитеSYN_SENT(Протокол управления передачей) статус, ожидание подтверждения сервера;
второй раз: сервер полученsynпакет, должен подтвердить клиентаsyn, а также отправитьackпакет, т.е.syn + ackпакет, сервер входитSYN_RECV(После пассивного открытия сервера он получаетsynи отправилackгосударство) государство;
в третий раз: клиент получает серверsyn + ackПакет, отправить пакет подтверждения на серверack, пакет отправлен, клиент и сервер входятESTABLISHED(tcpсоединение установлено успешно) статус, завершите трехстороннее рукопожатие;
Когда трехстороннее рукопожатие завершено, клиент и сервер установили соединение.tcpсоглашение отключено;
Начать доступ по умолчанию под текущим серверомindex.htmlи вызвать файл ресурсов, к которому осуществляется доступ, для отображения соответствующего содержимого.
5. Как вы понимаете объектно-ориентированное, что такое объектно-ориентированное и что вы сделали с объектно-ориентированным
Объектно-ориентированный имеет три характеристики:упаковка,наследовать,полиморфизм, на самом деле есть еще одна особенность, т.Аннотация, но мы редко говорим это;
Объектно-ориентированный имеет две концепции:Добрыйа такжеПример;
Объектно-ориентированные преимущества: Расширяемый, простой в обслуживании, высокая сплоченность, низкое сцепление;
Недостатки объектно-ориентированного подхода: Из-за своих характеристик его общий объем будет очень большим, даже если он разбит на разные классы, что согласуется сфункциональное программированиеПо сравнению с этим, это его недостаток, потому что одной из характеристик функционального программирования является то,Каждая функция делает только одну вещь;
В проекте много чего сделано с объектно-ориентированным подходом, и есть два самых впечатляющих, один из нихмгновенное сообщениеинкапсуляция функции, а другойВоспроизведение аудио видеоунифицированная обработка, обмен мгновенными сообщениями включает в себя больше функций и является более громоздким.Воспроизведение аудио видеоВозьмем эту функцию в качестве примера:
Поскольку продукты, которые мы производим, будут включать много аудио и видео, но аудио и видео файлы не могут воспроизводиться одновременно, одновременно может воспроизводиться только один;
Я, например, сейчас играюаудио а, когда я в следующий раз нажму кнопку воспроизведенияаудио б, то на этот разаудио аЭто пауза, а не очистка состояния, а следующий щелчок — повторное воспроизведение;
И если я играю среди штатов, мне нужно обновитьdataДанные, полученные от объекта, правильнопоток движка jsЭто тоже повлияет, например, я в это время занимаюсь другими делами и должен быть в потоке событий.event loopстоять в очереди, чего мы не хотим;
Поэтому я использовал класс для этого, используемый шаблон проектированияодноэлементный шаблон;
При первом входе на страницу загружается только файл, а объект не создается;
Когда я обнаруживаю, что есть операция над медиафайлом (аудио-видео), когда я иду, чтобы создать или получить его, он пишет следующее:
class Media {
}
Media.instance = undefined;
Media.getInstance = function(){
if(!Media.instance){
Media.instance = new Media()
}
return Media.instance;
}
Это простая реализация одноэлементного шаблона;
Затем, если мы хотим выполнить описанную выше операцию с медиафайлом, нам понадобится отдельный атрибут:
class Media {
constructor(){
this._onlyMedia = {
id:'',
url:'',
name:'',
curTime:'',
duration:'',
...
}
}
}
Таким образом, я знаю общее значение.Например, каждый раз, когда я нажимаю на медиафайл, мне приходится сравнивать, одинаковы ли они, потому что есть разные идентификаторы;
具体的实现步骤我就不写了,大概的意思表述清楚就好
6. Только что вы упомянули цикл событий, можете вкратце рассказать, что такое цикл событий?
Как мы все знаем, js является однопоточным, хотяworkerсуществует, но он может только работать, а не действоватьdom;
Поток, который js сначала выполняет, является основным потоком, а затем, после выполнения основного потока, это микро-очередь.microtaskПосле завершения выполнения микроочереди выполняется макроочередь.macrotask;
метод очереди макросов:setTimeout,setInterval,setImmediate,I/O,UI rendering
Микроочередь:promise.then,process.nextTick,Object.observe(已废弃)
Я только что написал статью об этом раньше, и если я хочу подробно разобраться в этих знаниях, перейдите к:Оптимизация производительности — механизм цикла событий js (цикл событий)
7. Скажи что-нибудь
xssатака
На самом деле, это своего рода сценарий использования для имплантации кода на страницу, предоставляемую другим пользователям, обычно с использованием отправки формы;
Если мы сами напишем этот метод защиты от атак, самый простой способ — использовать контент, отправленный формой, для его обработки и не разрешить отправку.scriptсодержание этикетки и т. д.;
Обычно в реальном проекте для отправки запроса обычно используютaxios, это правильноxssАтака перехвачена, особо заниматься ею не нужно;
8. Разница между == и ===
== будет автоматически преобразовывать типы для сравнения, === является обязательным и не будет преобразовываться
9,
vueсреди,onМожет ли событие прослушивать несколько событий?
Могу
Карьерный рост и планы на будущее
1. Как вы позиционируете себя в будущем и в каком направлении хотите развиваться?
Моя работа связана с интерфейсом, но я также очень интересуюсь продуктами.После столь долгой работы над интерфейсом я обнаружил некоторые проблемы, которые непосредственно существуют в коммуникации между интерфейсом и продуктом.Они могут выражать один и тот же смысл друг другу, но терминология не одинакова, увеличение затрат на связь, что приводит к определенному количеству трений непосредственно друг с другом;
И если каждый будет рассматривать проблему со своей точки зрения, то будут определенные ограничения, в том числе и продукта.Хоть я и программист, но я буду рассматривать проблемы нашего продукта с точки зрения пользователя, а также Если я пользователь, какие продукты я хочу и какие продукты соответствуют моим потребностям?Необходимо выяснить, какие продукты хочет разработать менеджер по продукту и какие продукты нужны пользователям.Это две концепции;
Если я отложу в сторону направление продукта и буду рассматривать только разработку, то подумаю об изучении своего фронтенда, ведь во фронтенде задействовано много знаний, хотя многим фронтендам сейчас приходится разбираться в бэкенде -end, я с этим согласен, но я думаю, как фронтенд, я все равно делаю свою работу на пределе, а потом изучаю другие языки;
Что я имею в виду под крайностью, так это не очень хорошо завершить работу, а сосредоточиться на этой области, постоянно учиться и отслеживать, а также иметь сильное обоняние для новых знаний;
Обычно я интерпретирую полученные знания, исследование новых технологий и исходный код некоторых относительно крупных фреймворков, а затем пишу статьи и публикую их в блоге;
2. Вы упомянули, что можете вести блог, это требование вашей предыдущей компании?
Нет, я написал это от своего имени;
Раньше я редко писал об этом, не любил писать, лень, а тут я связался с другом, он сказал, что можно попробовать написать, обобщить сам, и тогда я начал пробовать написать;
Сначала, когда я писал первую статью, я чувствовал себя так: я написал статью по своей идее, но для такой статьи я обнаружил, что была проблема с первым форматом набора, который выглядел очень неудобным и грязным;
Затем есть некоторые моменты, которые очень неясны или есть определенные проблемы с пониманием.Благодаря комментариям пользователей сети я также могу узнать, в чем заключаются мои собственные недостатки;
Спустя долгое время у вас выработается эта привычка, любить делиться, писать статьи и добиваться прогресса со всеми.На самом деле, есть еще одно преимущество ведения блога, то есть чем дольше вы ведете блог, тем лучше ваше выражение навыки будут.
У вас хорошие навыки, но вы не можете выразить себя, поэтому вам трудно работать вместе. Таким образом, вы можете сражаться только в одиночку. Вы можете только позволить всем понять и принять то, что вы сказали. Это показывает, что вы можете сыграть большую роль. в команде.Иногда технологии хуже общения и самовыражения;
заключительные замечания
Потом два интервьюера долго уходили. Позже они вошли и сказали мне, что чувствуют себя очень подходящими. Они были наиболее подходящими для интервью в эти дни. Однако из-за принципа 52 они пошли в технический директор, чтобы обсудить.Технический директор сказал, что, возможно, я не мог передать это со стороны HR, и тогда я спросил своего бывшего коллегу, который сейчас работает в JD. год;
Может быть это мои способности или нет, но выше все мои ответы, просто написанные в виде блога, написанные более подробно, может быть последнее, если второе, то это будет неправильно;
Наконец, меня порекомендовали в компанию без водителей, и у меня было 3 раунда техники, ожидание уведомления hr.