杨 发布的文章

ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,不支持事务和外键,表级锁,空间压缩,全文索引,select,insert多场景适用。好处是减少磁盘空间,减少磁盘I/O,提升查询性能。
Innodb:支持事务、行级锁、外键,表基于聚簇索引建立,主键查询性能高,InnoDB内部优化,磁盘读取数据的可预测读取,在内存自动创建hash索引来加速读操作的自适应hash索引,加速插入操作的插入缓冲区。 热备份,是其他引擎不具备的。(innodb 5.6版本起支持英文的全文索引,5.7.6支持中日韩的全文索引。)



行级锁

InnoDB的行级锁分为两种类型,共享锁和排他锁。
共享锁(S Lock):允许事务读一条数据
排它锁(X Lock):允许事务删除或跟新一条数据
锁兼容:只有两个共享锁

innodb默认情况下对select操作使用一致性非锁定读。
但是某些情况下,需要对select显示加锁
共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE

全文索引

简介
  1).MySQL中的全文索引是FultLeXT类型的索引。
  2).全文索引只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。
  3).在MySQL 5.7.6中,MySQL提供了支持中文、日文和韩文(CJK)的内置全文ngram解析器,以及用于日文的可安装MeCab全文解析器插件
  4).当创建表时,可以在CREATE TABLE语句中给出FULLTEXT索引定义,或者稍后使用ALTER TABLE或CREATE INDEX添加该定义。
  5).对于大型数据集,将数据加载到没有FULLTEXT索引的表中然后创建索引要比将数据加载到具有现有FULLTEXT索引的表中快得多。

全文索引的三种类型

  1. 自然语言搜索将搜索字符串解释为自然语言中短语。
  2. 布尔全文搜索
  3. 查询扩展搜索

数据结构: 倒排索引

倒排索引

页式存储

原理

将逻辑地址空间划分为固定大小的页page,物理内存划分为同样大小的页框page frame,通过CPU硬件支持,实现逻辑地址和物理地址的映射。在页式存储管理方式中,地址结构由两部分组成,前一部分页号,后一部分是页内地址偏移量。

数据结构

在页式系统中进程建立时,操作系统为进程中所有的页分配页框,当进程撤销时收回所有的页框。在程序的运行期间,如果允许进程动态地申请空间,操作系统还要为进程申请的空间分配物理页框。操作系统为了完成这些功能,必须记录系统内存中实际的页框使用情况。操作系统还要在进程切换时,正确地切换两个不同的进程地址空间到物理内存空间的映射。这就要求操作系统要记录每个进程页表的相关信息。为了完成上述的功能,—个页式系统中,一般要采用如下的数据结构。

本文转自 https://www.laruence.com/2020/02/25/3182.html

php5

php5中hashtable结构


typedef struct _hashtable {
uint nTableSize;        /* 散列表大小, Hash值的区间 */
uint nTableMask;        /* 等于nTableSize -1, 用于快速定位 */
uint nNumOfElements;    /* HashTable中实际元素的个数 */
ulong nNextFreeElement; /* 下个空闲可用位置的数字索引 */
Bucket *pInternalPointer;   /* 内部位置指针, 会被reset, current这些遍历函数使用 */
Bucket *pListHead;      /* 头元素, 用于线性遍历 */
Bucket *pListTail;      /* 尾元素, 用于线性遍历 */
Bucket **arBuckets;     /* 实际的存储容器 */
dtor_func_t pDestructor;/* 元素的析构函数(指针) */
zend_bool persistent;
unsigned char nApplyCount; /* 循环遍历保护 */
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;

- 阅读剩余部分 -

官方文档里主要介绍了include,require很少,因为它也说了,用法几乎完全一样,唯一区别就是处理失败方式不同。

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。

- 阅读剩余部分 -

复制

mysql支持2种复制方式,基于语句和基于行。语句复制在3.23版本就存在,行复制在5.1版本中才出现。
都是通过主库记录二进制日志,从库重放日志来实现异步数据复制。


- 阅读剩余部分 -

CSR文件和P10文件

  1. CSR:证书签发请求(Certificate Signing Request),或者叫做认证申请,是一个发送到CA的请求认证信息。有两种格式,应用最广泛的是由PKCS#10定义的,另一个用的少的是由SPKAC定义的,主要应用于网景浏览器。
  2. 在PKCS#10定义中,CSR有两种编码格式:二进制(ASN.1或DERàDistinguished Encoding Rules)和文本格式(the text or PEM (Privacy Enhanced Mail) formatted CSR is the binary CSR after it has been Base-64 encoded to create a text version of the CSR.)

- 阅读剩余部分 -

作为文件形式存在的证书一般有这几种格式:

  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。