游记

调试RESTful API的利器:Postman (chrome扩展)

调试RESTful API的利器:Postman (chrome扩展)

Haroopad 最好用的markdown编辑器

Haroopad 最好用的markdown编辑器跨平台,代码高亮,Vim 键绑定,多列模式,行号,折叠, Github Flaverd Markdown 等功能.

设计模式原则总结

from:http://blog.prosight.me/blogs/984/名称解释0、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。一、”开放-封闭”原则(OCP)在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则。即软件实体(类、模板、函数等等)应该可以扩展,但是不可修改。【通俗】:设计的时候,时刻考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。二、里氏代换原则(LSP)1.一个软件实体如果使用的是一个父类的话,那么一定适用于该子类,而且他觉察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。【一句话】:**子类型必须能够替换掉他们的父类型。**三、依赖倒置原则(DIP)1.高层模块不应该依赖于底层模块。两个都应该依赖抽象。2.抽象不应该依赖于细节,细节依赖于抽象(【白话】:针对接口编程,不要针对实现编程。四、接口隔离原则(ISP)1.使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。2.过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。五、合成/聚合复用原则(CARP)尽量使用合成/聚合,尽量不要使用类继承。【聚合】:表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。【合成】:一种强的拥有关系,提现了严格的部分和整体的关系,部分和整体的生存周期一致。六、迪米特法则(LoD)最少知识原则强调类之间的松耦合。即:如果两个类不必彼此直接通信,那么着两个类就不应当发送直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

wunderlist3宣传视频

wunderlist3很精彩,产品的交互完全依照背景交响乐的节奏做动态演示,相当的和谐!

servlet/filter/listener/interceptor区别与联系

由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时候,发现为什么struts1要用servlet,而struts2要用filter呢?一时又发现,servlet和filter有什么区别呢?于是看了看web.xml,一时又发现,咦,servlet、filter、listener?还有个interceptor?对于这几个概念,本应是初学者就掌握的东东了,可惜本人基础学的不好,只能是现在补课。于是就有了这篇博客。慢慢来吧,需要补课的地方还有很多很多呀。初学的时候都不知道他们存在呢。呵呵。下面从几个方面阐述一下题目中四个概念的区别与联系:1、概念2、生命周期3、职责4、执行过程一、概念:1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。2、filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。3、listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。4、interceptor:是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。5、servlet、filter、listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。二、生命周期:1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。(1)、装入:启动服务器时加载Servlet的实例;(2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成;(3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;(4)、销毁:停止服务器时调用destroy()方法,销毁实例。2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行)(1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;(2)、每一次请求时都只调用方法doFilter()进行处理;(3)、停止服务器时调用destroy()方法,销毁实例。3、listener:类似于servlet和filterweb.xml 的加载顺序是:context- param -> listener -> filter -> servlet4、interceptor:以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。三、职责1、servlet:创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;创建可嵌入到现有的html页面中的一部分html页面(html片段);读取客户端发来的隐藏数据;读取客户端发来的显示数据;与其他服务器资源(包括数据库和java的应用程序)进行通信;通过状态代码和响应头向客户端发送隐藏数据。2、filter:filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;根据程序需要修改请求和响应;在servlet被调用之后截获servlet的执行3、listener:职责如概念。servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:第一类:与servletContext有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、                      HttpSessionActivationListener;第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener4、interceptor:与过滤器十分相似,通过层层拦截,处理用户的请求和响应。 备注:web.xml 的加载顺序是:context-param -> listener -> filter -> servlet 。了解了这几个概念的区别以后,不难理论这个加载顺序了。 四、几个区别:1,servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.2,filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等3, servlet,filter都是针对url之类的,而listener是针对对象的操作的,如session的创建,session.setAttribute的发生,在这样的事件发生时做一些事情。可用来进行:Spring整合Struts,为Struts的action注入属性,web应用定时任务的实现,在线人数的统计等4,interceptor 拦截器,类似于filter,不过在struts.xml中配置,不是在web.xml,并且不是针对URL的,而是针对action,当页面提交action时,进行过滤操作,相当于struts1.x提供的plug-in机制,可以看作,前者是struts1.x自带的filter,而interceptor 是struts2 提供的filter.与filter不同点:(1)不在web.xml中配置,而是在struts.xml中完成配置,与action在一起( 2  ) 可由action自己指定用哪个interceptor 来在接收之前做事5,struts2中的过滤器和拦截器的区别与联系:(1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。(2)、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。(3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。(4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。(5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。五、执行流程图:1、servlet:2、filter:3、listener:4、interceptor:

离站提示JS工具:Ouibounce

离站提示JS工具:Ouibounce,当离开网站时给出一个提醒,从jobbole看到的.tip:和bootstrap的model 结合时要在参数的callback中 手动 用$('#share').modal();触发,官网没说,这个要注意.demo如下:[repo owner=”carlsednaoui” name=”ouibounce”]

开源的电子邮件模板

开源的电子邮件模板,质量相当的高.网址: https://www.sendwithus.com/resources/templates 

tabIndent.js让你在Textarea中也能用Tab键

很多程序员都会习惯性的在Textarea中按Tab键进行缩进,结果是——焦点移动到下一个控件去了。tabIndent.js就是一个专门用来解决这个问题的小巧脚本,只需要在页面中引用它,并调用tabIndent.renderAll();即可处理class为tabindent的Textarea。[repo owner=”julianlam” name=”tabIndent.js”]

Web 热图库 Heatmap.js

Heatmap.js用来生成基于用户自定义数据上的web 热图,内嵌html5 画布元素。可根据以下数据来源绘制热图:静态数据鼠标移动鼠标点击支持浏览器:Firefox 3.6+, Chrome 10, Safari 5, Opera 11 and IE 9+.[repo owner=”pa7” name=”heatmap.js”]

hello 2015

hello 2015,我们在上线!