предисловие
Прошло много времени с момента последнего обновления.В последние несколько месяцев, хотя я не обновлял статью, я не сидел без дела.Я вышел и обратился к фронтенд-требованиям к подбору персонала крупных компаний, внешний рынок и тенденция. Пройдя через это, я начал пересматривать свое направление обучения, улучшать свою систему структуры знаний и методы обучения, и я буду учить всему, что знаю и испытываю. Причина, по которой я пишу это, не в том, чтобы афишировать, насколько я хорош. Круто, я просто хочу поделиться окольными путями, на которые я наступил, помочь ученикам, которые действительно любят переднюю часть, встать на плечи наших предшественников и преодолеть технические препятствия, и оставить достаточно энергии, чтобы исследовать переднюю часть, которая более интересна и что мне действительно нравится , В то же время это также объяснение для себя за последние несколько месяцев; в конце статьи я запущу «план трансформации внешнего интерфейса», и я объясню конкретную информацию в конце статья Друзья, которые любят интерфейс, могут присоединиться.
Введение
Прежде всего, речь идет о серии повторов, я буду определять общую систему в соответствии с наиболее подходящими формами, с которыми я лично контактировал, а также упомяну более экстремальные и нишевые формы, чтобы предотвратить случайное наступление на яму. Весь цикл темы займет много времени и статей будет больше, буду постепенно расширять по методу сначала обобщения, а потом детализации.
Согласно раундам собеседования, согласно техническому уровню, если все пройдет хорошо, оно будет разделено на 5 раундов.Эти 5 раундов последовательно оцениваются.Основное содержание каждого раунда следующее:
Вышеупомянутый уровень собеседования - это процесс средних и крупных компаний. Вы можете обратиться к основной структуре 5 раундов собеседований, чтобы создать свою собственную систему знаний и целенаправленно просмотреть ее. Кроме того, поскольку задействованные знания очень обширны. , время обновления будет очень долгим.Если не можете дождаться, вы можете обсудить это в личном сообщении. В каждой теме я буду перечислять только несколько вопросов, но когда буду давать идеи решения, я буду расширять расширение. Опять же, ответ не важен. Как связать воедино пройденные знания, пусть интервьюер действительно поймет, что вы Я действительно понимаю, это ключ.
Тема этой статьи
Раунд собеседования: первый тур
Способность к проверке: владение базовыми знаниями о интерфейсе и фактические навыки программирования.
Основные знания: основы JS - область закрытия памяти стека
тема:
1、parseInt()和Number()有什么区别?
2、var 和 const的区别?
3、如何实现一个函数add使得:add(1)(4,5,6)(7,8)(10) 输出 41 ?
4、说说ES6里面对数字类型的增强特性有哪些?
идеи решения проблем
Вопрос 1 В чем разница между parseInt() и Number()?
Проверьте знание: типы данных JS, почему существуют неявные преобразования
Основная идея: сначала ответьте, какова роль этих двух API, а затем расскажите о конкретных различиях (входные параметры, процесс, результаты), а затем объясните, почему это происходит;
Пример ответа: parseInt и Number — это методы преобразования входных параметров в числа. parseInt преобразует входной параметр в целое число по указанному основанию, а Number преобразует входящий параметр в числовое значение. Эти два параметра различаются по количеству разрешенных для приема параметров, а также могут отличаться по результату преобразования. первое отличие; второе отличие заключается в том, что в процессе преобразования parseInt будет пытаться преобразовать входящие параметры в числа до тех пор, пока не встретит символы, которые не могут быть преобразованы в числа, а Number будет сканировать входные параметры перед преобразованием. есть символы, которые нельзя преобразовать в числа, все возвращают NaN, третий момент заключается в том, что для специальных типов обработки, для null и undefined, parseInt вернет NaN, а Number вернет 0 и NaN;
Вопрос 2 В чем разница между var и const?
Проверка знаний: как определять переменные в JS и зачем добавлять новый способ определения переменных
Основная идея: сначала ответьте, какова роль этих двух API, затем в чем разница и почему это происходит;
Пример ответа: VAR и ConST — это способы объявления переменных, и разница между ними, в основном, в следующих аспектах:
1)兼容性和语法支持;var是JS最早声明变量的方式,只要支持JS,都支持var声明变量的方式,而const是ES6新加入的语法,在部分不支持的环境中需要使用工具转换成var的写法;
2)变量提升的区别;var声明的变量会存在着变量提升的特性,也就意味着在变量正式被赋值之前都可以被读取,而const声明的变量不具备变量提升的作用;
3)与全局对象的关系;在全局环境中,使用var申明的变量,既是一个全局的变量同时还是全局对象window的一个属性,而使用const声明的变量仅仅是一个变量;
4)重复声明;使用var声明的变量,允许在相同的环境中再次声明一个同名变量,而使用const声明的变量,不允许再次声明同名变量;
5)暂时性死区;const具有暂时性死区的特性,在变量被声明赋值之前,访问变量会出现报错的问题,这是ES6为严格语法规则加入的特性,保证了变量在声明之后才可读取;
6)与块级作用域的关系;const和let的出现很大的一个原因是因为在ES6中除了以前的全局作用域和函数作用域,新增了块级作用域的概念,而const的有效范围其实就是块级作用域,再一次细分了作用域的维度大小;
7)为什么会出现const呢?
ES规范的出现是为了改变JS本身存在的问题,使其能够安全稳定的在较大的综合项目中稳定运行,因此对于一些影响因素重新添加新的语法规则得以改善,同时又保持原有语法正常支持;
Вопрос 3: Как реализовать функцию непрерывного сложения add, чтобы: add(1)(4,5,6)(7,8)(10) выдавало 41 ?
Основная идея: Согласно информации темы, после того, как каждое выполнение добавления завершено, оно может быть выполнено снова, что означает, что после завершения выполнения добавления возвращается функция, и эта функция может накапливать все входящие параметры, поэтому проблема становится :
1) Как записывать каждый входящий параметр;
2) Как все-таки вернуть функцию после выполнения, а также добиться накопления;
3) Если возвращаемая функция является функцией, как я могу вернуть число при доступе к результату выполнения?
Для решения записи параметра проще всего придумать установить глобальную переменную, записать каждый входящий параметр, а потом просуммировать, это самый простой способ придумать, но у этого способа есть недостаток, т.е. в одном и том же пространстве имен функция с одними и теми же параметрами выполняется дважды, и полученные результаты совершенно несовместимы, а результат последнего выполнения в два раза больше результата предыдущего.Причина в том, что хотя параметры записываются каждый время, идеал Ситуация такова: когда я повторно выполняю, результат, который я хочу, является начальным значением, не загрязненным результатом последнего выполнения; код:
add(1)(4,5,6) // 16 add(1)(4,5,6) // 32
И что мне нужно: Добавить (1) (4, 5, 6) // 16
add(1)(4,5,6) // 16
Следовательно, есть проблема в использовании глобальных переменных для решения проблемы записи параметров, поэтому приходится искать другой путь; еще один способ решения этой проблемы — замыкание, которое может позволить нам получить доступ к переменным внутри функции извне, и теоретически сохранить Проблема переменных решена, тогда вторая проблема заключается в том, что результатом выполнения является функция, что не является проблемой в замыкании, потому что самая очевидная особенность замыкания в большинстве случаев состоит в том, чтобы возвращать переменную, занятую снаружи, то есть очки также соответствуют требованиям.
Таким образом, согласно приведенным выше идеям, псевдокод можно записать следующим образом:
function add(arg){
arg = oldArg + arg; // 参数合并,并且首次执行参数是初始值
return function(arg){ // 返回一个函数,将合并后参数继续传入
// ……
}
}
Теперь остался последний вопрос, как вернуть номер при доступе к нему? Согласно предыдущей идее, после выполнения функции она вернет функцию, а функция является значением ссылочного типа, для значения ссылочного типа при обращении к значению фактически обращается к [Symbol.toPrimittive], valueOf , toString в ссылочном типе. Получите примитивное значение ссылочного типа, поэтому нам просто нужно выбрать один из них и переопределить его метод. Теперь, когда вопрос в принципе прояснился, по идее, напишите ответ прямо:
function add(...arg){
function proxy(...innerArg){
arg = [...arg,...innerArg];
return proxy
}
proxy.toString = function(){
return arg.reduce(function(total, item){return total + item}, 0)
}
return proxy
}
Следует отметить, что прокси здесь не является функцией Proxy, если вы чувствуете, что это сбивает с толку, вы можете изменить его на другое имя.
Тема 4: Каковы улучшения числового типа в ES6?
Главная мысль:
Ограничение очень четкое, оно для числового типа, так что резюмируйте новые функции максимально подробно, не только проверяйте свое понимание ES6, но и проверяйте способность суммировать временные обобщения.
Справочный ответ:
Поддержка ES6 возможностей цифрового типа в основном обусловлена двумя соображениями: одно — исправить существующие дефекты, а другое — обеспечить расширение возможностей;
Сначала поговорим о дефекте:
1)增加Object.is()方法弥补等价判断缺陷;
在以往 +0 === -0 结果是true, 但是有时候我们希望的是只要是完全一样,结果就返回true,
但凡有差异,结果就返回false, 但事实并非如,江湖上一直流传着以下代码:
+0 === -0 // true
NaN === NaN // false
Эта ситуация очень проблематична. В конкретном бизнесе вам нужно написать инструментальную функцию, чтобы определить, действительно ли она непротиворечива. Чтобы компенсировать эту проблему, ES6 добавляет метод Object.is(a,b). Чтобы решить эту проблему непоследовательности в суждениях, давайте посмотрим на результаты после составления:
Object.is(+0, -0) // false
Object.is(NaN,NaN) // true
Это эквивалентность, которая согласуется с нашим познанием.
2) Увеличить Number.EPSILON, по которому можно судить о равенстве двух чисел.
Представление чисел в JS не различает целые числа и типы с плавающей запятой, и все они представлены 64-битными типами с плавающей запятой двойной точности, что приводит к тому, что при преобразовании некоторых чисел нет возможности точно представлять их в двоичном виде, поэтому классическое 0,1 + 0,2 !== 0,3 Проблема в том, что при проектировании суммы транзакции точность обработки очень старая.Либо пишите функцию обработки для увеличения, а затем уменьшения, либо используйте третью -партийный инструмент. Его значение равно 2 в степени -52. Мы можем позаимствовать очень небольшую характеристику этого значения и думать, что пока разница между двумя числами меньше этого значения, два числа можно считать равными. , хотя это по-прежнему невозможно сделать за один шаг без процесса сравнения, но это может упростить нашу логику сравнения, и по-прежнему очень полезно монтировать глобал после инкапсуляции
Поговорим об увеличении мощности:
1) большойИнт Проблема, которую необходимо решить с помощью bigInt, заключается в том, что данные будут искажены после превышения максимального безопасного числа, а минимальное безопасное число меньше минимального безопасного числа.Хотя мы можем использовать форму строк для представления, мы не можем полагаться над строками для числовых операций, и мы должны запретить бэкенду отдавать их в реальном времени.Количество s будет вне допустимого диапазона, да и возможности бэкенда тоже нужны для вычислений.BigInt может реализовать представление данных без искажений , а также может выполнять операции, что является большим благом;
2) Максимальный безопасный номер и минимальный безопасный номер Чтобы быть точным, это называется наибольшим безопасным целым числом и наименьшим безопасным целым числом, которые выражаются как: Number.MAX_SAFE_INTEGER и Number.MIN_SAFE_INTEGER, а соответствующие значения равны 2^53 и 2^(-53) соответственно. значение за пределами этого диапазона будет искажено.В реальных проектах вы можете использовать это для оценки безопасности в сочетании с комплексными приложениями bigInt;
План трансформации интерфейса
Каков план трансформации фронтенда?
Front-end Transformation Program — это открытая программа обучения и совершенствования для фронтенд-разработчиков, которые любят и стремятся совершенствоваться.
Что планируется решить?
Основные проблемы, которые необходимо решить с помощью плана трансформации начального этапа, следующие: замешательство учащихся начального этапа, у которых есть идеи, но нет настойчивости, есть настойчивость, но метод малоэффективен, есть идеи, но они не знают, куда их применить. Начало.
Что я могу получить, участвуя?
Привычки мышления:
привычки непрерывного обучения: Вы когда-нибудь задумывались над вопросом: почему вы все равно получаете высокую зарплату, даже если вы только выходите на фронт? Причина в том, что, хотя интерфейс — это профессия, требующая накопления, скорость итерации очень высока.Десять лет назад вам нужно было понимать методы, совместимые с IE, но теперь, пока вы изучаете нативный JS и vue/react, Вы можете получить удовлетворительное предложение, быстрое развитие не только увеличивает стоимость обучения, но также означает, что в любое время, пока вы освоите текущую относительно популярную технологию, вы можете получить свою долю пирога. от фронтенда, а затем на работе Чтобы компенсировать свои базовые знания, это очень дружелюбно к новичкам, но для старого фронтенда требуется постоянное обучение, так что новички должны иметь относительно большое профессиональное преимущество в технологиях. Ведь у новичков такие высокие требования к зарплате и сверхурочным.
действующий по собственной инициативе: Люди инертны, мало кто может придерживаться в течение длительного времени одного дела, помимо обучения вне всего привлекательного, поэтому план достижения цели которого заключается в достижении чувства самопробуждения, обретении комфорта в обучении , чтобы добиться собственной инициативы в обучении, мы будем продвигать предварительную тему регулярного напоминания об обучении и постепенно развивать привычку, достигать самостоятельного активного обучения, столкнуться с проблемой, а затем вернуться к обмену.
Запомни ответ! == Да: Существует много знаний в области передовых знаний, и нет авторитетного объяснения, почему это такой справочный материал.По некоторым пунктам античеловеческого знания, даже если вы хотите спросить, почему, не знаете, у кого спросить. Потихоньку вспоминаю ответы на некоторые вопросы, но принципа не знаю, поэтому задача, которую нужно решить по плану, сделать так, чтобы захотелось спросить, почему, кто-нибудь да и может дать подробный анализ, а потом вспомнить это после понимания, такая память имеет смысл.
непрерывное резюме: Фронтенд знания сложны и богаты, и овладеть ими глубоко непросто, кроме того, на разных этапах угол вашего понимания и глубина одного и того же пункта знания тоже будут разными. Нужно помнить о тех, кто любит спрашивать вопросы на собеседованиях и на самом деле работают Точки знаний, с которыми нельзя столкнуться в
метод исследования:
проектная самоспособность: Я всегда рассматривал выполнение проектов как нечто иное, чем самообучение. Пока однажды я не встретил мастера, который получал знания только из реальных проектов, и я понял, что мое мышление было неверным. Я хочу сказать, что нужно найти способ учиться. из практической работы Если вы чувствуете, что не можете получить это из проекта, значит, проблема в методе Найдите способ спросить людей, знакомых с этим методом обучения, и поучитесь у них В то же время вы не могу отказаться от саморасширения вне работы.В конце концов, работа Знания, используемые на собеседовании, не равны знаниям, проверяемым на самом собеседовании, поэтому постарайтесь сбалансировать оба, насколько это возможно.
Построить дерево знаний: У всех более могущественных мастеров, которых я встречал, есть свои собственные деревья структуры знаний. Вам не должно нравиться трудоемкое и трудоемкое построение деревьев знаний. Они могут визуализировать вашу систему знаний и позволить вам по-настоящему увидеть себя на бумаге. доступно и какие знания еще пусты, а также позволяет быстро построить систему знаний, когда вы снова просматриваете ее с нуля.
тематические группы по интересам: Найдите единомышленников и послушайте, что они понимают по определенной теме. Не скучайте всегда в своем собственном мире. Столкновение идей будет стимулировать больше удовольствия от обучения; групповых людей не нужно слишком много, 3-8 Людей достаточно, мы должны поддерживать достаточно прилежное отношение, поощрять друг друга и обсуждать вместе.
Вопросы кисти: Я считаю, что большинство студентов использовали эту технику для поддержки войны.Если метод решения проблем является подходящим, он может обеспечить относительно большое улучшение способности программирования в краткосрочной перспективе, но он должен быть подходящим, как оценить, является ли метод подходит? Есть относительно простой способ, задайте вопрос, вы напишете его через неделю, и убедитесь, что у вас могут появиться идеи в следующий раз, когда вы столкнетесь с вопросом того же типа, тогда вы действительно освоили навыки чистки вопросов. наоборот надо думать до конца.Когда есть проблема в какой ссылке не тереть вопрос без цели.Запоминать вопрос бесполезно.Если забудете выучить,забудете выучить,эффективности не будет , и это будет смущать себя.
Склад ума:
отпустить тревогу: Фронт-энд развивается так быстро, что все не могут понять ситуацию на рынке фронт-энда в данный момент, поэтому всегда есть люди, которые целенаправленно говорят, что фронт-энд насыщен, фронт-энд холод и прочие сопутствующие слухи.Если вы имеете определенное представление о фронтенде и бэкенде, то эти слова естественно обречены на провал, и плохо то, что эти люди приводят внятные аргументы в пользу этого аргумента, так что даже если вы не верите, ваше сердце все еще колеблется, и вы невольно впадаете в тревогу по поводу карьеры, есть еще своего рода тревога Это техническая тревога.Так называемая техническая тревога заключается в том, что обновления и итерации технологий слишком быстры, и они переживают,что не успеют за тенденцией развития и будут ликвидированы.Но на самом деле,никто не может контролировать все новые и старые технологии,и не надо слепо искать новые.Попробуйте текущую технологию вы освоили, иначе будете все знать, и будете незнакомы со всем.Если не умеете приспосабливаться, добро пожаловать к нам и преодолевать тревогу вместе.
научиться тревоге: Некоторые одноклассники спросят, разве вы только что не сказали, что должны быть спокойны и обеспокоены? Почему вы говорите, что вам нужно научиться быть тревожным? Я хочу сказать здесь, что вы должны научиться отбрасывать невинную тревогу, которую бросают вам другие, но у вас должно быть чувство кризиса, потому что, если вы не учиться,правда будет если долго не учиться.Будет ситуация когда зарплата будет инвертирована.У вас должен быть внутренний драйв,но вы должны усвоить эту степень,иначе вы будете одержимы или подавлены .
Как принять участие?
Разделю на фанатизм и любовь по степени вашей любви к технике.По фанатизму разобью на группы,группа 7-10 человек.По любви объединим их вместе.Людей может быть больше, так что все, может быть, вы можете участвовать в плане через официальный аккаунт поиска WeChat [Расширенное руководство по интерфейсу]. Я надеюсь снова подумать о сегодняшнем решении через год. Я чувствую, что сегодня сделал правильный выбор. Неудачник.
наконец
Наконец, позвольте мне привести цитату, которая мне очень нравится:
"The best time to plant a tree was 10 years ago. The second best time is now."
Лучшее время для посадки дерева было десять лет назад, а затем и сейчас.
Я являюсь образцом, покажу вам глубокий интерфейсный мир, построю структуру знаний, которая вам подходит, обратите на меня внимание и бегите быстрее.