内容简介:客户端请求 -> 服务器响应 -> 客户端确认收到响应,建立连接(保证网络正常)客户端请求 -> 服务器响应该请求 -> 服务器确认数据传送完毕, 发送关闭连接的响应 -> 客户端发送响应,在2MSL内未收到回复则视为服务器端已收到该响应并关闭连接接口,客户端关闭连接。
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;
}
以上所述就是小编给大家介绍的《【前端刷题笔记02】字节跳动2019面试题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python机器学习基础教程
[德]安德里亚斯·穆勒、[美]莎拉·吉多 / 张亮 / 人民邮电出版社 / 2018-1 / 79.00元
本书是机器学习入门书,以Python语言介绍。主要内容包括:机器学习的基本概念及其应用;实践中最常用的机器学习算法以及这些算法的优缺点;在机器学习中待处理数据的呈现方式的重要性,以及应重点关注数据的哪些方面;模型评估和调参的高级方法,重点讲解交叉验证和网格搜索;管道的概念;如何将前面各章的方法应用到文本数据上,还介绍了一些文本特有的处理方法。一起来看看 《Python机器学习基础教程》 这本书的介绍吧!