面试记录4

196 阅读3分钟

2020.06.09 yiqijiaoyu

Vue加载过程,有哪些生命周期?


Vue-router怎么实现的?

单页面路由的实现:  即前端控制路由,js 根据 url 地址的变化,切换页面要渲染的组件,页面跳转不需要请求html文件

实现单页面路由跳转主要有两种方式:

  1. hash 模式:利用URL中的hash(“#”),是基于 location.hash 来实现的,当hash改变时会触发 hashchange 事件
  2. history 模式:依赖 HTML5 History API 和服务器配置;当路由发生变化是会触发 onpoopstate 事件

Vuex是干什么的,有哪些部分组成?

webpack配置过哪些功能?HMR怎么实现的?如何启动服务?

配置环境变量,sourcemap,proxy,移动端页面自适应,eslint,cdn,treeshaking, 热更新

loader是干什么的,怎么实现? 自己写过吗?要注意哪些方面? 和plugin的区别?

webpack默认只支持js和json文件类型,通过loaders转换可以使webpack支持其他文件类型;loader本身是一个函数,接受源文件作为参数,返回转换的结果

plugin是用来增强webpack的功能,通常用于打包文件的优化,资源管理和环境变量注入

有了token为啥还要sessionID,为啥要拿token换sessionID,为啥不直接用sessionID,cookies的安全问题怎么避免?

HTTP 是无状态的协议(每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。

session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中,因此是不可跨域的,Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息,只提供一种简单的认证,即只要有此 SessionID ,即认为有此 User 的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方 App。

而Token偏向于做身份认证,简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据。用解析 token 的计算时间换取 session 的存储空间,从而减轻服务器的压力,减少频繁的查询数据库如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 

Session 和 Token 并不矛盾,作为身份认证 Token 安全性比 Session 好,因为每一个请求都有签名还能防止监听以及重放攻击,而 Session 就必须依赖链路层来保障通讯安全了。如果你需要实现有状态的会话,仍然可以增加 Session 来在服务器端保存一些状态。

参考:Cookie、Session、Token、JWT