代码改变世界

随笔档案-2011年07月

论PHP框架设计模式及MVC的缺陷

2011-07-29 16:55 by 卫佳, 412 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0目前主流的PHP框架设计模式均为MVC模式,比如yii或codeigniter,均是由控制器接收页面请求,并沟通模型与视图的交互。如果我们把网站整体看作一个矩阵,把网站接收用户请求并处理看作是网站的竖向,而把网站的每一个模块(比如文章模块,投票模块,论坛模块等)看作是网站的横向。那么我们可以画出这样的图:模块1模块2模块3用户请求----------------------||||||数据处理----------------------||||||页面呈现------------ 阅读全文

THINKPHP 上传类的使用方法上传概述

2011-07-29 16:53 by 卫佳, 745 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0上传类使用ORG类库包中的Net.UpdateFile类,ThinkPHP内置的Action操作里面(主要是insert和update操作,其他操作可以相应实现)实现了自动识别是否存在文件上传,如果存在会自动进行处理。而上传类要做的仅仅是文件上传的过程,其他功能需要依赖系统类库或者相应类库。系统对文件上传设置了很多灵活的参数以便进行更细致的控制。下面我们通过几种常用的例子分别来描述下如何使用UploadFile类。目前ThinkPHP0.9.5版本的上传类包含的功能如下(有些功能 阅读全文

深度分析HTML5在移动开发方面的发展状况

2011-07-29 16:53 by 卫佳, 251 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0“我们正在用HTML5编写我们下一套移动产品。”“是啊,这些天很多人在玩着Appcelerator,我也在玩着。”“嗯,但这并不是我要说的那种HTML5产品。”最近,我有很多类似的交流对话,可能因为我正在开发一套HTML5的应用吧。就像2005年的“AJAX”,“HTML5SunglassesWholesale”这个术语现在还没有被清晰地定义,在未确定这个新技术有什么优势前,它就已经被四处套用,甚至投入运营。如果你在一间被热衷新技术的管理人掌控的公司里任职,如果你走运,那么漫画人 阅读全文

面向对象写js

2011-07-27 14:01 by 卫佳, 270 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0这是个问题,平常也没思考过,被问到了,一时也没理清楚自己的思路,当时只蹦出namespace这么个想法; 平时的工作跟javascript打交道的时候一般是做一些页面里的交互体验增强,基本上全是用jQuery,查找一些元素,做些计算,做些属性更改,做一些事件绑定处理,做些AJAX; 数据模型也就是定义JSON对象,其实用javascriptOO定义前端的model的情况比较少啦; 这两天读了网上的一些文章,今天稍微整理一下关于这个问题的多个角度。 1.ObjectInstanti 阅读全文

网银为何独爱IE6

2011-07-27 14:00 by 卫佳, 330 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 问世已经十年的微软浏览器IE6,去年在美国举办了一次“葬礼”,代表这款浏览器正式退出历史舞台。然而国内使用网络银行的人都知道,各大银行的网银平台,至今几乎清一色只认IE6。日前读到这则消息,HighqualitySunglasses真是“心有戚戚焉”,自家电脑的浏览器自从升级为IE9后,网上支付就成了大麻烦。致电银行客服,答曰:卸了IE9,重装低版本浏览器! 还有更麻烦的。笔者有几位朋友是忠实的“苹果”粉丝,平时上网基本用苹果电脑。不过,要是在网店里看中一样东西了,还是得乖乖放 阅读全文

魔方方法 _invoke

2011-07-27 14:00 by 卫佳, 285 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0PHP5.3新增了一个叫做__invoke的魔术方法,这样在创建实例后,可以直接调用对象。 classtestClass { publicfunction__invoke { print“helloworld”; } } $n=newtestClass; $n(); 执行结果为: helloworld。SunglassesDistributor 官方示例 classCallableClass { publicfunction__invoke($x) { var_dump($x); 阅读全文

产生高度优化的PHP代码

2011-07-27 13:59 by 卫佳, 192 阅读, 收藏,
摘要: PHP是一种在服务器端执行的脚本语言,它开发了世界上许多知名的网站,包括雅虎和Facebook等。下面介绍6条PHP代码、性能优化的技巧。 1.将PHP升级到最新版 提高性能的最简单的方式是不断升级、更新Cheapsunglasseswholesale版本。 2.使用分析器 网站运行缓慢的原因颇多,Web应用程序极其复杂,让人扑朔迷离。而一种可能性在于PHP代码本身。这个分析器可以帮助你快速找出造成瓶颈的代码,提高网站运行的总体性能。 XdebugPHPextension提供了强大的功能,可以用来调试,也可以用来分析代码。方便开发人员直接跟踪脚本的执行,实时查看综合数据。还可以将这个数据导入到 阅读全文

状态模式

2011-07-26 17:10 by 卫佳, 307 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0状态模式自身结构非常简单——前面刚刚介绍了几个结构比较简单的设计模式,和他们一样,状态模式在具体实现上留下了可变换的余地。我前面已经介绍过它的孪生兄妹策略模式了,大家可以两者比较着阅读。本文将会讨论两者的区别。二、定义与结构GOF《设计模式HighqualitySunglasses》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。这个对象看起来似乎修改了它的类。看起来,状态模式好像是神通广大——居然能够“修改自身的类”!能够让程序根据不同的外部情况来做出不同的 阅读全文

策略模式

2011-07-26 17:10 by 卫佳, 266 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算法,可以理解为不同的业务处理方法。这种做法会带来什么样的好处呢?它将算法的使用和算法本身分离,即将变化的具体算法封装了起来,降低了代码[CheapReadingglasses]的耦合度,系统业务策略的更变仅需少量修改。算法被提取出来,这样可 阅读全文

访问者模式

2011-07-26 17:09 by 卫佳, 417 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层次结构修改个底朝天……。这种类似的操作分布在不同的类里面,不是一个好现象,我们要对这个结构重构一下了。那么,访问者模式也许是你很好的 阅读全文

模板模式

2011-07-26 17:08 by 卫佳, 206 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计起到很好的作用的。而模板方法模式就是其中的一个使用范例。二、定义与结构模板方法(TemplateMethodB 阅读全文

迭代器模式

2011-07-25 16:43 by 卫佳, 212 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行javacollection的遍历:Iteratorit=list.iterator();while(it.hasNext()){//using“it.next();”CheapReadingglasses}而这就是关于迭代器模式应用很好的例子。二、定义与结构迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个 阅读全文

调停者模式

2011-07-25 16:41 by 卫佳, 532 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0MediatorPattern中文译为“中介者模式”、“调停者模式”。其实都不是很好,由于现实生活中的“中介”是要和客户打交道,而省去客户原本繁琐的手续,这一点和门面模式的初衷很相像;而在MediatorPattern中Mediator是不可见的。“调停”也不好,因为Mediator在程序中存在的初衷仅仅是规范信息传递的方式。因此叫做“传递器模式”仿佛更能体贴一些,但是本文还是称其为“调停者模式”。二、定义与结构SunglassesWholesale给调停者模式下的定义是:用一个 阅读全文

备忘录模式

2011-07-25 16:41 by 卫佳, 358 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。但是在我们手指下的程序世界里,却有的后悔药买。今天我们要讲的备忘录模式便是程序世界里的“月光宝盒”。二、定义与结构备忘录(ReadingGlasseswithCase)模式又称标记(Token)模式。GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态, 阅读全文

观察者模式

2011-07-25 16:40 by 卫佳, 459 阅读, 收藏,
摘要: 还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行盗窃的时候,总有一两个人在门口把风——如果有什么风吹草动,则会立即通知里面的同伙紧急撤退。也许放风的人并不一定认识里面的每一个同伙;而在里面也许有新来的小弟不认识这个放风的。但是这没什么,这个影响不了他们之间的通讯,因为他们之间有早已商定好的暗号。呵呵,上面提到的放风者、偷窃者之间的关系就是观察者模式在现实中的活生生的例子。二、定义与结构观察者(AcetateSunglasses)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有 阅读全文

代理模式

2011-07-22 17:11 by 卫佳, 221 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 我们去科技市场为自己的机器添加点奢侈的配件,很多DIYer都喜欢去找代理商,因为在代理商那里拿到的东西不仅质量有保证,而且价格和售后服务上都会好很多。客户通过代理商得到了自己想要的东西,而且还享受到了代理商额外的服务;而生产厂商通过代理商将自己的产品推广出去,而且可以将一些销售服务的任务交给代理商来完成(当然代理商要和厂商来共同分担风险,分配利润),这样自己就可以花更多的心思在产品的设计和生产上了。在美国,任何企业的产品要想拿到市场上去卖就必须经过代理商这一个环节,否则就是非法 阅读全文

命令模式

2011-07-22 17:10 by 卫佳, 208 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0命令模式是从界面设计中提取出来的一种分离耦合,提高重用的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它吧。先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分开来实现的,你可以想象一下,Cheapsunglasseswholesale文档上面的一排菜单要实现出多少个“形似 阅读全文

责任链模式

2011-07-22 17:10 by 卫佳, 324 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0引言初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。各个科室的医生推卸责任,搞得病人因此楼上楼下的跑了不少冤枉路,最后无果而终。责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决了这个问题了呢?我管呢!二、定义与结构从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象。当一个请求触发后,请求将在这些对象组成的链条中传递,直 阅读全文

解释器模式

2011-07-22 17:09 by 卫佳, 253 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0引子解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。二、定义与结构解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。在GOF的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这 阅读全文

享元模式

2011-07-21 17:11 by 卫佳, 178 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0让我们先来复习下java中String类型的特性:String类型的对象一旦被创造就不可改变;当两个String对象所包含的内容相同的时候,JVM只创建一个String对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。先来验证下第二个特性:publicclassTestPattern{publicstaticvoidmain(String[]args){Stringn="ILoveJava"PolarizedS 阅读全文

装饰模式

2011-07-21 17:09 by 卫佳, 119 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0装饰模式(Decorator)也叫包装器模式(Wrapper)。GOF在《设计模式》一书中给出的定义为:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。让我们来理解一下这句话。我们来设计“门”这个类。假设你根据需求为“门”类作了如下定义:DoorWholesaleDiscountSunglassesopen()close()lock()现在,在系统的一个地方需要一个能够报警的Door,你来怎么做呢?你或许写一个Door的子类Alar 阅读全文

门面模式

2011-07-21 17:09 by 卫佳, 248 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面,FacadeWenZhouSunglasses模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。定义中提到的子系统是指在设计中为了降低复杂性根据一定的规则(比如业务、功能),对系统进行的划分。子系统中封装有一些类。客户程序在使用子系统的时候,可能会像下图一样零乱。在上面的实现方法中,客户类紧紧地依赖在子系统的实现上。子系统发生的变化,很可能要影响到客户类 阅读全文

组合模式

2011-07-21 17:08 by 卫佳, 211 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:1)有且仅有一个特定的称为根(Root)的结点;2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTreeMetalSunglasses)。上面给出的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。而这里的 阅读全文

简单工厂模式

2011-07-19 17:10 by 卫佳, 226 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。先来看看它的组成:1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。2)抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。3)具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。来用类图来清晰的表示下的它们之间的关系(如果对类图不太了解,请参考 阅读全文

单例模式

2011-07-19 17:09 by 卫佳, 336 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0一、引子单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用,在我前面的几篇文章中也结合其它模式使用到了单例模式。这里我们就单例模式进行系统的学习。并对有人提出的“单例模式是邪恶的”这个观点进行了一定的分析。二、定义与结构单例模式又叫做单态模式或者单件模式。在GOF书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件(或者叫做资源Cheapsunglasseswholesal 阅读全文

开发人员理应具备的八大特征

2011-07-18 15:38 by 卫佳, 382 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal01.热情/激情我们的目标之一就是创建一支令人惊叹的开发团队,我们的信条之一就是只有深入关注一些事情,我们才能成为世界最佳。所以我们在寻找证明开发人员对计算机有兴趣并热爱编程的证据。这方面的例子,比如说,开源活动、冷门的项目、非主流编程语言,等等。读大学之前的任何编程经历也是一个很好的指标。2.有干劲/自主性作为一个小公司,我们没有太多层次的管理。这很好,因为这样创造了一个非常好的工作环境。然而,这也意味着,就算是独立的贡献者也需要有能力完成项目,并且工作无须敦促。3.敏捷我们的团 阅读全文

程序员最容易犯的几个技术上的错误

2011-07-18 15:38 by 卫佳, 150 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal01.为钱而编程如果你对编程不感兴趣,你的代码一定会写的很烂。结果不仅仅你的事业没有任何前途,你的团队也会因此而痛苦不堪。2.缺乏基本的能力对诸如抽象、多态、接口、异常处理最佳方案等编程概念不熟悉的人写出的代码必然是设计糟糕,可读性和可维护性都极差。3.自作聪明SunglassesDistributor喜欢过于聪明的在一个复杂的语句里包含多个步骤的代码。这会使代码的可读性很差,没人会喜欢维护这样的代码。4.喜欢卖弄新学到的技术当学到了某些新知识时,你很自然的有一种倾向想立即应用它们 阅读全文

Web设计师应参考的技术

2011-07-18 15:37 by 卫佳, 189 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0作为Web设计师,我们都不约而同的痴迷于HTML5和CSS3,我们需要学习HTML5和CSS3有关技术。博客里有很多关于这方面的教程、评论、讲解。但是,自己究竟学到了多少实用的技术?我们似乎花了大量的时间在阅读关于这方面的文章,但是学到的技术和时间却不成正比。除了这个,还有很多方面值得我们去注意。下面从几个方面讲讲我的心得,供大家参考。用户服务我们需要学习客户服务的几个原因:第一,我们所做的是为了给AcetateSunglasses提供更好的服务。我们不只是单纯的在做网站,我们要 阅读全文

提高编程技巧的十大方法

2011-07-18 15:37 by 卫佳, 193 阅读, 收藏,
摘要: MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal01.学习一门新的编程语言(Learnanewprogramminglanguage)学习一门新的编程语言将有助于你开拓新的思维方式,特别是当你使用不熟悉的语言时,你将学习到很多种思维方法应用到语言中。而所学习到的新思维方式,你可以运用在你所熟知的语言中。甚至有时你会使用新学的语言进行你的重要项目。提供学习经验包含:Lisp(SunglassesWholesale),Forth,PostScriptorFactor(stack-orientedprogramminglanguage 阅读全文

JSON是什么?它能带来什么?

2011-07-15 16:17 by 卫佳, 348 阅读, 收藏,
摘要: 优点:1.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小2.易于解析这种语言,客户端JavaScript可以简单的通过eval()进行JSON数据的读取3.支持多种语言,包括CheapReadingglasses,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等语言服务器端语言,便于服务器端的解析4.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,便于PHP序列化后的程序直接调用.PHP服务器端的对象、数组等能够直接生JSON格式,便于客户端的访问提取.另外PHP的PEAR类已经提出了支持(http://pear. 阅读全文

AJAX推送与拉取方式的比较

2011-07-15 16:16 by 卫佳, 370 阅读, 收藏,
摘要: 1.HTTP拉取方式:在这种传统的方法中,客户端以用户可定义的时间间隔去检查服务器上的最新数据。这种拉取方式的频率要足够高才能保证很高的数据精确度,但高频率可能会导致多余的检查,从而导致较高的网络流量。而另一方面,低频率则会导致错过更新的数据。理想地,拉取的时间间隔应该等于服务器状态改变的速度。 2.HTTP流:这种方法由存在于不间断的HTTP连接响应中或某个XMLHttpRequest连接中的服务器数据流所组成。 3.反转AJAXWholesaledesignersunglasses:服务流应用到AJAX,就是所谓的反转AJAX或者COMET。它使得服务器在某事件发生时可以发送消息给客户端, 阅读全文

PHP超级负载均衡

2011-07-15 16:15 by 卫佳, 517 阅读, 收藏,
摘要: 现有系统中存在的问题:1.慢连接、瞬时访问慢。场景一:如果后端新增加机器,cache命中率低,因此响应速度慢,但是能连接上且不超时。如果ui持续访问就会把uiCheapsunglasseswholesale夯住。场景二:如果后端模块某一台机器响应较慢。如果前端持续访问就会被夯住。2.死机。场景一:能断断续续响应请求,不过速度很慢。造成ui夯住。3.混合部署。场景一:多个模块在同一机器上,项目影响。4.机器权重。场景一:老机器,性能差;新机器,性能彪悍。因此他们应该承载不同的压力。5.跨机房冗余。场景一:后端对cache依赖很高的模块,因为采用的是一致hash算法,如果挂掉一台机器,对另外的机器 阅读全文

6个有用的MySQL语句

2011-07-15 16:11 by 卫佳, 199 阅读, 收藏,
摘要: 以前本站给大家介绍过《MySQL性能优化的最佳20+条经验》,今天给大家介绍六条比较有用的MySQL的SQL语句,可能很多人都通过PHP来实现这些功能。1.计算年数你想通过生日来计算这个人有几岁了。SELECTDATE_FORMAT(FROM_DAYS(TO_DAYS(now())-TO_DAYS(@dateofbirth)),'%Y')+0;2.两个时间的差取得两个datetime值的差。假设dt1和dt2是Sunglassesmanufacturer类型,其格式为‘yyyy-mm-ddhh:mm:ss’,那么它们之间所差的秒数为:UNIX_TIMESTAMP(dt2)-UN 阅读全文

thinkphp的静态缓存使用方法

2011-07-14 16:43 by 卫佳, 310 阅读, 收藏,
摘要: thinkphp里面内置了一个静态缓存功能,说静态缓存可能对我这种菜鸟而言不太好理解。其实静态缓存就是将THINKphp的某一个操作显示出来的页面生成一个HTML文件保存在设置的路径,当用户再次访问的时候,如果缓存没过期,那么这个操作将不再执行它下面的PHP程序,而是直接调用生成的HTML/AcetateSunglasses缓存文件。要使用静态缓存就需要在项目配置目录__APP__/Conf下面增加静态缓存规则文件htmls.php,还需要在配置文件中打开静态缓存'HTML_CACHE_ON'=>TRUE,设置已经生成的静态页保存路径'HTML_PATH' 阅读全文

深入探讨Varnish缓存命中率

2011-07-14 16:42 by 卫佳, 602 阅读, 收藏,
摘要: 也许你还在为刚才动态内容获得7336.76reqs/s的吞吐率感到振奋,等等,理想和现实是有差距的,你要忍受现实的残酷,别忘了,我们压力测试中的动态内容都处于全缓存情况下,也就是每次请求都命中缓存,这在现实中往往是不可能的。首先,缓存区空间大小是有限的,而我们的站点可能有大量的内容需要被缓存,而不像前边压力测试时只有一个内容。一旦缓存区被装满,那么缓存管理器便会淘汰一些它认为不再需要的缓存内容,比如通过LRU(最近最少使用算法)将使用频率较低的缓存内容淘汰出去,但是,这里判断“不常使用”的标准是不严格的,也许被淘汰的内容就是你将要访问的下一个内容,这便影响了它的命中率。其次,缓存的过期时间也. 阅读全文

合理配置MySQL缓存 提高缓存命中率

2011-07-14 16:41 by 卫佳, 394 阅读, 收藏,
摘要: 众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍。故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率。MySQL数据库也不例外。在这里,笔者将结合自己的工作经验,跟大家探讨一下,MySQL数据库中缓存的管理技巧:如何合理配置MySQL数据库缓存,提高缓存命中率。一、什么时候应用系统会从缓存中获取数据? 数据库从服务器上读取数据时,可以从硬盘的数据文件中获取数据,也可以从数据库缓存中读取数据。现在数据库管理员需要搞清楚的是,在什么样的情况下,系统是从缓存中读取数据,而不是从硬盘的数据文件中读取数据? 简单的说,数据缓存就是内存中的一块. 阅读全文

使用Memcache缓存MySQL查询

2011-07-14 16:40 by 卫佳, 748 阅读, 收藏,
摘要: 实际应用中,尤其是在大规模访问的Web项目中,Memcache作为一种优秀的缓存解决方案,被广泛使用。其灵活性和可扩展性受到了广大开发者的青睐。为了提高响应速度,使用Memcache来减少数据查询运算是一种不错的选择。关于Memcache的安装和配置,网上有很多资料,这里就不再赘述。本文以笔者在实际项目中的应用为例,来说明如何使用Memcache缓存MySQL数据,从而达到高效数据响应的目的。需求背景:网站有一个图片放映功能,页面加载时需从数据库中查询管理员所提交放映的图片信息,图片放映区共有9张图片,对应在数据库表中有9条记录。每次用户访问网站时,需查询数据库,并显示图片。当承受大规模用户. 阅读全文

PHP生成图表pChart入门教程

2011-07-13 16:41 by 卫佳, 696 阅读, 收藏,
摘要: pChart是一个开源的图表生成库,主要涉及3个Class:pChart.class,pData.class,pCache.class,可生成20多种简单或复杂的图表,支持PNG,JPG,GIF通用图片格式。数据源可以来自于Database,CSV,当然也可以手写。使用该程序PHP需要开启GD服务,先来看看pChart的工作流程:主要分为三步:*读取用于生成图表数据(数据库、文件)*设计图表样式(圆角、底色等)*制作标签、题目、图例并生成图表下面看一个简单的柱状例子代码如下:<?php//StandardinclusionsWenZhouSunglassesinclude("p 阅读全文

详解PHP与XML结合的Web编程

2011-07-13 16:40 by 卫佳, 347 阅读, 收藏,
摘要: 一、小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法。 二、HTML的局限性分析 1、HTML的可扩展性差。虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制。 2、链路丢失后不能自动纠正。由于Web页面的URL地址经常改变,而在改变URL地址时必须手工修改这些信息,否则就会遇到“404URL地址未找到”的信息,这大大加重了Web页面的 阅读全文

西尔排序

2011-07-10 11:28 by 卫佳, 245 阅读, 收藏,
摘要: packageUtils.Sort;*希尔排序,要求待排序的数组必须实现Comparable接口publicclassShellSortimplementsSortStrategy{privateint[]increment;*利用希尔排序算法对数组obj进行排序publicvoidsort(Comparable[]obj){if(obj==null){thrownewNullPointerException("Theargumentcannotbenull!");}//初始化步长TitaniumOpticalFrameinitGap(obj);//步长依次变化(递减)fo 阅读全文

快速排序

2011-07-10 11:28 by 卫佳, 184 阅读, 收藏,
摘要: packageUtils.Sort;*快速排序,要求待排序的数组必须实现Comparable接口publicclassQuickSortimplementsSortStrategy{privatestaticfinalintCUTOFF=3;//Cheapsunglasseswholesale*利用快速排序算法对数组obj进行排序,要求待排序的数组必须实现了Comparable接口publicvoidsort(Comparable[]obj){if(obj==null){thrownewNullPointerException("Theargumentcannotbenull!&qu 阅读全文

归并排序

2011-07-10 11:28 by 卫佳, 186 阅读, 收藏,
摘要: packageUtils.Sort;*归并排序,要求待排序的数组必须实现Comparable接口publicclassMergeSortimplementsSortStrategy{privateComparable[]bridge;*利用归并排序算法对数组obj进行排序publicvoidsort(Comparable[]obj){if(obj==null){thrownewNullPointerException("Theparamcannotbenull!");}bridge=newComparable[obj.length];//初始化中间数组mergeSort(o 阅读全文

选择排序

2011-07-10 11:27 by 卫佳, 186 阅读, 收藏,
摘要: packageUtils.Sort;*利用选择排序法对数组排序,数组中元素必须实现了Comparable接口。publicclassChooseSortimplementsSortStrategy{*对数组obj中的元素以选择排序算法进行排序publicvoidsort(Comparable[]obj){if(obj==null){thrownewNullPointerException("Theargumentcannotbenull!");}Comparabletmp=null;intindex=0;//CheapReadingglassesfor(inti=0;i&l 阅读全文

PHP的一些特效

2011-07-07 16:03 by 卫佳, 418 阅读, 收藏,
摘要: 1.禁止右键<bodyoncontextmenu=return(false)>2.禁止选择<bodyonselectstart="returnfalse">3.禁止粘贴<bodyonpaste="returnfalse">4.禁止直接访问[必须框架内才行]<script>if(top==self)top.location.href="page.htm";//WholesaleDiscountSunglasses</script>5.禁止frame引用<script>if(top!=self)top.location.href=&quo 阅读全文

提高PHP性能的10条建议

2011-07-07 16:03 by 卫佳, 180 阅读, 收藏,
摘要: 这篇文章中的建议涵盖了大部分PHP代码性能方面的问题。如果你是做一些小网站或者小项目,那么有理由忽略这些建议,但是当你为大量用户提供长期稳定的服务的时候,就必须关注了。开发人员必须从项目一开始就考虑这些建议,它会极大的改善你的网站的性能。 在PHP中,通常有很多的方法可以来达到相同的目的,但是开发人员通常选择他们最熟悉的用起来最舒服的一种方式,但是有些事必须注意的: 1.echo比printCheapReadingglasses要快很多。两个方法都会在页面上打印东西,不过echo不返回任何值,print会在成功或失败的时候返回0或1。 2.include_once比include更加耗时。因为 阅读全文

Js的10个设计缺陷

2011-07-07 16:02 by 卫佳, 385 阅读, 收藏,
摘要: 1.不适合开发大型程序Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。2.非常小的标准库 Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。 3.null和undefined null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。 typeofnull;//object typeofundefined;//undefinedChinasunglassessupplier 两者非常. 阅读全文

iftttt

2011-07-06 16:32 by 卫佳, 402 阅读, 收藏,
摘要: if…then…else是基本上所有编程语言的最基本语句,当(if)参数满足规定条件时(then)触发特定函数(else)触发另一函数,通俗理解这一语句就是程序里的道道关卡,这些关卡将一个个小的代码片段衔接成运行有序的庞大程序,从而完成复杂的计算。所有的软件、网站、移动应用的背后都是如此。而今天要介绍的这个真正“神奇的网站”ifttt.com,则将if…then…else机制扩展到了整个互联网。ifttt的本意是ifthisthenthatWholesaledesignersunglasses,它将Facebook、Twitter等各个网站或应用通过API衔接成一个跨互联网的自动机器,像多米诺 阅读全文

互联网界面价值.

2011-07-06 16:32 by 卫佳, 171 阅读, 收藏,
摘要: 搜索引擎每天处理着数以亿计的查询请求,每个查询请求都代表了一个用户对于某种资源的特定需求。多数时候,通过查询返回的网页结果,这些需求被满足了,我们可以认为结果中的某些页面对特定用户的特定需求产生了价值。那么对于搜索引擎而言,页面的价值是指什么,我们为什么要研究页面价值,技术上怎样判断页面的价值呢?本文将逐一回答这些问题。一、什么页面价值。前面我们说了,某个页面满足了某一用户的特定需求,就体现了这个页面对用户的价值。那么对搜索引擎而言,价值体现在哪些方面呢?一个简单的推论,所有可能会对用户产生价值的页面都是对搜索引擎有价值的,将这些页面建入搜索引擎的索引中能够满足最终检索到它们用户的需求,我们称 阅读全文

创业编程七个错误认识

2011-07-06 16:31 by 卫佳, 162 阅读, 收藏,
摘要: 多少年来,人们普遍有一种看法,认为软件工程应该和其它种类的工程一样:仔细的设计,精确的规划,然后进行开发—严格按照设计说明书。就像修建一座桥梁,不是吗?这种开发方式的问题在于:软件,它是“软”的。它可以无限的延展。任何需要的时候你都可以大幅度的修改你的软件,人们也都是这么干的。还有,因为软件可以被拿来对任何事物进行模型造型,你能要求软件开发人员去实现的可能的东西几乎是无穷无尽。想要在软件里模拟集成电路吗?干吧。想管理银行?没问题。让五亿人和他们的朋友保持联系?为什么不呢?小菜一碟。不仅如此,在开发的中途我们还能要求程序员去做各种修改,这种事情经常的以一种不可预期的形式出现。 这可不是像修桥那样 阅读全文

Nginx不支持ThinkPHP配置PATHINFO

2011-07-06 16:30 by 卫佳, 384 阅读, 收藏,
摘要: ThinkPHP支持通过PATHINFO和URLrewrite的方式来提供友好的URL,只需要在配置文件中设置'URL_MODEL'=>2即可。在Apache下只需要开启mod_rewrite模块就可以正常访问了,但是Nginx中默认是不支持PATHINFO的,这使得用TP写程序变的非常有局限性。所以我们需要修改nginx.conf文件。 网上搜了很多方法都不奏效,研究了一天,发现通过以下的配置可以完美支持'URL_MODEL'=>2的情况了 location/project/{ indexindex.php; if(!-e$request_file 阅读全文

MyISAM 和 InnoDB 讲解

2011-07-05 15:23 by 卫佳, 250 阅读, 收藏,
摘要: InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。 以下是一些细节和具体实现的差别: ◆1.InnoDB不支持FULLTEXTSunglassesWholesale类型的索引。 ◆2.InnoDB中不保存表的具体行数,也就是说,执行selectcount(*)fromtable时,InnoDB要扫描一遍整个表来计算. 阅读全文

程序员基础 MySQL数据库开发必备常识

2011-07-05 15:23 by 卫佳, 274 阅读, 收藏,
摘要: MySQL可以说是程序员应用最多的数据库,下面笔者为大家分享MySQL数据库开发当中的一些常识,存储引擎的选择,索引的设计及使用和大批量插入时SQL语句的优化。希望能对大家有帮助。 存储引擎的选择 声明:本文所针对的数据库版本都是MYSQL5这里我主要针对两种存储引擎进行简单比较分别是MyISAM和InnoDB,首先比较下区别:WenZhouSunglasses 1.MyISAM不支持事务,不支持外键,优点是访问速度高,批量插入速度快。假设大量的操作是select、insert,建议采用该存储引擎。但是在我的实际应用中,出现过批量插入过于频繁的时候,当数据量到达一定级别,出现表损坏的情况。 2 阅读全文

MySQL数据库中CHAR与VARCHAR之争

2011-07-05 15:22 by 卫佳, 292 阅读, 收藏,
摘要: 一、VARCHAR与CHAR字符型数据的差异Chinasunglassesmanufacturer 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char.。这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是从数据的保存方式来看,两者相差很大。而且其具体的实现方式,还依赖与存储引擎。我这里就以大家最常用的MYISAM存储引擎为例,谈谈这两种数据类型的差异。在后续建议中,也是针对这种存储类型而言的。 这里首先需要明白的一点是,这两种数据类型,无论采用哪一种存储引起,系统存储数据的方式都是不同的。正是因为如此,我们才有必要研究两者的不同。然后在合适的情况下,采用恰当的 阅读全文

剖析MySQL左连接右连接等值连接异同

2011-07-05 15:21 by 卫佳, 402 阅读, 收藏,
摘要: 从业以来,发现很多技术人员和同事向笔者或是在网络上咨询过LEFTJOIN如何写及其特性,而等值连接一般都没问题,几年前曾经写过一份MicrosoftSQLServer版本的,此次特意再写一份MySQL版本的,希望阅读过的技术人员,可以起到解惑功效。 1、三种连接的语法 为便于更多的技友快速读懂、理解,我们只讨论2张表对象进行连接操作的情况,大于2张表对象进行的连接操作原理也是一样的。 左连接(LEFTJOIN)CheapReadingglassesSELECTM.columnname……,N.*columnname…..FROMleft_tableMLEFTJOINright_tableNO. 阅读全文