- 博客(145)
- 资源 (18)
- 收藏
- 关注
原创 一次冗长繁琐的排错经历
一次冗长繁琐的排错经历白白忙活了一个下午+半个早饭的时间。感慨一下, 解决问题的思路很重要啊,否者就会像无头苍蝇一样,到处乱撞。因项目关系,需要在测试环境中开启https,悲剧的是,在经过了机器迁移之后,之前可用的https连接失败了: 而Nginx中也只有寥寥几行的错误日志: 这里首先说明一下,Nginx对HTTPs的支持是通过Module ngx_http_ssl_mo
2015-07-24 18:45:27 4814
原创 PHP内核探索之变量(7)- 不平凡的字符串
切,一个字符串有什么好研究的。别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:(1) 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?(2) 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?同样是字符串,为什么c语言与C++/PHP/Java的均不相同?数据结构决定算法,这句话一点不假。那么我
2015-03-30 17:15:54 4048 1
原创 PHP内核探索之变量(6)- 后续内核探索系列大纲备忘
年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新。后续的博文,还是慢慢补上吧。为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量 不平凡的字符串 PHP内核探索之变量 变量的生命周期、类型转换 PHP内核探索之变量 变量的循环(foreach,其实放到Zend部分更加合理一些) PHP内核探索之SAPI (比较疑惑,为什么这么靠后?
2015-03-16 17:41:37 1756
原创 PHP内核探索之变量(5)- session的基本原理
这次说说session. session可以说是当前互联网提到的最多的名词之一了。它的含义很宽泛,可以指任何一次完整的事务交互(会话):如发送一次HTTP请求并接受响应,执行一条SQL语句都可以看做一次Session。如无特殊说明,本文中提到的Session单指HTTP会话。本文是PHP内核探索的第五篇,主要包含如下几个方面的内容:背景知识和session基础PHP中sessio
2015-01-26 15:13:37 7637 1
原创 PHP内核探索之变量(4)- 数组操作
上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪。本文主要内容:PHP中提供的数组操作函数数组操作函数的实现结语参考文献一、PHP中提供的数组操作函数可以说,数组是PHP中使用最广泛的数据结构之一,正因如此,PHP为开发者提供
2014-12-25 14:33:07 4850
原创 PHP内核探索之变量(3)- hash table
在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table。除了数组,在线程安全(TSRM)、GC、资源管理、Global变量、ini配置管理中,几乎都有Hash table的踪迹(上一次我们也提到,符号表也是使用Hash table实现的)。那么,在PHP中,这种数据有什么特殊之处,结构是怎么实现的? 带着这些问题,我们开
2014-12-18 21:32:03 3633 6
原创 PHP内核探索之变量(2)-理解引用
本文主要内容:引论符号表与zval引用原理回到最初的问题一、引论 很久之前写了一篇关于引用的文章,当时写的寥寥草草,很多原理都没有说清楚。最近在翻阅Derick Rethans(home:http://derickrethans.nl/ Github:https://github.com/derickr)大牛之前做的报告时,发现了一篇讲解PHP引用机制的文章,也就是这个P
2014-11-28 17:47:26 4412 1
原创 PHP内核探索之变量(1)变量的容器-Zval
作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字、数组、字符串、对象还是其他,因而可以说变量是构成语言的不可或缺的基础。本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括如下几个方面的内容:Zval的基本结构查看zval的方法:debug_zval_dump和xdebugZval的原理,COW等由于写作仓促,难免会有错误,欢迎指出。一、Zval的基本结
2014-11-27 10:21:00 11198 1
原创 CI框架源码阅读笔记9 CI的自动加载机制autoload
本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI的autoload的基本流程。因此,可以看做是Loader组件的分析前提。CI框架中,允许你配置autoload数组,这样,在你的应用程序初始化时,会自动加载相应的类库,例如,在application/config/autoload.php中,autoload的配置如下:$autoload['libraries'] = a
2014-11-23 14:38:50 16319 2
原创 CI框架源码阅读笔记8 控制器Controller.php
最近时间有些紧,源码阅读系列更新有些慢。鉴于Controller中代码比较少,本次Blog先更新该文件的源码分析。 在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数据的交互。CI中所有的应用控制器都应该是CI_Controller的子类(除非你扩展了CI的核心,那么你的Controller父类可以是MY_Controller)。 在应用程序控制器中,
2014-11-19 21:20:29 6945 2
原创 CI框架源码阅读笔记7 配置管理组件 Config.php
原文见这里:http://www.cnblogs.com/ohmygirl/p/CIRead-7.html 一个灵活可控的应用程序中,必然会存在大量的可控参数(我们称为配置),例如在CI的主配置文件中(这里指Application/Config/Config.php文件),有如下多项配置:$config['base_url'] = 'http://test.xq.com';$
2014-11-12 12:00:44 8303
原创 CI框架源码阅读笔记6 扩展钩子 Hook.php
CI框架允许你在不修改系统核心代码的基础上添加或者更改系统的核心功能(如重写缓存、输出等)。例如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = TRUE;),通过添加特定的钩子,可以让系统在特定的时刻触发特定的脚本:$hook['post_system'] = array( 'class' => 'frameLog',
2014-11-09 14:33:07 8438 1
原创 CI框架源码阅读笔记5 基准测试 BenchMark.php
上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的。这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架。 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),
2014-11-07 00:21:24 4050
原创 CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了。既然是“引导”文件,那么就是对用户的请求、参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位。例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理。 这之中,CodeIgniter.php做了哪些工作
2014-11-04 17:59:11 6710 1
原创 CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现、结构和设计。 Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作)。 打开Common.php中,第一行代码就非常诡异:if ( ! defined('BASEPATH')) exit('No
2014-10-30 22:47:09 8247 3
原创 CI框架源码阅读笔记2 一切的入口 index.php
上一节(CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始。在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现。1. 设置应用程序环境define('ENVIRONMENT', 'development');这里
2014-10-26 20:46:22 5635
原创 CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动。最近项目少,总算是有了一些时间去写一些东西。于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛!基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过。本文中反复出现和提及的术
2014-10-25 23:26:36 5701
原创 Bash中的job管理
本来不准备写这篇博客的,因为任务管理(job管理)非常非常常用,以至于觉得根本没有必要去写这样一个东西。但想了下,还是记录一下吧,也许有人会用到呢。 不知你是否碰到过这样的情况,当你兴致勃勃的打开VIM,写代码写到正酣时,运营MM或者产品MM气喘吁吁的跑过来:“赶紧帮我跑一下xx的数据,一会做PPT要用”。可是不想直接关闭当前的VIM,而且某些系统下,又不能新开tty(如设置了maxlogi
2014-10-23 23:18:39 4382
原创 /dev/random和/dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。 这两个设备的差异在于:/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备
2014-10-22 22:36:39 45119 1
原创 从单词统计问题看面试
本文的许多内容来自网络,如有错误,欢迎指出。问题描述 首先这里对单词的界定是:以空白分割的字符序列。单词统计的问题可以描述为:在一篇正常格式的英文文档中(作为面试,这里并没有提及中文分词和单词统计的问题),统计每个单词出现的次数,要求统计出现次数最多的N个单词和相应的出现次数。问题简单明了,无需对字面做更多的解释。为什么面试官都喜欢考诸如此类的问题?这类问题,大都有一个共同点:不仅
2014-10-11 18:38:12 3855
原创 一次Debug过程的思考
前一段时间,部门接入了新业务,由于业务量小,架构非常简单,采用了最简单的LNMP架构,整个项目是交给一个刚毕业的RD负责的,这是背景。 上线前半天,服务平稳运行。下午的时候,开始收到大量报警:No host could be connected in the cluster。第一反应:mysql服务器不会挂了吧。打开监控,一切正常,登录也一切正常,但报警一直没有间断,这奇怪了。
2016-08-02 10:35:59 1988
原创 【高性能MySQL】读书摘录5-第6章、查询性能优化
第6章、查询性能优化1、慢查询基础:优化数据访问查询性能低下的最基本的原因是访问的数据太多,对于低效的查询,可以从下面两个步骤来分析:(1)、确认应用程序是否在检索大量超过需要的行,这通常意味着访问了太多的行,但有时候也有可能访问了太多的列。(2)、确认MySQL服务器层是否在分析大量超过需要的数据行。一些典型的情况:(1) 查询不需要的列。这样的查询上应该加上L
2015-04-26 16:28:03 2282
原创 【高性能MySQL】读书摘录4-第五章、创建高性能的索引
第五章、创建高性能的索引1、简介 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量小且负载较低时,不恰当的索引对性能的影响可能还不明显,但是当数据量逐渐增大时,性能会急剧下降。索引可以包含一个或者多个列的值。如果索引包含了多个列,那么列的顺序也十分重要。因为MySQL只能高效地使用索引的最左前缀列(B+树的数据结构决定的)。创建
2015-04-19 10:37:26 1574
原创 【高性能MySQL】读书摘录3-第四章、Schema与数据类型优化
第四章、Schema与数据类型优化1、选择优化的数据类型: (1)一般情况下,应该尽量选择使用可以正确存储数据的最小数据类型。 (2)尽量简单:应该用MySQL内建的类型(datetime,time等)而不是字符串来存储时间和日期;应该用整形存储IP地址。 (3)尽量避免NULL。通常情况下应该尽量指定为NOTNULL(因为可为NUL
2015-04-11 20:23:24 1135
原创 【高性能MySQL】读书摘录2-第三章、服务器性能剖析
第3章、服务器性能剖析1、本书所说的性能主要是指“完成某个任务所需要的时间度量”,而相应的优化则是指降低查询执行的时间,从而提升单位时间的查询量。2、性能剖析一般分为两个步骤,测量任务花费的时间,然后对结果进行统计的排序,将重要的任务排在前边。两种类型的性能剖析:基于执行时间的性能剖析和基于等待的分析。前者用于分析研究什么任务的执行时间最长,而基于等待的分析则是判断任务在什么地方被阻塞的时
2015-04-11 16:27:56 1362
原创 【JavaScript高级程序设计】读书摘录4-第七章 匿名函数
第七章、匿名函数 本章中比较重要的几个概念:闭包、匿名函数,作用域链,this对象等。在js中碰到的很多坑都来自本章。另外,在很多类库中如jQuery中都会大量使用闭包和匿名函数,它们都是非常有用的特性。1、函数定义和函数表达式的区别:对于函数定义,在代码执行以前会被加载到内存中,而对于函数表达式:只有在代码执行到那一行的时候才有定义:function func()
2015-04-10 23:52:28 991
原创 【高性能MySQL】读书摘录1 - MySQL架构与历史
第一章、Mysql架构与历史1、 Mysql服务器逻辑架构图:最上层的结构不是Mysql独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的结构,比如连接处理、授权认证、安全等。第二层是Mysql中比较核心的部分。大多数的Mysql核心功能都在这一层。包括查询解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,存储过程、触发器、视图等。
2015-04-09 17:37:46 1995
原创 【javascript高级程序设计】读书摘录3 第六章、面向对象
第六章、面向对象的程序设计 这一章应该是Javascript中最抽象的一章,其中原型、原型链、构造函数等多次出现,几乎贯穿了整个章节。而对于创建对象和继承,也都是基于原型和构造函数而来的。因此这一部分的内容需要细细琢磨。尤其是对于原型、原型链,应该多画图,加深理解。1、面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。ECMASc
2015-04-08 23:45:32 2160 1
原创 【javascript高级程序设计】读书摘录2 第五章、引用类型
第五章、引用类型1、创建Object的发放时有两种,第一种是使用new操作符: varperson = new Object();第二种是使用对象字面量表示法:var person = {name : ‘test’}; (注意最后一个属性后面不要加逗号,否则在某些浏览器中可能会出现错误),在使用字面量创建对象时,属性名也可以使用字符串:var person = {“name”:”test”
2015-04-06 20:51:10 1135 3
原创 【javascript高级程序设计】读书摘录1 JavaScript简介
一直在做服务器端的开发,却迫不得已要做一些前端页面的开发。努力恶补js中,顺便熟悉下node.js。目标:前后端兼修。么么哒。第一章、Javascript简介1. ECMAScript与javascript的关系2. DOM级别DOM0实际上是不存在的标准,指IE4和NetScape4最初支持的DHTMLDOM1主要是映射文档的结构DOM2扩
2015-04-05 23:17:48 1140
原创 【深入浅出node.js】读书摘录3 - 异步I/O
第三章、异步I/O1. 使用异步I/O的原因:改善用户体验、优化资源分配。Node利用单线程,避免了多线程死锁、状态同步等问题;利用异步I/O,让单线程远离阻塞,以更好的使用CPU。2、为了弥补单线程无法利用多核CPU的缺点,Node提供了childprocess(类似于HTML5中的web workers),该进程可以通过工作进程高效地利用CPU和I/O。3、 异步/同步
2015-04-05 11:14:25 1271
原创 【深入浅出node.js】读书摘录2 - node.js模块机制
第二章、模块机制1. CommonJs规范的目的是希望JavaScript能够在任何地方运行2. 一直以来,JavaScript存在的缺陷有: (1)、没有模块系统 (2)、标准库较少 (3)、没有标准接口 (4)、缺乏包管理系统CommonJS规范的提出,是为了弥补当前JavaScri
2015-04-05 10:44:20 1176
原创 【深入浅出node.js】读书摘录1 - node.js简介
第一章 Node简介1. Node初衷是基于V8创建一个轻量级的Web服务器,基于javascript。随着项目的发展,Node发展成为构建一个网络应用的基础框架。2. 设计高性能Web服务器的要点:事件驱动、非阻塞I/O、异步3. 考虑到高性能、事件驱动、没有历史包袱等因素,Javascript成了Node的实现语言4.
2015-04-05 10:43:33 1452
原创 《构建高性能web站点》读书随笔目录
《构建高性能web站点》读书笔记1 减少网页中的HTTP请求数《构建高性能web站点》读书笔记2 服务器的并发处理能力,ab测试等《构建高性能web站点》读书笔记3 持久连接keep-alive《构建高性能web站点》读书笔记4 长连接 WebSocket《构建高性能web站点》读书笔记5 网络I/O模
2015-03-27 17:17:52 1840
原创 【读书】2015读书List
时刻提醒自己,不进步意味着倒退。2015年准备读完的技术书籍:1. 《Redis设计与实现》2. 《高可用MySQL:构建健壮的数据中心》3. 《高性能Mysql》4. 《深入浅出Node.js》5. 《算法 第4版 Algorithms Fourth Edition》6. 《深入PHP:面向对象、模式与实践(第3版)》7.《构建高性能Web
2015-03-27 17:08:51 1603
原创 【技术晨读】4- 关于Redis的常识
今天的博文阅读只有一篇《关于Redis的常识》, 文中给了不少有价值的参考资料。有一本书《Redis设计与实现》, 从底层数据结构和设计的角度去看Redis。准备有时间去翻看一下。在线阅读版本: http://redisbook.com/这本书的下边,给出了不少的资源。摘抄如下:Redis 3.0 源码注释 ——包含中文注释的 Redis 3.0 源码,帮助有兴趣的读
2015-03-10 09:50:37 2045
原创 【技术晨读】3-js相关博文
1. 为脚本语言平反- javascript篇(jser看了应该会比较欣慰) 共三篇: (1) http://blog.csdn.net/aimingoo/article/details/4532394 (2) http://blog.csdn.net/aimingoo/article/details/4532496 (3) http
2015-03-09 10:16:09 1477
原创 【技术晨读】2- MYSQL相关博文
1. Mysql Explain 详解 http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html 对着手册那部分看,相信会对explain , 索引有一个更深刻的认识 注意: 不要用explain去执行insert和delete, update等操作。2. 典型性
2015-03-06 10:26:46 1475
原创 《高可用MySQL》2 – 单机版MySQL主从配置
这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示:建立基本的主从复制可以总结为以下三个基本步骤:配置master服务器配置slave服务器将slave连接到master在配置完成之后,我们会做一个简单的测试,测试复制是否正常。 本文所涉及的master和slave服务器均位于同一台
2014-10-18 00:45:52 5589 1
正则表达式经典实例
2015-02-03
PHP Design Patterns
2015-02-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人