- 三次握手、四次挥手
TCP的运输连接管理
三个阶段:1) 连接创建 2) 数据传送 3) 连接释放
解决的三个问题:
- 要使每一方能够确知对方的存在
- 要允许双方协商一些参数
- 能够对运输实体资源进行分配
- 采用C/s方式 client server browser
HTTP协议的底层传输默认使用的是可靠地tcp协议,不过他对互联网的高速发展带来很大的制约,Google制定了一套基于udp的QUIC(Quick UDP Internet Connection) 协议,这种协议基于TCP和udp之间,不过目前还没有广泛使用
三次握手和四次挥手保证了连接的可靠性,这种模式也有他的缺点,首先在传输效率上会比较低,另外三次握手的过程中客户端需要发送两次数据才可以建立连接。比如发出第一次握手(并接到第二次握手后)就不再回应第三次握手,默认情况会一直发送五次,当然个别的这种请求也没什么关系,但凡事就怕一个多字,当有大量的这种请求就麻烦了,这是服务器就会浪费大量的资源,甚至可能导致无法处理正常的请求,这就是DDOS攻击中的 syn flood 攻击
- http协议
- http的8种请求方式
- POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
- GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
- 全排列
permutation 置换
backtrack 回溯
// 刚开始接触回溯算法的时候常常会忽略状态重置
// 回溯的时候,一定要记得状态重置
即
tmp_list.add(nums[i]);
findPermutation(nums,len,tmp_list);
tmp_list.remove(tmp_list.size()-1);
使用数组
使用位图进行判断节省内存从n!
内存从n! --> n
if (((used >> i) & 1) == 0) {//如果当前位不等于即没有用过
used ^= (1 << i); //与当前值异或0i00j
//用完以后,状态重置 回溯常用套路
used^=(1<<i);
}
还是没有理解剪枝的精髓
而 !used[i-1],则是迅速去杂,每次只允许不同的数加入队列,更加迅捷
used[i-1] 表示则是倒序
看了liuweiwei的答案受益匪浅
数组的排序是很重要的