自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(163)
  • 资源 (3)
  • 收藏
  • 关注

原创 mysql动态字段行转列

动态行转列

2022-06-09 10:14:14 533 1

原创 方法区使用举例

public class MethodAreaDemo { public static void main(String[] args) { int x = 500; int y = 100; int a = x / y; int b = 50; System.out.println(a + b); }}Copy to clipboardErrorCopied字节码public class com.a

2022-04-29 12:50:59 366

原创 Redisson自定义序列化方式

redissonClient.getBucket("key01", Commonlang3RedissonSerializer.INSTANCE).get()自定义序列化方式import io.netty.buffer.ByteBuf;import io.netty.buffer.ByteBufInputStream;import io.netty.buffer.Unpooled;import org.apache.commons.lang3.SerializationUtils;imp..

2021-11-22 18:02:16 2628

原创 spring-data-jpa踩坑 - delete-then-save唯一索引冲突问题

https://my.oschina.net/u/1017843/blog/4799128https://juejin.cn/post/6925749855839387656

2021-10-16 22:54:39 1809

原创 Java list创建添加元素 gc后内存

public static void main(String[] args) throws InterruptedException { Runtime runtime = Runtime.getRuntime(); System.out.println("first total "+ runtime.freeMemory()/ 1024); runnn(); System.out.println("after ADD item total..

2021-08-11 12:24:35 292

原创 sqlserver 整合spring报错 Software caused connection abort: recv failed

报错Software caused connection abort: recv failed有时sql可以执行成功,有时不行。 sql复制到Navicat中可以执行成功。解决方法: 替换jar包 <!--<dependency>--> <!--<groupId>com.microsoft.sqlserver</groupId>--> <!--<artifactId>sqljd

2021-06-18 11:30:22 724

原创 Springboot 多数据源事务,切换数据源+事务

项目有多个数据源, 根据配置文件配置的连接数来自动生成多数据源配置 并且使用 aop切换数据源,、使用的是 AbstractRoutingDataSource 重写 determineCurrentLookupKey 方法。在切换数据源之前 @Transactional 先执行 ,此时会去获取数据源,而此时数据源还没有切换 就会获取默认的数据源 。 这种情况会导致数据源切换失败源码:如果不用事务,切换数据源是可以的。2, 其它方式@Configuration@MapperScan(base

2021-06-03 17:40:37 1485 1

原创 SpringCloud gateway中获取处理请求的服务器ip和端口

ServerWebExchange 中获取处理请求服务器的ip和端口Connection responseClientConnnection = exchange.getAttribute(ServerWebExchangeUtils.CLIENT_RESPONSE_CONN_ATTR);Connection bind = attribute.bind(); SocketAddress socketAddress = bind.channel().remoteAddress();return Obj

2021-05-17 11:46:51 3015

原创 redis 缓存一致性

一:延迟双删一、只先删缓存问题:先删缓存,在改库前,其他事务又把旧数据放到缓存里去了二、只后删缓存问题:改了库,清理缓存前,有部分事务还是会拿到旧缓存三、普通双删问题:第一次清空缓存后、更新数据库前:其他事务查询了数据库hang住第二次清空缓存后:其他事务更新缓存,此时又会把旧数据更新到缓存四、为什么需要延时双删?在三中,第二次清空缓存之前,多延时一会儿,等B更新缓存结束了,再删除缓存,这样就缓存就不存在了,其他事务查询到的为新缓存。延时是确保 修改数据库 -> 清空缓存前,

2021-03-29 13:43:29 123

原创 Mybatis 一对多返回重复数据解决方式

在resultMap中设置的column字段不能相同<resultMap type="com.entityA" id="map_01"> <result property="id" column="id"/> <result property="columonA" column="columon_a"/> <result property="columonB" column="columon_b"/> &l

2021-01-28 14:21:44 1592

原创 Nginx 配置Gzip压缩

nginx 配置gzip压缩如果有nginx转发, 两边的nginx都要配置http{gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript applicat

2020-12-29 11:46:56 298

原创 Excel导出设置中文名称

private void doExport(LinkedHashMap<String, String> header, List<Map<String, Object>> exportList) throws IOException { HttpServletResponse response = HttpContextUtils.getHttpServletResponse(); HttpServletRequest request ..

2020-12-25 14:23:31 1346

原创 maven父工程中打包, 子工程之间引用出现jar包版本错误

问题: 如下moudle-A,moudle-B依赖base, base中修改了commons-io的版本, 在parent中install打包后, moudle-A 的jar包中commons-io还是旧版本。<modules> <module>moudle-A</module> <module>base</module> <module>moudle-B</module></modules>mav

2020-12-03 14:57:34 1363

原创 Jenkins升级版本, 操作页面的下载地址版本错误

原因是最新war包被墙了(国内防火墙阻拦了),这时可以通过更新插件网址更新下载: https://updates.jenkins-ci.org/download/war/参考: https://blog.51cto.com/13760351/2377214?source=drh

2020-12-01 14:43:55 279

原创 text finder插件解决Jenkins部署jar包启动失败, jenkins显示unstable

问题: Jenkins部署jar包启动失败, jenkins显示unstable。想要的解决jar包启动失败,jenkins返回fail解决方法: 使用text finder插件注意: text finder 对jenkins的版本有要求, 版本过低用不了text finder。安装插件 text finder在jenkins中配置text finder3, 在ssh脚本中配置,如果jar启动失败 返回 build-failer 与上面的配置相呼应...

2020-12-01 14:40:57 551

原创 SpringBoot初始化流程,tomcatStarter调用

1,SpringBoot初始化1, Springboot版本Springboot版本 2.1.7.RELEASE2, 文章主要解决的问题1,主要看一下 ServletContainerInitializer 和 ServletContextInitializer 在Springboot中的使用, ServletContextInitializer 是如何在初始化时被调用的。2, TomcatStart怎么将tomcat启动(ServletContainerInitailizer)与spring的

2020-11-29 10:39:34 924

原创 lambda的特殊使用方式,springboot初始化中实例使用

public class Test { private Man testMan; { testMan = testRun(); } // lambad方式 public Man testRun(){ return this::selfRun; } // 匿名内部类方式 public Man testRun2(){return new Man(){ @Override publi

2020-11-27 10:05:24 531

原创 tomcat启动时调用 ServletContainerInitializer的onStartUp方法

public class StandardContext extends ContainerBase implements Context, NotificationEmitter { private Map<ServletContainerInitializer, Set<Class<?>>> initializers = new LinkedHashMap();//添加ServletContainerInitializer的实现类public void ad

2020-11-27 09:33:40 1242

原创 ServletContainerInitializer和WebApplicationInitializer的关系

Spring与Servlet3.0 ServletContainerInitializer的关系图ServletContainerInitializerServletContainerInitializer是servlet3.0才出现的组件,通过实现这个接口的onStart方法,就可以在tomcat的启动时执行此方法。还需要在classpath下的META-INF文件夹下创建一个services文件夹,同时在services文件夹下创建一个javax.servlet.ServletContainer

2020-11-25 14:13:31 294 1

原创 Mybatis union 循环

Mybatis union 循环 <foreach collection="nameList" item="name" separator="union"> select id from table where name = #{name} </foreach> List<Object> getList(@Param("nameList")String[] nameList);

2020-10-26 11:53:43 4075

原创 mysql in查询太慢, 使用join优化

mysql中查询 in()参数太多, 导致查询很慢, 使用join优化。在实例中in查询话费2s, 优化后0.4sSELECT * from A LEFT JOIN B ON A.B_ID = B.IDwhere B.uuid in (001,002,003....)优化后SELECT * from A INNER JOIN ( select id from B where uuid = 001 union select id from B where uuid = 002 u

2020-10-23 18:04:00 1482 1

原创 fegin超时 ribbot和hystrix配置

feign超时如果hystrix.command.default.execution.timeout.enabled为true,则会有两个执行方法超时的配置,一个就是ribbon的ReadTimeout,一个就是熔断器hystrix的timeoutInMilliseconds, 此时谁的值小谁生效如果hystrix.command.default.execution.timeout.enabled为false,则熔断器不进行超时熔断,而是根据ribbon的ReadTimeout抛出的异常而熔断,也就是

2020-10-10 17:36:26 147

原创 设计模式之美32--spring中用到的设计模式及思想

Spring框架蕴含的设计思想1.约定优于配置2.低侵入、松耦合3.模块化、轻量级4.再封装、再抽象

2020-09-01 22:05:09 106

原创 设计模式之美31--不变模式

Immutable模式,中文叫作不变模式,它并不属于经典的23种设计模式,但作为一种较常用的设计思路,可以总结为一种设计模式来学习。之前在理论部分,我们只稍微提到过Immutable模式,但没有独立的拿出来详细讲解,我们这里借Google Guava再补充讲解一下。一个对象的状态在对象创建之后就不再改变,这就是所谓的不变模式。其中涉及的类就是不变类(Immutable Class),对象就是不变对象(Immutable Object)。在Java中,最常用的不变类就是String类,String对象一旦创

2020-09-01 21:45:25 207

原创 设计模式之美30--23中设计模式总结

一:创建型设计模式**1.单例模式**单例模式用来创建全局唯一的对象。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例模式。单例有几种经典的实现方式,它们分别是:饿汉式、懒汉式、双重检测、静态内部类、枚举。尽管单例是一个很常用的设计模式,在实际的开发中,我们也确实经常用到它,但是,有些人认为单例是一种反模式(anti-pattern),并不推荐使用,主要的理由有以下几点:单例对OOP特性的支持不友好单例会隐藏类之间的依赖关系单例对代码的扩展性不友好单.

2020-08-30 10:32:09 206

原创 设计模式之美29--中介模式

定义: 中介模式的设计思想跟中间层很像,通过引入中介这个中间层,将一组对象之间的交互关系(或者说依赖关系)从多对多(网状关系)转换为一对多(星状关系)。原来一个对象要跟n个对象交互,现在只需要跟一个中介对象交互,从而最小化对象之间的交互关系,降低了代码的复杂度,提高了代码的可读性和可维护性。提到中介模式,有一个比较经典的例子不得不说,那就是航空管制。为了让飞机在飞行的时候互不干扰,每架飞机都需要知道其他飞机每时每刻的位置,这就需要时刻跟其他飞机通信。飞机通信形成的通信网络就会无比复杂。这个时候,我们通

2020-08-30 10:25:43 110

原创 设计模式之美29--解释器模式

定义: 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。实际上,这里的“语言”不仅仅指我们平时说的中、英、日、法等各种语言。从广义上来讲,只要是能承载信息的载体,我们都可以称之为“语言”,比如,古代的结绳记事、盲文、哑语、摩斯密码等。要想了解“语言”表达的信息,我们就必须定义相应的语法规则。这样,书写者就可以根据语法规则来书写“句子”(专业点的叫法应该是“表达式”),阅读者根据语法规则来阅读“句子”,这样才能做到信息的正确传递。而我们要讲的解释器模式,其实就是用来实

2020-08-30 10:14:04 107

原创 设计模式之美28--命令模式

定义:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、撤销等(附加控制)功能。使用不多命令模式用的最核心的实现手段,是将函数封装成对象。但是,在大部分编程语言中,函数没法儿作为参数传递给其他函数,也没法儿赋值给变量。借助命令模式,我们可以将函数封装成对象。具体来说就是,设计一个包含这个函数的类,实例化一个对象传来传去,这样就可以实现把函数像对象一样使用。命令模式的主要作用和应用场景,是用来控制命

2020-08-30 10:00:33 65

原创 设计模式之美27--备忘录模式

定义: 在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态假设有这样一道面试题,希望你编写一个小程序,可以接收命令行的输入。用户输入文本时,程序将其追加存储在内存文本中;用户输入“:list”,程序在命令行中输出内存文本的内容;用户输入“:undo”,程序会撤销上一次输入的文本,也就是从内存文本中将上次输入的文本删除掉>hello>:listhello>world>:listhelloworld>:und

2020-08-29 16:20:44 126

原创 设计模式之美26--访问者模式,单分派,双分派

定义: 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。一般来说,访问者模式针对的是一组类型不同的对象(PdfFile、PPTFile、WordFile)。不过,尽管这组对象的类型是不同的,但是,它们继承相同的父类(ResourceFile)或者实现相同的接口。在不同的应用场景下,我们需要对这组对象进行一系列不相关的业务操作(抽取文本、压缩等),但为了避免不断添加功能导致类(PdfFile、PPTFile、WordFile)不断膨胀,职责越来越不单一,以及避免频繁地添加功能导致的频繁代码修改,我

2020-08-29 11:54:32 156

原创 设计模式之美25--状态模式

状态机的实现方式有多种,除了状态模式,比较常用的还有 分支逻辑法 和 查表法。状态机又叫有限状态机,它有3个部分组成:状态、事件、动作。超级玛丽示例:1, 分之逻辑法class MarioStateMachine { private int score; private State currentState; public MarioStateMachine() { this.score = 0; this.currentState = S

2020-08-26 21:32:45 381

原创 设计模式之美24--责任链模式

在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。需求:员工请假一天 主管审批, 请假2-3天 经理审批,请假3-30 天cto审批, 大于30不通过public abstract class AbstractHandler { protected AbstractHandler next

2020-08-25 22:17:05 166

原创 设计模式之美23--模版模式,回调函数

模板方法模式定义:模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的“算法”,我们可以理解为广义上的“业务逻辑”,并不特指数据结构和算法中的“算法”。这里的算法骨架就是“模板”,包含算法骨架的方法就是“模板方法”,这也是模板方法模式名字的由来。templateMethod()函数定义为final,是为了避免子类重写它。method1()和method2()定义为abstract,是为了强迫子类去实

2020-08-18 22:08:15 217

原创 设计模式之美22--观察者模式, EventBus

1,定义:观察者模式(Observer Design Pattern)也被称为发布订阅模式,在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(Message message);}

2020-08-17 22:02:17 184

原创 设计模式之美21--享元模式

1.享元模式的原理所谓“享元”,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。具体来讲,当一个系统中存在大量重复对象的时候,如果这些重复的对象是不可变对象,我们就可以利用享元模式将对象设计成享元,在内存中只保留一份实例,供多处代码引用。这样可以减少内存中对象的数量,起到节省内存的目的。实际上,不仅仅相同对象可以设计成享元,对于相似对象,我们也可以将这些对象中相同的部分(字段)提取出来,设计成享元,让这些大量相似对象引用这些享元。这里我稍微解释一下,定义中的“

2020-08-17 21:46:18 87

原创 设计模式之美20--组合模式

组合模式用的很少组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。这里讲的“组合模式”,主要是用来处理树形结构数据。这里的“数据”,将一组对象组织(Compose)成树形结构,以表示一种“部分-整体”的层次结构。组合让客户端(在很多设计模式书籍中,“客户端”代指代码的使用者。)可以统一单个对象和组合对象的处理逻辑。‘假设我们有这样一个需求:设计一个类来表示文件系统中的目录,能方便地实现下面这些功能:动态地添加、删除某个目录下的子目录或文件;统计指定目录下的

2020-08-16 11:15:47 78

原创 设计模式之美19--门面模式

门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。适配器是做接口转换,解决的是原接口和目标接口不匹配的问题。门面模式做接口整合,解决的是多接口调用带来的问题假设我们刚刚提到的系统A是一个后端服务器,系统B是App客户端。App客户端通过后端服务器提供的接口来获取数据。我们知道,App和服务器之间是通过移动网络通信的,网络通信耗时比较多,为了提高App的响应速度,我们要尽量减少App与服务器之间的网络通信次数。假设,完成某个业务功能(比如显示某个页面信息)需要“依次”调用a、b、d三

2020-08-16 10:55:45 101

原创 设计模式之美18--适配器模式

这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是USB转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。// 类适配器: 基于继承public interface ITarget { void f1(); void f2();...

2020-08-16 10:20:30 159

原创 设计模式之美17--装饰器模式

**装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。**除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。1.代理模式和装饰者模式都是 代码增强这一件事的落地方案。前者个人认为偏重业务无关,高度抽象,和稳定性较高的场景(性能其实可以抛开不谈)。后者偏重业务相关,定制化诉求高,改动较频繁的场景。2.缓存这件事

2020-08-15 14:40:03 100

原创 设计模式之美16--原型模式

原型模式使用较少原型模式的原理与应用如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。2.原型模式的两种实现方法原型模式有两种实现方法,深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对

2020-08-15 12:14:10 115

Python Web开发和接口测试

顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。

2018-10-09

算法图解-像小说一样

本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。

2018-10-09

xshell_5.0.0.37

Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还

2018-10-09

空空如也

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

TA关注的人

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