面经学习-8-3-滴滴春招一面

96 阅读3分钟

面经学习 - 8/3 -滴滴春招一面

地址:www.nowcoder.com/discuss/943…

一面(45min):

一、说一下你对jwt认证机制的理解,它的优缺点

1.客户端浏览器提交账号和密码后

2.服务器就进行验证账号密码 验证通过后 将用户的信息对象,经过加密之后生成Token字符串,然后发送给客户端

3.客户端将Token字符串存储到localstorage或sessionstorage。

4.客户端再次发起请求时,通过请求头的Authorization字段,将Token发给服务器

5.服务器把token字符串还原成用户的信息对象,用户身份认证成功后,服务器把当前用户对应的页面响应给浏览器。

二、说一下你对闭包的理解

当函数作为返回值被返回时,他的作用域不取决于被调用时的作用域,而取决于被定义时的作用域,且这些作用域的内容不会被清除(垃圾回收),可以用它实现一个私有的getter(只读)。

三、说一下new创建实例的时候都做了什么

  1. 创建空对象 object.create()
  2. 绑定原型 obj.proto = Fn.prototype
  3. 改变fn实例指向 fn.call

四、说一下判断数据类型的方式

  1. typeof 判断值类型和function
  2. Array.isArray 判断数组
  3. instanceof 可以判断原型链上是否存在该类型,不太准确
  4. Object.prototype.toString.call(‘’ ') 可以精确判断

五、说一下你知道的纯函数(即不会修改入参的函数)

concat join slice map filter

六、说一下你对BFC的了解

BFC块级格式化上下文,其是一片独立渲染的区域,区域内元素的变化不会影响到区域外元素的变化。

生成BFC:设置浮动,设置定位,overflow为hidden auto等 弹性布局

七、说一下vue的生命周期

beforeCreate

生成数据

created

beforeMounted

生成DOM

Mounted

beforeUpdate

Uptated

BeforeUnmounted

Unmounted

八、说一下虚拟DOM的原理

虚拟DOM:在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要 的 dom 操作,从而提高性能。具体实现步骤如下:

  1. 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树, 插到文档当中;
  2. 当状态变更的时候,重新构造一棵新的对象树。通过diff 算法,比较新旧虚拟 DOM 树的差异。
  3. 根据差异,对真正的 DOM 树进行增、删、改。

diff算法:

在进行DOM更新时,判断是否有key,如果有key对key进行对比,相同则跳过修改,不同则进行替换,在vue3中提升了性能,不同会从后往前对比。diff算法是深度优先的递归运算,先判断children是否相同。

九、 说一下keep -alive的原理,以及如果超出缓存长度,如何处理

在 created钩子函数调用时将需要缓存的 VNode 节点保存在 this.cache 中/在 render(页面渲染) 时,如果 VNode 的 name 符合缓存条件(可以用 include 以及 exclude 控制),则会从 this.cache 中取出之前缓存的 VNode实例进行渲染。

十、说一下vuex的原理

其实,Vuex.Store是个类,使用他的时候,你给他传入了参数(state,mutations,actions)并让他实例化。你把这个实例配置给了Vue,Vuex帮你把他给了Vue原型上的$store。

Vuex还送给你个commit和dispatch方法让你能有办法改s t o r e . s t a t e , 当 然 你 也 能 通 过 store.state,当然你也能通过store.state,当然你也能通过store.state方法到你要的状态。

十一、说一下如何解决跨域问题

JSOP CROS