0%

三次握手

  1. 客户端通过向服务器端发送一个请求报文SYN来创建一个主动打开。

  2. Server端接受连接后回复ACK报文,并为这次连接分配资源。

    如果只有两次通信的话,这时候B不确定A是否收到了确认消息,有可能这个确认消息由于某些原因丢了。

  3. Client端接收到ACK报文后也向Server段发送报文,并分配资源,这样TCP连接就建立了。

    这个时候经过了三次握手,A和B双方确认了两边都是通的,可以相互通信了,已经可以建立一个可靠的连接,并且可以相互发送数据。

    这个时候已经不需要B再发送一个确认消息了,两边已经通过前三次建立了一个可靠的连接,如果再发送第四次确认消息的话,就浪费资源了。

Read more »

事务

数据库事务(Database Transaction) ,是指为访问并可能操作各个数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与结束之间执行的全部数据库操作组成。

如:我们去银行转账,操作可能分为以下两个环节:

(1)从第一个账户划出款项

(2)将款项存入第二个账户

这两个环节是关联的,如果第二个环节没有完成,那么所有的环节都应该取消。

性质:

A:原子性(Atomicity)事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。

C:一致性(Consistency)几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。

I:隔离性(Isolation)事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

D:持久性(Durability)对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

彻底理解数据库事务: http://www.hollischuang.com/archives/898

Read more »

软件测试理论

软件测试的生命周期

软件测试生命周期是指从项目计划建立到BUG提交的整个测试过程,包括:

  1. 软件项目测试计划
  2. 测试需求分析
  3. 测试用例设计
  4. 测试用例执行
  5. BUG提交
Read more »

https://zhuanlan.zhihu.com/p/27700617

平衡二叉树

平衡二叉树

(1)非叶子节点最多拥有两个子节点;

(2)非叶子节值大于左边子节点、小于右边子节点;

(3)树的左右两边的层级数相差不会大于1;

(4)没有值相等重复的节点;

Read more »

Python语言特性

Python的函数参数传递

看两个例子:

1
2
3
4
5
a = 1
def fun(a):
a = 2
fun(a)
print a # 1
1
2
3
4
5
a = []
def fun(a):
a.append(1)
fun(a)
print a # [1]

所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。

Read more »