include 和 reqiure
官方文档里主要介绍了include,require很少,因为它也说了,用法几乎完全一样,唯一区别就是处理失败方式不同。
require
(PHP 4, PHP 5, PHP 7)
require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
官方文档里主要介绍了include,require很少,因为它也说了,用法几乎完全一样,唯一区别就是处理失败方式不同。
(PHP 4, PHP 5, PHP 7)
require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
位均为1时,才为1;否则为0.
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为11111111)。
有一个为1,结果位就位1.
相同为0,不同为1. n^n=0, n^0=n
左移n位就是乘以2的n次方。
1.例: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
右移n位就是除以2的n次方
左移右移注意有符号数。
左移就是: 丢弃最高位,0补最低位。
右移对符号位的处理和左移不同: 对于有符号整数来说,比如int类型,右移会保持符号位不变。
对称加密: 私钥加密,双方使用1个密钥加密解密。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有AES、DES、3DES、TDEA、Blowfish、RC5和IDEA。
CSR文件和P10文件
作为文件形式存在的证书一般有这几种格式:
1.带有私钥的证书
由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。
2.二进制编码的证书
证书中没有私钥,DER 编码二进制格式的证书文件,以cer作为证书文件后缀名。
3.Base64编码的证书
证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。
由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。
CFCA ACS OCA33 主要用于满足不同领域客户RSA-2048/SHA256 密
码算法的需求,可以签发RSA 2048/SHA256 及 SM2/SM3密钥类型的个人
证书、企业证书、设备证书等。系统的签名算法采用 SM2/SM3 或者RSA2048/SHA256。
观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
观察者模式实现了低耦合,非侵入式的通知与更新机制。
/**
* 事件产生类
* Class EventGenerator
*/
abstract class EventGenerator
{
private $ObServers = [];
//增加观察者
public function add(ObServer $ObServer)
{
$this->ObServers[] = $ObServer;
}
//事件通知
public function notify()
{
foreach ($this->ObServers as $ObServer) {
$ObServer->update();
}
}
}
/**
* 观察者接口类
* Interface ObServer
*/
interface ObServer
{
public function update($event_info = null);
}
/**
* 观察者1
*/
class ObServer1 implements ObServer
{
public function update($event_info = null)
{
echo "观察者1 收到执行通知 执行完毕!\n";
}
}
/**
* 观察者1
*/
class ObServer2 implements ObServer
{
public function update($event_info = null)
{
echo "观察者2 收到执行通知 执行完毕!\n";
}
}
/**
* 事件
* Class Event
*/
class Event extends EventGenerator
{
/**
* 触发事件
*/
public function trigger()
{
//通知观察者
$this->notify();
}
}
//创建一个事件
$event = new Event();
//为事件增加旁观者
$event->add(new ObServer1());
$event->add(new ObServer2());
//执行事件 通知旁观者
$event->trigger();
redis服务器serverCron函数每100毫秒执行一次,负责管理服务器资源,保持服务器良好运行。
服务器有很多功能需要获取系统当前时间,每次获取时间需要执行一次系统调用,为了减少系统调用执行次数,服务器状态中的unixtime(秒)属性和mstime(毫秒)属性被用来当前时间缓存:
因为100毫秒执行一次,所以这两个时间精度不高,对时间精度要求不高的用这个,要求高的还是执行系统调用。
参考redis官方文档redis.io
1 惰性删除策略
所有读写数据库的Redis命令在执行之前都会先检查输入键是否已过期,过期则删除之。
CPU友好,内存不友好
2 定期删除策略
每当 Redis 的服务器周期性操作函数 serverCron 执行时,就会调用定期删除过期键的函数,(serverCron默认100毫秒执行一次)在规定时间内,分多次遍历服务器中的各个数据库,从数据库的过期字典中随机检查一部分键的过期时间,并删除其中的过期键。
通过全局变量记录当前处理的数据库,直到所有数据库的过期键都被删除。