page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 4877 次

3096 个回答

0 赞同

TCP 的十一种状态?

三次握手: CLOSED表示初始状态。 LISTEN表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT表示客户端已发送SYN报文,当客户端SOCKET执行CONNECT连接时进入该状态。 SYN_RCVD表示接收到了SYN报文。 ESTABLISHED表示连接已经建立。 四次挥手: FIN_WAIT_1表示向对方发送了FIN报文,等待对方的FIN报文。...

回答于 2022-08-10 15:35

0 赞同

什么是 socket?简述基于 tcp 协议的套接字通信流程。

socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信。 流程: 通信双方实例化tcpSocket对象,服务端绑定ip和端口号并执行lisient()方法进入监听状态。 客户端执行connect()方法请求连接,双方完成三次握手建立连接(模块内部实现)。 服务段执行accept()方法获得连接对象,双方实现通信。 通...

回答于 2022-08-10 15:34

0 赞同

简述基于 udp 协议的套接字通信流程?

通信双方实例化tcpSocket对象,服务端绑定ip和端口号。 客户端和服务端都可以执行sendto()方法发送数据给指定ip地址和端口号的主机。 客户端和服务端都可以执行recvfrom()方法获得发送给自己的数据以及发送方的ip和端口号。 通信结束执行close()关闭socket对象。

回答于 2022-08-10 15:34

0 赞同

TCP 为什么不是两次连接?而是三次握手?

先来分析三次握手: 第一步客户端发送SYN,第二步服务端发送ACK说明客户端发送能力,服务端接收能力OK。 第三部客户端发送ACK说明客户端接受能力,服务端发送能力OK,连接则是可靠的。 如果是两次: 客户端知道自己的接受发送能力和服务端的接受发送能力都OK,而服务端只知道自己的接受能力和客户端的发送能力OK,其余...

回答于 2022-08-10 15:34

0 赞同

为何基于 tcp 协议的通信比基于 udp 协议的通信更可靠?

TCP:面向连接,对方给了确认收到信息,才发下一个,如果没收到确认信息就重发,数据不会丢失 UDP:无连接,一直发数据,不需要对方回应,可能造成数据丢失

回答于 2022-08-10 15:33

0 赞同

网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?

多进程: 开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。 多线程: 一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。

回答于 2022-08-10 15:32

0 赞同

大规模连接上来,并发模型怎么设计?

多进程: 开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。 多线程: 一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。 协程: 协程的优势在于函数入口可以是上次停...

回答于 2022-08-10 15:32

0 赞同

能介绍下 rune 类型吗?

相当int32 golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8 byte 等同于int8,常用来处理ascii字符 rune 等同于int32,常用来处理unicode或utf-8字符

回答于 2022-08-09 14:18

0 赞同

go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?

作用:defer延迟函数,释放资源,收尾工作;如释放锁,关闭文件,关闭链接;捕获panic; 避坑指南:defer函数紧跟在资源打开后面,否则defer可能得不到执行,导致内存泄露。 多个 defer 调用顺序是 LIFO(后入先出),defer后的操作可以理解为压入栈中 解析:函数的 return 语句并不是原子级的,实际上 return 语句只代理...

回答于 2022-08-09 14:17

0 赞同

for range 的时候它的地址会发生变化么?

在 for a,b := range c 遍历中, a 和 b 在内存中只会存在一份,即之后每次循环时遍历到的数据都是以值覆盖的方式赋给 a 和 b,a,b 的内存地址始终不变。由于有这个特性,「for 循环里面如果开协程,不要直接把 a 或者 b 的地址传给协程」。解决办法:在每次循环时,创建一个临时变量。

回答于 2022-08-09 14:17