面经学习 - 8/3 -滴滴春招一面
地址:www.nowcoder.com/discuss/943…
一面(45min):
一、说一下你对jwt认证机制的理解,它的优缺点
1.客户端浏览器提交账号和密码后
2.服务器就进行验证账号密码 验证通过后 将用户的信息对象,经过加密之后生成Token字符串,然后发送给客户端
3.客户端将Token字符串存储到localstorage或sessionstorage。
4.客户端再次发起请求时,通过请求头的Authorization字段,将Token发给服务器
5.服务器把token字符串还原成用户的信息对象,用户身份认证成功后,服务器把当前用户对应的页面响应给浏览器。
二、说一下你对闭包的理解
当函数作为返回值被返回时,他的作用域不取决于被调用时的作用域,而取决于被定义时的作用域,且这些作用域的内容不会被清除(垃圾回收),可以用它实现一个私有的getter(只读)。
三、说一下new创建实例的时候都做了什么
- 创建空对象 object.create()
- 绑定原型 obj.proto = Fn.prototype
- 改变fn实例指向 fn.call
四、说一下判断数据类型的方式
- typeof 判断值类型和function
- Array.isArray 判断数组
- instanceof 可以判断原型链上是否存在该类型,不太准确
- 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 操作,从而提高性能。具体实现步骤如下:
- 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树, 插到文档当中;
- 当状态变更的时候,重新构造一棵新的对象树。通过diff 算法,比较新旧虚拟 DOM 树的差异。
- 根据差异,对真正的 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