Renhao Li's Blog


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

PHP中的引用变量和变量类型

发表于 2018-07-03 | 分类于 PHP

PHP中的引用变量

在PHP中,引用意味着用不同的名字访问同一个变量内容。
定义引用变量:使用&符号。

PHP引用变量的原理

普通变量赋值操作

1
2
3
$a = range(0,10);
$b = $a;
$a = range(0,20);

在执行如上代码时,将变量a赋值给变量b,这是并不会开辟新的内存空间,而是将变量a和b都指向同一个内存空间,当变量被改变时,才会重新开辟空间,这叫做COW(Copy Only Write),又叫做“写时复制”原则。

阅读全文 »

Java中到底是值传递还是引用传递?

发表于 2018-06-21 | 分类于 Java

引言

关于这个问题,很早之前就碰到过,也查过一些资料,但是网上的说法不统一,导致我一直是似懂非懂的状态,结果今天在刷题的时候又遇到了这个问题,于是我决定梳理一下这块内容,把这个坑给填上。
要弄明白这个问题,首先要明确什么是值传递什么是引用传递。
值传递:表示方法接收的是调用者提供的值。
引用传递:表示方法接收的是调用者提供的变量地址。
在Horstman的《JAVA核心技术》上说:“java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。”

阅读全文 »

KMP算法

发表于 2018-06-16 | 分类于 数据结构与算法

背景介绍

字符串匹配是一个很常见的问题。
例如:判断文本字符串”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的位置的。

阅读全文 »

静态链表

发表于 2018-05-23 | 分类于 数据结构与算法

什么是静态链表

静态链表是使用数组描述的链表,在使用C语言中的结构体数组定义时,结构体变量中包括数据data和游标cur。

1
2
3
4
5
6
7
//---------线性表的静态单链表存储结构--------
#define MAXSIZE 100
typedef struct
{
ElemType data;
int cur;
}SLinkList[MAXSIZE];

对数组的特殊处理

  • 数组的第一个和最后一个元素做特殊处理,他们的data不存放数据。
  • 通常把未使用的数组元素称为备用链表。
  • 数组的第一个元素,即下标为0的那个元素cur就存放备用链表的第一个节点的下标。
  • 数组的最后一个元素,及下标为MAXSIZE-1的cur则存放的第一个有数值的元素的下标,相当于单链表中的头结点作用。
  • 已使用的链表的最后一个元素游标为0。
下标 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持久化

发表于 2018-03-27 | 分类于 redis学习

概述

大家都知道,Redis是内存数据库,它会把数据都储存在内存当中,可以大幅提高读取速度,但这也出现一个问题,数据易丢失。所以,将内存中的数据持久化处理是很有必要的。Redis共提供了两种持久化的方式,RDB全量写入方式和AOF增量写入方式。

RDB全量写入方式

RDB就是将整个redis中的内容dump下来,做一个快照。RDB是redis默认的持久化方式。

相关配置

1
2
3
4
5
6
save 900 1
save 300 10
save 60 10000
rdbchecksum yes #是否校验rdb文件
dbfilename "redis-6379.rdb" #持久化文件名称
dir "/data/dbs/redis/6379" #持久化数据文件存放的路径

前三行是触发RDB的条件,意思是当900秒中redis有一条数据写入就会进行RDB操作,二三行同上。

阅读全文 »
123…5
LRHest

LRHest

死都不怕,就怕不安逸,命都不要,就要安逸。

22 日志
10 分类
18 标签
GitHub E-Mail
Links
  • 一只小白
© 2018 LRHest
由 Hexo 强力驱动
|
主题 — NexT.Pisces v6.0.1