• [PHP源码阅读]number_format函数

    上次讲到PHP是如何解析大整数的,一笔带过了number_format的处理,再详细阅读该函数的源码,以下是小分析。

    函数原型

    string number_format ( float $number [, int $decimals = 0 ] )
    
    string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
    

    函数可以接受1、2、4个参数(具体可以看代码的实现)。

    Read more...
  • 自上而下,逐步揭开PHP解析大整数的面纱

    遇到的问题

    最近遇到一个PHP大整数的问题,问题代码是这样的

    $shopId = 17978812896666957068;
    var_dump($shopId);
    

    上面的代码输出,会把$shopId转换成float类型,且使用了科学计数法来表示,输出如下:

    float(1.7978812896667E+19)

    但在程序里需要的是完整的数字作为查找数据的参数,所以需要用的是完整的数字,当时以为只是因为数据被转换成科学计数法了,于是想到的解决方案是强制让它不使用科学计数法表示:

    Read more...
  • MySQL主从复制原理探索

    上一篇文章里面,讲到了遇到mysql主从延迟的坑,对于这次的坑多说两句,以前也看过这样的例子,也知道不能够写完之后马上更新,但是真正开发的时候还是没有注意到这一点,道理大家都懂,但是还是会犯错,只有等到自己亲生体验到该错误之后,才真正的掌握到该道理。

    经历过一次mysql主从延迟之后,就开始思考,主从复制是什么东西?它是怎么实现的呢?它的原理是什么?于是乎就开始查阅资料、文章,现将自己理解到的内容总结在此,加深印象。

    为什么要做主从复制?

    1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

    Read more...
  • 【踩坑记录】记一次MySQL主从复制延迟的坑

    最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误。

    情景

    一个活动信息需要审批,审批之后才能生效。因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容,考虑到字段比较多,也要保存审批活动的内容,因此设计采用了一张临时表,审批中的活动写进审批表(activity_tmp),审批通过之后才把真正的活动内容写进活动表(activity)。表的简要设计如下,这里将活动内容字段合并为content展示:

    activity_tmp()
    id
    status // 审批状态    
    content //  审批阶段提交的活动内容
    
    activity
    id
    content // 审批通过后真正展示的活动内容
    

    Read more...
  • [源码学习]cjson库学习

    cJSON库是什么?

    cJSON是一个轻量级的json解析库。使用起来非常简单,整个库非常地简洁,核心功能的实现都在cJSON.c文件,非常适合阅读源代码来学习C语言。最近读完这个库的源码,分享自己收获的一些心得。

    什么是json,照搬json官网的说法:

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

    Read more...
  • [深入学习Redis]RedisAPI的原子性分析

    在学习Redis的常用操作时,经常看到介绍说,Redis的set、get以及hset等等命令的执行都是原子性的,但是令自己百思不得其解的是,为什么这些操作是原子性的?

    原子性

    原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。【维基百科】

    对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

    Redis操作原子性的原因

    Read more...
  • [计算机网络]httpserver--如何解析HTTP请求报文

    这个http server的实现源代码我放在了我的github上,有兴趣的话可以点击查看哦。

    上一篇文章中,讲述了如何编写一个最简单的server,但该程序只是接受到请求之后马上返回响应,实在不能更简单。在正常的开发中,应该根据不同的请求做出不同的响应。要做到上述的功能,首先要解析客户端发来的请求报文。

    报文在不同的上下文情景下有不同的理解,本文所说的报文都是在HTTP上下文中描述的名词。

    HTTP报文是什么

    在HTTP程序中,报文就是HTTP用来搬运东西的包裹,也可以理解为程序之间传递信息时发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分。

    报文的流动

    HTTP使用属于流入和流出来描述报文的传递方向。HTTP报文会像合水一样流动。不管时请求报文还是响应报文,都会向下游流动,所有报文的发送者都在接受者的上游。下图展示了报文向下游流动的例子。

    Read more...
  • [计算机网络]简易http server程序

    这个http server的实现源代码我放在了我的github上,有兴趣的话可以点击查看哦。

    好久没输出了,知识还是要写下总结才能让思路更加清晰。最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器。

    HTTP 服务器

    HTTP服务器,就是一个运行在主机上的程序。程序启动了之后,会一直在等待其他所有客户端的请求,接收到请求之后,处理请求,然后发送响应给客户端。客户端和服务器之间使用HTTP协议进行通信,所有遵循HTTP协议的程序都可以作为客户端。

    先直接上代码,然后再详细说明实现细节。

    Read more...
  • [代码大全读书笔记]如何定义一个好的变量名

    在日常编程中最烦恼的就是给变量取名,一段好代码,既要能完美地运行,还要能较容易地维护。这就意味着需要让日后维护代码的人能很快地看懂你的代码,而且,在团队合作中,其他开发者也会经常阅读你那部分代码。如果你的代码中充满了a,b,c,a1,a2,a3…那简直就是一个噩梦。因此,好的变量名非常重要。

    选择好变量名的注意事项

    变量和变量名本质上是同一件事物,因此,变量的好与坏就在很大程度上取决于它的命名的好与坏。

    下面举一个糟糕命名的例子

    $pp = ($cp > 1) ? ($cp - 1) : $cp;
    $np = ($cp < $tp) ? ($cp + 1) : $tp;
    
    $p = new P($pp, $cp, $np, $tp);
    

    Read more...
  • [PHP内核探索]PHP中的哈希表

    在PHP内核中,其中一个很重要的数据结构就是HashTable。我们常用的数组,在内核中就是用HashTable来实现。那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据结构,但是算法书籍里面没有具体的实现算法,刚好最近也在阅读PHP的源码,于是参考PHP的HashTable的实现,自己实现了一个简易版的HashTable,总结了一些心得,下面给大家分享一下。

    笔者github上有一个简易版的HashTable的实现:HashTable实现

    另外,我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    HashTable的介绍

    哈希表是实现字典操作的一种有效数据结构。

    Read more...