自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 策略模式学习

应用场景:既然时策略,那就是当...情况下,就要...做。代码里最常见就是if....else if...,这种情况,就可以使用策略模式先来看最原始代码。如下面代码所示,大部分人的优化策略,就是把每个if里面的逻辑抽取出来。public class StrategyDemo { public void deal(int type){ if(type == 1 ){ //此处大概100多行代码 System.out.

2022-01-18 23:23:30 310

原创 命令模式学习

应用场景:不直接去执行方法,而且时通过其他类去操作。细品一下有一丝简单工厂设计模式的味道public class CommonDemo { public interface Animal{ public void play(); } static class Cat implements Animal{ @Override public void play() { System.out.prin..

2022-01-18 22:39:57 161

原创 代理的模式

大白话:自己不想做,想让别人帮忙做自己的事情,甚至做的更好静态代理代理者和被代理者都需要实现接口动态代理只有被代理对象实现接口1.既然需要他人帮忙,那就要找到代理对象2.其次就是要对方做事情,调用方法解决这两个问题,分别需要Proxy和InvocationHandlerpublic class MyProxy { interface IBuild{ void create(); } static clas...

2022-01-18 21:56:13 300

原创 观察者模式

大白话:如果想知道一个对象的变化状态,就可以安排一个观察者对它进行监控 实现观察者模式,需要两个关键类Observable:表示需要被观察的对象Observer:观察者,真正去监控的对象public class ObserverDemo { /** * 待观察的类 */ static class Product extends Observable { private Double price ; pub...

2022-01-18 21:54:19 1251

原创 中介者模式

比如A类中的方法调用了B和C类的方法,而B类的方法又调用了A类和C类方法,这种情况就可以考虑中介者模式public class MediumPattern { public static class ModeleA{ public void play(){ ModeleB modeleB = new ModeleB(); modeleB.deal("模块A"); ModeleC modeleC = n.

2022-01-18 00:12:50 210

原创 创建复杂对象-构造模式

使用场景:生成订单实体的时候,需要对价格,地址,商品等属性赋值改造前 public static void main(String[] args) { Order order = new Order() ; System.out.println("处理收获地址业务逻辑"); order.setAccount("张三"); System.out.println("根据优惠券计算订单价格"); }改造后1. .

2022-01-16 23:23:11 170

原创 提取通用代码-模板模式

项目中经常遇到重复的代码在多个地方使用,这个时候就可以使用此设计模式一般优化比如3个类里面的方法都有一段相同的代码 public class AAAImpl{ public void deal(){ System.out.println("公共方法"); System.out.println("AAA 的娱乐活动"); } } public class BBBImpl{ ..

2022-01-16 14:17:01 262

原创 JVM学习初级篇(六) 三色标记

上一篇文章讲到了垃圾回收的三种模式,其中最重要的是如何标记需要回收的垃圾对象,像Serial、Parallel这类的回收器,无论是单线程标记和多线程标记,其本质采用的是暂停用户线程进行全面标记的算法,好处就是简单,标记的很干净,缺点就是标记时间相对很长,导致STW的时间很长。 那么后来就有了并发标记,适用于CMS和G1,可以在不暂停用户线程的情况下对其进行标记,那么实现这种并发标记的算法就是三色标记法,最大的特点就是可以异步执行,从而可以用极少的中断时间或者不中断来进行整个...

2021-07-11 17:43:27 86

原创 JVM学习初级篇(二)常量池与方法区

方法区是一个抽象定义,可以想象成接口;元空间或永久代是具体的实现技术Java8版本以后,是用元空间来实现的方法区;在Java8之前的版本,则是。用永久代实现的方法区。Class类常量池 class类常量池中包含的是字面量和符号引用,如下图运行时常量池相较于Class文件常量池,运行时常量池更具动态性,和class文件的常量池是一一对应的,它就是class文件的constant_pool来构建的。运行时常量池中有两种类型,分别是符号引用和静态常量,其中静态常...

2021-07-01 00:45:22 162 2

原创 JVM学习初级篇(一)类的加载机制

当我们编写好了java代码后,源文件是如何加载使用的呢。这里就需要了解到类的加载机制。

2021-06-12 00:09:11 137 1

原创 JVM故障解决工具

常用JDK工具 jps(JVM Process Status Tool) 显示正在运行的虚拟机进程 ,一般工具都可以使用 -help 参数 查看使用规则>jps -helpusage: jps [-help] jps [-q] [-mlvV] [<hostid>]Definitions: <hostid>: <hostname>[:<port>]-q : 显示进程ID[...

2021-04-14 22:55:44 148

原创 Mysql慢查询

系统变量参数 含义 slow_query_log 开启慢查询的开关,ON 为开启,OFF为关闭 slow_query_log_file 指定慢查询路径和名字 log_out 日志输出位置,默认FILE,保存在文件中,支持多格式,设置为TABLE,则日志记录在mysql_show_log表中 long_query_time 超过指定的查询时间记录到慢查询日志,默认10秒 查看是否启用sh...

2021-03-22 10:10:18 73

原创 2021-01-12

public class Test { public static void main(String[] args) { getBundle(); } /*** * ResourceBundle 1. 只能用去读取 properties的文件 * 2. 只能用于读取,不能写入 * 3. 由于底层的实现方式是通过类加载器,所以文件只能存放在类路径 */ private static void getBundle(..

2021-01-12 22:11:01 59

原创 适配器模式

装饰器模式(Decorator Pattern):允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们可以理解为是类与类之间的关系,对原有类的对象功能的增强。interface House { String getSize();}class NormalHouse implements House { @O

2020-06-18 21:33:54 134

原创 git最全简单入门

config配置操作和设置别名#查看配置>git config -l#config配置级别有本地仓库(--local) 全局(--global) 系统(--system)>git config --local -l#下面都已本地仓库配置举例config新增配置>git config --local --add user.age 12#删除配置>git config --local --unset user.age#配置别名(例如简化git st...

2020-05-26 16:11:50 418

原创 大话线程池

为啥要线程池 本文是针对ThreadPoolExecutor线程池讲解 当我们在使用线程的时候,会包括创建,使用,销毁的开销,这也会降低计算机性能。在不使用线程池之前有什么问题?过于频繁的创建/销毁线程,这样会带来系统的开销,会很大程度上影响处理效率 还需要等待线程的创建才可以进行调度使用 缺乏对创建的线程进行管理,如果线程的并发数量过多,可能会存在抢占系统资源从而导致阻塞。 拓展性不强 针对上面几个问题,大家就开始思考,能否提前创建一定数量...

2020-05-23 23:13:10 122

原创 Dubbo监控平台安装使用

本文中安装环境:jdk8,win10,apache-maven-3.3.9,git1.执行git clone https://github.com/apache/dubbo-admin.git 命令把项目克隆到本地,或者直接下载https://github.com/apache/dubbo-admin2.根据路径dubbo-admin-server/src/main/resources/application.properties 修改文件## Licensed to the ...

2020-05-17 15:28:08 183

原创 Dubbo--基于zookeeper注册中心(二)

目录Jar包依赖服务提供者配置文件修改客户端修改配置文件Dubbo文档关于zk使用的说明可以zookeeper的安装配置以下配置文件的修改都是基于https://github.com/godwar/dubbo-simple项目,由于要使用zookeeper注册中心,所以还需要安装好zk,安装zookeeper可以参考Jar包依赖这里使用的是使用 curator 客户端,以来下载<dependency> <groupId>org.apac...

2020-05-17 00:26:09 160

原创 Centos7 安装zookeeper

本文讲不需要集群的zk安装和配置,以下操作都是基于虚拟机centos7 上操作安装,下载地址https://archive.apache.org/dist/zookeeper/ 或者官网https://zookeeper.apache.org/releases.html这里安装的版本是zookeeper-3.6.1,需要注意zookeeper在3.5.5之后在下载的时候应该下载带bin的文件(apache-zookeeper-3.6.1-bin.tar.gz ),而之前的普通的tar.gz的...

2020-05-17 00:24:56 372

原创 Dubbo---入门(一)

这里先给出Dubbo的中文网站http://dubbo.apache.org/zh-cn/index.html,大家可以根据文档对Dubbo有个初步的认识和了解。大家可以根据Dubbo网站说明创建一个例子来学习,当然我这里也一个简单Demo,下载地址:https://github.com/godwar/dubbo-simple。这个初始化的demo是没有配置注册中心的。当第一个Dubbo成功运行后,大家可能会存在一个问题,Dubbo到底是如何启动使用的?那我们就来看看代码public clas

2020-05-16 22:41:17 107

原创 RabbitMQ工作模型(一)

1.什么是RabbitMQ MQ是Message Queue,也就是消息队列,是一个消息中间件,使用Erlang语言写的。2.工作模型(1)Broker:中介。提供一种传输服务,维护一条从生产者到消费者的传输线路,保证消息数据能按照指定的方式传输。粗略的可以将图中的RabbitMQ Server当作Broker。(2)Exchange:消息交换机。指定消息按照什...

2020-05-07 16:39:48 324

原创 JVM学习初级篇(三)Java堆

堆的组成区域Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收...

2020-04-16 12:04:11 145

原创 Spring事务管理

Spring支持两种类型的事务管理:编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。Spring事务的实现方式和实现原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是...

2020-04-14 15:09:25 80

原创 springmvc工作流程

快速记忆:springmvc的核心是DispatcherServlet,与它进行工作关联的分别是映射器,适配器,视图解析器

2020-04-12 15:18:11 73

原创 内部类的四种形式

在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性定义方式一致。根据内部类的位置可以分为:成员内部类public class Demo { private int i = 1; class Inner{ public void show(){ ...

2020-04-03 11:49:25 461

原创 通过字节码分析try finally(五)

public class Test { public static void main(String[] args) { int i = show(); System.out.println(i); } public static int show(){ int i = 10 ; try{ ...

2020-04-03 00:46:33 93

原创 JVM学习初级篇(四) JVM的垃圾回收

这里先引用一篇文章https://www.cnblogs.com/wjh123/p/11142176.html强引用:键字new创建的对象所关联的引用就是强引用。只要还存在引用关系,gc就不会随意回收对象。如下图 public class StrongReference { public static void main(String[] a...

2020-04-01 16:12:15 155

原创 常量池和局部变量表(四)

这里都是针对jdk1.8的hotspot虚拟机讲解public class Demo1_1{ public static void main(String[] args) { String s1 = "a"; String s2 = "b"; String s3 = "ab"; String s4 = s1+s2; ...

2020-03-29 19:13:19 911

原创 认识二进制字节码文件内容(三)

二进制字节码主要包含3个重要的信息:类基本信息常量池类的方法定义(包含了虚拟机指令)首先我们可以先编写一个简单的java文件public class JvmDemo { public static void main(String[] args) { System.out.println("hello world"); }}打开...

2020-03-29 13:58:23 316

原创 栈和堆内存溢出诊断(二)

栈内存溢出:问题定位1.cpu占用过多定位:用top定位哪个进程对cpu占用过高 ps H -eo pid,tid,%cpu | grep 进程id(定位是哪个线程引起的cpu)占用过高 jstack进程id 可以根据线程id找到有问题的线程,进一步定位到问题代码的源码行号堆内存诊断:定位问题的方法可以参考如下方式:public class Demo { ...

2020-03-28 23:33:14 191

原创 走进JVM(一)

提起JVM,大家应该脑海中浮现出下面这个结构图Jvm结构中元空间和堆是线程共享,其他是线程私有.我们编写的java源代码,先编译成了二进制字节码,在通过类加载器放到了Jvm中运行。元空间:类的一些信息都放在了元空间,比如字段,静态属性,方法,常量等。堆:类创建的实例对象都放到堆,例如通过new出来的对象,jdk8后 原来的永久区内的字符串常量也移到了堆。堆里的对象调用方...

2020-03-27 17:42:32 115

原创 spring使用junit单元测试

之前我们的测试类里面都会有一个main方法,然后在通过ApplicationContext来获取bean对象。那我们就要想办法替换前面说的两个点。/** * * Spring整合junit的配置 * 1、pom.xml导入spring整合junit的jar(坐标) * 2、使用Junit提供的一个注解把原有的main方法替换了,替换成spring提供的...

2020-03-27 11:57:08 112

原创 spring中注解与xml中配置关系(五)

@Component将 java 类标记为 bean,可以用在任意普通类(可实例化对象的类),表示可以让容器来进行管理它是任何 Spring 管理组件的通用构造型。@Controller一个类标记为 Spring Web MVC 控制器。@Service此注解是组件注解的特化,细化说明当前的类是业务逻辑层@Repository用于标注此类是dao持久层@Autowr...

2020-03-26 22:51:05 305

原创 spring中装配bean的方式(四)

在Spring框架xml配置中共有6种自动装配:byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。byType:通过参数的数据类型进行自动装配。constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。autodetect(3.0后废弃了):自动探测,如果有构造方...

2020-03-25 10:53:21 124

原创 spring中bean的生命周期(三)

bean的生命周期主要是以下几个阶段实例化 Instantiation 属性赋值 Populate 初始化 Initialization 使用bean 销毁 Destruction

2020-03-24 18:04:09 134

原创 spring中bean的作用范围(二)

1.BeanFactory: 延迟加载的思想来创建bean对象ad 2,ApplicationContext:只要解析完配置文件,就立马创建bean,容易占用内存.

2020-03-12 23:17:19 160

原创 spring源码构建(一)

源码下载直接进入官网,通过官网找源码地址选择到对应的版本,下载到指定目录后打开目录可以一个build.gradle文件,里面有当前代码需要构建的gradle版本打开https://gradle.org/releases/官网 下载对应的版本接着配置环境变量 GRADLE_HOME对应的是文件路径,如 D:\tools\gradle-4.3.1\bin...

2020-03-11 13:35:45 200

原创 类初始化和实例初始化过程

目录 ...

2020-03-10 17:21:30 94

原创 reentrantlock的使用

reentrantlock可以用来代替synchronized使用syn锁定的话如果遇到异常,jvm会自动释放锁,但是lock必须手动释放锁,因此经常在finally中进行锁的释放class ReentrantLockDemo{ synchronized void m1(){ for (int i = 0; i < 10; i++) { ...

2020-03-09 22:18:31 138

原创 synchronized理解

先看一个例子public class Layout { public static void main(String[] args) { Object o = new Object(); System.out.println( ClassLayout.parseInstance(o).toPrintable()); synchr...

2020-03-09 20:18:22 98

SVN客户端中文版

Windows XP中 如果你在Windows XP SP3安装TortoiseSVN的1.8,您必须安装最新的MSI安装程序.Windows Installer 4.5 Redistributable 先安装TortoiseSVN然后再安装语言包,然后在设置里设置为中文就可以了。

2015-10-16

小孙JAVA反编译专家

快速逆向编译需求的文件,自己开发软件时的参考, 简单易操作

2009-11-10

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

TA关注的人

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