- 博客(35)
- 收藏
- 关注
原创 内存管理 - 变量的自动GC机制
前言讨论GC实现在C/C++中,如果我们想申明一个变量,就必须手动进行内存的分配与释放。变量的内存管理是一件极度繁琐的事情,也极度考验开发者的写代码细心程度。稍有不慎,就会忘记释放掉,导致不可预知错误。现在的高级语言基本是上都提供了变量自动GC机制,由语言自己进行管理,让开发者解脱出来。我们先自己思考下,如果是我们来编写内核,怎么自动实现GC。最简单的实现方式:在定义变量时候分配一...
2018-12-02 23:18:54 335
原创 数据类型 - 类型转换
前言PHP弱语言,使用时不需要明确定义变量的类型。我大学时候接触都是C,C++,当自己去接触PHP的时候,就震惊不已,哇哇,啥啥,string 与 int 都可以相加,竟然还能通过去!!!!当时就对PHP底层对于数据操作这块很有兴趣,它到底有些啥奇技淫巧,能实现的这些不同类型之间的比较运算,算数运算。这里我们就要稍微讲一下,PHP两种方式:自动类型转换,强制类型转换自动类型转换Z...
2018-12-02 23:17:56 568
原创 数据类型 - 引用
引用是一种指向其他数据类型的结构,类似C语言中指针的概念。当修改引用类型的变量时候,其修改将反映到实际引用的变量上。辣么当我们使用$a = &$b这样一个引用时候发生了什么呢?来我们来看看流程吧$a = &$b ,首先为$a 变量分配一个Zend_reference结构,内嵌了一个zval ,这时候zval.value指向原来zval的value 将原来$b 的类型改为IS_...
2018-12-02 23:16:01 235
原创 数据类型 - 字符串
字符串的数据结构比较简单,牵扯到的东西比较少,我简单展示下源码中的数据结构的定义。Zend_string数据结构typedef struct _zend_string zend_string;struct _zend_string {zend_refcounted_h gc;zend_ulong h; /* hash value */size_t len;char val[...
2018-12-02 23:14:35 208
原创 数据类型 - 变量
前提必看我们这里看的源码都是PHP 7.0.12版本的哟,其他的版本可能变量的实现机制在细节会有一些不同,但是我们主旨都是希望通过阅读源码,来帮我理解下我经常使用语言,在底层实现的原理。(哈哈,毕竟在我没打算换一下语言,PHP还是作为我的编程主语言的)变量在一门高级编程语言中,变量是我们经常用来使用的数据形式。例如我们常常在C中这样使用变量 #include <s...
2018-12-02 23:13:34 181
原创 写在前面
好久没有来更新我的博客,自从换了一家新公司以后,由于某一些机会,开始去阅读PHP7内核方面的实现。也断断续续给组里的小伙伴分享一些内核方面的知识,中间也阅读了很多人的博文,也看了@盘古大叔出了PHP7内核书籍,下面的文章大部分是我阅读源码的一些感受,然后参考书中的要点给整理的博文。我也会陆陆续续把我在公司内网分享的一些内核方面的博文,搬运过来,对于内核感兴趣的,可以去看看@盘古大叔的《PHP7内核...
2018-12-02 23:12:20 167
原创 编译与执行
PHP7与PHP5在编译执行上的区别 在PHP7之前的版本,PHP代码在语法解析阶段直接生成了ZendVM指令(也就是opline指令,后面会聊一下opline指令的~),这使得编译器与执行器耦合在一起。这个模式的坏处就是,当我们如果要换一个VM时候,就需要修改语法解析规则,或者如果PHP的语法规则变了,(例如php中访问对象使用->来访问,想换成成java中 . 来访问),...
2018-12-02 23:03:32 250
转载 转载 Redis.conf配置文件
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 10
2017-07-07 11:13:42 429
原创 详解下TCP的三次握手和四次挥手
1.三次握手建立连接a.请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,在这个例子中为1415531521)。这个SYN段为报文段1。b.服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号c.客户必须将确认序号设置为服务器的ISN加1以对服务器的S
2017-04-01 11:39:27 812
转载 Mysql Explain 详解各字段含义
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。先解析一条sql语句,看出现什么内容EXPLAINSELECTs.uid,s.username,s.name,f.email,f.mobile,f.phone,f.postalcode,f.addressFROM uchome_space ASs,uchome_sp
2017-03-17 12:02:30 7071 1
转载 nginx负载均衡简单测试配置
负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。测试环境由于没有服务器,所以本次测试直接host指定域名,然后在VMware里安装了三台CentOS。测试域名 :a.comA服务器IP :192.
2017-03-10 15:32:19 1158
转载 API的签名设计
URL签名生成规则所有API的有效访问URL包括以下三个部分: 1. 资源访问路径,如/v1/deal/find_deals; 2. 请求参数:即API对应所需的参数名和参数值param=value,多个请求参数间用&连接 如deal_id=1-85462&appkey=00000; 3. 签名串,由签名算法生成 签名算法如下: 1. 对除appkey以
2017-02-27 15:44:23 1897
转载 PHP RSA加解密示例
PHP RSA加解密示例 1.生成密钥和公钥 开始前需要准备openssl环境 linux 需要安装openssl工具包,传送门http://www.openssl.org/source/ window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html 如果不想安装,可以用
2017-02-04 15:01:21 796
转载 Mysql的半同步复制
一、MySQL复制概述 ⑴、MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧! MySQL数据库支持同步复制、单向、异步复制,
2016-10-24 15:25:09 306
原创 Http协议的几个步骤
一次完整的HTTP请求所经历的7个步骤HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTT
2016-10-24 12:27:21 690
转载 ngin.conf文件配置
nginx.conf大纲下面是一份nginx.conf配置文件的骨架:main events { ....}http { upstream myproject_svr { ..... } server { location { .... } } server { location {
2016-10-18 13:59:33 623
原创 详解php-fpm.conf各配置含义
pid = run/php-fpm.pid#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启error_log = log/php-fpm.log#错误日志,默认在安装目录中的var/log/php-fpm.loglog_level = notice#错误级别. 可用级别为: alert(必须立即处理), error(错误情况),
2016-10-13 17:34:01 3997
转载 什么样的代码是合格的代码
天让我们来谈谈代码吧。代码重要吗?当然,代码就是设计(Jack W.Reeves, 1992);代码是最有价值的交付物。我们需要好代码吗?在给“好代码”下个定义之前,这个问题无法回答。那么,究竟什么是好代码?看下面这段英文解释:‘Good code’ is code that works, is bug free, and is readable and maintainabl
2016-09-21 17:43:21 620
转载 LNMP环境搭建遇到的问题
LNMP安装常见问题 1、ERROR: invalid PHP executable specified by TEST_PHP_EXECUTABLE = /usr/local/src/php-5.3.18/sapi/cli/php出现情况:make php过程中的错误错误意思: 关闭安全模式就好了,都是safe模式的测试 惹的祸。最新版的php
2016-09-02 15:27:32 617
转载 两个数组取交集算法的一些想法
比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}。算法一:在大多数情况,也就是一般的情况下,大家都能想出最暴力的解法,通常也就是采用遍历或者枚举的办法来解决问题。该题需要找出两个数组的交集,最简单的一个办法就是用A数组里面的所有数去匹配B数组里面的数。假设两个数组的大小都是n,那么这种遍历的时间复杂度为O(n^2)。这个也是最复杂的情况了。
2016-08-31 16:01:57 622
原创 说下最近对数据库连接的问题和思考
使用单例模式最大的目的主要是实现应用中只有一个类的实例,在java或者.net这些编译型的语言是可以保证这个唯一的实例常驻在内存中,并持续到整个应用程序生命周期的结束,但是在php这种解释型的语言中,由于这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,所有的变量无论是全局变量还是类的静态成员,都是页面级的(不是应用级别的
2016-08-22 15:36:42 335
转载 redis的通配符和批量删除Key
1. DEL 直接加键名称DEL key1 key2 key3127.0.0.1:6379> DEL site_msg_99973 false site_msg_99974 false site_msg_99979false 2. 批量删除key可用keys ‘str*’ 列出要删除的key,接linux管道删除(linux命令行执行)根
2016-08-10 17:37:25 22180
原创 mysql 5.6内存问题
调整my.cnf 参数,重新配置(系统默认配置太高直接占用400M内存,小玩家玩不起呢)即可performance_schema_max_table_instances=200table_definition_cache=200table_open_cache=128下面附一个相关的my.cnf配置文件的说明[client]port = 3306socket = /tm
2016-08-04 16:06:33 417
原创 linux 查看内存占用情况
# linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head# linux 下 取进程占用内存(MEM)最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
2016-08-04 15:53:32 290
转载 Mysql查询缓存的注意事项
本文讨论的内容包括:通过查询缓冲提高查询速度;MySQL对查询的自动优化;基于索引的排序;不可达查询的检测和使用各种查询选择来提高性能。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同sql查询的表,查询缓存会节约很大的性能。1,通过查询缓冲提高查询速度一般我们使用SQL语句进行查询时,数据库服务器每次在收到客户端发来SQL后,都会执行这条SQL语句
2016-07-18 11:28:51 481
转载 mysql查询缓存打开、设置、参数查询、性能变量意思
第一: query_cache_type 使用查询缓存的方式一般,我们会把 query_cache_type 设置为 ON,默认情况下应该是ONmysql> select @@query_cache_type;+--------------------+| @@query_cache_type |+--------------------+| ON |+--------
2016-07-18 11:06:26 448
原创 分享一个PHP代码的执行时间,精确到微秒级
function microtime_float (){ list( $usec , $sec ) = explode ( " " , microtime ()); $sec=(string)$sec; $sec=substr($sec,-4); return ((float) $sec +(float)$usec);}这段代码只能计算到时间戳后四位
2016-07-14 17:05:23 3233
转载 php的引用传递
虽然自己也是PHP的学习者,但之前还真没怎么了解PHP内部的垃圾回收流程,只是在我们的代码中用了unset,null,mysql_close,__destruct等等一些函数去释放对象防止内存溢出而已,所以上网GG下,找到了以下一些说明,作下记录“PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage coll
2016-07-14 10:38:12 333
转载 linux的定时任务
linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为
2016-07-13 18:43:21 369
转载 解决多个服务器共享session的几个方案
A、文件方式:这种方式,将文件作为一个map,当新增一个数据的时候,就在文件中增加类似这样的一条数据:angOwberup =>data={"user":{"id":1,"nickname":"老王"}};expiry="2016-10-0100:00:00"(当然,具体实现的时候有可能是用的二进制方式,而不是字符串)这种方式的好处,就是能够存储大量的用户session,使得这个session有效
2016-06-14 16:18:45 6665
转载 apache防盗链
所谓盗链,是指其他网站直接链接我们网站上的文件,一般来说,盗链的对象大多为很耗带宽的大体积文件,如图片、视频等。这样造成的后果主要有:增加了服务器的流量负担,影响我们网站的访问速度。如果你用的是Apache服务器,那么使用.htaccess文件就可以很方便的进行设置,从而防止其他站点的用户盗链我们站点的文件。Apache中的.htaccess文件.htaccess文件是Apache中相
2016-06-02 16:29:26 429
原创 foreach赋值小细节
今天开发工作需要对字符串进行一个截取操作,完了以后需要对原数组中的元素赋值,不说勒,直接上代码!! foreach($result as $key =>$value){ if(strlen($value['t_message'])>26){
2016-05-12 10:46:10 569
原创 php中null,o,fasle,'0'的区别
最近看到这样一个问题,不多说直接上代码.答案是:等于等于等于等于!!!!!为什么会这样子!!!!!原来是这样子,php中的存储数据是以C语言的结构体存储的。一部分保存数据,一部分存储数据的类型。然而null,false,0,'0'都是以数据0存储的。使用==判等只判断数据的值,所以就出现了上面的情况。要想判断数据的类型,就要是用===强制来判断数据的类型是否也相等了。
2015-10-22 09:25:19 460
原创 vim编辑器的小技巧
Vim小技巧,蛮有用的。 b) 搜索与替换 1、/word : 从光标开始,向下查询一个名为word的字符串。 2、:n1,n2s/word1/word2/g : n1 与n2 为数字.在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2。 3、:1,$s/word1/word2/g : 从第一行到最后一行寻找word1字符串,并将该字
2015-10-20 15:35:00 346
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人