自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

johnjoe's blog

物来顺应,未来不迎,当时不杂,既过不恋。--曾国藩

  • 博客(93)
  • 资源 (7)
  • 收藏
  • 关注

原创 《设计模式》18.策略模式(行为型)

定义一系列的算法,将每一个算法封装起来,使算法的行为和实现分离开,算法可以相互替换并不影响用户角色抽象策略(Strategy):定义一个策略接口具体策略(Concrete Strategy):抽象策略实现,不同的策略提供不同的实现方式上下文(Context):持有策略类的引用,对外提供 setStrategy 方法和执行策略接口的方法供用户调用抽象策略 Strategypublic i...

2019-05-15 16:28:23 199

原创 《设计模式》17.命令模式(行为型)

将请求封装成为命令对象,使“方法的请求者”与“方法的实现者”解耦。命令对象可以被存储、转发、排队、记录、处理、撤销等。又称为动作(Action)模式或事务(Transaction)模式。角色调用者/请求者(Invoker):请求的发送者,持有一个或多个命令对象,通过调用命令对象执行命令接口处理相关请求,它不直接访问接收者抽象命令类(Command):声明执行命令的接口(execute)具体...

2019-05-15 15:05:07 198

原创 《设计模式》16.访问者模式(行为型)

把数据结构和作用于数据结构上的操作之间的耦合解脱开,把处理从数据结构中分离出来。适用于有比较稳定的数据结构,又有比较易于变化的算法的场景。优点:增加新的操作很容易,增加新的操作就意味着增加一个新的访问者,访问者模式将相关行为集中到一个访问者对象中。缺点:增加新的数据结构比较困难,破坏了封装,违反了依赖倒置原则。角色抽象访问者(Visitor):为每个具体元素类声明一个(参数类型为具体元素)...

2019-05-13 17:10:23 276

原创 《设计模式》14.迭代器模式(行为型)

public abstract class Aggregate<E> { public abstract void set(int index, E element); public abstract void add(E element); public abstract void remove(); public abstract Iterator&...

2019-05-10 11:54:43 171

原创 《设计模式》12.组合模式(结构型)

又称“整体—部分”模式,组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构,使用户对单个对象和组合对象具有访问一致性。角色抽象构件(Component):抽象类,定义叶子构件和树枝构件的公共接口,可提供默认实现,叶子构件中提供空实现或抛出异常叶子构件(Leaf):没有子节点,实现抽象构件中的公共接口(空实现或抛出异常)树枝构件(Composite):包含子节点,子节点可以是叶子...

2019-05-09 16:17:00 173

原创 《设计模式》11.享元模式(结构型)

public abstract class Flyweight { protected String innerStatus; public Flyweight(String innerStatus) { this.innerStatus = innerStatus; } abstract void operation(UnsharedConcre...

2019-05-05 18:02:52 109

原创 《设计模式》10.外观模式(结构型)

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,隐藏系统的复杂性。角色外观(Facade):为多个子系统对外提供一个共同的接口子系统(Sub-System):实现系统的部分功能,客户可以通过外观角色访问它客户(Client):通过一个外观角色访问各个子系统的功能子系统 SubSystempublic class SubSystem...

2019-04-29 15:23:10 124

原创 《设计模式》9.装饰器模式(结构型)

在不改变现有对象类结构的前提下,添加新的功能,避免通过继承为类引入静态特征,防止随着扩展功能的增多,子类会很膨胀。角色抽象构件(Component):装饰类和被装饰类的公共接口具体构件(Concrete Component):被装饰类抽象装饰(Decorator):抽象装饰类,包含被装饰类的实例,可以通过其子类扩展被装饰类的功能具体装饰(Concrete Decorator):实现抽象装...

2019-04-29 13:37:54 98

原创 《设计模式》8.桥接模式(结构型)

将多维度变化的事物,通过抽象化和行为实现化将分离解耦,使得它们各自可以独立变化,针对行为进行桥接。角色抽象化(Abstraction):抽象类,包含对实现化对象的引用,作为桥接类扩展抽象化(Refined Abstraction):抽象化的子类,调用实现化中的行为方法实现化(Implementor):行为接口,供扩展抽象化角色调用具体实现化(Concrete Implementor):实...

2019-04-28 17:35:09 114

原创 《设计模式》7.适配器模式(结构型)

作用将已知类的接口通过适配器转换成用户所期待的接口,让那些接口不兼容的类可以一起工作。角色目标接口(Target):用户所期待的接口适配者(Adaptee):已知类,包含需要通过适配器转换的接口适配器(Adapter):用于将已知类接口转换为用户期待接口的类适配器通过继承实现public interface Adapter { Object get(String sql...

2019-04-26 18:08:14 131

原创 原型模式:思考《序列化与反序列化:Serializable & Externalizable》

序列化:把对象转换为字节序列的过程。反序列化:把字节序列恢复为对象的过程。主要用于:网络中数据传输,先将对象转换为字节数组,再将字节数组以二进制序列的方式传输对象的存储,通常以文件的形式存储,典型的应用场景为:Web 服务器中 Session 对象的序列化Serializable一个类要实现序列化和反序列化,必须实现 Serializable 接口Serializability ...

2019-04-19 15:55:21 368

原创 《设计模式》6.原型模式(创建型)

http://c.biancheng.net/view/1343.htmlhttps://www.cnblogs.com/shakinghead/p/7651502.html

2019-04-18 15:14:27 191

原创 《设计模式》5.建造者模式(创建型)

package com.designpatterns.builder;import lombok.Data;import lombok.ToString;import net.sf.cglib.beans.BeanCopier;import org.apache.commons.lang3.builder.ToStringBuilder;import org.apache.common...

2019-04-17 16:29:04 138

原创 《设计模式》15.责任链模式(行为型)

每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。应用场景:过滤器 Filter拦截器 InterceptorTomcat 编解码处理句柄接口,定义一个handleRequest方法public interface Handler { double handleRequest(double op1, doubl...

2019-04-09 14:38:56 124

原创 《设计模式》13.观察者模式(行为型)

对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。应用场景:广播监听 (Event / Listener / Status)推模式(Push)Observable主动向Observer推送消息,不管对方是否需要。import java.util.ArrayList;import java.util.List;public cla...

2019-04-09 11:08:26 133

原创 《设计模式》9.Cglib动态代理(二)(结构型)

Cglib Callback 6 种实现:NoOpMethodInterceptorInvocationHandlerFixedValueLazyLoaderDispatcherProxyRefDispatcherNoOp不做任何操作,直接调用目标方法public interface NoOp extends Callback { public static final ...

2019-04-04 16:57:10 258

原创 《设计模式》9.Cglib动态代理(一)(结构型)

Cglib 动态代理原理:动态生成以目标类作为基类的代理类,通过 MethodProxy 拦截并调用父类相应的方法。因此目标类不能被 final 修饰,否则报错。代理对象public class ProxyTarget { public void doSomething() { System.out.println("do something"); }}i...

2019-04-03 22:46:53 331

原创 《设计模式》10.Javassist动态代理(结构型)

public class ProxyTarget { public void doSomething() { System.out.println("do something..."); }}import javassist.util.proxy.MethodHandler;import javassist.util.proxy.ProxyFactory;...

2019-04-03 17:18:51 506

原创 Java反编译工具

procyonhttps://bitbucket.org/mstrobel/procyon下载链接:https://bitbucket.org/mstrobel/procyon/downloads/procyon-decompiler-0.5.34.jar[usage]java -jar procyon-decompiler-0.5.34.jar --help[example]jav...

2019-04-01 16:31:17 218

原创 Java枚举实现原理

编译枚举EnumImplMechanism.java,通过jad反编译获得EnumImplMechanism.jad文件D:\>javac EnumImplMechanism.javaD:\>jad EnumImplMechanism.classParsing EnumImplMechanism.class... Generating EnumImplMechanism.jad...

2019-03-29 23:26:14 256

原创 《设计模式》8.JDK动态代理(结构型)

JDK动态代理基于接口实现,代理类必须实现接口。public class ProxyTarget implements ITarget { public void doSomething() { System.out.println("do something"); }}通过实现 java.lang.reflect.InvocationHandler 接口创...

2019-03-29 23:25:07 132

原创 《设计模式》7.静态代理(结构型)

public class ProxyTarget { public void doSomething() { System.out.println("do something"); }}public class StaticProxy { private ProxyTarget target; public StaticProxy(ProxyT...

2019-03-29 23:24:35 68

原创 《设计模式》4.抽象工厂模式(创建型)

public enum VehicleColor { BLACK, WHITE, GRAY, RED;}public abstract class BaseVehicle implements Vehicle { private VehicleType type; private VehicleColor color; public B...

2019-03-29 23:24:05 159

原创 《设计模式》3.工厂模式(创建型)

相比于静态工厂模式,工厂模式进一步的解耦,为每个类型创建一个工厂类,所有的工厂类都实现同一个工厂接口,通过不同的工厂类创建不同的实例。public interface VehicleFactory { Vehicle create();}public class CarFactory implements VehicleFactory { @Override pub...

2019-03-29 23:23:31 85

原创 《设计模式》2.简单工厂模式(创建型)

静态工厂(简单工厂)此处以车辆(Vehicle)为例,有三种车:小轿车(Car)、公交车(Bus)、出租车(Taxi)。public interface Vehicle { /** * 介绍说明 */ void specification();}public class Car implements Vehicle { @Override ...

2019-03-29 23:22:51 121

原创 《设计模式》SOLID原则

S: 单一责任原则(Single Responsibility Principle,SRP)一个类有且仅有一个职责O:开放封闭原则(Open Closed Principle,OCP)对扩展开放,对修改闭合L:里式替换原则(Liskov Substitution Principle,LSP)任何基类可以出现的地方,子类一定可以出现I:接口分离原则(Interface Segregati...

2019-03-29 23:22:01 232

原创 《设计模式》1.单例模式(创建型)

饿汉式(饥饿加载)static在类加载时初始化一次,保证线程安全,final保证变量不可更改如果构造函数涉及I/O等耗时较长的操作会增加类加载时间过早加载也会浪费内存无法防止反射攻击public class Singleton { private static final Singleton instance = new Singleton(); private S...

2019-03-29 10:48:49 119

原创 Java类加载之MetaIndex

MetaIndex旨在通过为jar文件中的探针提供快速拒绝机制来减少启动时间(特别是冷启动,当文件尚未进入磁盘缓存时)。元索引的磁盘表示是一个扁平文本文件,每个jar条目指示(一般来说)jar中包含的包名称的前缀。关于元索引设计的一些注意事项:它包含多个jar文件的条目。这是故意的,以减少启动期间需要执行的磁盘访问次数。它仅用作快速拒绝机制,以防止应用程序和其他类强制打开引导和扩展类路径上...

2019-03-22 16:35:00 786

原创 《jdk8u源码分析》sun.misc.Launcher

sun.misc.Launcher.java@see: 8.LoadJavaVM调用JNI_CreateJavaVM时,加载属性 sun.boot.class.path 配置的包.private static String bootClassPath = System.getProperty("sun.boot.class.path"); private static cl...

2019-03-22 16:09:19 1358

转载 《jdk8u源码分析》JNI_CreateJavaVM & DestroyJavaVM 详解

摘录自《Java性能优化权威指南》第3章 JVM概览3.2 HotSpot VM运行时3.2.2 VM生命周期 HotSpot VM 启动时JNI_CreateJavaVM方法将执行以下一系列操作。 (1)确保只有一个线程调用这个方法并且确保只创建一个HotSpot VM实例。因为HotSpot VM创建的静态数据结构无法再次初始化,所以一旦初始化到达某个确定点后,进程空间里就只能...

2019-03-20 15:41:37 3531

原创 《jdk8u源码分析》16.2.ContinueInNewThread

src/share/bin/java.c::ContinueInNewThreadintContinueInNewThread(InvocationFunctions* ifn, jlong threadStackSize, int argc, char **argv, int mode, char *what, ...

2019-03-20 14:42:31 460

原创 《jdk8u源码分析》16.2.10.CreateApplicationArgs

src/solaris/bin/java_md_common.c::CreateApplicationArgsjobjectArrayCreateApplicationArgs(JNIEnv *env, char **strv, int argc){ return NewPlatformStringArray(env, strv, argc);}src/windows/bin/...

2019-03-20 14:42:20 176

原创 《jdk8u源码分析》16.2.9.PostJVMInit

src/solaris/bin/java_md_solinux.c::PostJVMInit (linux)voidPostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm){ // stubbed out for windows and *nixes.}src/windows/bin/java_md.c::PostJVMIn...

2019-03-20 14:42:12 207

原创 《jdk8u源码分析》16.2.8.GetApplicationClass

src/share/bin/java.c::GetApplicationClassstatic jclassGetApplicationClass(JNIEnv *env){ jmethodID mid; jobject result; jclass cls = GetLauncherHelperClass(env); NULL_CHECK0(cls); ...

2019-03-20 14:42:06 136

原创 《jdk8u源码分析》16.2.7.LoadMainClass

src/share/bin/java.c::LoadMainClass/* * Loads a class and verifies that the main class is present and it is ok to * call it for more details refer to the java implementation. */static jclassLoad...

2019-03-20 14:41:59 311

原创 《jdk8u源码分析》16.2.6.FreeKnownVMs

src/share/bin/java.c::FreeKnownVMsstatic voidFreeKnownVMs(){ int i; for (i = 0; i &lt; knownVMsCount; i++) { JLI_MemFree(knownVMs[i].name); knownVMs[i].name = NULL; } ...

2019-03-20 14:41:53 133

原创 《jdk8u源码分析》16.2.5.PrintUsage

src/share/bin/java.c::PrintUsage/* * Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java */static voidPrintUsage(JNIEnv* env, jboolean doXUsage){ jmethodID initHel...

2019-03-20 14:41:45 223

原创 《jdk8u源码分析》16.2.4.PrintJavaVersion

src/share/bin/java.c::PrintJavaVersion/* * Prints the version information from the java.version and other properties. */static voidPrintJavaVersion(JNIEnv *env, jboolean extraLF){ jclass ver...

2019-03-20 14:41:35 145

原创 《jdk8u源码分析》16.2.3.ShowSettings

src/share/bin/java.c::ShowSettings/* * Prints all the Java settings, see the java implementation for more details. */static voidShowSettings(JNIEnv *env, char *optString){ jmethodID showSett...

2019-03-20 14:41:27 358

原创 《jdk8u源码分析》16.2.2.InitializeJVM

src/share/bin/java.c::InitializeJVM/* * Initializes the Java Virtual Machine. Also frees options array when * finished. */static jbooleanInitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunc...

2019-03-20 14:41:16 206

mysql 5.7英文手册(html版)

mysql 5.7英文手册(html版)

2019-02-26

spring-mybatis-2.0.0源码

mybatis-spring-2.0.0源码 结合mybatis-3.5.0: org.apache.ibatis.session.SqlSessionFactory

2019-02-25

mybatis-3.5.0源码

mybatis-3.5.0源码 结合mybatis-spring-2.0.0: org.mybatis.spring.SqlSessionFactoryBean

2019-02-25

Spring-5.1.5源码

Spring framework 5.1.5源码 Main: spring-web/org.springframework.web.context.ContextLoaderListener

2019-02-25

apache tomcat 8.5.34 源码

apache tomcat 8.5.34 源码 Mark Directory as Sources Root: java/ Main: org.apache.catalina.startup.Bootstrap.main

2019-02-25

jdk-8u60源码

jdk 8u60 源码下载: 导入请阅读IMPORT_README Main: sun.misc.Launcher

2019-02-25

OutOfMemoryError Handbook

OutOfMemoryError的8种经典案例,Java heap space、GC overhead limit exceeded、Permgen space、Metaspace、Unable to create new native thread、Out of swap space?、Requested array size exceeds VM limit、Kill process or sacrifice child。

2019-02-25

空空如也

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

TA关注的人

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