web前端 面试问题总结2020

web前端 面试问题总结2020

本文转自: https://www.jianshu.com/p/ca16020114cd

1. var let const 的区别,以及变量提升,函数提升

  • var

1.不存在块作用域
2.可以多次声明(覆盖)
3.存在变量提升:当var a = 1;时候,会先在作用域的最顶端,var a;然后在var a = 1;的位置给a赋值

  • let const

1.存在块作用域
经典例题:
for循环给多个dom添加时间,输出for循环的角标i,如果用var声明,因为没有块作用域,var会变量提升到外层作用域最顶端,而多次i赋值,最后只保存了最后一次的值,改成let可以解决这个问题(这就是强行解释,具体为什么let可以解决还需要好好看看let)
2.不可以多次声明
包括function a() {};存在后不能let const a
变量提升和函数提升排序的问题需要理解

2.async/await 原理

3.主进程,宏任务,微任务

宏任务:macrotask 包括:setTimeout、setInterval、postMessage等。
微任务:microtask 包括:Promise.then、await后面的代码。
事件执行顺序:
1.先执行主进程中同步的代码,promise中的代码为同步代码
2.主进程代码执行完毕后执行微任务中的代码,从上到下一个一个放到主进程中执行。
3.微任务执行完毕之后从上到下把宏任务中的代码放到主进程中执行,如果这期间产生微任务,则执行完当前宏任务后重新执行微任务队列,然后继续回到执行宏任务队列
4.重复 2,3

3.iframe通信的方法和优缺点,父子通信,父子跨域通信

方法一 postMessage

// top 是目标iframe,可以使iframe的name属性;target是目标iframe的域名
top.postMessage(‘数据‘, target);
// e.currentTarget.parent是他的父iframe
window.addEventListener(‘message‘, (e) => {
// 发送回去一条消息
e.currentTarget.parent.postMessage(‘消息‘, ‘*‘)
});
postMessage优点

1.可以跨域发送消息

postMessage缺点

1.低版本浏览器不支持

方法二 通过调用目标iframe的方法

  // 父传子
  target.window.fun()
 // 子传父
 window.parent.window.fun()
优点
缺点

1.不能跨域
2.必须等页面加载完毕才能调用

HTTP常用的Method

简单的请求

HEAD,GET, POST
GET:
1.参数可见
2.可以缓存
3.会生成历史记录
4.长度有限制
POST:
1.参数不可见
2.不可以缓存
3.不会生成历史记录
4.不限制长度
5.数据类型不限制
6.会先提交HEAD请求,得到100响应后才能继续提交
HEAD:
和GET类似,但是不会返回响应主体

特点
1.没有自定义的报文头
2.MIME Type in text/plain、multipart/form-data、application/x-www-form-urlencoded

预检请求

OPTIONS: 主要目的是获取服务器允许的请求方式

特点
1.自定义请求头信息
2.MIME Type Not in text/plain、multipart/form-data、application/x-www-form-urlencoded

其他请求

PUT和PATCH
DELETE:删除资源

TCP和UDP(OICQ,NDS)区别

1.TCP面向连接,必须先建立连接;UDP发送数据之前不需要连接
2.TCP是可靠的链接,不会丢失重复,按顺序到达;UDP不保证可靠
3.UDP效率更高,可以实现实时传输和广播通信
4.TCP是点对点,UDP都可以
5.TCP对系统资源有要求,UDP要求相对较小

TCP过程

1.创建socket socket();
2.设置socket属性,setsocketopt() 可选
3.绑定 ip地址,端口号
4.开启监听 listen()
5.接收客户端的链接, accept()
6.收发数据 send()
7.关闭连接
8.关闭监听

UDP过程

1.创建socket
2.设置socket属性
3.绑定ip,端口到socket上 可选
4.循环的接收数据
5.关闭连接

WebSocket和socket

socket其实是控制传输的接口,底层是操作TCP或者UDP
websocket是应用层的协议,保持连接不断开

node服务器优缺点

优点:事件驱动,是的输入输出性能很高
缺点:cpu计算差,比如做很多计算操作,代码运行效率要求高,所以用底层的语言来做,比如C
io密集型:需要处理比较多的任务

解释型语言和编译型语言

编译型语言:
1.编译时候会判断错误,无法继续编辑
2.效率高,一次编译多次运行
解释型语言:
1.执行时候才会判断错误
2.逐句翻译,执行效率低

require和import

require是commonjs规范,运行时候加载
import是es6规范,是编译时候加载

hash和history

监听hash window.onhashchange
监听history window.onreplaceState

 
 
 

web前端 面试问题总结2020

上一篇:CSS样式更改——列表、表格和轮廓


下一篇:如何在Nginx中启用HTTP/2.0