自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (4)
  • 收藏
  • 关注

原创 redis之字符串命令源码解析(一)

形象化设计模式实战             HELLO!架构 在redis的使用中,set/get无疑是使用最普遍的命令,我先telnet连接运行看看 先看get命令,获取一个key服务器返回了两行内容,是"$3\r\n123\r\n"(\r\n为换行符),不难发现3就是“123”的长度,redis的官方文档get返回值为:Return value

2014-10-29 09:46:52 588

Dijkstra算法(最短距离)

该算法由荷兰的一个牛人计算机科学家Edsger Wybe Dijkstra在1956年发现。 这套算法主要解决计算从一个点到其它的点的最短距离,而不是Floyd-Warshall算法的任意两点距离。 如图,现要计算出,从1号点到其它各点的最短距离,首先我还是转化成矩阵由此可见1号点到其它点的初始距离为: 0 1 12 ∞ ∞ ∞  很明显2号点是离1号点最近的...

2016-08-05 16:57:49 1805

Floyd-Warshall算法(最短距离)

Robert W.Floyd和Stephen Warshall在1962年发表了Floyd-Warshall算法 如图,有1234,四个点,每个点都有一定的距离,比如1和2有2的距离,现在我想知道任意两个点的最短距离。 我先用“邻接矩阵存储法”将这个图转化为矩阵 竖坐标是出发点,横坐标是目的地,∞表示无穷大,也就是到不了,例如2到不1。有了这个矩阵,就可以用一个两维数组...

2016-08-05 16:13:27 679

玩转深度优先搜索算法

小时候玩游戏,有个BOMB人的游戏,把BOMB放在一个空地上,将怪兽炸死,如图: BOMB的威力只要不碰到墙壁,可以无限延长。那么我们应该把BOMB放哪里可以炸死最多的怪兽呢? 这个问题貌似很简单,一个一个地方试下不就知道了吗?是啊,那我们用代码来试下。 将图象转成字符,用#表示墙,用G表示怪兽,用.表示空地,最后得到的字符为:##############GG.GG...

2016-08-01 17:32:42 280

使用nginx部署django应用

1、通过pip安装uwsgi $sudo yum install python-devel$sudo yum install python-pip$sudo pip install pip --upgrade$sudo yum install libpcre3 libpcre3-dev$sudo yum install zlib1g-dev 如果安装版本错误,先卸载:...

2016-02-25 11:05:56 171

如何正确防御xss攻击

XSS:Cross Site Script,本来简写是css,但为了区别样式表的css,因此在安全领域叫做“XSS”。XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。 一、HttpOnly防止劫取CookieHttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问...

2014-12-10 10:54:59 1127

构建WEB数据库扩展

已文大神可以略过。 当一台服务器已不能满足日益膨胀的站点时,就应该对数据库进行扩展。 一、主从复制 几乎所有的主流数据都支持复制,在mysql中,配置如下1、开户服务器上的二进制日志(log-bin)2、在主服务器和从服务器上分别进行简单的配置和授权。具体可参看官方手册。MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器...

2014-12-05 09:42:13 107

六大Web负载均衡原理与实现

开头先理解一下所谓的“均衡”不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。 一、http重定向当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中...

2014-11-25 09:38:40 1568

redis之列表命令源码解析

形象化设计模式实战             HELLO!架构                     redis命令源码解析 一、Lpush,Rpusht_list.c void lpushCommand(redisClient *c) { pushGenericCommand(c,REDIS_HEAD);}void rpushCommand(red...

2014-11-18 09:42:27 177

redis之哈希命令源码解析

形象化设计模式实战             HELLO!架构                     redis命令源码解析 前面讲过了字典和压缩列表的实现,redis的哈希数据就是存储在这两种结构之中的,如果对这两种结构都非常清楚了,那么对哈希命令的实现的理解将会非常简单。 一、hsetvoid hsetCommand(redisClient *c) { i...

2014-11-14 10:07:22 130

代码实现任意容量倒水问题

形象化设计模式实战             HELLO!架构                     redis命令源码解析 倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C升的水。 想必很多人都可能被问到过这个问题,问题虽然简单的,但是要费些脑子。这个问题显然是个逻辑问题,那么就肯定能够用程序来实现。 现在我假设A=3,B=5,C=4。...

2014-11-05 11:49:10 800

redis之压缩列表源码剖析

形象化设计模式实战             HELLO!架构                     redis命令源码解析 用过Redis的应该对其哈希命令不陌生,在探索其实现之前,先得了解Redis的一个内部映射数据结构——压缩列表。 1、zipList的结构找到ziplist.c文件,在代码注释中: * The general layout of the zipl...

2014-11-04 09:59:26 156

redis之字符串命令源码解析(三)

形象化设计模式实战             HELLO!架构 redis之字符串命令源码解析(一)redis之字符串命令源码解析(二)  前面已经将set get命令的原理与过程作了详细的解析,下面对一些常用的命令做一些简单讲解,前提是前面的已经明白。1、append方法解析 t_string.c中的appendCommand方法:void appe...

2014-10-31 09:40:37 127

原创 redis之字符串命令源码解析(二)

形象化设计模式实战             HELLO!架构 在redis之字符串命令源码解析(一)中讲了get的简单实现,并没有对如何取到数据做深入分析,这里将深入。 1、redisObject 数据结构,以及Redis 的数据类型(一)中说set test "hello redis",“hello redis”会最终保存在robj中,redisObjec

2014-10-30 09:33:37 910

redis之字符串命令源码解析(二)

形象化设计模式实战             HELLO!架构 在redis之字符串命令源码解析(一)中讲了get的简单实现,并没有对如何取到数据做深入分析,这里将深入。 1、redisObject 数据结构,以及Redis 的数据类型 (一)中说set test "hello redis",“hello redis”会最终保存在robj中,redisObject是Redi...

2014-10-30 09:32:12 106

原创 企业架构之页面控制器

在前端控制器博客中说到前端控制器比较复杂,不适用于相对的小项目,那如何以最佳方式为适度复杂的WEB应用程序构建控制器,从而既能避免代码重复,又能实现重用性和灵活性?  一、概念Page Controller很简单,就是接受来自页面请求的输入,调用请求对模型执行操作以及确定应用于结果页面的正确视图。分隔高度逻辑和所有视图相关代码。  二、为什么要用页面

2014-10-29 14:26:03 572

原创 企业架构之应用控制器

在前端控制器中说到执行命令时,是用命令对象自己调用视图,如果系统的规模较小,可以如此。但这并不是最佳的选择,最好是尽可能地将命令和视图分离开来。 一、概念应用控制器负责映射请求到命令,并映射命令到视图。这种分离意味着可以更加容易地改变视图(即模板)而不用改动核心代码。同时,也可以改变应用程序的流程而不需要修改核心部分的代码。通过将Command分离出来,可以更加容易地把同一个C

2014-10-29 14:24:11 439

原创 企业架构之前端控制器

一、概念前端控制器模式用一个中心来处理所有到来的请求,最后调用视图将结果呈现给用户。此模式是Java企业应用的核心模式之一,但在PHP中并没有受到广泛的喜爱,部分原因是初始化前端控制器所需要的开销会导致系统性能下降。  二、为什么要使用前端控制器?(1)当请求可以发送到系统中多个地方时,很难避免代码重复。例如你可能需要验证用户、检查参数,多个页面都要

2014-10-29 14:08:46 568

原创 PHP架构之注册表

啥是注册表模式?其实很简单!注册表的作用是提供系统级别的对象访问功能。我们在编码时通常把“全局变量是不好的”当做信条。不过,凡事都有两面性,全局性的数据访问非常具有吸引力。 问题来了:大多系统都分为几个层,每个层都只通过事先定义好的通道和相邻的层交流。对层的分享使程序变得灵活,替换或修改每个层可以最小化对系统其他部分的影响。但当你需要在一个层中获取不相邻另一个层所需

2014-10-29 14:04:55 673

redis之字符串命令源码解析(一)

形象化设计模式实战             HELLO!架构 在redis的使用中,set/get无疑是使用最普遍的命令,我先telnet连接运行看看 先看get命令,获取一个key服务器返回了两行内容,是"$3\r\n123\r\n"(\r\n为换行符),不难发现3就是“123”的长度,redis的官方文档get返回值为:Bulk string reply: the ...

2014-10-28 09:47:15 135

对象关系行为模式之延迟加载

形象化设计模式实战     HELLO!架构 一、概念Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。  二、实现延迟加载实现Lazy Load主要有四种方法:延迟初始化、虚代理、值保持器和重影。 (1)延迟初始化(Lazy...

2014-09-03 09:42:40 151

对象关系行为模式之工作单元

一、概念Unit of Work:维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。其UML结构大致如下:工作单元记录在业务事务过程中对数据库有影响的所有变化。操作结束后,作为一种结果,工作单元了解所有需要对数据库做的改变,统一对数据库操作。  二、为什么要使用工作单元?如果没有使用工作单元,可以在每次修改对象模型时对数据库对得相应修改,但这样会产生大量规模...

2014-08-27 09:40:21 201

对象关系行为模式之标识映射

HELLO!架构 一、概念identity Map:通过在映射中保存每个已经加载的对象,确保每个对象只加载一次,当要访问对象的时候,通过映射来查找它们。其实在数据源架构模式之数据映射器代码中有提及到标识映射,Mapper类的getFromMap方法就是实现标识映射的实现。  二、为什么要使用标识映射?在数据源架构模式之数据映射器中//client代码 ...

2014-08-21 09:42:09 360

数据源架构模式之数据映射器

前面分别介绍了数据源架构模式之表数据入口、数据源架构模式之行和数据入口数据源架构模式之活动记录,相较于这三种数据源架构模式,数据映射器显得更加“高大上”。 一、概念数据映射器(Data Mapper):在保持对象和数据库(以及映射器本身)彼此独立的情况下,在二者之间移动数据的一个映射器层。概念永远都是抽象的,简单的说,数据映射器就是一个负责将数据映射到对象的类数据。 二、为什...

2014-08-11 09:47:50 272

数据源架构模式之活动记录

hello!架构一、概念活动记录(Active Record):一个对象,它包装数据库表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。对象既有数据又有行为。活动记录使用直截了当的方法,把数据访问逻辑置于领域对象中。 二、实现简单活动记录活动记录在php许多框架中都有应用,如cakephp。<?php/** * 行数据入口类 */c...

2014-08-05 09:37:19 156

数据源架构模式之行数据入口

注:看不懂的请勿踩,此文章非针对java,java爱好者可直接略过。 一、概念行数据入口(Row Data Gateway):充当数据源中单条记录入口的对象,每行一个实例。 二、简单实现行数据入口为了方便理解,还是先简单实现:<?php/** * 行数据入口类 */class OrderGateway { /*定义元数据映射*/ ...

2014-07-31 09:42:12 396

数据源架构模式之表数据入口

数据源架构模式有四种:表数据之口,行数据入口,活动记录和数据映射器。在了解它们之前,需对领域模型模式有一定的了解,可先参看业务逻辑层之事务脚本与领域模型和业务逻辑层之表模块 一、概念表数据入口(Table Data Gateway):充当数据库表访问入口的对象。一个实例处理表中所有的行(有没有想起表模块)。表数据入口包含了用于访问单个表或视图的所有SQL,如CRUD等...

2014-07-30 09:29:16 165

业务逻辑层之表模块

在业务逻辑层中还有一种模式:表模块,在PHP的实际开发,很多时候其实用到的都是表模块模型。 一、概念Table Module:处理某一数据库或视图中所有行的业务逻辑的一个实例。太抽象了!其实表模块和领域模型非常相似。表模块是以一个类对应数据库中的一个表来组织领域逻辑,而且使用单一的类实例来包含将对数据进行的各种操作程序,它与领域逻辑的主要区别在于,如果你有许多订单,领域模型对每一个订...

2014-07-18 09:36:53 361

业务逻辑层之事务脚本与领域模型

在前面的博客中,已了解了前端控制器,页面控制器,应用控制器这三种表现层模式,如果说它们精心安排了外部世界与系统内部的通信,那么业务逻辑层的工作则是处理应用程序的业务部分。业务逻辑层应当远离那些外部的“噪音”。业务逻辑是整个应用程序的根本目的所在,系统的其它部分都是为这部分服务的。这里介绍两种经常使用的领域逻辑模式:事务脚本模式和领域模型模式。 一、事务脚本 1.1 概念T...

2014-07-11 09:48:42 521

企业架构之页面控制器

在前端控制器博客中说到前端控制器比较复杂,不适用于相对的小项目,那如何以最佳方式为适度复杂的WEB应用程序构建控制器,从而既能避免代码重复,又能实现重用性和灵活性?  一、概念Page Controller很简单,就是接受来自页面请求的输入,调用请求对模型执行操作以及确定应用于结果页面的正确视图。分隔高度逻辑和所有视图相关代码。  二、为什么要用页面控制器?其实这...

2014-06-23 10:59:04 110

企业架构之应用控制器

在前端控制器中说到执行命令时,是用命令对象自己调用视图,如果系统的规模较小,可以如此。但这并不是最佳的选择,最好是尽可能地将命令和视图分离开来。 一、概念应用控制器负责映射请求到命令,并映射命令到视图。这种分离意味着可以更加容易地改变视图(即模板)而不用改动核心代码。同时,也可以改变应用程序的流程而不需要修改核心部分的代码。通过将Command分离出来,可以更加容易地把同一个Comm...

2014-06-20 09:33:10 111

企业架构之前端控制器

一、概念前端控制器模式用一个中心来处理所有到来的请求,最后调用视图将结果呈现给用户。此模式是Java企业应用的核心模式之一,但在PHP中并没有受到广泛的喜爱,部分原因是初始化前端控制器所需要的开销会导致系统性能下降。  二、为什么要使用前端控制器?(1)当请求可以发送到系统中多个地方时,很难避免代码重复。例如你可能需要验证用户、检查参数,多个页面都要执行这些操作,如果不...

2014-06-17 10:34:28 129

PHP架构之注册表

啥是注册表模式?其实很简单!注册表的作用是提供系统级别的对象访问功能。我们在编码时通常把“全局变量是不好的”当做信条。不过,凡事都有两面性,全局性的数据访问非常具有吸引力。 问题来了:大多系统都分为几个层,每个层都只通过事先定义好的通道和相邻的层交流。对层的分享使程序变得灵活,替换或修改每个层可以最小化对系统其他部分的影响。但当你需要在一个层中获取不相邻另一个层所需要的信息时,该...

2014-06-10 10:35:14 142

跨战区模式PK(总结)

创建类模式描述如何创建对象,行为类模式关注如何管理对象的行为,结构类模式则看重于如何建立一个软件结构,虽然三种模式的着重点不同,但是在实际应用中还是有重叠的,会出现一种模式适用,另外一种模式也适用的情况。 一、策略模式VS桥梁模式策略模式是一个行为模式,旨在封装一系列的行为,封装的格式(算法)不同,行为也就不同;而桥梁模式则是解决在不破坏封装的情况下如何抽取出它的抽象部分和实现部分,...

2014-05-30 09:47:56 173

行为类模式大PK(总结)

行为类模式包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法、访问者模式,我去,好多。。。下面主要挑选几个比较容易混淆且比较重要的模式进行对比说明。  一、命令模式VS策略模式1、关注点不同策略模式关注的是算法替换的问题:一个新的算法投产,旧算法退休,或者提供多种算法由调用者自己选择使用,算法的自由更替是它实现的...

2014-05-29 09:42:08 124

结构类模式大PK(总结)

结构类模式包括适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式,它们都是通过组合类或对象产生更大结构以适应更高层次的逻辑需求。 一、代理模式VS装饰模式代理模式把当前的行为或功能委托给其他对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对被代理类的功能做任何处理,保证原汁原味的调用。代理模式使用到极致开发就是A...

2014-05-26 09:41:58 105

创建类模式大PK(总结)

创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责。其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新对象,这两个不容易混淆。下面主要分析其它三种模式。  一、工厂方法模式VS建造者模式 1、意图不同在工厂方法模式里,关注的是一个产品整体,无须关心产...

2014-05-23 10:16:44 87

变脸不变质的桥梁模式(Bridge Pattern)

有一哥们是搞山寨货的,什么流行就搞什么。自己有个厂子,前些时间服装挣钱,就生产衣服,现在搞手机挣钱,搞手机,这哥们很聪明,就换了个产品,工人,厂房都不变。他是怎么做到的?用类图来模拟一下:由类图可以看出这哥现有两家公司,一个搞房地产,一个搞山寨货(phone),房地产是长久渠道,山寨随时可能变更。用PHP来实现:<?phpabstract class Corp { ...

2014-05-22 09:58:41 114

神器sublime2配置xdebug调试PHP

第一步:安装php xdebug扩展参考http://www.xdebug.org/docs/install讲的很详细,这里略过。 第二步:安装sublime xdebugclient(不是xdebug)直接用package control安装即可 第三步:配置php xdebug扩展windows:[XDebug]zend_extension = "D:...

2014-05-20 15:02:48 176

懂得分享的享元模式(Flyweight Pattern)

今天学习一个对php来说意义不大的模式——享元模式竟然意义不大为什么要学?我一直认为设计模式是不针对语言的,相对于目前的php意义不大,并不表示其本身没有意义,其在编译型的语言里还是有很多的用处的。 享元模式的定义享元模式是池技术的重要实现方式,其定义为:使用共享对象可有效地支持大量的细粒度的对象。太简单了,通俗地说就是把经常要使用到的对象共享起来,而不去从新创建而占用内存。其大...

2014-05-14 14:14:02 108

Memcached 内存分析、调优、集群

Memcached 内存分析、调优、集群,绝对好东西

2014-10-29

postgresql9.0中文手册

postgresql9.0的中文chm手册,实用不解释

2014-01-04

C++东南大学何洁月课件(总).ppt

C++东南大学何洁月课件(总).ppt,c++必看教程

2012-03-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除