单一职责原则;

接口隔离原则;

依赖倒置原则;

里氏替换原则;

开闭原则;

迪米特法则;

合成复用原则;

口诀

何旦 - 开迪 - 接 - 李依

合单 - 开迪 - 接 - 里依


概念

一个类应该只负责一个职责,当一个类同时负责多个职责的时候,某个职责发生变动可能会影响整个类或者其他类的使用。

实际开发中,应该是尽量一个类只负责一个职责。同样一个方法,函数也应该只负责某项功能。

特点:

降低类(代码)的复杂度;

降低变更引起的风险;

减少影响范围,系统更稳定。

demo:

比如订单类应该只处理跟订单相关逻辑,而不要处理和用户相关的逻辑。

比如在laravel model开发中,user 的model应该只有跟用户相关的处理,不同的对象应该创建不同的model;

比如控制器,同对象的控制器可以用一个控制器,而不要所有的逻辑都到一个控制器去处理;



第三方登陆主要是基于author协议来实现,下面简单说下实现流程:

1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,

申请成功后,我们会获得一个appID和一个secrectID.

2、当我们的网站需接入第三方登陆时,会引导用户跳转到第三方的登陆授权页面,

此时把之前申请的appID和secrectID带给登陆授权页面。

3、用户登陆成功后即得到授权,第三方会返回一个临时的code给我们的网站。

4、我们的网站接受到code后,再次向我们的第三方发起请求,

并携带接收的code,从第三方获取access_token.

5、第三方处理请求后,会返回一个access_token给我们的网站,

我们的网站获取到access_token后就可以调用第三方提供的接口了,比如获取用户信息等。

最后把该用户信息存入到我们站点的数据库,并把信息保存到session中,实现用户的第三方登陆。

1、三次握手:

•1)第一次:客户端发送SYN = 1,seq = client_isn

◦作用:客户端:无,服务端:确认自己的接收功能和客户端的发送功能

•2)第二次:服务端发送SYN = 1,seq = server_isn,ACK =client_isn +1

◦作用:客户端:确认自己发送和接收都正常,确认服务端的接收和发送正常,服务端:确认自己的接收正常,确认服务端的发送正常(这时候服务端还不能确认客户端接收是否正常)

•3)第三次:客户端发送SYN = 0, ACK = server_isn+1,seq =client_isn+1

◦作用:双方确认互相的接收和发送正常,建立连接

2、四次挥手

•1)第一次:客户端发送FIN

◦作用:告诉服务端我没有数据发送了(但是还能接收数据)

•2)第二次:服务端发送ACK

◦作用:告诉客户端收到请求了,可能服务端还有数据需要发送,所以客户端收到进入FIN_WAIT状态,等服务端数据传输完之后发送FIN

•3)第三次:服务端发送FIN

◦作用:服务端告诉客户端我发送完了,可以关闭连接了。

•4)第四次:客户端发送ACK

◦作用:客户端收到FIN之后,担心服务端不知道要关闭,所以发送一个ACK,进入TIME_WAIT,等待2MSL之后如果没有收到回复,证明服务端已经关闭了,这时候客户端也关闭连接。

注意:

•当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据

•最后需要等待2MSL是因为网络是不可靠的,如果服务端没有收到最后一次ACK,服务端会重新放FIN包然后等客户端再次发送ACK包然后关闭(所以客户端最后发送ACK之后不能立即关闭连接)


hashtable:将不同的关键字(key)通过映射函数计算得到散列值(Bucket->h) 从而直接索引到对应的Bucket

hash表保存当前循环的指针,所以foreach 比for更快

Bucket:保存数组元素的key和value,以及散列值