前端基础知识与常见面试题(五)

### **介绍一下async 和await**

async 结合await,可以使异步操作代码看起来像同步

async 和await相对promise来讲,写法更优雅,可以解决promise地狱

promise使用.catch来捕获报错

async 和await可以使用try...catch来捕获报错

设置默认地址?例如:axios.defaults.baseURL="https//api.xin88.top"

### **axios拦截器**(钩子函数)

在请求和响应之前执行的函数

### **axios的特点有哪些**

1. axios基于promise的http库

2. 返回数据格式会自动转为json
3. 有请求拦截器和响应拦截器
4. 在客户端和服务器都可使用,

### **vue-router的哪几种模式**

hash(支持所有浏览器),  history(依赖HTML5 history API 和服务器配置),  abstract(支持所有JS环境,node.js如果没有发现浏览器API会强制进入abstract模式)

### **路由跳转经典问题**

一.

```js
Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/...".
```
当编程式跳转同一页面时会报错,解决方案如下:
解決方案

```js
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
```

二.

跳转时滚动问题,会停留在上一个组件位置

```js
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  // 方案一
  scrollBehavior: () => ({ y: 0 }),
  routes
})

// 方案二
// router.beforeEach((to, from, next) => {
//   window.scrollTo(0, 0);
//   next();
// })
```

### **$route和$router的区别**

$route:VueRouter的实例

$router:当前的router跳转对象,保存的是当前跳转的路由信息

### **路由常用传参方式**

props , params , query

$router.push({name:'',params:{}})

$router.push({name:'',query:{}})

###keep-alive
会缓存不活动的组件状态
作用:避免多次重复渲染降低性能
常用知识点:
1.include——字符串或正则表达式。只有名称匹配的组件会被缓存,写谁缓存谁
2.exclude——字符串或正则表达式。任何名称匹配的组件都不会被缓存,写谁不缓存谁
3.max——数字。最多缓存多少个组件实例;
4.结合Router,缓存部分页面$router.meta.keeAlive选项;
方式一:
<keep-alive>
<router-view v-if="$route.meta.keepAlive">
<keep-alive>
<router-view v-if="!$route.meta.keepAlive">
方式二:
<keep-alive>
<router-view include="item_a">
<keep-alive>
——————————————————————————————————————

### **Token是什么?**
token字符串=【用户登录信息+盐+时间戳+过期时间】
token是一种验证机制,token的意思是‘令牌’,是服务器生成的一段加密字符串,然后返回给客户端

当用户第一次登录生成,然后每次客户端发请求会在请求消息头中携带token,服务器做登录状态验证

假设token有效时间为半小时,而半小时中用户一直在操作,时间一到半小时token失效了。

也就是可能用户在29分的时候还在浏览,30分的token失效了,让登录重新登录,用户体验不好。

这时候就涉及到token续签机制,由于每次发请求消息头都会携带token,那么服务器解密时候如果发现距离失效时间很近,比如失效时间是30分钟,29分的时候用户发送了请求,那么服务器判断还有3分钟token失效,这时服务器回重新生成一个token返回给客户端,这样客户端的token时间就又延长了。

具体过期时间和续签时间以公司实际要求为准

###cookie,session与token 的区别

cookie浏览器保存在本地的一小块数据,cookie的数据会在浏览器发请求时被携带发送到服务器上(储存在客户端,可以被查看到,安全性低)

seesion对象是存储在服务器端的,主要用来存储用户会话所需的数据,seesionID会存在cookie中(客户保存seesionID,服务器端保存用户信息,给服务器存储带来压力)

token是一种验证机制,token的意思是‘令牌’,是服务器生成的一段加密字符串,然后返回给客户端,一般储存在请求头当中,客户端负责存储,服务器只要负责解密就可以了(诞生于服务器,储存在客户端,相比与session更节约服务器资源,而且对移动端和分布式 更加友好)
JWT本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT带有签名信息,接收后可以校验是否被篡改;
——————————————————————————————————————
什么是mvvm模式
1.第一个m是model(模型层),负责数据的存储和业务逻辑;
2.第二个v是view(视图层),负责展示model中的数据;
3.第三个vm是view model(视图模型层);负责连接model(模型层)和view(视图层)、能够进行双向绑定,自动更新视图。
——————————————————————————————————————
vue-router有哪几种导航钩子

全局前置守卫:**beforeEach**

全局解析守卫:**beforeResolve**

全局后置钩子:**afterEach**

路由独享守卫:**beforeEnter**

组件内的守卫:**beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave**

### **监听同一个组件, 参数发生变化, 从id=1 变成 id=2**

1,通过组件内守卫**beforeRouteUpdate**

2,**watch**侦听器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值