![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
吴键
这个作者很懒,什么都没留下…
展开
-
JVM指令集
网上找的没有指令码这列 自己把它加上 更方便查阅 指令从0x00-0xc9 没有0xba常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_null null值入栈。0x02iconst_m1 -1(int)值入栈。...转载 2020-05-14 12:35:48 · 307 阅读 · 1 评论 -
CyclicBarrier原理分析
CyclicBarrier循环的栅栏。使用上,与CountDownLatch类似,也不太一样。这两个类都是用来解决线程同步问题的。同步问题说的通俗一点就是线程间通信。CountDownLatch,是主线程等待所有子线程结束任务CyclicBarrier,是多个子线程互相等待下面看看CyclicBarrier的源码实现public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw ne原创 2020-05-13 12:45:23 · 200 阅读 · 0 评论 -
LongAdder原理分析和性能测试
介绍LongAddr是JDK1.8才有的。其在高并发情况下,相比与AtomicLong的性能更高。本篇主要分析一下其实现原理。并且与AtomicLong做一个性能对比测试。AtomicLong利用CPU对CAS实现的原子化指令实现。public final long getAndAddLong(Object var1, long var2, long var4) { long var6; do { var6 = this.getLongVolatile(var1, va原创 2020-05-13 04:35:54 · 531 阅读 · 1 评论 -
浅谈模式 - 装饰者模式
对象包装对象,目的是功能增强。最常见的JAVA IO。Dubbo,Spring中都有一些wapper类。// 出自Dubbo源码 ProtocolFilterWrapper,版本2.6.4public class ProtocolFilterWrapper implements Protocol { private final Protocol protocol;// 被包装的p...原创 2020-05-08 03:30:16 · 154 阅读 · 0 评论 -
浅谈模式 - 责任链模式
过滤器链,拦截器链public interface IHandler { boolean doIt();}public class Handler1 implements IHandler { @Override public boolean doIt() { System.out.println("handler 1"); ret...原创 2020-05-08 03:29:31 · 151 阅读 · 0 评论 -
浅谈模式 - 享元模式
目的是共享内存中的某些对象资源比如棋类游戏,每个棋子可以作为共享资源public class Chess { private int id; private String text; private Color color; public Chess(int id, String text, Color color) { this.id = ...原创 2020-05-08 03:28:43 · 132 阅读 · 0 评论 -
浅谈模式 - 适配器模式
适配器,属于一种补偿模式,用于补偿原有设计的不足之处。adapter持有adaptee目标对象的委托,对其调用。或者继承关系。继承的方式public class Adaptee { public void method1() { System.out.println("目标方法"); }}public class Adapter extends Adap...原创 2020-05-08 03:28:00 · 156 阅读 · 0 评论 -
浅谈模式 - 模板方法
在抽象层方法中,定义一些列的行为骨架。并且设计好执行顺序(不变的流程)。具体的行为实现,由子类完成。几乎任何一个框架,任何系统在抽象层都要使用模板方法。因为框架的骨架由实体域,服务域,回话域三大块组成。服务域代表的就是流程,流程的控制基本都得用上模板方法。public interface ITemplate { void method1(); void method2();...原创 2020-05-08 03:26:52 · 127 阅读 · 0 评论 -
浅谈模式 - 观察者模式
两种角色. 1.观察者. 2.被观察者被观察这一般会持有一个观察者的列表。当某些相关事件发生之后,循环调用每个观察者触发其update行为。至于观察者的update行为怎么实现,被观察这不关心。这也体现了角色之前行为的解耦。他们的唯一耦合是观察者列表。public interface ISubject { void register(IObserver observer)...原创 2020-05-08 03:25:03 · 183 阅读 · 0 评论 -
浅谈模式 - 单例模式
说说我眼中的单例对于某个类,在进程级别只允许一个实例存在。当然还有多进程间共享单例(一般也不常用)或者线程级别的单例。实现方式:① 恶汉式② 懒汉式(双重检测,为防止指令冲排序,加上volatile)③ 静态内部类(内部类是要在用到时候才加载)④ 使用Enum来实现这个设计模式应该谁都懂,没必要多说。细节的资料网上太多。在大部分情况,我会选择恶汉式的实现方式,因为简单嘛,不用动脑子。...原创 2020-05-05 23:59:05 · 129 阅读 · 0 评论 -
浅谈模式 - 代理模式
真实动作的前面和后面分别做一些行为。真实动作使用委托的方式来调用。静态代理public interface Subject { void buyTicket();}public class SubjectImpl implements Subject { @Override public void buyTicket() { System.out...原创 2020-05-08 03:23:19 · 127 阅读 · 0 评论 -
浅谈模式 - 策略模式
在行为级别。把if else,switch替换掉的最好方式。策略类型的存放,有些人喜欢用static map,我喜欢用Enum,我感觉更优雅。Enum作为策略类型,实现类的beanId直接写到Enum中。今后的可扩展点就是新增或者删除实现类,并且对Enum作调整。这边的Enum就相当于是配置了。这边举一个简单的案例,比如要去上海旅游,有3中策略:跑去,开车,飞机。来看代码。public ...原创 2020-05-08 03:22:43 · 149 阅读 · 0 评论 -
浅谈模式 - 桥梁模式
桥梁模式,我觉得是比较难理解的一个模式,它的定义很简单:将抽象和实现解耦,让它们可以独立变化。深刻理解却不容易。网上有很多案例,但这个模式如果以Demo来聊,我觉得无法学到它的精髓。这边以Dubbo中Transporter层的设计来说说桥梁模式。这个模式比较隐晦,挺难理解的。什么是抽象,什么是实现?它这里面的抽象指的不是抽象类或者接口。实现也不是指的具体实现类。我这边来解释下Transport...原创 2020-05-07 23:35:25 · 200 阅读 · 0 评论 -
MyBatis中的设计模式
本篇聊一聊MyBatis所用到的一些设计模式。关于MyBatis一些实现原理,可以参考 MyBatis的Mapper机制1.工场模式关于工场模式的具体原理和实现可以参考 浅谈模式 - 工场模式SqlSessionFactorypublic interface SqlSessionFactory { SqlSession openSession(); SqlSession op...原创 2020-05-07 20:28:41 · 136 阅读 · 0 评论 -
MyBatis-Spring的Mapper机制
关于MyBatis本身的Mapper机制,请参考文档 MyBatis的Mapper机制首先,在没有使用MyBatis-Spring的情况下,我们这么去访问Mapperpublic Student findStudentById(int studentId) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); try {...原创 2020-05-07 20:08:02 · 453 阅读 · 0 评论 -
MyBatis的Mapper机制
Mapper机制从流程上分为3个步骤1.启动时做初始化动作2.运行时使用getMapper方法生成动态代理3.调用sql执行过程Mapper机制初始化系统启动首先会初始化Configuration,我们从Configuration的初始化位置开始看。请先找到XMLConfigBuilder类。 public Configuration parse() { if (parsed...原创 2020-05-07 15:42:30 · 277 阅读 · 0 评论 -
浅谈模式 - 建造者模式
当某个类的参数过多,构造细节过于复杂时,使用builder模式。build()方法可以做一些参数有效性的校验工作不太好的地方:Builder类会把主类中的参数做一层冗余。这个在内部看来不太好看。也让人觉得不舒服。在外面用的时候确实比较爽。说明这样的爽是有代价的。建造者模式与工场模式的区别:① 建造者模式,重点关注在构造某个类的细节上② 工场模式,重点关注在产品的种类上一家必胜客,可以生产...原创 2020-05-07 14:56:41 · 134 阅读 · 0 评论 -
浅谈模式 - 工场模式
简单工场(使用pulic static T create/getInstance/valueOf(){},把创建对象的细节封装起来)工场方法(针对单一维度)public interface ITypeFactory { IType create();}public interface IType {}抽象工场(针对多个维度,不常用)public interface IType...原创 2020-05-07 14:52:45 · 116 阅读 · 0 评论 -
dubbo有哪些不好看的代码
拿Dubbo源码为案例,来说说什么样的代码是优雅的。以下案例所用Dubbo源码版本2.6.4。我先声明下哈,Dubbo是个好框架,我只是在鸡蛋里挑骨头,不是在指责它不好。1.反向思维,尽快结束原则我认为是方法或者函数最有指导价值的一个思想,放在第一个说。要达到反向思维,尽快结束目的,我总结下3种方式① if判断反写,尽快return或者throw(最简单,最实用)② 减少不必要的els...原创 2020-05-06 22:35:14 · 139 阅读 · 0 评论 -
使用注解记录方法执行耗时
介绍各个系统都在追求性能,要做压力测试。压力测试目的是要找到热点,性能瓶颈,然后解决它或者优化它,这边暂不讨论怎么解决和优化性能问题。如果不做大规模的性能测试,是否有其他方式在开发,单元测试和集成测试的时候就发现一些性能问题呢?我个人比较喜欢在编码的各个阶段都去注意性能问题,并不希望在把问题留到大规模性能测试之后再发现。那样费时费力,在解决性能瓶颈和发现下一个性能瓶颈的过程中来来回回,压力测...原创 2020-05-03 19:31:15 · 1518 阅读 · 0 评论