PHP中的引用变量
在PHP中,引用意味着用不同的名字访问同一个变量内容。
定义引用变量:使用&符号。
PHP引用变量的原理
普通变量赋值操作
|
|
在执行如上代码时,将变量a赋值给变量b,这是并不会开辟新的内存空间,而是将变量a和b都指向同一个内存空间,当变量被改变时,才会重新开辟空间,这叫做COW(Copy Only Write),又叫做“写时复制”原则。
字符串匹配是一个很常见的问题。
例如:判断文本字符串”BBC ABCDAB ABCDABCDABDE”里面是否包含另一个模式字符串”ABCDABD”。一般的思路很简单,只需要将两个字符串从头开始比较即可(分别使用i、j标识文本字符串和模式字符串的比较位置),若字符相同,则将两个字符串同时向后移一位(i++,j++);若不同,将文本串串回溯至初始比较位置的下一位(i=i-j+1),将模式串移动至头部(j=0),直到完全匹配或遍历完整个文本字符串。
上面的方法就是暴力匹配算法,但是这种简单粗暴的算法效率上存在着很大的问题,如上面提到的,当i=10,j=6时,字符串会失配,如下图
按照暴力匹配算法的话就会将模式串移到头部,文本串移到i=5的位置
这样做虽然可行,但是效率很差,因为你要把”搜索位置”(指针i)移到已经比较过的位置,重比一遍。当空格与D不匹配时,其实知道前面六个字符是”ABCDAB”,所以其实是没有必要将文本串回溯到i-j+1的位置的。
静态链表是使用数组描述的链表,在使用C语言中的结构体数组定义时,结构体变量中包括数据data和游标cur。
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | … | 999 |
---|---|---|---|---|---|---|---|---|---|
数据 | A | C | D | E | … | ||||
游标 | 5 | 2 | 3 | 4 | 0 | 6 | 7 | … | 1 |
如上表,下标为0的元素中数据为空,游标为5,指向备用链表的首元素,下标为1,2,3,4的元素数据不为空,游标指向后继元素;最后一个元素下标为999,数据为空,游标指向首链表首元素下表为1。
大家都知道,Redis是内存数据库,它会把数据都储存在内存当中,可以大幅提高读取速度,但这也出现一个问题,数据易丢失。所以,将内存中的数据持久化处理是很有必要的。Redis共提供了两种持久化的方式,RDB全量写入方式和AOF增量写入方式。
RDB就是将整个redis中的内容dump下来,做一个快照。RDB是redis默认的持久化方式。
|
|
前三行是触发RDB的条件,意思是当900秒中redis有一条数据写入就会进行RDB操作,二三行同上。