java
文章平均质量分 56
Silverados
这个作者很懒,什么都没留下…
展开
-
fastutil简单测试下性能
简单测试一下fastutil的实现和Java类库实现的速率。使用jmh进行测试。简单解释一下,每轮测试预热2次,每次1s;实测2次,每次1秒。进行5轮测试。数组大小3种。原创 2023-07-27 11:56:55 · 405 阅读 · 0 评论 -
Java17 switch表达式
Java 17关于switch新增一些便利的写法。本文是基于谷歌翻译后调整的译文。翻译 2021-12-13 14:27:48 · 6082 阅读 · 0 评论 -
JAVA热更新
引言知识储备先看这篇文章:JAVA Instrument在这个案例中我们会利用Instrument机制实现一个简单的热更新案例。总体来说,步骤如下:创建一个带permain方法的jar包。这个方法定时检测某个文件然后进行热更新。命令行启动业务类时使用参数-javaagent,例如java -javaagent:jarpath[=选项] Main。网上有很多案例都是用Maven打jar包的,但是这里我讲的是纯命令行的做法。代码实现结构如下这个是编译后的结构,这里先从逻辑实现说起。1.原创 2021-11-02 13:46:33 · 3795 阅读 · 0 评论 -
【翻译】JAVA Instrument
概述Package java.lang.instrument: 提供允许Java编程语言代理检测JVM上运行的程序的服务。检测机制是修改方法的字节码。其中包含两个接口:ClassFileTransformerInstrumentation一个类:ClassDefinition以及几个异常类:IllegalClassFormatExceptionUnmodifiableClassException使用方式命令行启动:java -javaagent:jarpath[=选项]翻译 2021-10-29 16:27:32 · 525 阅读 · 0 评论 -
一次SpringBoot定时任务优化
前言有些以前工作时写的博文,没有同步到博客过来。这一篇可能是1年多前写的,希望能给读者一些启示。我们是多款游戏公用一个数据后台,通过不同的配置区分不同的游戏和环境。通过指定application.properties的spring.profiles.active来决定读取哪套配置。例如我们需要发布到代号为sfish下的prd环境就选择spring.profiles.active=sfishlyprd,同时我们的配置文件在resources/config下有application-sfishlyprd.原创 2021-08-24 18:03:56 · 746 阅读 · 0 评论 -
一次JAVA内存泄露排查
前言有些以前工作时写的博文,没有同步到博客过来。这一篇可能是1年多前写的,希望能给读者一些启示。首先要介绍下项目的背景。我们的项目是部署到tomcat的,一个tomcat下有若干的Java项目在跑,我们发现在每次重新部署(把war包直接丢进webapps目录下)项目时经常会出现长时间卡顿等现象,并且后续的解决方案一般是重启tomcat。这个是我做的一次排查尝试。1. 首先开启tomcat manager界面。具体步骤为:/tomcat/conf/tomcat-users.xml添加:<原创 2021-08-24 10:58:37 · 397 阅读 · 0 评论 -
Java获取对象的内存地址
前言我们知道在Java中对于synchronized对于同步方法锁的是当前的实例对象。例如以下这段代码:import java.util.concurrent.TimeUnit;public class Test { public static void main(String[] args) { Test test = new Test(); test.helper(); } public synchronized void helper原创 2021-08-02 21:51:17 · 6106 阅读 · 3 评论 -
synchronized锁定的对象
前言现在在复看一遍《Java并发编程的艺术》,其中有段话如下:Java中的每一个对象都可以作为锁。具体为:普通同步方法,锁是当前实例对象。静态同步方法,锁是当前类的Class对象。同步方法块,锁是括号内配置的对象。一直没有验证,今天验证下。正文测试代码很简单,就是打印一句话,然后休眠5s。分3中情况看看不同的dump信息。普通同步方法import java.util.concurrent.TimeUnit;public class Test { public stati原创 2021-08-02 21:07:00 · 740 阅读 · 3 评论 -
windows consul的安装
第一步:官网下载https://www.consul.io/downloads第二步:解压安装第三步:运行打开当前路径下的命令行:一个方式是这样:另一个是按住shift右键打开。再或者添加到环境变量PATH中。尝试以下命令查看版本:consul --version跑起来:consul agent -dev...原创 2020-09-24 16:38:47 · 160 阅读 · 0 评论 -
Java8计算两个日期相隔天/时/分/秒数等等(一行代码搞定)
方法有很多,给个最简洁的。直入主题,相隔天数为例:public static long daysBetweenDates(LocalDate localDate1, LocalDate localDate2) { return Math.abs(ChronoUnit.DAYS.between(localDate1, localDate2));}这里用的绝对值Math.abs(),所以结...原创 2020-02-24 00:58:48 · 4199 阅读 · 0 评论 -
jira-rest-java-client (jrjc)401巨坑
前言遇见一个巨坑!!!我找了好久尝试了很久都没有解决问题。最后灵机一动,添加了一个全英的账号来测试,哭了。原创 2020-02-20 17:07:00 · 956 阅读 · 2 评论 -
循序渐进学习使用Jackson序列化java对象(二)
循序渐进学习使用Jackson序列化java对象(一)序列化(2)在这一篇我们来了解一下一些序列化的高级用法。首先给出我们的实体类:@JsonInclude(JsonInclude.Include.NON_NULL)class User{ private String name; private Integer age; private Map<String...原创 2020-01-09 16:38:57 · 448 阅读 · 0 评论 -
循序渐进学习使用Jackson序列化java对象(一)
导入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.9<...原创 2020-01-08 23:58:56 · 432 阅读 · 0 评论 -
java统一返回结果
前言后端返回统一的结果集,例如包括状态码等信息,可以让前端更好的进行页面的展示。封装这样一个结果集有通用且常用的几个属性:status: 状态码msg:状态信息data:返回数据针对我在bootstrap-table返回数据的要求,我需要添加一个 total的属性。先来看看相关要求:bootstrap-table 数据格式要求客户端 client 分页[ { ...原创 2020-01-08 18:05:46 · 3223 阅读 · 0 评论 -
Spring Boot Interceptor拦截器
引言本文的目标是解决以下几个疑问:怎么在Spring Boot中使用Interceptor?怎么定制多个Interceptor的顺序?怎么针对特定路径进行拦截?在Spring Boot中使用Interceptor这里我新建了一个项目来展示相关的案例。整个项目的结构如下:可以看到项目非常简单,1个Controller,1个配置类,3个拦截类。实现拦截器最重要的步骤可以分为两步:...原创 2019-12-20 17:20:15 · 823 阅读 · 0 评论 -
mysql8 jdbc
框架用的多,今天心血来潮手写一遍jdbc连接。权当是复习~首先导入mysql驱动,这里以mysql8为例:在maven中添加依赖:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> ...原创 2019-10-24 14:44:31 · 509 阅读 · 1 评论 -
《Effective Java》笔记
创建和销毁对象: 1.考虑用静态工厂方法代替构造器。 优势:有名称。如果构造器的参数本身没有确切的描述正被返回的对象,那么就有适当名称的静态工厂会更容易使用。一个类只能有一个带有指定签名的构造器(一种避开限制的方法是更改参数列表的顺序)。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且慎重选择名称突出区别。不必在每次调用时新建一个对象。如果程序经常请求创建相同原创 2017-12-12 23:23:00 · 406 阅读 · 0 评论 -
Java虚拟机规范学习笔记(一)
Java虚拟机可以操作的数据类型分为两类:原始类型,引用类型;相应的存在原始值和引用值。Java虚拟机在编译期间尽可能的完成类型检查。Java虚拟机直接支持对象,这个对象可以是动态分配的某个类的实例,也可以是某个数组的实例。虚拟机用reference类型表示对某个对象的引 用。Java虚拟机支持的原始数据类型包括数值类型、Boolean类型、returnAddr原创 2018-01-01 19:52:37 · 509 阅读 · 0 评论 -
《thinking in java》笔记1-import static
1.import static关键字是直接导入某个类的所有变量和方法到本类中,这样就可以直接在当前类中引用导入类的变量和方法。 解析:我用代码测试了一遍,这里的变量和方法都应该是要用static修饰的。package test;public class ImportStaticTest { public final static String a = "hello";原创 2018-01-13 09:27:47 · 339 阅读 · 0 评论 -
《thinking in java》笔记2-Random()和seed
2.在java中使用Random产生随机数,种子相同则产生的序列相同。解析:此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改。package test;import java.util.Random;public class RandomTest { public stati原创 2018-01-13 22:53:55 · 245 阅读 · 0 评论 -
《thinking in java》笔记3-equals()和==
==比较两个对象是否是同一个引用。 equals()比较的是两个对象的值是否相同。Integer的package test;public class EqualsTest { public static void main(String[] args) { Integer a = new Integer(10); Integer b = n原创 2018-01-14 01:05:26 · 253 阅读 · 0 评论 -
《thinking in java》笔记4-移位操作符
移位操作符一般情况下:: 左移运算符,num 1,相当于num乘以2>> : 右移运算符,num >> 1,相当于num除以2>>> : 无符号右移,忽略符号位,空位都以0补齐原创 2018-01-14 16:27:48 · 231 阅读 · 0 评论 -
《thinking in java》笔记5-重写,覆盖,重载
覆盖(override):继承父类同名无参函数,子类同样定义了一个同名无参函数。重载(overload):继承父类同名有参函数,子类继承的同名函数的参数表不同。java只能根据参数列表来区分重载的方法,不能根据返回值类型来区分重载的方法,因此参数列表的函数必须要有相同的返回值类型。重写(overwrite):当前类的同名方法,一个类里同名函数但参数个数和类型不同。原创 2018-01-14 16:37:15 · 258 阅读 · 0 评论 -
《thinking in java》笔记6-可变变量/可变参数
定义在定义方法时,在最后一个形参后加上三点“…“,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。示例public class VariableArgument { static void Method(Object... objects ){ for (Object object : objects) { System.ou...原创 2018-02-14 22:50:44 · 292 阅读 · 0 评论 -
java Map
MapV get(Object key);default V getOrDefault(Object key,V defaultValue);V put(K key,V value);void putAll(Map<? extend K,? extend V>entries);boolean containKey(Object key);boolean containVa...原创 2018-03-14 20:18:59 · 217 阅读 · 0 评论 -
枚举enum源码分析
定义枚举从简单意义上去说就是把一类常量直接列出来,而不是通过比较复杂的public static final去定义。简单的示例//传统方式的常量定义public class Color{ public static final int YELLOW = 1; public static final int BLUE = 2; public static final int...原创 2018-02-20 23:43:01 · 347 阅读 · 0 评论 -
《thinking in java》笔记8-protected修饰符
protected 修饰符修饰的成员变量可以被3种类引用: - 类自身 - 同包中的其他类 - 其他包中的子类注意:在其他包中的子类中,只能访问protected修饰的属性,而不是方法。还有一种容易混的是缺省 就是不写修饰符:这种可以记为包访问修饰符。...原创 2018-02-21 21:13:54 · 228 阅读 · 0 评论 -
《thinking in java》笔记9-父子类构造函数
子类和父类都有构造函数,在构造子类的对象是,会隐式依次调用父类的同名同参构造函数。public class ExtendTest { public static void main(String[] args) { Son son = new Son(); }}class Papa extends GrandPa{ public Papa(){...原创 2018-02-21 21:40:08 · 297 阅读 · 0 评论 -
java lambda表达式
定义:传递一段可稍后执行的代码。如果你想立即执行该段代码就不应该使用lambda表达式。匿名函数。延缓执行的原因: - 运行代码在分离的线程中。 - 运行相同的代码多次。 - 在算法中对的时机执行(如排序的比较操作符)。 - 在某些事件发生后执行(例如点击了button)。 - 只有在必要的时候执行。lambda表达式的使用: 在java中,lambda表达式只能用于func...原创 2018-03-11 11:09:46 · 357 阅读 · 0 评论 -
《thinking in java》笔记10-final + blank final +final修饰形参
定义: final 告诉编译器这是个常量:可以是编译时常量,也可以被初始化在运行时。final 和 static 的搭配:private final、private static final 基本一致,编译时产生public static final 最常见的用法,公共的静态变量blank final: 空的final,即不给变量赋初值,只有在构造某个类的对象时才(必须)给它...原创 2018-03-04 10:20:18 · 293 阅读 · 0 评论 -
java for、while循环调用流程
while先讲while,while是先对条件进行判断然后运行方法体。public class Free { public static void main(String[] args) { int i = 0; while(i>=0){ System.out.println(i); i--...原创 2018-03-18 13:40:50 · 1113 阅读 · 0 评论 -
java switch的几个注意点
关于switch有几个点要注意的: 首先是break,如果在一个case中没有break,那么程序会一直执行到下一个break,或者到switch结束。例:import java.util.Scanner;public class Free { public static void main(String[] args) { @SuppressWarnings(...原创 2018-03-18 14:29:40 · 1974 阅读 · 0 评论 -
《thinking in java》笔记11- static
java类只有在第一次被使用时才会被加载,而static修饰的变量,方法,区块只会被初始化一次。一个子类继承父类时的初始化顺序: 1. 初始化父类和子类的static变量。 2. 调用父类的构造方法。 3. 初始化子类的。 4. 调用子类的构造方法。...原创 2018-03-05 09:07:16 · 194 阅读 · 0 评论 -
《thinking in java》笔记12-接口中的字段和变量
接口中的字段只是被存储在该接口的静态存储区域而不属于该接口,且被隐式的声明为static 和 final.接口的变量必须被初始化,指定一个静态值或者一个可以产生静态值的动态表达式。...原创 2018-03-05 09:14:00 · 194 阅读 · 0 评论 -
《thinking in java》笔记13-内部类
使用内部类的好处是:封装性好,直接通过操作得到内部类的内容。内部类有两个this指针,一个指向内部类实例本身,一个指向外嵌类实例。引用外部类用 xxx.this。要在内部类的外部使用内部类的对象,必须先创建外部类的实例。Outter out = new Outter();Outter.Inner in = out.new Inner();如果该内部类使用static声明则可以...原创 2018-03-05 10:22:40 · 239 阅读 · 0 评论 -
java Collection接口和AbstractCollection类
collection 是一个实现了iterator 接口的接口。其中collection常用的方法有:int size();boolean isEmpty();boolean contains(Object obj);boolean add(object obj);boolean addAll(Collection<?> c);boolean remove();bool...原创 2018-03-12 16:03:11 · 544 阅读 · 0 评论 -
《thinking in java》笔记14-异常
throw 向上抛出异常,可以连续抛但在最外层要进行捕捉,否则可能导致程序崩溃。finally块无论异常有没有发生都会执行,它会在程序的最后且异常抛出前执行。 finally会在return返回前执行。 在finally中使用return会屏蔽所有异常。...原创 2018-03-05 14:12:28 · 151 阅读 · 0 评论 -
《thinking in java》笔记15-String
通过new String(“abc”)和”abc”都会创建一个字符串对象,而”abc”+”def”会创建三个对象:”abc”,”def”,”abcdef”。在java中对字符串的一切操作都会产生一个新的字符串对象。为此java提供了两个可变字符串类:StringBuilder,StringBuffer.StringBuilder是StringBuffer的一个简易实现,且比它快。 Str...原创 2018-03-05 14:32:16 · 234 阅读 · 0 评论 -
《thinking in java》笔记16 -类似C中printf()的格式化输出函数 和 Formatter
类似C中printf()的格式化输出函数: 1.System.out.printf(); 2.System.out.format();Formatter可以指定输出源,例如文件、错误源等。可以像printf()一样,指定输出的字符串,数字的最大长度等。String.format()提供了如同Formatter一样的功能,实际每次调用String.format()都会创建一个新的Form...原创 2018-03-05 14:49:18 · 406 阅读 · 0 评论 -
java List
list是一个实现了Collection接口的接口,常用的方法有:ListIterator<E> listIterator();ListIterator<E> listIterator(int index);void add(int i,E element);void addAll(int i,Collection<? extends E> eleme...原创 2018-03-12 19:37:33 · 176 阅读 · 0 评论