【前端刷题笔记02】字节跳动2019面试题-一只想做全栈的猫-SegmentFault思否
程序员文章站
2023-03-27 19:26:07
1、tcp的三次握手和四次挥手
1.1 三次握手:
客户端请求 -> 服务器响应 -> 客户端确认收到响应,建立连接(保证网络正常)
1.2 四次挥手
客户端请求 -...
1、tcp的三次握手和四次挥手
1.1 三次握手:
客户端请求 -> 服务器响应 -> 客户端确认收到响应,建立连接(保证网络正常)
1.2 四次挥手
客户端请求 -> 服务器响应该请求 -> 服务器确认数据传送完毕, 发送关闭连接的响应 -> 客户端发送响应,在2msl内未收到回复则视为服务器端已收到该响应并关闭连接接口,客户端关闭连接。
1.3 为什么time_wait状态需要经过2msl(最大报文段生存时间)才能返回到close状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入close状态了,但是我们必须假象网络是不可靠的,有可以最后一个ack丢失。所以time_wait状态就是用来重发可能丢失的ack报文。
2、tcp和udp的区别、比较
udp | tcp | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
适用场景 | 适用于实时应用(ip电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
3、链表反转
链表反转有两种方法:
就地反转法//就地反转法 interface listnode { value: string; next: listnode; } function reverselist1(head:listnode) { if (head == null) return head; let dummy = null; dummy.next = head; let prev = dummy.next; let pcur = prev.next; while (pcur != null) { prev.next = pcur.next; pcur.next = dummy.next; dummy.next = pcur; pcur = prev.next; } return dummy.next; }头节点插入法
interface listnode { value: string; next: listnode; } function reverselist2(head: listnode) { let dummy = null; let pcur = head; while (pcur != null) { listnode pnex = pcur.next; pcur.next = dummy.next; dummy.next = pcur; pcur = pnex; } return dummy.next; }
参考连接
tcp三次握手和四次挥手过程 tcp和udp比较 单链表反转总结篇
上一篇: jquery.mobile 共同布局遇到的问题小结
下一篇: Python常用小技巧总结