红黑树
哈希表
TCP
TCP三次握手过程
客户端发送连接请求到服务端
- 客户端发送:
SYN
服务端收到消息后知道自己是可以与客户端连接成功的。
但是客户端并不知道服务端有没有收到它的请求,所有服务端收到消息之后得应答,告诉客户端它收到请求了。
ACK(SYN)
服务端同时也会发送一个连接请求到客户端。
SYN
- 服务端发送:
ACK(SYN)
SYN
客户端收到服务端的反馈后,才会确定自己是可以与服务端连接上的。
- 客户端发送:
ACK
TCP三次握手为什么是三次
如果只握手了两次会如何?
首位,在第二次握手中,服务器也发送了一个请求建立连接的请求到客户端。
假如连接就通过两次建立了,没有第三次握手,就没有客户端发送
ACK
到服务端。这种情况下,假如客户端没有数据发送,就会导致服务端那里一直在等待。
TCP四次挥手为什么是四次
- 建立连接时,被动方服务器端结束
CLOSED
阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN
和ACK
报文,开始建立连接。- 释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回
ACK
确认收到报文,经过CLOSE-WAIT
阶段准备好释放连接之后,才能返回FIN
释放连接报文。
lambda表达式
我们可以向一个算法传递任何类别的可调用对象
一个lambda表达式表示一个可调用的代码单元
可以将其理解为一个未命名的内联函数
与任何函数一样,lambda表达式也有返回类型,参数列表和函数体
与普通函数不同的是,lambda表达式可以定义在函数内容格式:
[捕获列表](参数列表)-> 返回类型 {函数体}
注意:
可以忽略参数列表和返回类型,但不能忽略捕获列表和函数体
1 2 |
auto f = [] {return 32;}; cout << f() << endl; |
关于捕获列表:
[] | lambda不能使用所在函数中的变量 |
[names] | names是一个逗号分隔的名字列表,这些名字都是lambda所在函数的局部变量 |
[&] | 隐式捕获列表,采用引用捕获的方式。lambda中所使用的和来自所在函数的实体都采用引用的方式使用 |
[=] | 隐式捕获列表,采用值捕获方式。lambda体将拷贝所使用的来自所在函数的实体的值 |
[&,identifier_list] | identifier_list是逗号分隔开的列表,包含0个或多个所占函数的变量。 这些变量采用值捕获的方式,而任何隐式捕获的变量都采用引用捕获的方式捕获。 identifier_list的名字前不能使用& |
[=,identifier_list] | identifier_list是逗号分开的列表,包含0个或多个所占函数的变量 这些变量采用引用捕获的方式,而任何隐式捕获的变量都采用值捕获的方式捕获。 identifier_list中的名字不能包括this,且这些名字之前必须使用& |
1 |
transform(v.begin(),v.end(),v.begin(),[](int i)->int {if(i < 0) return -i;else return i;}); |
分布式
高并发
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 2023_02_2002/20
- ♥ 2020_11_19_0102/16
- ♥ 2023_02_2703/06
- ♥ 2019_11_0511/07
- ♥ 2022_03_0903/09
- ♥ 2025_03_1103/11