自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朱小厮的博客

你若盛开 蝴蝶自来 你若精彩 天自安排

  • 博客(34)
  • 资源 (12)
  • 论坛 (2)

原创 设计模式:模板方法模式(Template Method)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性的实现一个算法的不变部分,并将可变的行为留给子类来实现。 模板方法的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。  模板方法模式中的方法可以分为两大类:模板方法和基本方法。1 模板方法  一个

2016-03-30 19:52:03 2793 1

原创 设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色:抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。代理主题角色(Proxy):也叫委托类、代理类。代理对象内部含有目标对象的引用,从而可以在任

2016-03-29 21:38:09 10045 9

原创 设计模式:享元模式(Flyweight)

运用共享技术有效地支持大量细粒度的对象。又名“蝇量模式”。  在Java语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。譬如:String a = "abc";String b = "abc";System.out.println(a==b); 输

2016-03-29 21:31:30 2741 2

原创 设计模式:外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称门面模式。 外观模式的角色 1. 门面角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。 2. 子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独

2016-03-29 21:25:14 2645 1

原创 设计模式:装饰模式(Decorator)

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式想必生成子类更为灵活。  装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式中的角色有: 1. 抽象构件角色(Component):给出一个抽象接口,以规范准备接受附加责任的对象。 2. 具体构件角色(ConcreteComponent):定义一个将要接收附加责任

2016-03-29 21:22:13 3028 1

原创 设计模式:组合模式(Composite)

将对象组合成属性结构以表示“部分-整体”的层次结构。组合使得用户和单个对象和组合对象的使用具有一致性。 组合模式设计的角色: 1. Component:是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component. 2. Leaf:在组合中表示叶子节点对象,叶子节点没有子节点。 3. Composite:定义树枝节点行为,用来存储子部件,

2016-03-29 21:16:50 2729 1

原创 Java对象大小内幕浅析

最近突发奇想,忽然对Java对象的内存大小感兴趣,去网上搜集了一些资料,并且做一下整理,希望能够各位帮助。  如果:你能算出new String(“abc”)这个对象在JVM中占用内存大小(64位JDK7中压缩大小48B,未压缩大小64B), 那么看到这里就可以结束了~ Java对象的内存布局:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。  虚拟机

2016-03-29 18:59:00 13601 10

原创 设计模式:桥接模式(Bridge)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图:将抽象与实现解耦。  桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。桥接模式所涉及的角色 1. Abstraction:定义抽象接口,拥有一个Implementor类型的对象引用 2. RefinedAbstracti

2016-03-28 19:02:57 9160 3

原创 设计模式:适配器模式(Adapter)

适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。  适配器模式有类适配器模式和对象适配器模式两种不同的形式。 类适配器  类适配器模式把适配的类的API转换成目标类的API  适配器模式所涉及的角色:目标角色(Target): 这就是所期待得到的接口。源角色(Adaptee):需要适配的接口适配器角色(Ada

2016-03-28 18:56:23 5920

原创 设计模式:原型模式(Prototype)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  举个例子: 1 原型(实际上是implements了Cloneable接口,进而重写clone()方法)public class ProtoType implements Cloneable{ private String name; @Override public ProtoType c

2016-03-25 16:07:26 1974

原创 设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建。 2. ConcreteBuilder(具体建造者):实现Builder接口,针对不同的商业逻辑,具体化复

2016-03-25 11:18:54 6617 1

原创 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大

2016-03-24 21:42:17 5394 4

原创 设计模式:单例模式(Singleton)

  单例模式在23个设计模式中算得上是最简单的一个了,也许你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 单例模式有5中写法(线程安全): 1....

2016-03-23 21:37:46 8987 5

原创 设计模式:开篇

  最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。譬如,在适配器模式中,博主阐述了适配器的定义、类图、案例等,但是并没有阐述类似“比如你买了一个港版的iphone6s,但是大陆的插座不并适合,...

2016-03-23 21:32:44 5057 5

原创 Java集合框架:总结

最近博主对于Java集合框架这个系列做了一个整理,主要包括:Map系:HashMap, LinkedHashMap, TreeMap, WeakHashMap, EnumMap;List系:ArrayList, LinkedList, Vector, Stack;Set系:HashSet, LinkedHashSet, TreeSet;工具类:Collections,Arrays

2016-03-18 17:03:32 4114 9

原创 Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的。整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述。1. 调用一个空List,Set,Mappublic static final List EMPTY_LIST = new EmptyList<>();public static f

2016-03-18 16:44:16 9393 1

原创 Java集合框架:Arrays工具类

java.util.Arrays类能方便地操作数组,它提供的方法都是静态的。整个Arrays工具类的实现有3000+行,但是归纳总结一下可知它有以下功能(9个):1. asList定义: @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>

2016-03-18 16:34:48 6312

原创 Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)

Set概述 Set几乎都是内部用一个Map来实现, 因为Map里的KeySet就是一个Set,而value是假值,全部使用同一个Object。Set的特征也继承了那些内部Map实现的特征。HashSet1. 定义package java.util;public class HashSet<E> extends AbstractSet<E>

2016-03-17 21:37:57 3959 3

原创 Java集合框架:LinkedList

LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作—add(), addFi

2016-03-17 20:13:57 2900 2

原创 Java集合框架:ArrayList

  **ArrayList以数组实现,允许重复。超出限制时会增加50%的容量(grow()方法中实现,如下所示),每次扩容都底层采用System.arrayCopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建数组的大小为10.**

2016-03-17 20:08:01 4344 8

原创 Java集合框架:EnumMap

EnumMap的key不允许为null,value可以为null,按照key在enum中的顺序进行保存,非线程安全。可以用工具类Collections进行包装成线程安全的:```Map<EnumKey, V> m = Collections.synchronizedMap(new EnumMap<EnumKey, V> java.io.Serializable, Cloneable

2016-03-17 19:59:15 9656

原创 Java集合框架:WeakHashMap

  WeakHashMap实现了Map接口,是HashMap的一种实现,它比HashMap多了一个引用队列:```private final ReferenceQueue<Object> queue = new ReferenceQueue<>();```  博主认真比对过WeakHashMap和HashMap的源码,发现WeakHa

2016-03-17 19:48:56 7338 2

原创 Java集合框架:TreeMap

  TreeMap继承AbstractMap,实现NavigableMap、Cloneable、Serializable三个接口。其中AbstractMap表明TreeMap为一个Map即支持key-value的集合, NavigableMap则意味着它支持一系列的导航方法,具备针对给定搜索目标返回最接近匹配项的导航方法 。

2016-03-17 19:38:29 3377 8

原创 Java集合框架:LinkedHashMap

如无特殊说明,本文以jdk7为准进行说明。package java.util;import java.io.*;public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{}  可以看到LinkedHashMap继承了HashMap,那么LinkedHashMap又有什么特点呢?   Lin

2016-03-17 17:42:51 3331 4

原创 Java集合框架:HashMap

Java集合框架概述  Java集合框架无论是在工作、学习、面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以及搜索一些相关资料整理出Java集合框架的系列。一方面是做一个总结,方便以后查阅,另一方面希望各位小伙伴能够提出不足之处,我会及时更新修改。   博主从网上抠了一张图,觉得画得还是比较形象的,给大家参考一下。   上述类图中,实线边框的是

2016-03-17 12:55:29 8544 22

原创 Java引用类型

博主最近在整理Java集合框架时,在整理到WeakHashMap的时候,觉得有必要先阐述一下Java的引用类型,故此先整理的这篇文章,希望各位多提提意见。   闲话不多说,直接进入主题。Java中提供了4个级别的引用:强引用、软引用、弱引用和虚引用。这四个引用定义在java.lang.ref的包下。 强引用( Final Reference)  就是指在程序代码中普遍存在的,类似O

2016-03-16 19:12:55 7163 6

原创 Comparable与Comparator浅析

  今天博主在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparator接口分别进行处理。那么疑问就来了,Comparable和Comparator接口的区别是什么,Java中为什么会存在两个类似的接口?  Comparable和Comparator接口都是用...

2016-03-15 19:56:41 20618 27

原创 Java虚拟机类加载机制——案例分析

在《Java虚拟机类加载机制》一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬念。建议先看完《Java虚拟机类加载机制》这篇再来看这个,印象会比较深刻,如若不然,也没什么关系~~ 下面是程序代码:package jvm.classload;public class StaticTest{ public static

2016-03-09 19:16:33 12870 33

原创 Java类加载器(二)——自定义类加载器

用户定制自己的ClassLoader可以实现以下的一些应用:自定义路径下查找自定义的class类文件,也许我们需要的class文件并不总是在已经设置好的Classpath下面,那么我们必须向办法来找到这个类,在这种清理下我们需要自己实现一个ClassLoader。确保安全性:Java自己吗很容易被反编译,对我们自己的要加载的类做特殊处理,如保证通过网络传输的类的安全性,可以将类经过加密后再传输,

2016-03-08 19:09:57 4343 3

原创 Java类加载器(一)——类加载器层次与模型

类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器层次(等级)从JVM的角度来讲,只存在两种不同的类加载器。 第一类是启动类加载器(Bootstrap ClassLoader):这个类加载器主要加载JVM自身工作需要的类。这个类加

2016-03-08 19:03:05 4077 5

原创 Java虚拟机类加载机制

看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。public class SSClass{ static { System.out.println("SSClass"); }

2016-03-08 18:52:08 18337 32

原创 Javac编译过程

Javac编译过程大致分为4个过程,分别是:词法分析语法分析语义分析代码生成词法分析  词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为编辑,如“int a+b=2”这句代码中包含了6个标记,分别是int、a、=、b、+、2,虽然关键字int由三个字符构成,但是

2016-03-04 17:50:02 5964 1

原创 Java自动装箱与拆箱

自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考。   首先有这样一道题,给出下面代码的输出结果:public class AutoBoxing{ public static void main(String[] args) {

2016-03-04 13:47:48 2140 2

原创 通过Java反编译揭开一些问题的真相

博主在上一篇《 Java语法糖之foreach》中采用反编译的形式进行探讨进而揭开foreach语法糖的真相。进来又遇到几个问题,通过反编译之后才了解了事实的真相,觉得有必要做一下总结,也可以给各位做一下参考。   相信很多朋友刚开始见到反编译后的内容的时候,肯定会吐槽:WTF!其实只要静下心来认真了解下,反编译也不过如此,java字节码的长度为一个字节,顶多256条指令,目前,Java虚拟机规

2016-03-02 12:24:47 11056

zookeeper查看器

zookeeper查看器

2016-11-27

spring+activemq必备jar包

spring+activemq必备jar包:activeio-core-3.1.4.jar,activemq-all-5.13.2.jar,activemq-pool-5.13.2.jar,commons-pool2-2.4.2.jar

2016-04-15

jedis-2.1.0.jar

java操作redis的jar包

2016-04-11

redis安装包-linux

redis的安装包 版本3.0.5 是linux版的

2016-04-11

memcached安装包以及MemCachedClient

memcached, libevent, MemCachedClient

2016-04-06

memcached-session-manager

memcached-session-manager 以及kryo的jar包 完整版 经过实际检验

2016-04-06

HttpClient的jar包 plus

之前的不给力

2016-03-31

HttpClient的jar包

commons-codec-1.6.jar commons-httpclient-3.1.jar

2016-03-31

测试对象大小的jar包

测试对象大小的jar包

2016-03-29

cglib动态代理

cglib和asm搭配的jar,方便你使用动态代理

2016-03-25

Cglib两个jar包

cglib动态代理的jar包

2016-03-25

序列化工具(Gson, Jackson, FastJson, ProtoBuf)

各种序列化工具类,包括Gson, Jackson, FastJson, ProtoBuf以及proto.exe,希望大家喜欢

2016-02-23

朱小厮的留言板

发表于 2020-01-02 最后回复 2020-01-02

linux 程序如何解析shell中的#

发表于 2015-10-15 最后回复 2015-10-21

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