PHP7和PHP5区别

PHP7比PHP5.0 ~ 5.6快了近5倍,同时还降低了对系统资源的占用。主要是PHP7对Zend引擎进行了深度优化。

之前在书上看到过两者比较全面的区别,回头去翻了翻书【眼过千遍,不如手过一遍啊】,特记录如下。

0、增加抽象语法树(AST)。
PHP5:PHP代码在语法解析阶段直接生成opline指令,执行器直接执行opline指令。
PHP7: PHP代码解析生成抽象语法树,然后将抽象语法树编译成opline指令。解耦编译器和执行器。
继续阅读

N盏灯问题

N盏灯问题是个很有意思的问题,是一个数学题,也是一个编程题。

这个问题,有很多不同的叫法
0、N个人开关N盏灯问题
1、开关灯问题

一、问题描述:
有N盏灯放在一排,从1到N依次顺序编号。有N个人,也从1到N顺序编号。1号将灯全部关闭,2号将凡是2的倍数的灯全部打开;3号将3的倍数的灯全部作相反操作(该灯如为打开,则将它关闭;如关闭,则将灯打开)。以后的人,都和3号操作一样,将凡是自己序号倍数的灯作相反操作。第N个人操作完之后,一共有几盏灯亮着?

二、问题分析
灯编号: 1->N
人编号: 1->N
开始灯都关着
灯 % 人 == 0 按一次开关
第N个人操作后,亮个的灯的个数
继续阅读

通过swoole观察僵尸进程和孤儿进程出现和消亡

声明:维基百科上没有僵死进程的词条,这里认为僵死进程同僵尸进程,即ZOMBIE。

一、定义
什么是僵尸进程
维基百科的定义:在类UNIX系统中,僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程控制块PCB),处于”终止状态”的进程。

这个定义很准确,但并不好理解,通俗的说法是一个进程fork了一个子进程,子进程先于父进程退出,但父进程没有调用wait(通过wait系统调用读取退出进程的退出态,退出进程的在进程表中的表项就被删除),导致这个进程已经退出但是仍在进程表中占有一个位置,这种进程称为僵尸进程。

什么是孤儿进程
孤儿进程:一个进程fork了一个子进程, 父进程先于子进程退出,运行中的子进程称为孤儿进程。
孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
继续阅读

基于swoole实现多进程任务处理

一、swoole多进程实现简介

0、通过swoole实现多进程,主要借助swoole_process类

swoole_process::__construct(callable $function, bool $redirect_stdin_stdout = false,
    int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = false);

1、简易实现demo[来自swoole官网]

$process = new swoole_process(function (swoole_process $worker) {
    $worker->write('Hello');
}, false);

$process->start();

sleep(1);

echo $process->read();

继续阅读

shell脚本实用初级入门二

最近朋友用shell写自动化测试脚本, 请求接口并处理一些逻辑。我写的也不多,只能边查边给他提供帮助。

以下就是这个过程形成的知识点【发现shell又强大,又弱小[笑哭]】

0、把数组转成字符串
本以为像其他语言,有现成的方法直接转换,比如PHP的implode(), Golang的strings.Join(strSlice, “,”)

结果发现Shell并没有,沮丧~
继续阅读

Go语言map声明和初始化小结

2年前用过一段时间Go语言,最近用map测试一些功能的时候,编译各种报错。时间长了语法有些陌生是一个原因,另一个主要原因是之前没有全面掌握。

这里就简单小结map的声明和初始化的方法。

你可能也知道map的声明和初始化方法有两种, 直接初始化和使用make,如下

var m1 map[int]int = map[int]int{1: 100, 2: 200}
var m8 map[int]int = make(map[int]int, 10)

第一部分 描述

这里重点对全局map变量和局部变量展开说明,分三种情况
继续阅读

Android和iOS设备保存文件文件名带冒号的问题

0、问题描述
遇到了一个很奇怪的问题,微信发朋友圈,选择相册中的图片,识别不出来,发送提示失败。

图片是通过手机客户端生成后,保存在本地相册的。Android手机有这个问题,iOS没有。

Android保存逻辑:
0.0、传递给客户端的如果是url,客户端会获取url中的文件名,然后保存在本地。
0.1、传递给客户端的如果没有文件名,比如是base64格式的图片,客户端会生成一个文件名。

iOS保存逻辑:
0.2、客户端不管什么情况都会通过md5加密生成文件名,是系统本身的功能。(据说传了文件名对文件名md5, 没传文件名会有系统默认的算法)

继续阅读

Redis及PHP Redis扩展安装笔记

把2年前整理的笔记放在这里,仅供查阅。

一、Redis安装
0、下载
在Redis官网的下载页面,我们只能下载最新的版本。
如果要查看下载历史版本,可以进入官网的这个页面http://download.redis.io/releases/(没有在官网找到这个链接的入口)

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz

继续阅读