数据结构与算法(三):树 和 二叉树

有些数据的逻辑关系并不是简单的线性关系,常常存在一对多,甚至多对多的情况。例如,一个家族的 “家谱”,企业的职级关系等、书本的目录章节等都可以用树型数据结构来描述。

是典型的非线性数据结构。本篇描述对 二叉树 的理解。

阅读更多

设计模式(四):代理模式之CGLIB动态代理(CGLIB Dynamic Proxy)

基于静态代理和动态代理需要绑定接口的局限性,而对类的代理在某些场景下确实是需要的,所以某些大牛就创造了CGLIB这个动态代理类库。

CGLIB底层是基本ASM字节码处理框架,该库允许在程运行时对字节码进行修改和动态生成新的类。

CGLIB所创建的动态代理对象的性能比JDK所创建的动态代理对象的性能高(大概10倍),但CGLIB在创建代理对象时所花费的时间却比JDK动态代理多(大概8倍)。

对于singleton的代理对象或者具有实例池的代理,因无须频繁创建对象,比较适用CGLIB动态代理技术;反之则适合采用JDK动态代理技术。

阅读更多

设计模式(三):代理模式之JDK动态代理(JDK Dynamic Proxy)

JDK 1.3 版本后,Java提供了动态代理技术,允许应用在运行期创建接口的代理对象。

JDK 提供的代理只能针对接口做代理。也有更强大的代理库 cglib,可以实现对类的代理。

JDK 的 java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,Proxy类利用InvocationHandler动态创建一个符合某一接口的代理,生成(运行时)目标类的代理对象。

在普通编程过程中,无须使用动态代理,但在编写框架或底层基础代码时,动态代理的作用就非常大。

阅读更多

设计模式:六大设计原则

学习软件设计模式,需要了解使用设计模式的目的,23种设计模式是对设计模式使用场景进行分类再抽象的方法论,遵循了基本的设计原则。

学习软件设计模式,还需要了解其设计的原则,需要了解软件的可维护性和可复用性。

另:设计是有限度的,不能无限地考虑未来的变更情况,否则会陷入设计的泥潭中难以自拔。

阅读更多

HTTP协议基础理解

  HTTP(HyperText Transfer Protocol):超文本传输协议,所有的WWW文件都必须遵守这个标准。现在常用的版本是HTTP 1.1。
  HTTP是一个客户端请求和浏览器应签的标准(TCP),浏览器和服务器通信的数据格式,默认端口:80;HTTPS默认端口:443。
  学习http协议,实际上就是要学习http规定的求的数据的格式以及响应的数据的格式。浏览器与服务器一问一答的规则。

阅读更多