视频面试的非常满意的一家企业,面试结果有点一波三折的味道,不过目前来说还算是比较偏向于好的结果吧。具体情况如何等当面下周面谈完具体情况及薪资待遇之后才知道。这里记录一下面试上问到的技术问题及回答总结,方便复习
# 1. 前端向后端请求数据的方式有几种?分别是什么?
这个问题可以说是非常基础的问题了,只要开发中会接触到接口的人基本都需要掌握这个知识。考察点:请求方式、RESTful
答:请求的方式一共有8种,在HTTP 1.0
中定义了三种最基础的请求方式,分别是GET、POST、HEAD
,之后的HTTP 1.1
中新增了5个请求方法PUT、PATCH、DELETE、OPTIONS、CONNECT、TRACH
,在RESTful
规范编写中,常用的是前6个方法,很多时候请求的路由是相同的,由不同请求方式来表示不同的请求意图。
# 2. 说说对OPTIONS请求方式的理解,有什么作用?
答:OPTIONS是返回服务器针对特定资源所支持的HTTP请求方法,即预检请求。主要用途有两个:一是获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。二是用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
具体详情可参考:https://www.cnblogs.com/taich-flute/p/11313147.html
# 3. 谈谈对http
、https
、websocket
三种协议的理解
答:http
是一种超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP
协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。
https
是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,是HTTP的加密安全版,利用SSL/TLS
建立全信道,加密数据包。 https
使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
WebSocket
的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,也就是全双工通信。
具体详情可参考:https://www.cnblogs.com/Dr-wei/p/11752698.html
# 4. 如果要实现一个即时通讯,除了websocket
和长轮询之外,还有什么其他办法吗?
面试官补充:曾经IE端的微信网页曾经巧妙的利用了一种方法,利用前端请求后端接口时,前后端始终不主动断开连接(也就是说始后端始终不发送“结束标志”),这种情况下,前后端的连接可以说始终没有断,后端可以通过不断向数据流中写入数据,只要不写入结束标志就行,前端也可以不断读取流中的数据。这种理论下可以间接实现即时通讯
答:这块确实是盲点,由于这方面的资料较少,查了半天也没查到相应资料,现在仍然半知半解状态。
# 5. 谈谈工作项目遇到跨域问题的解决方式
跨域问题是一个非常盘频繁的点,只要涉及到非同源策略请求,就会被认为是跨域。后端开发接口的时候不开放跨域会被吐槽说成不专业,前端无法自行解决跨域问题也不合格。
答:跨域问题可以从两个方面来解决。一种是常用的后端开放跨域请求,只要在所有请求结果返回之前设置一个拦截中间件,给返回体设置上合适的header
参数,这样只要符合所设置规则的域名都可以正常的请求到返回结果。前端当然也可以自行解决跨域问题,前端处理跨域可以利用jsonp
还有iframe
等来实现跨域,但是这些方法多多少少会有些安全问题,在没有特殊的情况下一般由后端处理较为安全方便。
// Nodejs设置跨域访问
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
2
3
4
5
6
7
8
9
# 6. 你工作中有使用过什么加密方式吗?
答:比较常用的两个加密方式是MD5
和Base64
,加上了解还有一个MD5
更为安全的SHA1
算法。MD5
和SHA1
都是经典的不可逆算法,所以很多场景下,如果账户密码丢了,只能通过重置密码的方式,而无法直接找回原密码。在实际开发当中,如果涉及到用户密码方面,也会通过多重加密算法将密码加密多次之后,将密文对应存储起来,当用户输入密码时,通过同样的步骤将输入的密码加密,最后结果跟存在数据库中的密文做对比。
面试官补充:MD5
在目前,已经有工具可以将一些密文暴力还原回原始密码了,所以很多时候,多加密几次,甚至配合几种不同的加密算法多次加密这种方式非常有必要。
# 7. 知道对称加密和非对称加密有什么区别吗?
答:对称加密算法又称传统加密算法,加密和解密使用同一个密钥,加密解密过程:明文->密钥加密->密文,密文->密钥解密->明文。
非对称加密算法又称现代加密算法,对称加密是计算机通信安全的基石,保证了加密数据不会被破解。 非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey) ,公开密钥和私有密钥是一对。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。 如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
# 8. 说说项目部署后时怎么样展示到用户浏览器中的
答:项目部署在某台计算机上,通过Apache或Nginx起一个网络服务,这时其他计算机就能通过指定的IP访问到这台电脑的某个端口,从而接入进这个网络服务中。当然也可以通过域名来实现,但是域名的本质也是指向的某个IP,这就相当于给难记的IP地址赋予了一个英文名。在请求到正确数据后,浏览器会根据数据进行DOM树的构建,然后再构建CSS样式结构,这样就构成了用户看到的网页。
# 9. 谈一谈对Promise的理解
答:Promise的出现解决了一个最基本的回调地狱的问题,让我们写异步代码不用回调里嵌回调,改成更人性化的使用方式,先做什么,然后干什么,之后再干什么这种逻辑流程,除此之外还有个比较常用的是Generator语法糖的进阶async/await,他们能大大增强我们代码的可读性和逻辑性。
# 10. 如果想要上传一个比较大的文件,有什么方法优化
答:可以采用分片上传,一般用第三方的OSS进行对象云存储,这样既安全有能省下很多麻烦。分片上传就是将一个大文件拆分成一个一个块,再把块拆分成一个一个片,这样将这些信息整合起来就得到一个完整的元数据。而且如果上传过程中出现异常,出错损坏的也仅是这一小部分而已。再可以配合上CDN
进行网络的分发,将资源存放在多个不同地域的服务器里,提供给客户多个接入节点,可以实现网络加速的功能。