Archive 2015

MySQL索引原理

发布于:2015-12-24

索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。 数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。 最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。 如果稍微分析一下会发现,每种查找算法都只能应用于特定的数 …...

进入阅读

PHP底层——变量及其数据结构

发布于:2015-12-03

前言 众说周知PHP是一门弱类型语言,PHP中的一个变量可以声明为任意的PHP数据类型,在程序的运行阶段也可以几乎任意的进行类型转换。这是PHP一个灵活而高效的设计,那么PHP的变量是如何进行存储的呢?这篇文章将介绍相关的知识。 PHP类型 PHP是弱类型语言,这并不表示PHP没有类型,在PHP中,存在8种变量类型,可以分为三类: 类型 描述 标量类型 布尔类型——boolean、整型——integer、浮点型——float(double)、字符类型——string 复合类型 关联数组——array、对象——object 特殊类型 资源——resource、常 …...

进入阅读

Mac上的包管理工具Brew

发布于:2015-11-25

关于brew mac系统也是基于unix的系统,所以也继承类很多unix的特性,包括软件的编译,安装等。ubuntu下有快捷命令apt-get install来快速安装软件。centos下有yum install来快速安装。所以,mac下也有一种方式,就是使用brew。是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便brew类似ubuntu系统下的apt-get的功能。 brew是Mac下的一个包管理工具,它从下载源码解压然后 ./configure && make install ,同时会包含相关依存库。并自动配置好各种 …...

进入阅读

RESTful架构

发布于:2015-08-02

什么是REST和RESTful REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的,REST(英文:Representational State Transfer,一般译为"表现层状态转化")是一种思维方式,而非协议或标准。它是设计基于命名资源而非消息的松耦合应用程序的一种风格。如果一个架构符合REST原则,就称它为RESTful架构。 REST的三个要素是唯一的资源标识, 简单的方法, 一定的表达方式。REST是以资源为中心, 名词即资源的地址, 动词即施加于名词上的一些有限操作, 表达是对各种资源形态的抽象。 以HTTP为例, 名词 …...

进入阅读

序列化和反序列化解决方案

发布于:2015-07-26

什么是序列化和反序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程,与之相对应的过程称之为反序列化(Unserialization)。序列化和反序列化主要用于解决在跨平台和跨语言的情况下, 模块之间的交互和调用,但其本质是为了解决数据传输问题。 早期的序列化和序列化解决方案中主要是文本协议的方案,即实现了对象和字符串之间的相互转换,然后在实际的传输过程中再将字符串转化为二进制数据,Xml、Json等等都是解决了对象与字符串之间的相互转换问题。 当大数据时代来临的时候, 大家发现基于XML, 甚至Json的文本协议的方案的传输效率很成问题 所 …...

进入阅读

使用PHP_CodeSniffer进行PHP代码规范检测

发布于:2015-07-09

PHP_CodeSniffer是什么 PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查嗅探PHP代码是否有违反一组预先设置好的编码标准的一个包,它是确保你的代码简洁一致的必不可少的开发工具,甚至还可以帮助程序员减少一些语义错误。 CodeSniffer内置MySource、PEAR、PHPCS、PSR1、PSR2、Squiz和Zend等几套代码规范。 PHP_CodeSniffer包含两个工具phpcs用来检查代码规范,phpcbf用来纠正代码规范。 安装PHP_CodeSniffer 如果你的WEB服务器上已经安装了PHP和PEAR,那么直接运行下列命令就可以安 …...

进入阅读

使用Composer进行PHP依赖管理

发布于:2015-06-30

Composer是什么 对于现代语言而言,包管理器基本上是标配。Java有Maven,Python有pip,Ruby有gem,Nodejs有npm。PHP的则是PEAR,不过PEAR坑不少。好在我们有Composer,Composer是PHP 的一个依赖管理工具。它是开源的,使用起来也很简单,提交自己的包也很容易。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中( …...

进入阅读

算法研究(PHP版本)——拓扑排序问题

发布于:2015-06-02

问题 假设一个工程分为若干阶段,每个阶段需要耗费一定的天数,有些工程的开始必须以其他一个和多个工程的结束为前提。假设每次只能同时进行一个阶段,问如何安排执行工程的阶段确保工程能顺利的完成。 解决问题的思路 用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动,弧表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV (Activity On Vertex network)网。 在AOV网没有回路的前提下,我们将全部活动排列成一个线性序,使得若AOV网中有弧<i,j>存在,则在这个序列中,,i一定排在j的前面,具有这种性质的线性序列称为拓扑有序序 …...

进入阅读

算法研究(PHP版本)——带权二分图最佳匹配问题

发布于:2015-05-13

问题 假设要给5位工人分配不同的5项工作,每位工人都能完成这5项工作,但是每一位工人完成不同工作能带来的效益是不一样的,如何分配工作能使得总效益达到最大值。 解决问题的思路 对于这个问题最容易想到的解决思路是请举所有的排列组合,然后计算总的效益后取最大值即可。上述问题的因子是5,5求全排列一共有120种组合,对于计算机而言,循环求120次求解不是很难的问题,效率也高,但是一旦问题变大,例如因子变为20,那么时间复杂度和空间复杂度都会呈现几何级数级别的上升。 上述问题可定义为寻找带权二分图最佳匹配,解决这个问题的著名算法是KM算法。 对KM算法的描述,基本上可以概括成以下几个步骤: 初始化可行 …...

进入阅读

算法研究(PHP版本)——最大匹配问题

发布于:2015-05-07

问题 假设某一婚介单位要给10位男生和10位女生安排1对1相亲,每个男生都有自己喜好的几位女生(喜好程度假设相同)。问如何进行男女匹配使得男生最大限度的能和自己喜好的女生进行约会,即使得能安排到喜好女生的男生数目最大。 解决问题的思路 此问题实质上是经典的二分图最大匹配问题,求解二分图最大匹配问题的一个算法是匈牙利算法。 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 二分图以及匹配相关概念 二分图 简单来说,如果图中点可以被分 …...

进入阅读

关于javascript原型与继承的那点事

发布于:2015-03-09

JavaScript中的对象、类、原型、原型链 真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承。 JavaScript中并没有类和实例的概念(ECMAScript 6中出现了class关键字),全是对象。这指的是传统意义上的对象,也就是“一个包含了状态和行为的单一实体”。 通常我们会将function函数模仿“类”来使用,但是并不像在 C++、Java 或 C# 中了解的经典继承模式一样,JavaScript中的继承是通过原型和原型链的形式实现的。 在Javascript中,每 …...

进入阅读

算法研究(PHP版本)——妖怪与和尚过河问题

发布于:2015-03-09

问题 有三个和尚(或传教士)和三个妖怪(或食人怪)过河,只有一条能装下两个人(和尚或妖怪)的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢? 解决问题的思路 题目的初始条件是三个和尚和三个妖怪在河的一边(还有一条船),解决问题后的终止条件是三个和尚和三个妖怪安全地过到河的对岸,如果把任意时刻妖怪和和尚的位置看作一个“状态”,则解决问题就是找到一条从初始状态变换到终止状态的路径。 从初始状态开始,每选择一批妖怪或和尚过河(移动一次小船),就会从原状态产生一个新的状态,如果以人类思维解决这个问题,每次都会选择最佳的妖怪与和尚组 …...

进入阅读

算法研究(PHP版本)——三只水桶等分水问题

发布于:2015-03-05

问题 有一个容积为8升的水桶里装满了水,另外还有一个容积为3升的空桶和一个容积为5升的空桶,如何利用这两个空桶等分8升水?附加条件是三个水桶都没有体积刻度,也不能使用其它辅助容器。 解决问题的思路 如果我们把某一时刻三个水桶中存水的容积称为一个状态,则问题的初始状态是8升的水桶装满水,求解的解出状态(最终状态)是8升水桶中4升水,5升水桶中4升水。穷举法的实质就是把从初始状态开始,根据某种状态变化的规则搜索全部可能的状态,每当找到一个从初始状态到最终状态的变化路径,就可以理解为找到了一种答案。 这样的状态变化搜索的结果通常是得到一棵状态搜索树,根节点是初始状态,叶子节点可能是最终状态,也可能是 …...

进入阅读

Linux编译器GCC简介

发布于:2015-01-11

编译和编译器 对于计算机科学来说“编译”是一个很重要的概念,它指的是利用编译器从源语言编写的源程序产生目标程序的过程。对于计算机而言真正能识别的语言是2进制语言,但是在我们在进行软件开发的时候是不太可能直接用二进制语言进行开发的,那么问题来了,软件工程师开发出来的代码是怎么转变成计算机能识别的2进制语言呢?答案就是编译!编译的过程就是把人所写的代码“翻译”成2进制语言的过程,也就是从人的语言到机器的语言的过程。 编译器是一种计算机程序,它会将用某种编程语言写成的源代码,转换成另一种编程语言。它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶 …...

进入阅读

PHP执行原理

发布于:2015-01-07

前言 PHP是一个被广泛应用的脚本语言,因为它的成功,所以很多时候我们应用PHP的时候是不需要考虑底层到底是怎么实现的。但是了解和掌握一下PHP底层的体系和运行结构会有助于我们开发出更高效的代码,这篇文章将会介绍一下有关PHP底层相关的东东。 PHP体系结构 PHP的构成可以划分成以下4个部分: Zend引擎 Extensions内政函数及拓展 SAPI接口 Application应用 Zend引擎 Zend引擎整体用纯c实现,是php的内核部分。它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行Opcode的处理并实现相应的处理方法、实现了基本的数据结构( …...

进入阅读

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)