前端面试题及答案2019

合集下载

2019最新前端面试题-1、阿里(29问)

2019最新前端面试题-1、阿里(29问)

1. 使⽤用过的koa2中间件
2. koa-body原理理
3. 介绍⾃自⼰己写过的中间件
4. 有没有涉及到Cluster
5. 介绍pm2
6. master挂了了的话pm2怎么处理理
7. 如何和MySQL进⾏行行通信
8. React声明周期及⾃自⼰己的理理解
9. 如何配置React-Router
10. 路路由的动态加载模块
11. 服务端渲染SSR
12. 介绍路路由的history
13. 介绍Redux数据流的流程
14. Redux如何实现多个组件之间的通信,多个组件使⽤用相同状态如何进⾏行行管理理
15. 多个组件之间如何拆分各⾃自的state,每块⼩小的组件有⾃自⼰己的状态,它们之间还有⼀一些公共的状态需要维护,如何思考这块
16. 使⽤用过的Redux中间件
17. 如何解决跨域的问题
18. 常⻅见Http请求头
19. 移动端适配1px的问题
20. 介绍flex布局
21. 其他css⽅方式设置垂直居中
22. 居中为什什么要使⽤用transform(为什什么不不使⽤用marginLeft/Top)
23. 使⽤用过webpack⾥里里⾯面哪些plugin和loader
24. webpack⾥里里⾯面的插件是怎么实现的
25. dev-server是怎么跑起来
26. 项⽬目优化
27. 抽取公共⽂文件是怎么配置的
28. 项⽬目中如何处理理安全问题
29. 怎么实现this对象的深拷⻉贝。

前端面试题及答案2019

前端面试题及答案2019

前端面试题及答案20191. HTML5 新增的表单元素有哪些?- 答案: HTML5 新增的表单元素包括:`<date>`、`<email>`、`<month>`、`<number>`、`<range>`、`<search>`、`<tel>`、`<time>`、`<url>`、`<week>`。

2. 请解释 CSS 中的 Flexbox 布局。

- 答案: Flexbox 是一种CSS3布局模式,它允许容器内子元素在不同屏幕和设备上动态地调整大小和位置。

Flexbox 布局通过设置容器的 `display` 属性为 `flex` 来启用。

它提供了两个轴:主轴(main axis)和交叉轴(cross axis),以及多种属性来控制子元素的排列方式。

3. JavaScript 中 `var`、`let` 和 `const` 的区别是什么?- 答案:- `var` 是函数作用域或全局作用域的变量声明关键字,可以被重新声明和赋值。

- `let` 是块级作用域的变量声明关键字,不能被重新声明,但可以重新赋值。

- `const` 也是块级作用域的常量声明关键字,声明后不能被重新赋值或重新声明。

4. 解释 JavaScript 中的闭包是什么?- 答案:闭包是一个函数和声明该函数的词法环境的组合。

即使在其原始作用域之外,闭包也可以访问其作用域链上的变量。

闭包常用于创建私有变量和函数,以及实现模块模式。

5. 如何实现深拷贝和浅拷贝?- 浅拷贝:复制对象的引用,而不是对象本身。

可以使用`Object.assign()` 或展开运算符 `...` 来实现。

- 深拷贝:递归复制对象的属性,包括嵌套的对象。

可以使用`JSON.parse(JSON.stringify(obj))`(但有局限性,例如不能拷贝函数和循环引用),或者使用第三方库如 `lodash` 的`_.cloneDeep()` 方法。

2019年百度前端工程师面试题(附答案)

2019年百度前端工程师面试题(附答案)

2019年百度前端⼯程师⾯试题(附答案)⼀、单选题(共25题,每题5分)1.该正则可以匹配下列哪个字符串? /^sjm/A、absjmB、phpsjmC、sjmphpD、phpsimd参考答案:C答案解析:该正则匹配以sjm开头的字符串2.新窗⼝打开⽹页,⽤到以下哪个值()。

A、_selfB、_blankC、_topD、_parent参考答案:B答案解析:在html中通过标签打开⼀个链接,通过标签的 target 属性规定在何处打开链接⽂档。

如果在标签中写⼊target属性,则浏览器会根据target的属性值去打开与其命名或名称相符的框架或者窗⼝.在target中还存在四个保留的属性值如下,### 属性值值描述\_blank在新窗⼝中打开被链接⽂档。

\_self默认。

在相同的框架中打开被链接⽂档。

\_parent在⽗框架集中打开被链接⽂档。

\_top在整个窗⼝中打开被链接⽂档。

*framename*在指定的框架中打开被链接⽂档。

这些 target 的所有 4 个值都以下划线开始。

任何其他⽤⼀个下划线作为开头的窗⼝或者⽬标都会被浏览器忽略,因此,不要将下划线作为⽂档中定义的任何框架 name 或 id 的第⼀个字符。

上⾯这段出⾃w3c。

3.如果⼀个HTML⽂档内含有阿拉伯⽂,则应该?A、使⽤utf-8编码B、将阿拉伯⽂转为图⽚并嵌⼊到⽂档内C、使⽤GBK编码D、使⽤iso-8859-2编码参考答案:A答案解析:UTF-8(8-bit Unicode Transformation Format)是⼀种针对Unicode的可变长度字符编码,⼜称万国码。

UTF-8⽤1到6个字节编码UNICODE字符。

⽤在⽹页上可以同⼀页⾯显⽰中⽂简体繁体及其它语⾔(如英⽂,⽇⽂,韩⽂)。

GBK是汉字编码,是双字节码,可表⽰繁体字和简体字。

```ISO8859-2 字符集,也称为 Latin-2,收集了东欧字符。

```4.以下哪个选项不是块级元素()A、divB、spanC、pD、h1参考答案:B答案解析:常见的内联元素:、**、、*、*、**、、、、、` `******常见的块级元素:、、、、、、、、> 、窗体顶端窗体底端常见的内联块级元素:![]()、5.下⾯关于⼆叉树的说法正确的是?A、满⼆叉树就是完全⼆叉树B、满⼆叉树中有可能存在度数为1的节点C、完全⼆叉树就是满⼆叉树D、完全⼆叉树中某个节点可以没有左孩⼦,只有右孩⼦参考答案:A答案解析:满⼆叉树的任意节点,要么度为0,要么度为2.换个说法即要么为叶⼦结点,要么同时具有左右孩⼦。

2019前端面试题

2019前端面试题

2019前端⾯试题1.什么是⾯向对象?什么是⾯向过程?1)⾯向对象的重点是对象。

当解决⼀个问题的时候,⾯向对象会把事物抽象成对象,也就是说这个问题包含哪些对象,然后给这些对象赋⼀些属性和⽅法,让每个对象执⾏⾃⼰的⽅法,问题得到解决。

2)⾯向过程的重点是过程。

解决⼀个问题的时候,⾯向过程会把问题拆分成⼀个个的函数和数据(⽅法的参数)。

然后按照⼀定的顺序执⾏这些⽅法,执⾏完这些⽅法,问题得到解决。

2.什么是⾯向对象程序设计?答:将计算机需要处理的问题都抽象成对象,在抽象成类,帮助⼈们实现对现实世界的抽象与数字建模。

⾯向对象的程序设计更加符合⼈的思考逻辑和对事物的处理。

3.什么是对象?什么是类?答:对象是由类实例化出来的,类的实例称为对象。

类是具有相同特征和功能的对象的抽象。

类和对象的关系就好⽐模具和铸件的关系,类的实例化结果就是对象,⽽对象的抽象就是类。

4.什么是继承?在⾯向对象的编程中,当两个类具有相同的特征(属性)和⾏为(⽅法)时,可以将相同的部分抽取出来放到⼀个类中作为⽗类,其他两个类继承这个⽗类。

继承后的⼦类⾃动拥有了⽗类的部分属性和⽅法。

通过继承创建的新类被称为“⼦类”或“派⽣类”被继承的类称为“基类”、“⽗类”或“超类”⽐如:狗{吠;}牧⽺⽝继承狗{放⽺;}上⾯的例⼦中,狗类是⽗类,牧⽺⽝类是⼦类。

牧⽺⽝类通过继承获得狗类的吠的能⼒,同时增加了⾃⼰独有的放⽺的能⼒。

JS中的继承主要是通过原型链实现的每个构造函数(constructor)都有⼀个原型对象(prototype),原型对象都包含⼀个指向构造函数的指针,⽽实例(instance)都包含⼀个指向原型对象的内部指针如果试图引⽤对象(实例instance)的某个属性,会⾸先在对象内部寻找该属性,直⾄找不到,然后才在该对象的原型(instance.prototype)⾥去找这个属性5.谈谈你对前端性能优化的理解1)请求数量,合并脚本和样式表,拆分初始化负载2)请求带宽,精简JavaScript,移除重复脚本,图像优化,将icon做成字体3)页⾯结构:将样式表放在顶部,将脚本放在底部,尽早刷新⽂档的输出6.为什么使⽤框架?使⽤框架的优势?1)重复应⽤的外部JS:使⽤框架后我们可以把这些⽂件写在⼊⼝⽂件中,⼀劳永逸2)组件化:组件是前端框架⾥⾮常强⼤的功能之⼀,它可以扩展你的HTML,封装可以重⽤的代码块,⽐如你的轮播图、tab切换、页⾯头部、页⾯底部等等。

解析前端面试题2019年小米工程师面试题(附答案)

解析前端面试题2019年小米工程师面试题(附答案)

解析前端⾯试题2019年⼩⽶⼯程师⾯试题(附答案)⼀、单选题(共24题,每题5分)1.关于XSS的说法,错误的是A、script,js,vbscript,flashB、分类:反射,存储C、是浏览器端代码注⼊,恶意的script,css,html代码被浏览器解析D、PHP相关漏洞参考答案:D答案解析:是浏览器端代码注⼊,恶意的script,css,html代码被浏览器解析。

分类:反射,存储 script,js,vbscript,flash2.关于JSONP使⽤的说法错误的是:A、可以实现跨域通信B、基于 json 格式数据,兼容性好,简单易⽤C、只⽀持跨域HTTP请求这种情况,不能解决不同域的两个页⾯之间进⾏JavaScript调⽤的问题D、可以完美⽀持POST请求参考答案:D3.HTML页⾯中有如下结构的代码,下列选项所⽰jQuery代码,不能够让汉字“四”的颜⾊变成红⾊的是?A、 $("#header ul li:eq(3)").css("color","red");B、 $("#header li:eq(3)").css("color","red");C、 $("#header li:last").css("color","red");D、 $("#header li:gt(3)").css("color","red");参考答案:D答案解析:注意是选择不能4.下⾯哪⼀种属于“creational”的设计模式?A、FaçadeB、SingletonC、BridgeD、CompositeE、上⾯都不是参考答案:B答案解析:总体来说设计模式分为三⼤类:创建型模式,共五种:⼯⼚⽅法模式、抽象⼯⼚模式、单例模式、建造者模式、原型模式。

前端面试题2019年网易工程师面试题及答案解析

前端面试题2019年网易工程师面试题及答案解析

前端⾯试题2019年⽹易⼯程师⾯试题及答案解析⼀、单选题(共19题,每题5分)1.CSS 盒⼦模型中()是透明的,这部分可以显⽰背景()A、paddingB、marginC、borderD、content参考答案:A答案解析:- **Margin(外边距)** - 清除边框外的区域,外边距是透明的。

- **Border(边框)** - 围绕在内边距和内容外的边框。

- **Padding(内边距)** - 清除内容周围的区域,内边距是透明的。

- **Content(内容)** - 盒⼦的内容,显⽰⽂本和图像。

- Margin --------margin清除周围的元素(外边框)的区域。

margin没有背景颜⾊,是完全透明的Padding(填充) ------------- 当元素的 Padding(填充)(内边距)被清除时,所"释放"的区域将会受到元素背景颜⾊的填充。

2.通常我们在浏览器内容区看到的内容,都是放⼊在 () 之间A、<!doctype html>B、<html></html>C、<head></head>D、<body></body>参考答案:D答案解析:A答案是声明⽂档类型。

B答案是整个html⽂件。

C答案是⽹页标题,在浏览器顶部显⽰、D答案是⽹页的主体部分,即浏览器的内容区域。

所以答案是D。

html⽂件结构如下>⽹页名称,头部⽹页主体内容,浏览区域3.关于HTML语义化,以下哪个说法是正确的?A、语义化的HTML有利于机器的阅读,如PDA⼿持设备、搜索引擎爬⾍;但不利于⼈的阅读B、Table 属于过时的标签,遇到数据列表时,需尽量使⽤ div 来模拟表格C、语义化是HTML5带来的新概念,此前版本的HTML⽆法做到语义化D、header、article、address都属于语义化明确的标签参考答案:D答案解析:关于html语义化的⼀些参考</http:>4.以下位于head 间的代码⽚段是做什么⽤的?A、使得页⾯编码合乎要求B、表⽰⽀持响应式设计C、⽀持正常的绘制和缩放D、表⽰针对滚屏进⾏适当的适配参考答案:B答案解析:5.下列定义的css中,哪个权重是最低的?A、#game B、#game .nameC、#game divD、#game .name span参考答案:C答案解析:最⾼赞的答案并不准确。

2019vue面试题大全附答案.doc

2019vue面试题大全附答案.doc

2019 VUE 前端面试题1、active-class 是哪个组件的属性?嵌套路由怎么定义?答:vue-router 模块的router-link 组件。

2、怎么定义vue-router 的动态路由?怎么获取传过来的动态参数?答:在router 目录下的index.js 文件中,对path 属性加上/:id 。

使用router 对象的params.id3、vue-router 有哪几种导航钩子?答:三种,一种是全局导航钩子:router.beforeEach(to,from,next) ,作用:跳转前进行判断拦截。

第二种:组件内的钩子;第三种:单独路由独享组件4、scss 是什么?安装使用的步骤是?有哪几大特性?答:预处理css,把css 当前函数编写,定义变量,嵌套。

先装css-loader 、node-loader 、sass-loader 等加载器模块,在webpack-base.config.js 配置文件中加多一个拓展:extenstion ,再加多一个模块:module 里面test 、loader4.1 、scss 是什么?在vue.cli 中的安装使用步骤是?有哪几大特性?答:css 的预编译。

使用步骤:第一步:用npm 下三个loader(sass-loader 、css-loader 、node-sass)第二步:在build 目录找到webpack.base.config.js ,在那个extends 属性中加一个拓展.scss第三步:还是在同一个文件,配置一个module 属性第四步:然后在组件的style 标签加上lang 属性,例如:lang= ”scss”有哪几大特性:1、可以用变量,例如($变量名称= 值);2、可以用混合器,例如()3、可以嵌套5、mint-ui 是什么?怎么使用?说出至少三个组件使用方法?答:基于vue 的前端组件库。

npm 安装,然后import 样式和js,e(mintUi)全局引入。

2019年阿里最新前端工程师面试题及答案题

2019年阿里最新前端工程师面试题及答案题

2019年阿⾥最新前端⼯程师⾯试题及答案题⼀、单选题(共21题,每题5分)1.为每⼀个指定元素的指定事件(像click)绑定⼀个事件处理器函数,下⾯哪个是⽤来实现该功能的?A、trigger (type)B、bind(type)C、one(type)D、bind参考答案:B答案解析:暂⽆2.哪⼀个html盒模型中的border的正确写法?A、p{ border:5px solid red;}B、p{border:5px <br> red solid; }C、p{border: red solid 5px; }D、p{border: solid red 5px; }参考答案:A答案解析:为了代码的可读性,建议按照,border-width,border-style,border-color,的顺序书写。

但其实顺序调换是不影响呈现的3.关于适配器模式,说法错误的是?A、适配器继承或依赖已有的对象,实现想要的⽬标接⼝B、主要解决在软件系统中,常常要将⼀些"现存的对象"放到新的环境中,⽽新环境要求的接⼝是现对象不能满⾜的C、定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使⽤算法的客户D、将⼀个类的接⼝转换成客户希望的另外⼀个接⼝。

适配器模式使得原本由于接⼝不兼容⽽不能⼀起⼯作的那些类可以⼀起⼯作。

参考答案:C答案解析:将⼀个类的接⼝转换成客户希望的另外⼀个接⼝。

适配器模式使得原本由于接⼝不兼容⽽不能⼀起⼯作的那些类可以⼀起⼯作适配器继承或依赖已有的对象,实现想要的⽬标接⼝主要解决在软件系统中,常常要将⼀些"现存的对象"放到新的环境中,⽽新环境要求的接⼝是现对象不能满⾜的4.以下⼏种在HTML⽂档中通过CSS的⽅式将⽂档颜⾊设置为红⾊背景错误的是:()A、内联样式表:<body style=”background-Color:red”></body>B、嵌⼊样式表:<style> body { background-Color:red } </style>C、外部样式表:在当前⽬录下创建⼀个test.css⽂件,在⽂件中声明⼀条<style> body { background-Color:red } </style>代码,并在HTML⽂档中通过<link style=”text/css” rel=”stylesheet”href=”test.css”>将其链接到本⽂档中使⽤D、输⼊样式表:在当前⽬录下创建⼀个test.css⽂件,在⽂件中声明⼀条body { background-Color:red } 代码,并在HTML⽂档中通过<style>@import url(test.css);</style>输⼊到本⽂档中使⽤参考答案:C答案解析:暂⽆5.在 HTML5 中,哪个⽅法⽤于获得⽤户的当前位置?A、getPosition()B、getCurrentPosition()C、getUserPosition()D、getLocation()参考答案:B答案解析:getCurrentPosition()获取⽤户当前位置放⼊⼀个值中保存,getLocation()地图定位6.对于下拉菜单,错误的是?<pre class="prettyprint"><div class="dropdown"> <button class="btn btn-" tabindex="-1">Separated link</a></li>defaultdropdowtoggle" data-toggle="dropdown" id="dropdownMenu1" type="button">Dropdown<span class="caret"></span></button><ul aria-labelledby="dropdownMenu1" class="dropdown-menu" role="menu"><li role="presentation"><#" role="menuitem" tabindex="-1">Action</a></li> <li r"presentation"><a href="#" role="menuitem" tabindex="-1">Anotheaction</a></li> <li rolef="#" role="menuitem" tabindex="-1">Something else here</a></li><li role="presentation"><a href="#" role="menuitem" tabindex="-1">Separated link</a></li><pre class="prettyprint"><div class="dropdown"><button class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="dropdownMenu1" type="button">Dropdown<span class="caret"></span></button><ul aria-labelledby="dropdownMenu1" class="dropdown-menu" role="menu"><li role="presentation"><a href="#" role="menuitem" tabindex="-1">Action</a></li><li role="presentation"><a href="#" role="menuitem" tabindex="-1">Another action</a></li><li role="presentation"><a href="#" role="menuitem" tabindex="-1">Something else here</a></li><li role="presentation"><a href="#" role="menuitem" tabindex="-1">Something else here</a></li>A、表⽰了⼀个有五个下拉选项的下拉菜单B、<span class="caret"></span>可以去掉⽽不影响功能C、可以加⼊pull-right使菜单右对齐D、可加⼊dropdown-menu-right使菜单右对齐参考答案:A答案解析:这道题我⼀眼就看出A有错了,可是还是让我纠结了好久,怎么会有这么低级的问题,空城计吗7.下⾯关于 CSS 布局的描述,不正确的是?()下⾯关于CSS布局的描述,不正确的是?()A、块级元素实际占⽤的宽度与它的 width 属性有关;B、块级元素实际占⽤的宽度与它的 border 属性有关;C、块级元素实际占⽤的宽度与它的 padding 属性有关;D、块级元素实际占⽤的宽度与它的 background 属性有关。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

--------------------------------------面试题-----------------------------------------1 vuex的五个状态VueX 是一个专门为Vue.js 应用设计的状态管理架构,统一管理和维护各个vue组件的可变化状态(你可以理解成vue 组件里的某些data )。

Vue有五个核心概念,state, getters, mutations, actions, modules。

state => 基本数据==datagetters => 从基本数据派生的数据==computedmutations => 提交更改数据的方法,同步! ==methodsactions => 像一个装饰器,包裹mutations,使之可以异步。

modules => 模块化Vuex2 vue周期(钩子函数) created可获取数据Mounted可操作DOMVue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程,我们称这是Vue的生命周期。

通俗说就是Vue实例从创建到销毁的过程,就是生命周期。

分为三个阶段:初始化、运行中、销毁。

beforeCreate:实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载呢,只是一个空壳,无法访问到数据和真实的dom,一般不做操作Created:挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取beforeMount:接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取Mounted:接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...beforeUpdate:当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿Updated:当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dombeforeDestroy:当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等Destroyed:组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以钩子函数的的实际应用beforecreate : 举个栗子:可以在这加个loading事件created:在这结束loading,还做一些初始化,实现函数自执行mounted :在这发起后端请求,拿回数据,配合路由钩子做一些事情beforeDestroy:你确认删除XX吗?destroyed :当前组件已被删除,清空相关内容3 cookie、localstroge、localSeesion的区别共同点:都是保存在浏览器端,且同源的。

区别:安全性、大小、有效期、作用域1 cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。

而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。

2存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。

sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

3 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

4 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

4 get和post区别get参数通过url传递,post放在request body中。

传递路径get请求在url中传递的参数是有长度限制的,而post没有。

长度限制get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。

安全get请求只能进行url编码,而post支持多种编码方式编码方式get请求会浏览器主动cache,而post支持多种编码方式。

get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

保存GET和POST本质上都是TCP链接,并无差别。

但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

5 你是如何操持登录1利用Token实现APP登录成功后,服务器以某种方式,如随机生成N位的字符串作为Token,同时设置一个有效期,存储到服务器中,并返回Token给APP。

后续APP发送请求时,都要带上该Token,每次服务器端收到请求时,都要验证Token和有效期,Token数值对且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。

(这种方式目前使用的最多)2利用Cookie实现APP登录成功后,服务器创建一个包含session_id和Expires两个属性值的Cookie,存储在服务器中,并发送给APP。

后续APP发送请求时,都要带上一个包含此session_id的Cookie,每次服务器端收到请求时,都要验证session_id和有效期,session_id数值对且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。

6 vue怎么实现双向数据绑定vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。

其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的getter,和setter。

这也正是Vue不兼容IE8以下的原因。

发布者-订阅者模式:订阅是请求在某些事件(event)到达时可以通知它并执行对应的动作(action),而发布则相对的是向订阅告知事件(event)已经到达,你可以执行对应的动作(action)了。

7 promise 的简述Promise 是异步编程的一种解决方案,通俗的来讲Promise是一个许诺、承诺,是对未来事情的承诺,承诺不一定能完成,但是无论是否能完成都会有一个结果。

应用场景1 解决回调地狱比如我们经常可能需要异步请求一个数据之后作为下一个异步操作的入参2 promise 可以实现在多个请求发送完成后再得到或者处理某个结果最简单的实现基于上面的应用场景发现promise可以有三种状态,分别是pending、Fulfilled、Rejected。

Pending Promise对象实例创建时候的初始状态Fulfilled 可以理解为成功的状态Rejected可以理解为失败的状态构造一个Promise实例需要给Promise构造函数传入一个函数。

传入的函数需要有两个形参,两个形参都是function类型的参数。

分别是resolve和reject。

Promise上还有then方法,then 方法就是用来指定Promise 对象的状态改变时确定执行的操作,resolve 时执行第一个函数(onFulfilled),reject时执行第二个函数(onRejected)当状态变为resolve时便不能再变为reject,反之同理。

基本api(1)new Promise(2)PromiseObj.then(resolveFn,rejectFn)resolveFn:就是Promise对象成功的回调处理函数,指向resolverejectFn:就是Promise对象失败的回调处理函数(3)Promise.all() 这个静态方法的参数是一个可迭代的对象,这个对象的item应该都是promise对象,若不是的话,就会先调用上面的Promise.resolve(item)方法转换成新的promise对象。

Promise.all()方法返回的也是一个promise对象。

(4)PromiseObj.resolve() 将一个值,数字,字符串...转换为Promise对象(5)Promise.reject(reason) 方法返回一个用reason拒绝的Promise。

你可以这样理解,返回的这个promise对象在初始化的时候,什么都没有做,直接给reject(‘your reject reson’)8 es6的了解es6是一个新的标准,它包含了许多新的语言特性和库,是JS实质性的一次升级。

新增模板字符串` `(为JavaScript提供了简单的字符串插值功能)箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。

)for-of(用来遍历数据—例如数组中的值。

)for (let index of ['a', 'b'].keys()) {console.log(index);}arguments对象可被不定参数和默认参数完美代替。

ES6将promise对象纳入规范,提供了原生的Promise对象。

增加了let和const命令,用来声明变量。

增加了块级作用域。

let命令实际上就增加了块级作用域。

ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令、const 命令class命令声明的全局变量,不属于全局对象的属性。

还有就是引入module模块的概念9 路由拦截主要是利用vue-router提供的钩子函数beforeEach()对路由进行判断。

相关文档
最新文档