概念
一个类应该只负责一个职责,当一个类同时负责多个职责的时候,某个职责发生变动可能会影响整个类或者其他类的使用。
实际开发中,应该是尽量一个类只负责一个职责。同样一个方法,函数也应该只负责某项功能。
特点:
降低类(代码)的复杂度;
降低变更引起的风险;
减少影响范围,系统更稳定。
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,以及散列值