Jiajun Yao

Stay hungry, Stay foolish.

A Close Look Into PHP Zval

最近研究了一下PHP variable的内部实现也就是zval,以及引申出来的Copy on Write, Reference等概念和机制。为了检验一下我是不是真的弄懂了,一个好的方法就是看能不能把它清楚地写下来并让人能够读懂。

Who Are You

这两天在研究新浪微博的第三方插件实现,无意中发现通过利用新浪微博的某个URL能让我获取当前访问这个URL的用户的微博uid。也就是说只要在某个网站中嵌入一段代码,这段代码在后台偷偷地访问那个URL,然后就可以把访问这个网站的用户的微博uid获取到,于是隐私就被泄露了…… 也就是说一个网站可以知道有哪些微博用户访问了它,然后可以就此采取一系列的措施……
下面就具体讲讲这个漏洞是怎么回事。

Refactor With Vim

使用IDE的一个大好处就是可以方便的进行重构,想想Eclipse那彪悍的重构功能吧。可是对于我们这种喜欢用Vim的人来说,要如何来进行代码重构呢?接下来我就介绍一些Tips,来让Vim也能干重构的事。

阅读·实践·思考

阅读,实践和思考这三个独立的词在我眼中有着千丝万缕的关系。这三者对个人的成长和发展起到了重要的作用,我们需要阅读,需要实践也需要思考。在我眼中阅读为我们提供了实践不到或者思考不到的知识,实践则让我们获得最真切最深刻的属于自己的知识,而思考则是获得知识的一个很重要的前提。下面我想谈谈我对这三者的理解和思考,也欢迎大家提出自己的观点。而我之所以选择把它写成文章贴出来是希望通过文字可以使我思考得更深、更清晰。

Insert One Million Rows Into Database

数据库课的一次作业,要求是尽可能快的插入一百万条数据到数据库。这也是第一次和数据库性能接触,在做作业的过程中也有所感受所以决定写下来。这次作业我选择的是用C和MySQL来完成,并使用MySQL的C API。程序的逻辑很简单就是随机生成一百万条数据然后插入数据库,关键是如何能快速的插入。我进行了多次尝试,每次尝试都在插入数据上有所提升。

Why We Should Use Library

库(Library)在wikipeida的定义如下:

In computer science, a library is a collection of resources used to develop software. These may include pre-written code and subroutines, classes, values or type specifications.

在我们写程序的过程中几乎每时每刻使用着库。我们在编码的过程中享受着库带给我们的便利和好处。现在的编程语言都会提供丰富的库给开发者调用,比如C++的库有STL、Boost, Java的库有Swing。像PHP,Python等更是提供了强大的库来帮助程序员开发网站(当然这些语言不仅能用来开发网站),这些库针对网站开发中遇到的常见问题提供了解决方案。举个例子来说,假设我们要将一个PHP数组用json的格式传到客户端,在没有库的情况下我们可能要遍历整个数组然后按照json的格式构建一个string,这样至少需要四五行代码,可是现在一个json_enode就可以搞定了。并且无论数组是几维的,json_encode都能正确返回json格式的string。

在我看来,使用库函数有如下三个好处:
  1. 代码复用
  2. 保证质量
  3. 提高效率