腾讯实习电话面
由于没有录音只记得一小部分,还有一部分是关于项目的。。。。。
1. 设计模式
参考:https://www.cnblogs.com/pony1223/p/7608955.html
https://www.cnblogs.com/pony1223/p/7608955.html
2.从url到页面呈现
输入url-->找缓存,如果没有-->查询DNS服务器得到服务器的IP--->建立TCP连接--->发送HTTP请求--->服务器解析请求,返回HTTP报文--->浏览器渲染页面
2.1 DNS域名解析具体原理
1.浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2. 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
3. 路由缓存:路由器也有DNS缓存。
4. ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
5. 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.,然后再问顶级域名服务器,之后是权威域名服务器,二级域名服务器,直到查询到IP地址,浏览器接收到IP地址后将其存入缓存以便下次使用)。
2.2 TCP三次握手
首先客户端发起会话请求,SYN=1,ACK=0,seq=J;
服务端收到请求后,确认建立会话,将SYN=1,ACK=1,ack=J+1,seq=K并将自己所能接受的最大字节传送给客户端;
客户端收到后,检查ACK标志位(确认位)是否为1,以及ack(确认序号)是否正确,正确后设置自己的最大传输字节,然后向服务端发送数据确认,此时ACK=1,ack=K+1,服务端收到后检验seq以及ack的值,正确则成功建立会话,后面继续通信。
2.3 浏览器渲染
HTML是个树形结构,浏览器根据这个html来构建DOM树,再构建DOM树过程中间如果有遇到js脚本和外部JS连接,会停止构建DOM树来执行和下载相应的js代码,因此JS代码推荐写在HTML代码后面。之后根据样式构建CSSOM树,构建完之后与DOM合并为渲染树,之后进行布局,布局主要是确定各个元素的位置和尺寸,之后是渲染页面。(因为html文件中会含有图片,视频,音频等资源,在解析DOM的过程中,遇到这些都会进行并行下载,浏览器对每个域的并行下载数量有一定的限制,一般是4-6个,当然在这些所有的请求中我们还需要关注的就是缓存)
3.TCP四次挥手
第一次:客户端发送连接释报文,报文中FIN=1,seq=u,并且停止发送数据此时客户端进入终止等待1阶段。
第二次:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,seq=v,此时服务器进入关闭等待阶段。客户端收到服务器的确认请求后,进入终止等待2阶段,等待服务器发送连接释放报文。
第三次:服务器将最后的数据发送完毕后,向客户端发连接送释放报文,此时服务器进入最后确认状态,等待客户端确认。
第四次:客户端收到服务器连接释放报文后,发出确认,此时客户端进入了时间等待阶段,等待2MSL时间后关闭,服务器只要收到客户端发生的确认后就关闭。
4.性能优化
详细参考:https://www.cnblogs.com/xiaohuochai/p/9178390.html
降低请求量:合并资源,减少HTTP 请求数,minify / gzip 压缩,webP,lazyLoad。
加快请求速度:预解析DNS,减少域名数,并行加载,CDN 分发。
缓存:HTTP 协议缓存请求,离线缓存 manifest,离线数据缓存localStorage。
渲染:JS/CSS优化,加载顺序,服务端渲染,pipeline。
5.前端安全性的了解
参考:https://segmentfault.com/a/1190000014839133?utm_source=index-hottest
(1) XSS:XSS是前端谈论最多的安全问题,是通过在你的输入文本当中或者这HTML标签当中插入js脚本进行攻击,比如会在你的a标签或者img标签之前插入一些脚本文件就能攻击到你的网站,所有在用HTML去切入到div的时候一定要注意,或者长串的字符串嵌入到a标签的时候。
解决办法:
- 浏览器禁止页面的JavaScript访问带有set-cookie:httpOnly属性的cookie
- 如果要使用HTML进行转换内容的时候,写代码时改为innerText而不用innerHTML,或者把<script><iframe>等标签替换掉;
- 对一些切入标签的字符串进行转义
(2)CSRF也称为跨站请求伪造,其实就是对网站中的一些表单提交行为被黑客利用。比如你的网站登录的时候存到cookie的一些个人信息,当你访问黑客的网站有一段相同代码隐藏div,但你点击的时候就会导致你的网站被登出或者被登录,就是在对别的网站就行操作的时候会对你之前访问的网站发送请求。
解决办法:
1.增加token验证.因为cookie发送请求的时候会自动增加上,但是token却不会,这样就避免了攻击
2.Referer验证。Refer首部包含了当前请求页面的来源页面地址。
3. 验证码
CSRF攻击过程中,用户在不知情的情况下构造了网络请求,添加验证码后,强制用户必须与应用进行交互。但是网站不可能把所有的操作都加上验证码
(3)点击劫持:点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
解决方法:X-Frame-Options HTTP响应头是用来给浏览器指示允许一个页面能否在<frame>、<iframe>、<object>中展现的标记。有三个可选值:
- DENY:浏览器会拒绝当前页面加载任何frame页面(即使是相同域名的页面也不允许)
- SAMEORIGIN:允许加载frame页面,但是frame页面的地址只能为同源域名下的页面
- ALLOW-FROM:可以加载指定来源的frame页面(可以定义frame页面的地址