springboot可以通过spring-boot-devtools这个模块实现热部署。原理是在发现代码有更改之后,重新启动应用,但是速度很快。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间
阅读全文
java 下载代码
java下载的简单例子
阅读全文
通俗解释ConcurrentHashMap
相信每个JAVA程序员都了解HashMap,最大的问题是线程不安全,因为方法中不涉及到同步,也正因为如此,HashMap的效率非常高,在不涉及线程安全的程序中广泛被应用。然而当涉及到多线程作业时,就会出现一些问题。为了解决这些问题JAVA提供了Hashtable,这是一种整体加锁的数据结构,然而效率不敢恭维。这时候就有了ConcurrentHashMap
阅读全文
Linux上 Can't connect to X11 window server Exception解决方法
做了一个图片验证码功能,在windows上正常,linux上就错误
Exception in thread "main" Java.lang.InternalError: Can't connect to X11 window server using 'localhost:11.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
阅读全文
java的BigDecimal
java 的 float 和 double 类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦
阅读全文
Java Collection各实现类介绍
Java Collection的实现类比较多,梳理下这些类
阅读全文
for循环下的switch...case中的break和continue使用
在for循环的switch...case中使用的break是直接跳出switch的,而使用continue则会继续下一个循环,continue不是给switch使用的
阅读全文
按批次处理list数据的两种方法
按批次处理list数据的两种方法,主要应用于list存储数据过多,不能使list整体进行其余操作。
阅读全文
protobuf和json互转时应该注意的问题
网上protobuf的资料不是很多,遇到问题比较费时间。说说可能会遇到的两个问题。1、protobuf buffer转换成json时候会把字段值是默认值的数据忽略,但它提供了方法可以解决这个问题。2、在json字符串转换成protobu的Message对象时,如果存在Message对象不存在的字段时会报InvalidProtocolBufferException,此时需要使用ignoringUnknownFields
阅读全文
基于timestamp和nonce的防止重放攻击方案
重放攻击是计算机世界黑客常用的攻击方式之一,所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程
阅读全文