jQuery对象是通过jQuery包装DOM对象后产生的对象
注意:jQuery对象只能使用jQuery里的方法,DOM对象只能使用DOM对象的方法
基本选择器
层级选择器:
基本筛选器:
属性选择器:
表单筛选器:
筛选器方法:
jQuery的一些方法:
注意:对于标签上有的能够看到的属性和自定义属性用attr()方法
对于返回布尔值比如checkbox,radion,option这三个标签是否被选中,用prop方法
事件绑定方式:
注意:DOM定义的事件可以用 .on()方法来绑定事件,但是jQuery定义的事件就不可以
常用事件有:
移除事件:把on改成off,就是移除 .on()绑定的事件
阻止后续事件执行:事件函数中添加 return false(常用于阻止表单提交等)或者e.preventDefault()
阻止事件冒泡:添加e.stopPropagation()
利用父标签去捕获子标签的事件
推荐阅读:
前端开发框架之jQuery 和 Vue 的选择
前端开发之15个jQuery小技巧分享
前端开发之JQuery入门基础操作
前端开发框架jQuery的优势与基础知识分享
1.从一名小白到前端大神需要掌握哪些知识点要想被称为前端大神要掌握的知识点还是有点多的,以我在源码时代培训过的经验来看,要想成为顶尖的前端大神,以下知识点你至少是应该要掌握的:“JavaScript基础、HTML入门基本内容,CSS+DIV的基础知识,选择器,盒子模型,网页布局,Photoshop,JavaScript高级编程,jQuery插件开发,模块化组件开,AJAX,HTML5,CSS3,响应式原理及布局,Bootstrap,前端依赖管理,CSS预处理语言(Less+Sass),Grunt/Gulp自动化构建工具Express(Node.js),MongoDB,ElementUIl,MVC、MVVM架构模式,VUE2,Webpack模块加载器&打包工具,React,Angular4,React Native”是不是感觉很多?觉得多就对了,只有对上述内容做到系数掌握,你才有资格被称之为“前端大神”。
2.学习前端HTML5需要了解哪些知识点
Stylus/Less实现CSS预编译
Express实现服务器端搭建
Nginx实现服务器反向代理
ngrok实现内网穿透
sha1、MD5实现加密隐私数据
Monggose实现mongoDB数据库操作
Echarts实现数据可视化
Mock、json-server实现模拟数据
Nodejs实现前后端完全分离
WebSocket实现实时通信
企业级UI设计图实现页面布局
BootStrap实现响应式页面
原生JavaScript实现小游戏开发
原生Ajax实现前后端通信
JSONP,CORS实现解决跨域
Animation实现动画
Canvas实现气泡, 钟表功能
jQuery实现备忘录项目
ArtTemplate实现模板页面复用
Viewport + Rem实现移动端适配
ViewPort实现1物理像素问题
原生JavaScript实现无缝滑屏
zepto实现移动端滑屏
Stylus/Less实现CSS预编译
Express实现服务器端搭建
Nginx实现服务器反向代理
ngrok实现内网穿透
3.网站前端开发都需要掌握哪些知识
CSS和HTML、JavaScript这是前端学习的三个语言,其中HTML是自简单,设计到代码多的就是CSS、JavaScript,入,门简单,达到初级前端水平很容易。
但是精通各种框架需要一定学习实践1、CSS和HTML刚入门的朋友,应该把重点放在 CSS和HTML基础知识的学习上。关于 CSS(3) 你需要了解以下一些知识点:web标准、HTML相关概念、HTML标签、路径相关概念、锚点及其他、表格标签、表单标签、综合案例,注册页面、CSS选择、CSS字体样、CSS外观属性、调式、CSS复合选择器、标签显示模式、CSS背景、CSS三大特性等等。
总的来讲,CSS和HTML的学习还是比较简单的。2、JavaScriptJavaScript一直都是前端工程师进步的基石, JavaScript 的理解深度决定了前端开发者的职业发展。
关于JavaScript的学习内容包括了浏览器执行JS过程、JS变量、数据类型、运算符、流程控制语句(if else 、三元表达式、switch)、循环(for、while、do while)、数组、冒泡排序、函数、作用域、预解析、对象、内置对象、简单类型和复杂类型等。只有在熟悉了JavaScript基础语法的基础上,我们才能继续深入学习前端技术。
前端需要掌握这些基本技能精通html,能够书写语意合理,结构清晰,易维护的html结构;精通css,能够还原视觉设计,并兼容业界承认的主浏览器;熟悉javascript,了解ECMAscript基础内容,掌握至少两种js框架随着web前端技术不断发展,web前端的岗位越来越多了,技术方向也有好多种,。web前端有广阔的发展空间,app、小程序、移动端、pc端等都是需要前端技术的开发支持才能够完成,技术门槛相对较低、需求量较大,薪资待遇良好。
只要是互联网端的客户界面,就需要前端来制作完成,前端开发的编程量不大,但是需要部分编程,入门简单,但是要学的深入需要一个过程。Web前端招聘岗位• 前端开发工程师、Web开发工程师、网页开发工程师、HTML开发工程师。
• H5开发工程师、移动应用开发工程师、App开发工程师、小程序开发工程师。• JS开发工程师、Vue.js开发工程师、Node.js开发工程师、前端架构师。
• 小游戏开发工程师、数据可视化开发工程师、WebGL开发工程师、WebVR开 发工程师、Web安全工程师。在互联网行业,前端有WEB前端、HTML前端等,随着互联网技术发展,就业方向也有很多。
web前端的就业方向有web架构师、web前端工程师、HTML前端开发工程师、网页设计师等等。HTML前端开发与Web前端开发不同的是,使用HTML5不仅仅可以开发前端,还有网页游戏,手机APP,使用浏览器进行3D渲染等一系列建立在HTML5标准与搭载其标准浏览器上的开发,而未来可能会有更多的功能分支并入HTML5标准。
web前端工程师这个方向是目前从事Web前端开发的主要就业方向Web架构师薪资普遍比较高,技术要求高,掌握多种技能,包括:后端技术、DBA、Platform等等,甚至包括网站优化SEO技术。数据方向数据研发这个是在Web开发的基础上用数据附能,懂可视化的一定是有前端能力的,懂hadoop的一定java要熟悉,属于Web开发的拓展方向。
大前端方向比如阿里,在大量实践rn和weex;由于公司内部安卓/ios式微,一定程度上,前端把ios和安卓收编了,统称大前端。图形学方向前端自然是与图形学有千丝万缕的联系,除了上面提到了可视化,还有相关3d引擎的开发工作。
做这一行要求也非常高了,图形学相关的算法,3d引擎的开发,这都需要图形学相关知识。
4.学HTML5,你需要掌握这几个知识点
Html5开发可谓是这几年来特别“受宠”的软件开发了,html5不仅入行门槛低、薪资高,发展前景更是可观,所以得到大家的追捧和青睐也是实至名归的,那么想要从事html5开发学习要掌握哪些必备的知识呢?
那么想要学好html5开发,那么需要掌握的专业技术有:
第1阶段:前端页面重构:PC端网站布局、HTML5+CSS3基础项目、WebAPP页面布局;
第2阶段:JavaScript高级程序设计:原生JavaScript交互功能开发、面向对象开发与ES5/ES6、JavaScript工具库自主研发;
第3阶段:PC端全栈项目开发:jQuery经典特效交互开发、HTTP协议,Ajxa进阶与后端开发、前端工程化与模块化应用、PC端网站开发、PC端管理信息系统前端开发;
第4阶段:移动端webAPP开发:Touch端项目、微信场景项目、应用Vue.js开发WebApp项目、应用Ionic开发WebApp项目、应用React.js开发WebApp
第5阶段:混合(Hybrid)开发:各类混合应用开发;
第6阶段:NodeJS全栈开发:WebApp后端系统开发;
第7阶段:大数据可视化:数据可视化入门、D3.jS详解及项目实战。
如今移动互联网发展迅速,技术不断的更新迭代,所学知识也需与时俱进。现在市场上的主流互联网网站,需要打造的是一流用户交互体验。对于前端开发者的要求,不再是简单的页面展示,而是需要全栈式的前端开发工程师。
5.web前端开发需要用到哪些知识
1. HTML5 + CSS3 + JavaScript Web开发基础中的基础,HTML是负责网页结构,CSS负责网页样式,JS则负责逻辑交互。
前两者更像是标记语言,没有什么逻辑,JS才是前端的重中之重。 HTML5 新增的技术大部分需要结合JS学习。
每个人学习进度可能不同,这个阶段主要是多仿站,熟悉基础,试试用CSS写响应式页面,了解JS深入性的知识,比如原型链、闭包、设计模式 等需要更多的积累,逐渐理解并实践掌握。 2. JQuery + BootStrap + Ajax + Json jQuery是JS的一个应用库,能够提升原生JS开发效率。
Bootstrap则是响应式框架,更简单的实现手机/平板/PC多个设备的页面支持。Ajax技术用于异步交互,不刷新页面就能更新数据,比如 地图 应用等。
Json是一种数据格式,被广泛应用在各大编程语言中。 jQuery 和 bootstrap 会简化很多编写的代码量,用着不亦乐乎,但对于基础还不是很扎实的人建议还是少用。
Ajax 和 json 通常用于和后端交互,在实际业务中也经常用到。 3. Git/SVN 版本管理工具,主要用于团队开发时避免文件冲突,也可回档。
前端推荐学习Git。 4. Nodejs + Mysql /MongoDB(可选) 运行在服务器端的JavaScript。
Express是其拓展MVC框架。其中nodejs最常用到的就是npm包管理器,不用到各个网站去下载资源包。
数据库 的学习可以选择MongoDB或者MySQL,前者与Nodejs的契合度更好,不过现在大多数网站都是 PHP +Mysql的组合,如果有学PHP的打算的话,可以先学习 Mysql 。 5. ECMAScript 6 JavaScript 的语言标准。
ES6中加入了很多新的概念,也弥补了之前版本中JS的很多缺陷,越来越多的项目开始运用ES6进行开发。学之前最好把ES5先搞懂了,目前实际项目中考虑到兼容性,ES6是需要通过Babel将其编译为ES5来部署的。
6. Angular/React/Vue 前端三大框架,各自也有着各自的生态系统,根据需求自行选择学习。目前企业需求量最大的仍然是Angular,但近期趋势来看react和vue则更受欢迎。
因为现在前端技术发展太过于突飞猛进,工具和框架的更新比翻书还快,建议学习还是看文档比较好。学习过程中也会遇到很多用到各种构建工具的时候。
7. 其他常用工具 这个一样是根据需求自行选择学习。比较常用的现在有 Web pack,可以将多个不同编程风格的文件打包,比如ES6/AMD/CMD之类的模块化都能识别并编译成 浏览器 能运行的文件。
Sass/Less,CSS预编译框架,可以用带有逻辑性的方式编写CSS代码。Gulp/Grunt构建工具,可以自动化对代码进行压缩合并等工作。
8. 其他后端编程语言 目前市场对前端基本都要求会一门后端语言, PHP / JAVA / Nodejs / Python 等。
6.前端这么多知识点该怎么记忆
前端涉及到的知识确实是比较广的,先要理清一定的框架,然后有条理的进行学习才能事位功半,这里我有一份知识体系给你了解一下
如果你有毅力可以坚持下去就自己好好的自学,但如果觉得效率不是很好条件允许的话也可以考虑参加系统的培训,虽然要花钱但可以省不少的时间,自己权衡。
HTML、CSS相关
html5新特性、语义化
浏览器渲染机制、重绘、重排
网页生成过程:
重排(也称回流): 当 DOM 的变化影响了元素的几何信息( DOM 对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。 触发:
重绘: 当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。 触发:
重排优化建议:
transform不重绘,不回流 是因为 transform 属于合成属性,对合成属性进行 transition/animate 动画时,将会创建一个合成层。这使得动画元素在一个独立的层中进行渲染。当元素的内容没有发生改变,就没有必要进行重绘。浏览器会通过重新复合来创建动画帧。
css盒子模型
所有 HTML 元素可以看作盒子,在CSS中, "box model" 这一术语是用来设计和布局时使用。CSS 盒模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边距,边框,填充,和实际内容。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
css样式优先级
!important>style>id>class
什么是BFC?BFC的布局规则是什么?如何创建BFC?BFC应用?
BFC是Block Formatting Context的缩写,即块格式化上下文。 BFC 是CSS布局的一个概念,是一个环境,里面的元素不会影响外面的元素。 布局规则:Box是CSS布局的对象和基本单位,页面是由若干个Box组成的。元素的类型和display属性,决定了这个Box的类型。不同类型的Box会参与不同的 Formatting Context 。 创建:浮动元素display:inline-block position:absolute应用: 1.分属于不同的 BFC 时,可以防止 margin 重叠 2.清除内部浮动 3.自适应多栏布局
DOM、BOM对象
BOM(Browser Object Model) 是指浏览器对象模型,可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。 使JavaScript有能力与浏览器"对话"。DOM (Document Object Model) 是指文档对象模型,通过它,可以访问 HTML 文档的所有元素。DOM是W3C (万维网联盟)的标准。 DOM定义了访问HTML和XML文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。"W3C DOM标准被分为 3 个不同的部分:
什么是XML DOM ?XML DOM定义了所有 XML 元素的对象和属性,以及访问它们的方法。 什么是 HTML DOM? HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。
JS相关
js数据类型、typeof、instanceof、类型转换
闭包(高频)
闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》
当函数可以记住并访问所在的词法作用域时,就产生了闭包,
即使函数是在当前词法作用域之外执行 ——《你不知道的JavaScript》
原型、原型链(高频)
原型: 对象中固有的 __proto__ 属性,该属性指向对象的 prototype 原型属性。
原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。原型链的尽头一般来说都是 Object.prototype 所以这就是我们新建的对象为什么能够使用 toString() 等方法的原因。
特点: JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
this指向、new关键字
this 对象是是执行上下文中的一个属性,它指向最后一次调用这个方法的对象,在全局函数中, this 等于 window ,而当函数被作为某个对象调用时,this等于那个对象。 在实际开发中, this的指向可以通过四种调用模式来判断。
new
作用域、作用域链、变量提升
继承(含es6)、多种继承方式
(1)第一种是以 原型链的方式来实现继承 ,但是这种实现方式存在的缺点是,在包含有引用类型的数据时,会被所有的实例对象所共享,容易造成修改的混乱。还有就是在创建子类型的时候不能向超类型传递参数。
(2)第二种方式是使用 借用构造函数 的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到。
(3)第三种方式是 组合继承 ,组合继承是将原型链和借用构造函数组合起来使用的一种方式。通过借用构造函数的方式来实现类型的属性的继承,通过将子类型的原型设置为超类型的实例来实现方法的继承。这种方式解决了上面的两种模式单独使用时的问题,但是由于我们是以超类型的实例来作为子类型的原型,所以调用了两次超类的构造函数,造成了子类型的原型中多了很多不必要的属性。
(4)第四种方式是 原型式继承 ,原型式继承的主要思路就是基于已有的对象来创建新的对象,实现的原理是,向函数中传入一个对象,然后返回一个以这个对象为原型的对象。这种继承的思路主要不是为了实现创造一种新的类型,只是对某个对象实现一种简单继承,ES5 中定义的 Object.create() 方法就是原型式继承的实现。缺点与原型链方式相同。
(5)第五种方式是 寄生式继承 ,寄生式继承的思路是创建一个用于封装继承过程的函数,通过传入一个对象,然后复制一个对象的副本,然后对象进行扩展,最后返回这个对象。这个扩展的过程就可以理解是一种继承。这种继承的优点就是对一个简单对象实现继承,如果这个对象不是我们的自定义类型时。缺点是没有办法实现函数的复用。
(6)第六种方式是 寄生式组合继承 ,组合继承的缺点就是使用超类型的实例做为子类型的原型,导致添加了不必要的原型属性。寄生式组合继承的方式是使用超类型的原型的副本来作为子类型的原型,这样就避免了创建不必要的属性。
EventLoop
JS 是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列,异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。微任务队列的代表就是, Promise.then , MutationObserver ,宏任务的话就是 setImmediate setTimeout setInterval
原生ajax
ajax 是一种异步通信的方法,从服务端获取数据,达到局部刷新页面的效果。 过程:
事件冒泡、捕获(委托)
event.stopPropagation()或者 ie下的方法event.cancelBubble = true //阻止事件冒泡
ES6
Vue
简述MVVM
MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel。Model 层代表数据模型, View 代表UI组件, ViewModel 是 View 和 Model 层的桥梁,数据会绑定到 viewModel 层并自动将数据渲染到页面中,视图变化的时候会通知 viewModel 层更新数据。
谈谈对vue生命周期的理解?
每个 Vue 实例在创建时都会经过一系列的初始化过程, vue 的生命周期钩子,就是说在达到某一阶段或条件时去触发的函数,目的就是为了完成一些动作或者事件
computed与watch
watch 属性监听 是一个对象,键是需要观察的属性,值是对应回调函数,主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,监听属性的变化,需要在数据变化时执行异步或开销较大的操作时使用
computed 计算属性 属性的结果会被缓存,当 computed 中的函数所依赖的属性没有发生改变的时候,那么调用当前函数的时候结果会从缓存中读取。除非依赖的响应式属性变化时才会重新计算,主要当做属性来使用computed 中的函数必须用 return 返回最终的结果computed 更高效,优先使用
使用场景 computed :当一个属性受多个属性影响的时候使用,例:购物车商品结算功能watch :当一条数据影响多条数据的时候使用,例:搜索数据
v-for中key的作用
vue组件的通信方式
父子组件通信
父->子 props ,子->父$on、$emit` 获取父子组件实例parent、 parent 、children Ref获取实例的方式调用组件的属性或者方法Provide、inject` 官方不推荐使用,但是写组件库时很常用
兄弟组件通信
Event Bus实现跨组件通信Vue.prototype.$bus = new Vue() Vuex
跨级组件通信
$attrs、$listeners Provide、inject
常用指令
双向绑定实现原理
当一个 Vue 实例创建时,Vue会遍历data选项的属性,用 Object.defineProperty 将它们转为 getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher重新计算,从而致使它关联的组件得以更新。
v-model的实现以及它的实现原理吗?
nextTick的实现
vnode的理解,compiler和patch的过程
new Vue后整个的流程
思考:为什么先注入再提供呢??
答:1、首先来自祖辈的数据要和当前实例的data,等判重,相结合,所以注入数据的initInjections一定要在 InitState 的上面。2. 从上面注入进来的东西在当前组件中转了一下又提供给后代了,所以注入数据也一定要在上面。
vm.[Math Processing Error]mount(vm.mount(vm.options.el) :挂载实例。
keep-alive的实现
作用:实现组件缓存
钩子函数:
原理: Vue.js 内部将 DOM 节点抽象成了一个个的 VNode 节点, keep-alive 组件的缓存也是基于 VNode 节点的而不是直接存储 DOM 结构。它将满足条件 (pruneCache与pruneCache) 的组件在 cache 对象中缓存起来,在需要重新渲染的时候再将 vnode 节点从 cache 对象中取出并渲染。
配置属性:
include字符串或正则表达式。只有名称匹配的组件会被缓存
exclude字符串或正则表达式。任何名称匹配的组件都不会被缓存
max数字、最多可以缓存多少组件实例
vuex、vue-router实现原理
vuex 是一个专门为vue.js应用程序开发的状态管理库。 核心概念:
你怎么理解Vue中的diff算法?
在js中,渲染真实 DOM 的开销是非常大的, 比如我们修改了某个数据,如果直接渲染到真实 DOM , 会引起整个 dom 树的重绘和重排。那么有没有可能实现只更新我们修改的那一小块dom而不要更新整个 dom 呢?此时我们就需要先根据真实 dom 生成虚拟 dom , 当虚拟 dom 某个节点的数据改变后会生成有一个新的 Vnode , 然后新的 Vnode 和旧的 Vnode 作比较,发现有不一样的地方就直接修改在真实DOM上,然后使旧的 Vnode 的值为新的 Vnode 。
diff 的过程就是调用 patch 函数,比较新旧节点,一边比较一边给真实的 DOM 打补丁。在采取 diff 算法比较新旧节点的时候,比较只会在同层级进行。 在 patch 方法中,首先进行树级别的比较new Vnode 不存在就删除old Vnode old Vnode不存在就增加新的 Vnode都存在就执行diff更新 当确定需要执行diff算法时,比较两个 Vnode ,包括三种类型操作:属性更新,文本更新,子节点更新 新老节点均有子节点,则对子节点进行 diff 操作,调用 updatechidren如果老节点没有子节点而新节点有子节点,先清空老节点的文本内容,然后为其新增子节点 如果新节点没有子节点,而老节点有子节点的时候,则移除该节点的所有子节点 老新老节点都没有子节点的时候,进行文本的替换
updateChildren 将 Vnode 的子节点Vch和oldVnode的子节点oldCh提取出来。oldCh和vCh 各有两个头尾的变量 StartIdx和EndIdx ,它们的2个变量相互比较,一共有4种比较方式。如果4种比较都没匹配,如果设置了 key ,就会用 key 进行比较,在比较的过程中,变量会往中间靠,一旦 StartIdx>EndIdx 表明 oldCh和vCh 至少有一个已经遍历完了,就会结束比较。
你都做过哪些Vue的性能优化?
你知道Vue3有哪些新特性吗?它们会带来什么影响?
更小巧、更快速 支持自定义渲染器 支持摇树优化:一种在打包时去除无用代码的优化手段 支持Fragments和跨组件渲染
模板语法99%保持不变 原生支持基于class的组件,并且无需借助任何编译及各种stage阶段的特性 在设计时也考虑TypeScript的类型推断特性重写虚拟DOM 可以期待更多的编译时提示来减少运行时的开销优化插槽生成 可以单独渲染父组件和子组件静态树提升 降低渲染成本基于Proxy的观察者机制 节省内存开销
检测机制 更加全面、精准、高效,更具可调试式的响应跟踪
实现双向绑定 Proxy 与 Object.defineProperty 相比优劣如何?
React
1、react中key的作用,有key没key有什么区别,比较同一层级节点什么意思?
2、你对虚拟dom和diff算法的理解,实现render函数
虚拟DOM 本质上是 JavaScript 对象,是对 真实DOM 的抽象表现。 状态变更时,记录新树和旧树的差异 最后把差异更新到真正的 dom 中 render函数:
3、React组件之间通信方式?
Context提供了一个无需为每层组件手动添加props ,就能在组件树间进行数据传递的方法.如果你只是想避免层层传递一些属性,组件组合( component composition )有时候是一个比 context 更好的解决方案。 5. 组件组合缺点:会使高层组件变得复杂
4、如何解析jsx
5、生命周期都有哪几种,分别是在什么阶段做哪些事情?为什么要废弃一些生命周期?
componentWillMount、componentWillReceiveProps、componentWillUpdate在16版本被废弃,在17版本将被删除,需要使用UNSAVE_前缀使用,目的是向下兼容。
6、关于react的优化方法
使用return null而不是CSS的display:none来控制节点的显示隐藏。保证同一时间页面的DOM节点尽可能的少。
不要使用数组下标作为key 利用shouldComponentUpdate和PureComponent避免过多render function render 里面尽量减少新建变量和bind函数,传递参数是尽量减少传递参数的数量。 尽量将props和state扁平化,只传递component需要的props (传得太多,或者层次传得太深,都会加重 shouldComponentUpdate 里面的数据比较负担),慎将component当作props传入
使用babel-plugin-import优化业务组件的引入,实现按需加载 使用SplitChunksPlugin拆分公共代码 使用动态import ,懒加载React组件
7、绑定this的几种方式
8、对fiber的理解
9、setState是同步还是异步的
10、Redux、React-Redux
Redux的实现流程
用户页面行为触发一个 Action ,然后 Store 调用 Reducer ,并且传入两个参数:当前 State 和收到的 Action 。 Reducer 会返回新的 State 。每当 state 更新之后, view 会根据 state 触发重新渲染。
React-Redux:
Provider :从最外部封装了整个应用,并向 connect 模块传递 store 。Connect :
11、对高阶组件的理解
高阶组件是参数为组件,返回值为新组件的函数。 HOC 是纯函数,没有副作用。 HOC 在 React 的第三方库中很常见,例如 Redux 的 connect 组件。
高阶组件的作用:
12、可以用哪些方式创建 React 组件?
React.createClass()、ES6 class 和无状态函数
13、 React 元素与组件的区别?
组件是由元素构成的。元素数据结构是普通对象,而组件数据结构是类或纯函数。
Vue与React对比?
数据流:
react 主张函数式编程,所以推崇纯组件,数据不可变,单向数据流,
vue 的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
监听数据变化实现原理 :
组件通信的区别:jsx和.vue模板。
性能优化
vuex 和 redux 之间的区别?
从实现原理上来说,最大的区别是两点:
Redux 使用的是不可变数据,而 Vuex 的数据是可变的。 Redux 每次都是用新的 state 替换旧的 state ,而 Vuex 是直接修改
Redux 在检测数据变化的时候,是通过 diff 的方式比较差异的,而 Vuex 其实和Vue的原理一样,是通过getter/setter 来比较的(如果看 Vuex 源码会知道,其实他内部直接创建一个 Vue 实例用来跟踪数据变化)
浏览器从输入url到渲染页面,发生了什么?
网络安全、HTTP协议
TCP UDP 区别
Http和Https区别(高频)
GET和POST区别(高频)
理解xss,csrf,ddos攻击原理以及避免方式
XSS ( Cross-Site Scripting , 跨站脚本攻击 )是一种代码注入攻击。攻击者在目标网站上注入恶意代码,当被攻击者登陆网站时就会执行这些恶意代码,这些脚本可以读取cookie,session tokens ,或者其它敏感的网站信息,对用户进行钓鱼欺诈,甚至发起蠕虫攻击等。
CSRF ( Cross-site request forgery ) 跨站请求伪造 :攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
XSS避免方式:
CSRF 避免方式:
DDoS 又叫分布式拒绝服务,全称Distributed Denial of Service ,其原理就是利用大量的请求造成资源过载,导致服务不可用。