静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性) 静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性) 实例化一个非静态的内部类的方法: //a.先生成一个外部类对象实例 OutClassTest oc = n
Function Function作为一个函数式接口,主要方法apply接收一个参数,返回一个值 @FunctionalInterface public interface Function<T, R> { /** * Applies this function to
输入数字金额参数,运行程序得到其对应的大写中文金额;例如:输入-12.56,输出-12.56: 壹拾贰元伍角陆分 Hutool工具包中也含有一个类型转换的方法,可以实现“金额的大小写”转换,但是这个工具包也有一些局限,“转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略”。参考文档:htt
Gzip压缩 public static byte[] compress(String str, String charset) { if (str == null || str.length() == 0) { return null; } ByteArra
在处理支付宝、微信支付等对账文件时可能会碰到因为\ufeff字符导致字段解析错误。\ufeff这是哪来的呢?网上搜索后发现原来是文本保存时包含了BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码)导致的,解决方法是使用u
在使用XStream解析的过程中遇到com.thoughtworks.xstream.security.ForbiddenClassException异常的问题,解决方式: xStream = new XStream(); //尽量限制所需的最低权限 这条语句解决该问题 xStream.addPer
org.javassist包版本不兼容JDK 1.8的问题 java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 原因:javassist 3.18以下的版本不支持在JDK1.8下运行 解决方法:升级j
使用Redisson实现Redis普通分布式锁,以及Redlock算法分布式锁的几种方式。 Redis几种架构 Redis发展到现在,几种常见的部署架构有: 单机模式 主从模式 哨兵模式 集群模式 我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普通分布式锁
普通实现 说道Redis分布式锁大部分人都会想到:setnx+lua,或者知道set key value px milliseconds nx。后一种方式的核心实现命令如下: - 获取锁(unique_value可以是UUID等) SET resource_name unique_value NX
三种情况如下 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); HttpSession session = request.getSession(false);
前置通知 在目标方法执行之前执行执行的通知 前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该对象可以获取目标对象和目标方法相关的信息 注意,如果接收JoinPoint,必须保证其为方法的第一个参数,否则报错 配置方式: &l
Post请求访问Nginx静态资源,会报405 not allowed错误。为了让Nginx静态页面能够响应post请求 解决方案:修改nginx.conf配置文件,在server{}中添加error_page 405=200@405 error_page 405 =200 @405; loca
Java应用Perm区一直呈上涨趋势的原因可以用一个简单的办法排查,就是用btrace去跟踪下是什么地方在调用ClassLoader.defineClass,在大多数情况下这招都是管用的。 Perm区存放的啥信息? Perm叫做持久代,存放了类的信息、类的静态变量、类中final类型的变量、类的方法
GC是统计学测算出当内存使用超过98%以上时,内存就应该被minor gc时回收一次。但是实际应用中,我们不能较真的只给他们留下2%,换句话说当内存使用达到98%时才GC 就有点晚了,应该是多一些预留10%内存空间,这预留下来的空间我们称为S区(有两个s区:s1 和 s0),S区是用来存储新生代G
System.gc(); //告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的 System.runFinalization(); //强制调用已经失去引用的对象的finalize方法 查看源码 当我们调用System.gc()的时候,其实并不会马上进行垃圾回收,甚至不一定会执