一、浏览器的缓存机制是什么?
1.浏览器的缓存机制就是把一个请求过的web资源,拷贝一份存储下来缓存副本。当下一次请求的时候就会更具缓存机制判断是否相同的URL,以此来判断是否发送请求,还是使用之前保存的缓存副本。

二、Session cookie token他们分别有什么样的区别,以及他们的应用场景?
1.cookie数据存放在客户的浏览器上,由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器, 不可跨域,安全性差

2.session数据放在服务器上 每个会话服务器都会发一个session id 存储在客户端cookie里面,每次客户端访问服务器的时候都会带着这个个session id去访问,服务器就会拿内存里面的session与之对比进行服务。
3.Token是指令牌的意思
场景当登入的时候输入用户名和密码 登入服务器,验证成功后服务器会返回一个token,
客户端会存存储这个token 然后每次向服务器请求资源的时候都会带上这个token,服务器会验证这个token如果成功则会响应数据

三、Meta viewport是做什么用的 ?
1.通常是用来适配移动的视窗的,可以调节设备宽度,缩放比例

四、什么是promise?有三种状态分别是什么?
1.Promise是用来解决异步编程的新方案,封装一个异步操作并且获取其结果(解决回调地狱问题) .then() .catch() .finally() .all() .any() .race()
2.三种状态 Pending进行中 失败Rejected 已完成 Resolved(Fulfilled)

五、什么是跨域?如何使用前端技术解决跨域问题?
1.跨域是由于浏览器里面的同源策略机制 协议 + 域名 +端口号 hi要有一个不同就是跨域
2.前端使用JSONP解决跨域问题
3.Vue项目可以使用devServer proxy设置代理在vue.config.js里面

六、JSONP实现跨域的原理是什么?
1.使用浏览器的script标签的src属性标签可以链接到不同源的js脚本,来到达跨域目的

七、请详细说一下TCP的三次握手和四次挥手的过程
1.三次握手,第一次 客户端向服务器发送一个请求 第二次,服务器收到请求,向客户端发送一个确认请求 第三次客户机收到确认请求 向服务器发送一个确认 建立连接
2.四次挥手 第一次 客户端向服务器发送一个断开链接的报文 ,第二次 服务器向客户端发送一个等待请求让客户端稍等 第三次 服务器向客户端发送一个断开确认报文,告诉客户端准备断开连接 ,第四次 客户端向服务器发送一个ack等待2m’sl(最大报文生存时间)之后,服务端没有相应则整明 已经断开链接 则客户端也可以断开连接了

八、浏览器的渲染机制?

九、使用vue.js有什么样的有点和缺点
1.优点轻量级框架,简单,双向数据绑定,组件化开发,数据和结构分离,虚拟Dom,运行速度快,通过MVVM的思想实现数据的双向绑定,让开发者不再操作dom
因为是单页面应用,不利于seo优化

十、谈一谈对vue生命周期的理解
1.beforeCreate创建前
2.Created 创建后
3.beforeMount 挂载前
4.Mounted 挂载后
5.beforeUpdate 更新前
6.Updated 更新后
7.beforeDestory 销毁前
8.Destoryed 销毁后
组件加keep-alive后
9.activated 当缓存组件显示的时候
10.Deactivated 当缓存组件隐藏时
11.ErrorCaptured 当子孙组件出错时会调用这个函数

十一、V-if和v-show有什么样的区别
二者都可以控制元素的隐藏和显示,
1.v-if是删除或者创建元素,也就是说整个界面不存在这个DOM元素
2.v-show 是通过控制css的属性display:none来控制元素的显示和隐藏

十二、Vue组件之间是如何通讯的?
子组件向父组件传值使用 $emit(‘事件名称’)父组件上用@监听事件
父组件向子组件传值 通过props传值 v-bind:绑定属性名称
兄弟组件通过事件中心传值 $EventBus $emit()发布事件 $on监听事件

十三、Vue数据的双向绑定原理?
Object.defineProperty()

十四、做vue项目过程中有什么样的优化手段
路由懒加载,外部组件的按需引入,CDN的加载方式

十五、请说一下虚拟Dom的实现原理

十六、对JS异步编程的理解
由于js 是单线程的
1.同步任务和异步任务(宏任务和微任务)优先执行同步任务 后执行异步

十七、Js中的 == 和 === 有什么样的区别?
NAN和任何相比较都是false
null == undefined --true
null === undefined --false

1.==会进行隐式转换 ,===是全等 数据类型 数值都要相等 不会转换数据类型

十八、深拷贝和浅拷贝有什么样的区别?
1.浅拷贝 把一个对象中的所有的内容,复制一份给另一个对象,直接复制,或者说,就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或者方法,都可以使用
2.深拷贝 把一个对象中所有的属性或者方法,一个一个的找到,并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中

十九、如何实现一个深拷贝
使用递归判断是否是对象如果是就递归调用

二十、如何使用js实现继承
将父类的实例作为子类的原型
Cat.prototype = new Animal()

二十一、如何理解js中的this关键字
谁调用这个函数或方法,this关键字就指向谁

二十二、什么是闭包?解决了什么问题?会导致什么问题?
函数内部有一个函数 内部函数就叫做闭包,闭包会导致占用内存过多,不容易被释放

二十三、在前端的项目中优化的手段是什么?一般会使用到什么样的一个工具?
Webpack

二十四、Node.js的使用场景是什么?
NodeJS适合运用在高并发,I/O密集,少量业务逻辑的场景,
代表性有:网站开发,前端构建工具,api调用服务

二十五、使用NPM会有什么样的好处?
使用npm可以下载别人的代码和包,你可以安装和管理项目的依赖,并且能够指明依赖项的具体版本号。进心使用,npm install 还可以选择版本

二十六、请谈一谈你对前后端分离的理解
前后端分离 加快了开发速度 前段后端约定好 数据接口 参数 即可同时开发,提升了他开效率

二十七、Vue项目打包后出现空白页需要怎么处理
配置vue.config.js 里面的publicPath:’./’