自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fireworks

相信日积月累的力量

  • 博客(131)
  • 资源 (8)
  • 收藏
  • 关注

原创 maven 漏洞扫描

基于Maven的漏洞扫描

2024-02-21 16:21:36 535 1

原创 性能优化的 50 个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例简单来说,单例主要适用于以下三个方面:控制资源的使用,通过线程同步来控制资源的并发访问;控制实例的产生,以达到节约资源的目的;控制数据共享,在不建...

2019-10-24 18:53:17 328

原创 分布式篇:分布式事物

分布式系统核心的问题,服务框架、注册中心、网关系统、部署架构、超时重试、幂等防重,生产相关的问题分布式事务TCC可靠消息最终一致性类似TCC事务的,开源框架,ByteTCC,Himly,阿里开源的分布式事务框架,类似TCC事务,seata来做,这个框架是经历过阿里生产环境大量的考验的一个框架支持dubbo、spring cloud两种服务框架,都是可以的可靠消息最终一致性方案,Act...

2019-08-16 10:25:07 315

原创 分布式篇:防幂等性设计

业内常用方案(1)数据库唯一索引(2)基于Redis实现一套幂等性防重框架对于插入类的操作,一般都是建议大家要在数据库表中设计一些唯一索引对于扣减库存、累加积分,更新,很难通过数据库唯一索引来保证基于Redis实现一套接口的防重框架你得做一个类似spring mvc里的拦截器这样的东西,在这个拦截器里,他会拦截所有的请求,对所有的请求都会提取请求对应的参数,GET请求、POST请求、...

2019-08-15 17:55:56 454

原创 分布式篇:生产环境的服务是怎么配置超时和重试参数的

分布式系统,拆分为很多个服务之后,他们互相之间要进行调用,平时服务内要优化的一些参数其实不多,网关 ->(卡住) 订单服务 ->(卡住) wms服务网关收到的一个http响应,可能就是一个500,internal errorSpring Cloud生产优化,系统第一次启动的时候,人家调用你经常会出现timeout每个服务第一次被请求的时候,他会去初始化一个Ribbon的组件,初...

2019-08-15 17:20:11 516

原创 JVM - 12:年轻代ParNew和老年代CMS垃圾回收器

年轻代垃圾回收器ParNew新生代的辣鸡回收器ParNew,主打的就是多线程回收另外一种Serial垃圾回收器,主打的是单线程回收回收算法一样当ParNew垃圾回收器,在合适的时机进行垃圾回收的时候会暂停当前的工作线程让自己的垃圾线程去回收垃圾如何为系统指定ParNew垃圾回收器使用“-XX:+UseParNewGC”只要加入这个选项,JVM启动之后对新生代进行垃圾回收的,就是P...

2019-08-09 16:37:05 2640 1

原创 JVM - 11:JVM最让人无奈的痛点 Stop the World

新生代垃圾回收场景我们新生代有三块区域 Eden 、s0、s1此时系统不停运行就会把Eden占满这个时候就会触发Minor GC触发垃圾回收会有专门的线程来处理的而对不同的区域会有不同的垃圾回收器相当于垃圾回收线程配合垃圾回收器使用垃圾回收算法对指定的区域进行回收针对新生代的垃圾回收器Serial单线程,会直接暂停系统工作线程。通常不用ParNew支持多个线程回收GC的时...

2019-08-09 15:25:44 385

原创 JVM - 10:JVM中有哪些垃圾回收算法,每个算法的场景和优劣

回顾上一篇说了垃圾回收时机,强引用、软引用、弱引用、虚引用新生代的垃圾回收算法新生代使用的是复制算法新生代分为3块区域默认比例为8:1:1eden:s1:s2平时可以使用的,就是Eden区和其中一块Survivor区但是刚开始创建的对象分配在 eden 区的如果eden区垃圾对象越来越多此时会触发垃圾回收机制具体做法复制算法会先标记存活的对象然后把存活的对象复制到另外一...

2019-08-08 17:38:05 515 1

原创 JVM - 9:什么情况下JVM内存中的一个对象会被垃圾回收

什么时候会触发垃圾回收在之前说到,当对象没人引用导致新生代的内存占用越来越多,都快满了这个时候,就会触发垃圾回收被那些变量的引用的不能被回收只要你的对象被方法的局部变量,类的静态变量给引用了就不会回收他们JVM使用了一种可达性分析算法用来分析对象被谁引用了在JVM规范中,局部变量就是一个GC RootsJava中不同的引用类型强引用只要是强引用,引用的类型,垃圾回收器,是不会...

2019-08-08 15:54:09 976

原创 分布式篇:灰度发布

说明所谓的灰度发布假如现在有个服务A服务A部署在两台机器上现在对服务A更改了某些功能但是部署的时候,不会一次把服务A都部署在两台机器上只会把新代码部署在其中某一台两台机器,一台是新代码,一台是老代码灰度发布就是说,按某些权重,请求分发给 不同的机器比如 新代码 接收 10%的请求,其余 90%给 老代码验证成功之后,再把另外一台弄成新代码二次开发可以针对灰度发布进行二次开发...

2019-08-07 18:12:16 903

原创 分布式篇:网关

网关的核心功能动态路由灰度发布授权认证性能监控系统日志数据缓存限流熔断目前业内的技术方案Zuul基于Java开发,核心网关功能都比较简单,但是比如灰度发布、限流、动态路由之类的,很多都要自己做二次开发高并发能力不强,部署到一些机器上去,还要基于Tomcat来部署,Spring Boot用Tomcat把网关系统跑起来;Java语言开发,可以直接把控源码,可以做二次开发封装各种需...

2019-08-05 11:23:09 5274

原创 JVM - 8:如何根据自己的系统合理的设置JVM参数

支付系统案例如果有一个电商系统支付系统所处的位置用户 >>> 下单用户 >>> 支付支付 >>> 调用第三方支付通道只要网购过,这个流程都很清楚就是对一个商品加入购物车然后下个订单接着对订单结算大致如此核心流程如下...

2019-08-04 00:30:15 1038

原创 JVM - 7:系统部署时如何设置JVM内存大小

上一篇说到了我们创建的对象都是优先分配在新生代的当一个方法执行完毕之后,没人引用的对象,就成为了垃圾对于 通过 static 静态变量引用的 对象会长期存活当新生代的空间满了之后,会触发垃圾回收机制对于躲过垃圾回收的对象,会对它的年龄 +1当年龄达到 15 岁之后会进入老年代老年代也会进行垃圾回收JVM核心参数-Xms:Java堆内存的大小-Xmx:Java堆内存的最大大小...

2019-08-02 16:46:06 583

原创 JVM - 6:对象在JVM中如何分配,如何扭转的

在之前的文章中提到了JVM是如何运行起来的JVM中的内存区域以及堆内存的分代模型通过之前的文章,知道了大部分的对象是优先分配在堆内存的但是大部分正常的对象都是优先分配在新生代的最典型的就是通过静态变量引用的对象,虽然它是长期存活的对象但是哪怕是这种对象也是优先分配在新生代的什么情况下会触发新生代垃圾回收垃圾回收有它的触发条件必备的条件是没有人引用这些对象了如果,某个时刻新生代...

2019-08-02 10:38:27 165

原创 分布式篇:对比一下各种服务注册中心

目前业内的微服务解决方案通常分为两块1、以 Dubbo 为主的微服务解决方案2、以 Spring Cloud 为主的微服务解决方案这两块微服务解决方案都采用了不同的 注册中心以 Dubbo 作为服务框架的一般会选择 Zookeeper 为注册中心以ZK作为服务注册和发现的集群模式这种多台机器的情况下 ZK 会有2个角色 Leader / Follower只有 Leader 是可以写...

2019-08-01 16:01:18 4115 2

原创 设计模式之:访问者模式

业务场景(1)组合模式,我们现在想象一下,我们之前做的是说递归删除部门自己本身(2)但是我们现在要对他改造一下,将组合模式和访问者模式结合起来,就是说,我们可以让那颗树执行我们想要他做的任何事情访问者模式,是对目标对象,动态的执行某个功能,而不对目标对象有任何的改动import java.util.ArrayList;import java.util.List;public clas...

2019-07-31 18:37:16 204

原创 设计模式之:桥接模式

所谓的桥接,就是搭建一个桥,让两个组件之间互相调用,可以通过桥来执行因为有了桥,两个代码组件无论怎么修改,都互相没有影响这个桥,实际上就是一个接口所以说,java中,无处不桥接,只要你是面向接口编程,基本就是在桥接public class BridgePatternDemo { public static void main(String[] args) { Im...

2019-07-31 18:33:26 196

原创 设计模式之:责任链模式

业务场景(1)现在在某一个地方的业务流程,要执行功能1、功能2、功能3(2)现在在另外一个地方的业务流程,是要先执行功能3,然后执行功能1和功能2责任链模式,那也是经常会使用到的,对于那种复杂的业务流程一种方案是采取面向对象的设计,将不同的业务逻辑封装到不同的类里去,然后通通过方法中的调用来控制业务流向另外一种就是采用责任链模式,将业务逻辑封装到不同的handler里面去,形成链条式调用...

2019-07-31 18:26:22 187

原创 设计模式之:装饰器模式

业务场景(1)假设我们手头已经有了一个类,可以执行一些功能(2)但是我们还是希望对这个类的功能做一些增强,此时怎么办呢?基于已有的类的功能基础之上,再增强一些功能,可以做装饰装饰器模式有一些非常经典的实现(1)比如java的io体系,可以一层包装一层,一层包装一层,外面的一层,都会对立面的一层进行功能的增强。(2)还有就是spring的aop,aop这块可以基于动态代理的理念,装饰我们的...

2019-07-31 18:17:17 131

原创 设计模式之:享元模式

业务场景(1)我们现在要缓存一些数据,比如说权限,根据权限的ID作为key,权限数据自己本身是value(2)但是我们不需要使用太复杂的ehcache框架之类的去使用,特别特别的简单的(3)我们就想基于自己的Map去实现一套东西享元模式,从最基本的角度来说,其实就是维护固定数量的对象实例,不同的对象实例,只有一个,然后保存在内部的一个map中。可以算是跟单例模式的一个扩展和结合吧。imp...

2019-07-31 18:13:14 173

原创 设计模式之:备忘录模式

业务场景(1)某个类,计算出来一份中间数据(2)这个类,之后需要基于这份中间数据再执行另外两次操作,每次操作都要基于这份中间数据去执行(3)第一次基于中间数据操作过后,会对中间数据做出修改(4)要求是第二次再执行操作的时候,需要基于未修改之前的中间数据来执行备忘录模式看起来有点复杂,其实不复杂,说白了,就是一个类一开始生产了一些数据,这些数据可能会被改变,但是需要将这些中间数据保存起来,...

2019-07-31 18:03:08 114

原创 设计模式之:状态模式

业务场景(1)销售出库单,状态需要从新建、待审批、已审批、已完成,四个状态之间流转,流转到每个状态的时候,都需要执行那个状态对应的一个逻辑其实状态模式,就是维护多种不同的状态,每种状态下可以去执行一些特殊的逻辑。然后由一个Context类负责根据请求参数调用,来维护这些状态之间的切换,形成一个状态机的概念。状态模式里,非常重要的一点就是将状态之间流转的逻辑,封装在Context类里面。本来可...

2019-07-31 17:53:15 592

原创 设计模式之:策略模式

业务场景我们可以根据不同的参数来选择一种我们想要执行的优惠计价方式策略模式,将会成为最最高频使用的一种设计模式常见应用场景,就是替换掉那一大坨复杂难懂的if else if else对于那种过于复杂的选择判断逻辑,完全可以将选择哪种策略的过程放到工厂里去工厂,可以是简单工厂,也可以是工厂方法,也可以是抽象工厂package com.icode.edu.boot.test.strateg...

2019-07-31 17:47:43 123

原创 设计模式之:组合模式

业务场景组合模式非常适用于有较多父子层级关系的那种场景,比如部门树的递归删除,或者是文件树的递归删除之类的场景。import java.util.ArrayList;import java.util.List;public class CompositePatternDemo { public static void main(String[] args) { ...

2019-07-31 17:40:57 151

原创 设计模式之:命令模式

业务场景一般就是说,你可能会执行一些操作,这些操作都实现一个接口但是有不同的命令实现,然后命令的执行类就是同一个,你需要执行哪个命令就封装那个命令后发送给执行类即可命令模式非常适合跟工厂方法模式结合起来使用,就是使用多个工厂来制造出不同的命令类来,将命令的构造放在工厂方法中public class CommandPatternDemo { public static void m...

2019-07-31 17:33:30 102

原创 设计模式之:观察者模式

业务场景(1)比如我们有一个目标对象,一旦这个目标对象的状态改变了,然后的话就去通知相关的对象,我的状态改变了,数据也变化了观察者模式常见于基于zookeeper进行分布式系统之间的协调工作,比如分布式锁的注册以及监听是否释放。还有就是两个系统之间如果做了异步的处理,那么如果A系统发送异步请求给了B系统,但是要得到B系统的一个状态改变的消息,可以采用观察者模式。基于zookeeper去做分...

2019-07-31 17:20:39 105

原创 分布式篇:Dubbo架构原理流程

架构原理图Dubbo架构层级划分第一层:service层,接口层,给服务提供者和消费者来实现的第二层:config层,配置层,主要是对dubbo进行各种配置的第三层:proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton第四层:registry层,服务注册层,负责服务的注册与发现第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组...

2019-07-31 15:27:39 207

原创 分布式篇:Spring Cloud 架构原理流程

分布式、微服务首先明确一个概念,分布式例如,有一个电商系统,用户 > 订单 > 库存 > 仓储 > 积分这些业务都在在一个服务中的,耦合极其严重,每次开发、打包、部署、极其繁琐最主要的一个问题的,如果其中某个服务出现了问题,必然会影响其余服务分布式通常按业务拆分成多个子系统每个业务服务子系统部署在单独的机器上一次下单请求调用多个服务协作共同完成每个服务只处理...

2019-07-29 12:29:52 465

原创 设计模式之:代理模式

业务场景(1)懒加载:hibernate、mybatis,都可以实现懒加载,其实也是基于动态代理思想实现的,对刚查询出来的对象做一个代理。然后去调用getX()方法的时候,再实际执行sql查询出来关联的数据。通过hibernate / mybatis,查询出来这个classroom的时候,是没有级联将students数据从数据库里查出来的。接下来,如果你要从classroom中获取studen...

2019-07-25 16:57:57 127

原创 设计模式之:中介者模式

业务场景(1)三个模块(2)模块1调用模块2和模块3;模块2要调用模块1和模块3;模块3要调用模块1和模块2这个模式,担心的就是系统中各个子系统之前互相之间调用,乱成一团所以就将系统之间互相调用的逻辑给放到一个所谓的中介者里面去。每个系统如果要通知别的系统干个什么事儿,直接就是调用中介者,中介者负责去调用别的系统。中介者这个模式说白了就是要让各个系统之间彻底解耦,不要互相强耦合在一起,...

2019-07-25 16:49:34 168

原创 设计模式之:原型模式

业务场景如果一个对象,我们希望拷贝一个这个对象,就是弄出来这个类的另外一个实例,实例的属性跟之前的实例是一模一样的我们要用原型模式,以某一个对象为原型,然后对这个对象进行拷贝,得到拷贝后的另外一个对象原型模式,顾名思义,其实说白了,就是让一个对象可以自己拷贝自己,对象把自己当成一个原型,然后提供一个方法出去,外部要一个对象的克隆和拷贝,直接就copy一份就可以了,但是这里要记住深拷贝和浅拷贝...

2019-07-25 16:37:41 82

原创 设计模式之:构造器模式

业务场景构造一个复杂的对象,很多的属性,有些属性构造的时候需要做一些校验,格式转换常见于在构建一个复杂的对象,或者是构建一个复杂的表达式的时候,在开源框架中有大量广泛的运用在Mockito框架中,when().thenReturn()之类的,其实就是构造器模式的一种,通过多个连续的方法完成一个模拟对象的构建还有就是spring test框架汇总,MvcMock对象,也是通过thenExpe...

2019-07-25 15:58:02 676

原创 设计模式之:外观模式

业务场景1、假设我们现在有两个子系统2、子系统A,有多个内部模块,模块A、模块B和模块C3、子系统B,现在有一个功能,需要同时依赖3个模块来实现一个功能外观模式其实很简单,假设我们有一个系统A吧,自己内部有多个代码组件,每个代码组件都可以实现一些功能。此时如果别的系统B要调用系统A实现某个功能,此时一种方法是,系统B调用系统A的多个代码组件的方法,最终实现一个功能。另外一个选择,就是系...

2019-07-25 15:43:22 98

原创 JVM - 5:分代模型:年轻代、老年代、永久代

第一个知识点:对象存活周期极短的执行 main 方法的时候 会把 main 方法的栈帧 压入 当前线程的虚拟机栈在每次的循环里会一直创建 ReplicaManager 对象 的实例对于创建出来的对象,会放到 堆内存 里面大部分的对象存活时间都是很短的执行下面的方法,创建一个对象 ,调用它的 load 方法,然后 loadReplicasFromDisk() 方法就会出栈此时没有,没...

2019-07-25 15:18:18 500

原创 JVM - 4:垃圾回收机制是用来干嘛的?为什么要进行回收

回顾上一篇说到了JVM的内存区域划分线程私有(程序计数器、虚拟机栈、本地方法栈)线程共享(堆内存、方法区)以及 从加载一个类 到 执行方法的流程第一个知识点:对象的分配与引用上一篇说到,在执行某个方法的时候,如果 遇到 XXX xx = new XXX() ,则会在堆内存分配这个实例对象的内存空间同时会让当前方法的栈帧内的 xxx 局部变量去指向这个 XXX 对象的堆内存地址接下...

2019-07-24 10:36:52 810

原创 设计模式之:单例模式

场景比如说,你自定义了一个框架,自定义了一份xml格式的一个配置文件,你要读取这个配置文件,这个配置文件中的数据,读取到类中,这个类的实例,只要保存一份就可以。那么此时可以使用单例模式,将这个类做成他的实例只能有一个,在这个实例中保存了配置文件中的数据但是使用单例模式有一个要求,不允许这个类的逻辑过于复杂,一般就是持有某份配置文件的配置,或者是别的一些数据所以只能是简单的情况下,用单例模式,...

2019-07-23 19:49:32 81

原创 设计模式之:抽象工厂方法模式

业务场景:(1)就是我们现在要生产的不是一个一个产品,而一个一个的产品组合(2)比如说我们有产品ABC,现在第一种产品组合是A1+B3,第二种产品组合是A2+B2,第三种产品组合是A3+B3(3)就是要对工厂模式进行进一步的增强其核心思想是,如果需要一个工厂,这个工厂可以生产出相关联的一批产品,然后不同的工厂实现,会生产出一批不同的产品组合/** * 抽象工厂方法模式 */publ...

2019-07-23 18:18:48 76

原创 设计模式之:工厂方法模式

模板方法模式 + 简单工厂模式,简单工厂模式稍微复杂一点的变种场景:(1)我们现在要生产的产品有多种(2)每种产品的生产过程,都有一些是共同的逻辑,但是也有一些是特殊的逻辑如果不使用设计模式在工厂类中,有生产产品的相同的通用逻辑,没有抽取出来,直接复制粘贴放多个工厂里了如果那段通用逻辑要修改就需要很麻烦到所有工厂中去修改代码;可能会忘记修改某个工厂的代码/** * 工厂方法模式...

2019-07-23 17:46:26 213

原创 设计模式之:简单工厂方法模式

业务场景如果你直接面向一个类来编程,new来创建类的实例的话我们如果对Product,要更换一个类,换一个类的实现此时就必须在创建这个类实例的地方,都要修改一下这个代码如果你有100个地方,都创建了Product这个类的实例你需要在100个地方都去修改这个new Product()的这段代码代码可维护性和可扩展性之差,惨不忍睹/** * 简单工厂模式 */public clas...

2019-07-23 17:30:14 88

原创 设计模式之:模板方法模式

业务场景:(1)我们有多种优惠策略(2)不同的优惠策略在计算的价格的时候,有一些通用的基础逻辑(3)每种优惠策略还有一些是自己特殊的价格计算的逻辑每种优惠方式计算器里面,都有一段通用的计算逻辑,是完全相同的代码但是相同的一段代码,给通过复制粘贴的方式,放到了不同的类里去一旦说,那段通用的计算逻辑,要修改,就涉及到多个类都要去修改那个代码如果你一旦忘了修改某个类中的那段代码,后果不堪设...

2019-07-23 16:16:54 121

Navicat Premium.7z

Navicat 是香港卓软数码科技有限公司生产的一系列 MySQL、MariaDB、Oracle、SQLite、PostgreSQL 及 Microsoft SQL Server 的图形化数据库管理及发展软件。它有一个类似浏览器的图形使用者界面,支援多重连线到本地和远端数据库。它的设计合乎各种使用者的需求,从数据库管理员和程序员,到各种为客户服务并与合作伙伴共享信息的不同企业或公司。

2020-06-28

bootstrap-treeview史上最强例子

强烈建议初次使用bootstrap的人参考,例子很全 bootstrap树控件使用bootstrap-treeview.js实现树前边多选框checkbox 并实现, 0、获取选中的项 1、点击父级的多选框,自己默认选中 2、全选 3、反选 4、展开、 5、折叠

2018-07-08

尚硅谷mybatis高深讲解

尚硅谷mybatis高深讲解全套视频...........................................................

2018-06-22

深入理解Java虚拟机视频教程

深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)

2018-06-18

myeclipse2017破解文件最新

下载该工具包,依照小博的教程一步一步来即可完美激活属于您自己的MyEclipse2017 CI7,教程末尾有惊喜哦。附上教程地址:http://blog.csdn.net/u012102104/article/details/76598477

2018-04-12

Java常用工具类

涵盖市面上,几乎所有工具类。收集了好久,谢谢各位打赏

2018-04-12

Cron生成表达式html源码

在线Cron表达式生成器html源码 quartz任务调度 Cron表达式 在线生成

2018-03-01

H+Hplus后台主题UI框架最新版带文档

H+是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.4),当然,也集成了很多功能强大,用途广泛的jQuery插件,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等

2018-01-09

空空如也

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

TA关注的人

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