自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Java虚拟机运行时数据区

虚拟机运行时数据区程序计数器虚拟机栈本地方法栈堆方法区直接内存小结程序计数器程序计数器也叫PC计数器,用于记录程序当前所运行到的指令行。在多线程中,CPU会对就绪状态的线程进行随机调度,此时就需要程序计数器来记录不同线程所执行到的位置。程序计数器是唯一不会发生OOM(OutOfMemory)的地方。虚拟机栈其实虚拟机栈和本地方法栈都是栈结构。在方法调用中就容易看出这个结构:public void one(){ System.out.println("one start");

2020-11-24 00:49:49 345 1

原创 反编译字节码文件不显示局部变量表

在调试反编译字节码文件的时候,发现没有生成对应的局部变量表。如下图所示:出现问题的原因:查了一些资料发现,是我们在进行编译的时候没有让生成的字节码显示调试信息,所以反编译的时候就不会显示局部变量表。通过javac -help,可以看出:我们在编译的过程中需要加入相应的参数(-g),才会显示调试信息如下图:对此,进行了重新编译最终,能成功显示局部变量表...

2020-11-20 23:13:03 333

原创 JUC中对线程的协同合作控制

线程的协同合作控制CountDownLatch使用代码演示小结Semaphore使用小结Condition使用代码CyclicBarrier使用:代码演示小结在使用多线程的时候,我们可以使用一些工具来达到对资源的访问量控制、线程之间的相互等待、线程之间的通信唤醒。控制线程的合作并发,主要有四大工具;CountDownLatch,Semaphore,Condition以及CyclicBarrier。下面对这四个工具进行逐一介绍。CountDownLatchCountDownLatch主要是用于线程之间

2020-11-19 15:40:26 291 1

原创 并发编程之ThreadLocal汇总小结

并发编程之ThreadLocal解决的问题引入ThreadLocal数据结构相关常用方法getMapset方法get方法initialValue方法remove方法空指针和内存泄漏应用小结在多线程开发过程中,我们往往不能忽略并发安全的问题。处理线程安全的问题有很多,例如让变量不可变,使用线程安全的集合,使用JUC包下的相关类(如Atomic包)等等,这里的话我们简单总结一下ThreadLocal这个常用的类。解决的问题首先来看一些很常见的场景,当我们开发一个Web网站。不同的用户进来能显示不同的信息,

2020-11-16 10:23:47 164

原创 一文小结设计模式之命令模式(Java实现)

设计模式之命令模式简介命令模式模板引入命令模式注意事项UML类图小结简介日常的需求中,我们有时候需要调用者与被调用者进行分离。即将动作的执行者与动作的发布者进行解耦分离。在实际业务过程中,发布者就不需要过多的关心谁是执行者,只需要发布命令,具体的执行者会去执行。但是,为了避免命令的错误发布,在抽象出来的命令接口中要提供一个撤销操作。对于撤销操作,即返回上一步命令,可以结合备忘录模式使用;或者命令只有对立的状态,可以调用其相反状态(例如电灯开关,执行了开的操作想要撤销的话就直接执行关即可。因为它的状态只

2020-11-12 10:50:28 116 2

原创 一文小结设计模式之观察者模式(Java实现)

设计模式之观察者模式简介传统方式引入观察者JDK的支持UML类图小结简介首先,我们来看一个需求。当某一件事情发生的时候会去通知另外一件事情的执行。例如,小孩子哭肯定会引起爸爸妈妈的注意,接收到消息会引起QQ或者微信的闪动…等等。总之呢,对于一个你想要监听的方法,你可以使用观察者模式进行设计。观察者模式在23种设计模式中也是比较常用的,他能做得到的很多;包括事件监听、发布订阅、消息通知,甚至可以帮我们一理解面向切面APO。传统方式我们先来看传统的方法,直接暴力解决,当被观察的方法触发时,就会调用对应

2020-11-11 15:48:41 146

原创 一文小结设计模式之代理模式(Java实现)

设计模式之代理模式静态代理代码UML类图动态代理jdk代理代码参数说明UML类图代理类源码注意事项小结cglib代理代码注意事项Instrument代理对于类中的某个方法的增强,在之前文章也有介绍。可以通过继承、装饰者模式、组合/聚合、代理模式等进行增强,本文主要介绍通过代理的方式对方法的增强操作。静态代理先来看静态代理;静态代理,故名思议就是你传给我什么类,我就帮你加强什么类,并且代理类是通过自己编写class类来完成的。代码接口类:public interface IProxyMethod

2020-11-10 19:33:56 130

原创 一文小结设计模式之工厂模式(Java实现三种)

设计模式之工厂模式简单工厂引入简单工厂UML扩展小结工厂方法引入工厂方法UML小结抽象工厂引入抽象工厂UML小结工厂方法是常用的创建型模式之一,其主要核心是将对象交由工厂去实例化,我们只需要通过工厂去获得该我们想要的实例即可。本文简单描述三种工厂模式,但是简单工厂模式并不属于23种设计模式之一,其作为一个铺垫可以更好的理解工厂方法和抽象工厂两种设计模式。简单工厂我们先来看最原始的工厂模式,也就是简单工厂。其通过传入的字符参数不同来对应生产不同的实例,而工厂通过大量的if...else来对我们传入的字符

2020-11-10 11:09:42 2324

原创 一文小结设计模式之装饰者模式(Java实现)

设计模式之装饰者模式简介引入装饰者模式注意事项UML类图扩展小结简介我们从扩展类的功能有哪些方法来分析。继承、代理都可以对原有的类进行增强的操作。但是,如果我们需要在特定的场合加入特定的增强,那就需要装饰者模式来实现功能。就是可以做到一个可根据需求及特定的场合进行穿配拆卸的增强操作。装饰者模式相对比较简单,只需定义好最终被包装的基类,以及需求对应的增强类。引入装饰者模式我们直接引入装饰者模式进行分析:接口类(定义一个学习的人抽象接口):public interface Cake { v

2020-11-09 16:47:11 152

原创 UML类图的简单小结

UML类图的简单小结UML中的简介传统UML类图的标识UML中的关系依赖泛化(继承)实现关联组合聚合IDEA中的类图小结UML中的简介UML中主要是用于描述类与类之间的关系。在从整体浏览项目的时候,往往会通过相应的流程图来了解该项目的相关业务流程;而具体的对应类我们可以通过UML类图去看到每个类中对应的关系。例如下图中的是状态模式相关的UML类图:传统UML类图的标识简单了解了一下UML和看过对应类图后,我们来简单看看相应的标识(通用表示)。整体概览第一矩形:类名第二矩形:属性名第

2020-11-09 15:02:11 311

原创 一文小结设计模式之状态模式(Java实现)

设计模式之状态模式简介传统方法引入状态模式注意事项UML类图小结简介当我们需用要程序去描述某个物体的某些事情的时候,并且这些事情会随着这个物体的状态有不同的处理机制。例如,电梯在运行的时候不可以开门,在停止的时候可以开门;视频在停止的时候只能开启,在播放的时候可以暂停、停止、快进。从这两个例子可以看出,面对物体的当前状态不同,那么他执行的方法也会产生不同的变化。传统方法我们先来从普通的角度来编写代码;我们可以根据对象当前状态进行判断从而完成我们希望他去执行的方法:public class Rad

2020-11-05 18:04:33 151

原创 一文小结设计模式之责任链模式(Java实现)

设计模式之责任链模式简介传统处理引入责任链注意事项小结简介责任链模式可以很好的帮我们处理对一个请求或者数据的阶梯级链式处理。例如,对于一个OA审批过程,需要从主管->部门经理->分公司经理->总经理…层层递进;或是对于某个叠加数据的层层处理,如一个Json串{A:x,B:y,C:z},如果A不存在就不往下判断了,对某个数据进行递进式校验(先看空不空,看长度满不满足,看字符对不对,看格式有无问题…)等等。总之,如果需要对某项请求或者数据进行阶梯级处理的话,推荐使用责任链模式。传统处理

2020-11-05 15:32:25 222

原创 一文小结设计模式之模板方法模式(Java实现)

模板方法模式介绍代码简单分析应用场景小结介绍模板方法模式属于行为型模式中一种。因为其规定了一套公共的流程,其他的都要按照这套模板来进行相关的操作。在我们生活中都存在许多模板方法;例如,填写的表格、从小到大写的试卷、把冰箱装进大象…等等一系列,已经将完成某件事的距离模板流程告诉给了你,你只需要根据不同实际的情况来覆盖某些方法即可。代码我们来看一下模板的代码:// 这里演示一个考试的流程// 规定好的模板方法public abstract class F { // 规定好了考试流程

2020-11-05 00:30:33 114

原创 二叉树的暴力递归解决树形问题

二叉树的递归套路简介递归套路思想注意事项相关题目小结简介二叉树的暴力递归方法其实就是对树形动态规划的一个暴力解决方法。为什么说他暴力呢?主要是他的解题思路是通过不断的递归调用,分别把左树和右树收集到的信息进行整合,然后进行加工在返回给调用方。对于许多笔试,甚至面试碰到树形DP问题都能很好的解决,虽然复杂度(时间和空间)可能相对较高,后期可以自己换另外的方法来解决(例如使用迭代,或者自己压栈来代替递归操作)。递归套路思想首先我们先来看代码,这段代码主要是返回该树的叶子节点的个数。public int

2020-11-04 20:17:23 302

空空如也

空空如也

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

TA关注的人

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