Redis 的 string

2019-02-26
阅读 2 分钟
3.2k
Redis 内部的字符串表示,没有直接使用 C 语言字符串,而是对其进行了一定的改造,改造后的字符串在内存管理和长度计算方面的性能都有所提升。

《深入理解计算机系统》读书笔记:5.5 vs 5.6

2019-02-19
阅读 2 分钟
4.3k
0x00 前言 没有看过或者没有看到这里的小伙伴们,看到这个标题一定觉得摸不着头脑。那这里就先来解释一下背景。 {代码...} {代码...} 这是 CSAPP 的两道题,每一题是一段代码,这两段代码实现了同一个功能。这两道题有一个共同的问题,比较这两段代码的性能。 0x01 答案 这里的答案是,poly 的性能比 polyh 的性能要高。...

菜鸟做 bomb lab 之第一关

2018-10-15
阅读 5 分钟
3.7k
首先打开事先已经反汇编的 bomb.s 文件,通过 bomb.c 已经知道每一关都是一个函数,它们的命名都是 phase_x,x 代表该关卡的数字,如果某个关卡输入的不正确,就会引爆炸弹 explode_bomb。首先看 main 函数的这几行

我的 2017 —— 一个 PHPer 的自白

2018-01-02
阅读 2 分钟
2.7k
这一年,我所经历的,让我收获很多,让我懂得很多,让我明白了很多。也许是明确了某一个目标,也许是其它的什么,我觉得,2017 年也许真的是我的一个开端。

《现代操作系统》读书笔记——进程

2017-12-18
阅读 2 分钟
2.9k
一个进程就是一个正在执行的程序实例,它包括程序计数器、寄存器以及变量的当前值。一个程序运行,它的逻辑计数器装入 CPU 的程序计数器中;一个程序暂停,CPU 的程序计数器被保存在内存的逻辑程序计数器中,在下次运行前不占用 CPU。

《现代操作系统》读书笔记——线程

2017-12-12
阅读 2 分钟
2.9k
线程是最小的任务调度单位,是依赖于进程而存在的迷你进程。和进程一样,线程也有三种状态——运行、就绪、阻塞。我认为,线程是进程中任务真正的执行者,而进程提供了内存空间、CPU、程序计数器以及寄存器让线程使用。

源码安装 NSQ

2017-11-22
阅读 2 分钟
4.5k
因为业务需要,要用到 NSQ。所以学习了下 NSQ。首先是安装,我在自己电脑上,倾向于源码安装。一是源码安装可以安装最新的代码,二是整个安装过程可以自己掌控。

从零开始写 PHP 扩展(一)

2017-11-16
阅读 2 分钟
6.8k
PHP 是用 C 语言写的。对于每个 PHPer 来说,都有着内心的一种希望写扩展的冲动了吧。然而,缺乏一个很好的切入点。Google 上搜 PHP 扩展开发,大部分都是复制品文章,甚至有些人连操作都没有操作过就搬运在了自己的博客。不过也有几篇好教程,但是都是 PHP 5 时代的产物,隐藏着非常多的坑。我会将我自己慢慢踩坑的过程...

浅入理解单例模式

2017-10-20
阅读 2 分钟
3.2k
在 PHP 中,甚至不只 PHP 中,我们都会用到全局变量,以保存全局状态。可是,往往全局变量是全局共享的,任何地方任何代码都有可能将其覆盖。例如,我们定义一个全局变量叫做 PHONE。我们在某一行代码中,将其定义成了 iPhone,但是我们不小心在另一行代码中将其覆写成了 Nokia。这就非常的尴尬了,因为本来我们并不想它...

浮点数那些事儿

2017-09-24
阅读 3 分钟
4.7k
以 PHP 为例:floor((0.1 + 0.7) * 10) 这样一个函数调用,根据数学老师死得晚原理,大家都能得出 8 这个结果。可是事实上呢?它会返回 7。数学老师的棺材板。。。(╯‵□′)╯︵┻━┻

Generator 的异常处理

2017-08-19
阅读 3 分钟
5.1k
本文是我在研究 PHP 异步编程时的总结。对于相当多的 PHPer 来说,可能都不知道 Generator,或者对 Generaotr 的流程不是很熟悉。因为 Generator 使得程序不再是顺序的。鉴于本人的水平有限,如果有不同意见,还望指点一二,不胜感激!

使用桩件 (Stub) 解决 Laravel 单元测试中的依赖

2017-08-11
阅读 3 分钟
8k
很早就知道有单元测试的概念,也曾尝试过,但是一直对单元测试的概念和方法,比较模糊。在听了 @vimac 大神的讲堂 PHP单元测试与测试驱动开发 后,慢慢地对单元测试和 PHPUnit 的认识清晰了起来,也开始慢慢地去实践单元测试。

php 内核探秘之 PHP_FUNCTION 宏

2017-08-07
阅读 2 分钟
9.1k
本人也只是个初入门的菜鸟,因对技术有着向往,故在“无趣”的工作之余,尽自己所能提升自己。由于我的 C 语言功底也有限,故本文的深度也有限,如有幸得大牛阅读,还望指导一二,小弟感激不尽。

每日一个 php 函数——array_change_key_case

2017-08-03
阅读 4 分钟
2.6k
因为已经有文档了,可能有些人觉得我写这个有些多余了。可是并不是每一个 PHPer 都会好好地去阅读文档,自然有一些函数可能都没有听说过(很不幸我也是这其中的一员)。我也希望能通过写这些文章,能够促使我完整地读完文档,同时,能够给其它的 PHPer 一个参考,“啊,原来还有这个函数” 的感觉。同时,我也希望我能通过...

乌云一周年祭?

2017-07-20
阅读 1 分钟
4.3k
宁愿这是谣言,然而你终究没有回来。?????? ———— 曾经的路人甲敬上。

浅入理解 PHP 中的 Generator

2017-06-19
阅读 2 分钟
7.8k
从 PHP 5.5 开始,PHP 加入了一个新的特性,那就是 Generator,中文译为生成器。生成器可以简单地用来实现对象的迭代,让我们先从官方的一个小例子说起。

一个 PHPer 第一次用 Koa2 写 Node.js 的心路历程

2017-06-11
阅读 4 分钟
10.5k
学了一段时间的 js 了,突然想实践一下。正好公司有个小的项目要做,就顺手拿 Koa2 来做了。真是不做不知道,做了想不到。踩了一堆新手坑。

理解 Go 语言中的方法和接收者

2017-06-03
阅读 2 分钟
16.1k
接收者有两种,一种是值接收者,一种是指针接收者。顾名思义,值接收者,是接收者的类型是一个值,是一个副本,方法内部无法对其真正的接收者做更改;指针接收者,接收者的类型是一个指针,是接收者的引用,对这个引用的修改之间影响真正的接收者。像上面一样定义方法,将 user 改成 *user 就是指针接收者。

从零开始学习 Go ——安装

2017-05-30
阅读 2 分钟
16.1k
0x01 设置 Go 环境 要安装并顺利使用 Go,第一步就是要设置 Go 的环境。 需要设置的 Go 的环境变量,一共有三个。 GOROOT Go 语言的源码以及安装目录。 GOPATH Go 语言的开发目录,目录可以有多个,但是,当我们执行 go get 命令的时候,如未指定目录,会默认保存在第一个目录下。 GOROOT_BOOTSTRAP 这个目录在安装 Go 1...

为什么Swoole可以加速php

2017-05-20
阅读 3 分钟
10.7k
CGI,全称 Common Gateway Interface,中文称作“公共网关接口”。也许有很多人认为 CGI 是一个程序,没错,曾经的我也是这么认为的。直到我从《图解HTTP》开始细细地研究HTTP协议之后,我才知道,原来 CGI 是一种协议。任何编程语言,都可以实现 CGI,所以任何语言都可以作为网站的后台语言(扯远了)。

TCP 状态转移

2017-04-25
阅读 2 分钟
7.7k
ESTABLISHED 在收到服务端发送的确认和同步报文段(第二次握手)后,客户端只需要发送出一个确认报文段(第三次握手),就算完成了三次握手了,即客户端认为连接已经建立。

IP路由与转发

2017-03-12
阅读 2 分钟
7.7k
IP 全称为 Internet Protocol,顾名思义,是工作在网络层的一种协议。既然已经有了 MAC 地址,IP 地址就作为一种给网络赋予层次、方便管理的协议而存在。而网络层次的精髓,在于 IP 的路由与转发。

数据段、数据报、数据包、帧的区别与联系

2017-02-23
阅读 1 分钟
14.3k
在看《Linux高性能服务器编程》的过程中,TCP/IP 的章节里发现了几个比较有意思的名词:报文段、数据报、数据包和帧。这几个名词都是在讲协议部分出现的,一开始没明白有哪些区别、哪些联系,后来仔细想了下,又查了一下,似乎了解了大概。