面试题(1)笔记

158 阅读4分钟

解决内存泄漏的几种方法

全局变量要清空,尽量避免创建全局变量(挂载window上的变量)
闭包有可能内存泄漏(尽量不要使用闭包)
定时器清理掉
vue中window绑定了事件监听离开页面后一定要解绑
eventBus事件解绑
echarts不用了之后要 this.echarts.clear()

http协议

http协议是指服务器传输超文本到本地浏览器的传送协议

浏览器和服务器的三次握手

tcp链接的建立 
第一次握手:浏览器向服务端发送一个连接请求,创建链接数据包的请求
第二次握手:服务端返回信息给客户端(返回服务器能否正常创立链接)
第三次握手:客户端发送确认信息给服务端(确认收到同意链接信号)
通道建立 服务器端返回超文本  前端浏览器解析超文本

http和https

HTTPS会比http更安全
http传输数据都是明文   不安全
https会比http在传输之前多走一层ssl证书校验

tcp和http

http请求时基于tcp协议的  
tcp是针对于传输层
http是针对于应用层 
在一个tcp的基础上可以建立多个http请求

闭包

作用域外面想要访问作用域内的变量,会造成内存溢出

跨域以及解决方案

之所以出现跨域是因为浏览器的同源策略,指浏览器不能执行其他网站的脚本,出现原因是协议、端口、域名不同   ,是一个安全策略针对javascrip的安全限制,可能会ajax不能发送,缓存不能读取(cookie、loacalstorge都无法读取)
vue 代理
Nginx反向代理
后端开启cors
都是需要本地启动服务  服务来代理

vue的优化方案

v-for不要使用v-if  因为for的优先级比较高,循环要设置我唯一的key值
页面懒加载
v-if和v-show合理使用
计算属性和watch的合理使用
事件监听之后销毁
按需引人入插件
keep-alive缓存   经常操作的页面做一些缓存(include,exclude)//正则匹配成功缓存,匹配成功不缓存

缓存 keep-alive

两个常用属性include 正则匹配到了就缓存
exclude正则匹配到了就不缓存

es6新增api

箭头函数
扩展符,对象数组结构赋值
class类声明,面向对象 class类声明
变量声明 let  counst
模板字符串
函数默认参数赋值
includes判断数组是否包含一个值,返回一个布尔
object.keys循环对象key值返回一个数组
object.values返回所有value返回一个数组
object.assign对象合并
object.is严格模式判断,可以判断Nan
set数据结构 可以做数组去重有一些方法操作set数据结构,add,delete,clear..

webpack

浏览器的垃圾回收机制

深浅拷贝

json数据格式来回的转换一下
object.assgin当对象或数组只有一层的时候是深拷贝,但是对象或数组中存在二级复杂数据类型的时候是浅拷贝

vue data为什么是一个函数

法昂直属局污染,保证组件的可复用性、独立性

数据类型判断

Json转换之后
Object.prototype.toString.call(被判断的值,"[Object Object]")

判断

false == []  //true  因为空数组也是false  隐式类型转换
false === []  //  false  严格模式
false == "false"  
Javascript 中,数字 0 为假,非0 均为真
==============================================隐式类型转换规则
1.  如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 01,然后进行比较。
1.  如果比较的双方中有一方为 Number,一方为 String时,会把 String 通过 Number() 方法转换为数字,然后进行比较。
1.  如果比较的双方中有一方为 Boolean,一方为 String时,则会将空字符串""转换为 false,除此外的一切字符串转换为 true,然后进行比较。
1.  如果比较的双方中有一方为 Number,一方为Object时,则会调用 valueOf 方法将Object转换为数字,然后进行比较。

隐式类型转换会给我们造成很多麻烦,那么该怎么避免呢?

  建议在所有使用条件判断的时候都使用全等运算符 `===` 来进行条件判断。全等运算符会先进行数据类型判断,并且不会发生隐式类型转换。