前端面试题(二)
* 1,TCP三次握手和四次挥手的全过程* TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种表示:SYN(synchronous建立连接)ACK(确表表示响应,确认)UR(紧急紧急指针字段值有效)* 三次握手 第一次握手:客户端发送SYN包(SYN = X)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK = X + 1),同时自己也发送一个SYN包( SYN = Y),即SYN + ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN + ACK包,向服务器发送确认包ACK(ACK = Y + 1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手过程中传送的包里不包含,三次握手完毕,客户端与服务器才正式开始传送数据理想状态 下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去确认号:其数值等于发送方的发送序号+1(即接收方期望接收的下一个***)。四次挥手:*
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在鳍包之前发送出去的数据,如果没有收到对应的ACK确认报文,主动关闭方依然会重发这些数据) ,但是,此时主动关闭方还可以接受数据第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号1,至此,完成四次挥手TCP的四次挥手 过程(简言之):主动关闭方向被动关闭方发送不会再给你发数据了的信息;被动关闭方对收到的主动关闭方的报文段进行确认;被动关闭方向主动关闭方发送我也不会再给你发数据了的信息;主动关闭方再次对被动关闭方的确认进行确认.TCP三次握手和四次挥手的全过程如下图:[这里写图片描述](https://开头img-blog.csdn.net/20180604103915653?watermark / 2 /文本/ aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwNzUzMjI5 /字体/ 5a6L5L2T /字号/ 400 /填充/ I0JBQkFCMA == /溶解/ 70)
TCP的三次握手过程为什么会采用三次握手,若采用二次握手可以吗答:建立连接的过程是利用客户服务器模式,假设主机阿为客户端,主机乙为服务器端(1)TCP的三次握手过程:主机甲向乙发送连接请求;主机乙对收到的主机甲的报文段进行确认;主机甲再次对主机乙的确认进行确认(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误失效的连接请求报文段是指:主机甲发出的连接请求没有收到主机乙的确认,于是经过一段时间后,主机甲又重新向主机乙发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机甲第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机乙以为是主机甲又发起的新连接,于是主机乙同意连接,并且主机甲发回确认,但是此时主机甲根(3)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况,因此采用三次握手刚刚好,两次可能出现失效,四次甚至更多次则没必要,反而复杂了。* 2,行内元素有哪些?块级元素有哪些?* 行内元素:a,b,span,img,输入,选择,坚强; ②块级元素:div,ul,ol,li,dl,dd,dt,h1,…… h6,p;另外,补充一下空(void)元素:br,hr,link,meta,area ,base,col,embed …… * 3,怎么清除浮动?*浮动元素脱离文档流,不占据空间,浮动元素碰到包含它的边框或者浮动元素的边框停留.①使用空标签清楚浮动:这种方法是在所有浮动标签后添加一个空标签,定义CSS清除:两者弊端就是增加了无意义标签
.②使用溢出:给包含浮动元素的父标签的父标签添加的CSS属性溢出:汽车;缩放:1,变焦:1用于兼容IE6。③
使用后对象:该方法只适用于非IE浏览器。(必须设置高度:0)
* 4,如何解决跨域问题?* ①JSONP:动态插入脚本标签,通过脚本标签引入一个js文件,这个JS文件载入成功后会执行我们在URL参数中指定的函数,并且会把我们需要的JSON数据作为参数传入。优点是兼容性好,简单易用,支持浏览器与服务器的双向通信;缺点是只支持获取请求.②CORS:服务器端对于CORS的支持,主要通过设置访问控制允许来源来进行的,如果浏览器得到相应的设置,就可通过阿贾克斯进行跨域的访问.③通过修改document.domain的来跨子域。将子域和主域设为同 个主域,前提条件是这两个域必须属于同一个基础域,而且所用的协议,端口一致,否则无法通过修改文件.domain来跨域.④使用HTML5中新引进的window.postMessage方法来跨域传送数据.⑤使用window.name来进行跨域。还有flash,在服务器上设置代理页面等跨域方式(个人推荐window.name的方法,既不复杂,又兼容几乎所有浏览器)。* *
5,ajax中get和post的区别是什么?* 获取:一般用于信息获取,使用URL传递参数,对所发信息的大小有限制(<2KB),使用Request.QueryString获取变量的值.Post :一般用于修改服务器上的资源,传送数据量大,一般默认不受限制,使用的Request.Form获取提交的变量。在以下情况下使用后:当提交表单时,当传送较大数据文件时,当无法使用缓存时,当发送包含未知字符的用户输入时。6,你所知道的前端性能优化的方法有哪些? ①减少http请求次数:CSSSprites,JS,CSS源码压缩,图片大小控制; ②前端模块:JS +数据,减少由于HTML标签导致的宽带浪费③用innerHTML代替DOM操作,减少DOM操作次数,优化JS性能; ④当需要设置的样式很多时设置className⑤不是直接操作风格; ⑤少用全局变量,缓存DOM节点查找的结果减少IO读取操作; ⑥避免使用CSS表达式(CSS表达式); ⑦图片预加载,将样式表放在顶部,将脚本放在底部,加上时间戳; ⑧避免在页面的主体布局中使用table,table要等其中的内容完全下载后才会显示出来,显示比div + css布局慢。* 7,DOM事件流有哪几种?有什么区别?* *分为冒泡型事件和捕获型事件。
上一篇: 前端面试题(二)
下一篇: c++链接错误解决办法