- 博客(21)
- 收藏
- 关注
原创 php7之变量
变量都保存在zval结构体中。 1. zval结构变化 变成了zend_value和两个union,其中一个记录类型相关,另一个记录扩展信息。 结构体中占用空间变小,8+4+4=16共16字节,相比原来48字节,减少2/3空间,效率提升起到关键作用。 2. zend_value变化,zend_value记录变量值,整形和双精度数据不使用指针减少数据存取操作。其它数据类型使用
2018-01-28 14:52:57
676
原创 php7之hashtable
作为php的重要数据结构,本博记录一下hashtable的结构,存储,hash定位等问题。hashtable结构,是有56个字节组成等struct,如下:struct _zend_array { zend_refcounted_h gc; union { struct { ZEND_ENDIAN_LOHI_4(
2018-01-28 13:11:28
472
原创 hash table及hash冲突
hash table定义根据key通过hash算法得到地址(value)的一种数据结构。hash函数把任意长度的输入通过hash函数得到固定长度的输出 好的hash算法分布要均匀,如time33,应用广泛,php采用此hash算法 hash = hash*33 + str[i];hash冲突不同的key经过计算出hash值相同,产生hash冲突。 1. 开放定址法
2018-01-28 11:12:02
699
转载 网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解
网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解借鉴了:http://hi.baidu.com/whitelocus/blog/item/d091ded88ac669e038012f5a.html1. 文中符号的说明: : 可以理解成A,也可以理解成B。2. 术语 调制解调器(Modem): 实现模拟信号
2018-01-11 21:06:18
553
转载 基于redis的分布式锁实现
关于分布式锁很久之前有讲过并发编程中的锁并发编程的锁机制:synchronized和lock。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可
2018-01-11 15:29:58
9299
1
转载 http协议
http协议是包括起始行,通用头域,请求头域、响应头域、消息体;详见http://blog.youkuaiyun.com/wduxin/article/details/53744574
2018-01-04 20:51:48
188
原创 php生成器
生成器提供了一种更容易的方法来实现对象迭代,相比定义类实现Iterator接口的方式,性能开销和复杂性大大降低。生成器允许你在foreach代码块来迭代一组数据而不需要在内存中创建一个数组,那会使你内存达到上限,比如一个非常庞大的数据,或者占有很多的处理时间。如果用一个生成器函数,和普通的自定义函数很像,只不过普通函数返回一次,而生成器函数可以根据需要yeild多次,以便生成需要迭代的值。
2018-01-03 20:28:25
187
原创 计算机网络传输原理_通俗版
关于计算机网络传输原理网上有很多很专业的讲解,博主就不班门弄斧了,在这只用通俗易懂的语言,描述一下网络传输的原理,明白大概之后,再去看专业的剖析,可能更好理解一些,现在假设我用我的电脑访问和你进行通信,只知道你的域名。那么整个流程是怎么样的呢?首先呢,需要先去查询dns服务器,拿到你的ip,然后根据arp协议找到默认网关的mac地址,把mac地址发给交换机,交换机就根据这个mac地址发给了网关
2018-01-03 20:10:55
4943
原创 斐波拉契数列-青蛙跳台
斐波拉契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34…定义f(0)=1,f(1)=1,f(n)=f(n-1)+f(n-2)青蛙跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?跳一阶有一种跳法,f(1)=1,跳二阶的时候有两种跳法,f(2)=2,跳三阶的时候可以这么考虑,先跳一阶,然后再两阶f(2)
2017-03-22 08:50:27
1902
原创 栈的定义及应用场景
栈是仅限定从尾部进行插入和删除操作的线性表结构。具有先进后出,后进先出的特性。栈的应用实例1、数制转化2、括号匹配校验3、迷宫求解4、实现递归-汉诺塔/** * n表示圈编号,此函数表示将编号n及以上的圈从a,借助于b,移至c */function hannuota($n,$a,$b,$c){ if($n==1){ mov($a,1,$
2017-03-21 22:41:09
2625
原创 php7新特性及升级
1、变量处理机制修改 a、间接变量、属性和方法引用都是从左到右顺序解释; b、global关键字只能引用简单变量; c、用括号把函数扩起来还是会报错; d、引用赋值时自动创建的数组元素或对象属性顺序和以前不同 2、list变化 a、list不再按相反顺序赋值;
2017-03-21 21:57:57
473
原创 设计模式-观察者模式
观察者模式,可以简单理解为很多观察者去观察被观察者,当被观察者发生变化时,通知所有观察者,也可称之为订阅模式。定义被观察者和观察者接口/** * 被观察者接口 */interface observered{ //注册观察者 public function registerObj($observer); //删除观察者 public function
2017-03-21 21:30:51
252
原创 https为什么安全之数据加密
为了保证在通信中数据的安全性,防止数据被窃取或篡改,对传输数据需要进行对称加密,但是客户端和服务端在协商加密算法时,同样是不安全的,因此对协商过程再采用非对称加密,采用非对称加密后客户端在获取公钥的过程中还是有可能被攻击,于是又引入了第三方机构,通过第三方的私钥对服务端公钥进行加密,也就是所谓的数字证书客户端通过第三方的公钥对服务端的公钥进行解密,拿到服务端真正的公钥,为了解决机构
2017-03-21 09:49:02
407
原创 php内存管理之垃圾回收机制
每个php变量都存在一个zval变量容器中,容器除了包含变量的类型和值外,还有is_ref是否属于引用还有个refcount引用计数,当把一个变量赋值给另一个变量将增加引用次数,在变量被unset或者离开它的作用域时,引用计数减1,当引用计数减为0时,内存回收。但这样的机制在循环引用时存在内存泄漏。例:当把一个数组本身当做一个数组元素时,就出现如图:当数组a被unset之后,就
2017-03-18 18:24:14
498
原创 php内存管理之内存分配
鉴于系统开销的调用,一些对性能有要求的应用通常会在自己的用户态进行内存管理,比如在第一次申请一块较大的内存留着备用,而不是使用完马上还给操作系统,可以进行复用,避免多次申请和释放带来的开销。一般读取超大文件到内存、超大数组、大循环内存没有释放等都会出现内存占用过大。php.ini 通过memery_limit或者在代码里ini_setl来设置最大内存php内存是通过zendmm来进
2017-03-18 14:44:37
1810
原创 php中数组+和array_merge区别
主要区别在与两个或多个数组在合并时,出现相同的键名时处理方式不一样一、当键名为数字时,array_merge不会覆盖原来的值,+会抛弃后面的值<?php/** * Created by PhpStorm. * User: lzc * Date: 2017/3/18 * Time: 10:02 */$a = [1,2,3];$b = [4,5,6];var_dump($a+$b
2017-03-18 14:25:38
1716
原创 为什么PHP中in_array效率低
这个问题主要原因是in_array判断某个值是否存在数组中,对比时会把值类型转化成一致的类型进行比较,如此一来效率就慢很多。具体参考http://www.zendstudio.net/archives/php-in_array-s-low-performance/#more-1836
2017-03-18 13:56:23
2465
原创 php for循环和foreach区别
php中for循环和foreach区别如下:1、for需要先知道数组长度再操作,foreach不需要2、foreach效率比for高很多,主要原因是for要进行很多次条件判断,另外从数组变量的数据结构来看foreach直接通过结构体中next指针获取下一个值,而for循环需要根据key先进行一次hash才得到值。
2017-03-18 13:40:15
1403
原创 php常见魔术常量和魔术方法
常见的魔术常量有:__LINE__文件的当前行号__FILE__文件的完整路径和文件名__DIR__文件所在目录__FUNCTION__函数名称__CLASS__类的名称__METHOD__类的方法名常见的魔术方法有:__construct构造函数,当对象被实例化时会被调用__destruct析构函数,当对象被销毁时会被调用__get当读取不存在的属性的值时
2017-03-18 13:14:00
358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人