2024.6.21线上面试了一家公司,以下是我的简单总结,总体来说,面试发挥很一般,该说的很多都没有说好。
- Q:常用的组件通信有哪些?
- A:父子之间用props children $parent、总线程
- Q:有没有用过provide inject
- A:没有
- Q:用ref时有什么需要注意的地方?
- A:当时回答不上了,说不太清楚,只会用
-
Q:vue的生命周期,和有哪些钩子函数,介绍一下?
-
A:beforeCreate,create,beforeMount,Mount,beforeUpdate,Update,beforeDestroy,Destroy,介绍了一下这些钩子的作用
面试官引导我去回答,问:create的时候能不能拿到ref的组件的实例
A:我想了一下,回答:应该不能,create执行完成后,只是创建完了实例,没有更新视图,也就没有完成DOM的渲染,所以拿不到ref组件的实例
面试官回答:是的,所以这就是ref要注意的地方
- Q:登录怎么做?流程是什么样的?(这个问题回答的也不够很完整)
- A:用token或者JWT,客户端发送账号密码给服务端,校验账号密码,通过之后签发token,后续接口的操作需要用到这个token
-
Q:怎么判断登录是否失效,请求发送是基于什么封装的?(这个有点忘记当时咋说的了)
-
A:基于axios封装,axios会有两种拦截器:请求拦截器,响应拦截器
请求拦截器:在请求发送前进行必要操作处理,例如:添加统一cookie、请求体加验证、设置请求头等,相当于是对每个接口里相同操作的一个封装
响应拦截器:功能如此,只是在请求得到响应之后,对响应体的一些处理,通常是统一处理等,也常来判断登录失效等
怎么判断登录是否失效? 请求拦截器,在发送请求前去做token的判断
instance.interceptors.request.use(req=>{},err=>{})
- Q:如果用户没有登录,直接通过路由访问对应的地址,如何做出限制?(路由守卫判断)
- A:回答得很混乱,说什么一开始需要写路由表,然后通过用户的身份进行判断用户能否访问该网页,不行的话就在网页和组件初始化(mounted)中判断,进行路由重定向,跳转到登录页面,不执行后续数据加载的代码
- Q:介绍一下路由守卫
- A:
- 1.全局守卫:
- beforeEach 路由进入之前
- afterEach 路由进入之后
- 2.路由独享守卫
- beforeEnter 路由进入之前
- 3.组件内守卫
- beforeRouteEnter 路由进入之前
- beforeRouteUpdate 路由更新之前
- beforeRouteLeave 路由离开之前
后来面试官又问我,那这个没有登录直接访问对应的地址后,是不是可以用路由守卫进行判断,判断用户是否登录,校验登录的token之类的,没有登录就在路由跳转前beforeEach重定向到登录页面,并通知用户 (我直接恍然大悟,原来我说的都是啥玩意)
- Q:给了一道题目,是事件循环相关的,写出输出的顺序
- A:感觉有点悬,写的自己心里没有底,主要是setTimeout和vue的nextTike的输出顺序忘记了,说到底还是对整个事件循环的机制了解得不够深入 后来面试官问了nexttick是干嘛的,问我认为 setTimeout和nextTick谁先执行
就酱,格式懒得改了,就记录一下给我自己看看