![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 74
飞出四季做的茧
软件开发工程师
展开
-
Map 家族
Map 实现类 线程安全否 自然排序 Key的底层结构 Key是否可为null 特性 HashMap 否 无序 数组+(链表或者红黑树) 是 hash(null) = 0; 因此,map.get(null) 是有值的 查询快,O(1) TreeMap 否 迭代时中序遍历,...原创 2020-05-03 17:58:45 · 326 阅读 · 0 评论 -
可变参数如果传入基本类型数组会怎么样?
可变参数如果传入基本类型数组,JVM会当整个数组当做一个参数来处理。如果传入的是封装类型的数组,那么数组中内容会被拆分成多个参数传入方法。代码如下: public static void main(String[] args) { Integer[] test = new Integer[] {1, 2, 5}; int[] test2 = new ...原创 2020-04-23 21:38:23 · 1269 阅读 · 0 评论 -
不同的进制表示转换十进制
进制 Java表示方式 例子 转10进制的方式 转10进制的结果 16进制 0x**** 0xABC C * 10^0 + B * 10^1 + A * 10^2 96768 8进制 0**** 017 7 * 8^0 + 1 * 8^1 15 2进制 0b**** 0x11 1 * 2^0 + ...原创 2020-04-22 15:35:10 · 500 阅读 · 0 评论 -
@Target 的ElemenType释义
Element 应用类型 释义 ElementType.TYPE 类 Can be applied to any element of a class ElementType.FIELD 成员变量 Can be applied to a field ElementType.PARAMETER 方法参数 Can be applied to...原创 2020-04-21 16:28:33 · 292 阅读 · 0 评论 -
Java获取UTC时间
工具:joda-timeMvn:<!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactI...原创 2020-04-16 09:17:59 · 2785 阅读 · 2 评论 -
Java 8 中的 Streams API 详解
是什么 --> 为什么要用 --> 怎么用 --> 总结是什么 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 L...转载 2020-04-09 17:15:14 · 186 阅读 · 0 评论 -
Lombok 看这篇就够了
前提自从进公司实习后,项目代码中能用 Lombok 的都用了,毕竟这么好的轮子要充分利用好。也可以减少一些 get/set/toString 方法的编写,虽说 IDEA 的插件可以自动生成 get/set/toString 方法,但是使用 Lombok 可以让代码更简洁。下面看看如何在 IDEA 中如何安装 Lombok:安装打开 IDEA 的 Settings 面板,并选择 Plu...转载 2020-02-26 10:15:12 · 142 阅读 · 0 评论 -
Collection 删除元素的高效写法
Collection 如果使用 foreach 来删除会抛ConcurrentModificationException 异常,检查并发修改。即在 foreach 迭代的过程中修改Collection 是不被允许的,因此采用以下方式删除。1 List @Test public void testList() { List<String...原创 2019-10-30 16:35:31 · 320 阅读 · 0 评论 -
多线程竞争执行,谁先跑完用谁?
做性能优化时,遇到一些跨不过的坎,如果能够绕过问题本身来解决该问题也是不错的选择。本人在做 MongoDB 联合查询时,遇到了性能瓶颈,使用 MongoDB 内部联合查询时 Mongo竟然不会使用索引,效率低下,不得采用数据库外部联合查询来解决。那么,问题来了,两种方式优势与劣势同样明显,若要同时运用两种查询方式的优势,避其短处,本人采用了竞争式查询。在不同的场景下,两者同时执行,谁...原创 2019-10-30 15:01:58 · 660 阅读 · 0 评论 -
Java 8中处理集合的优雅姿势——Stream
在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。 不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就来介绍下如何使用Stre...转载 2019-10-18 15:08:48 · 154 阅读 · 0 评论 -
Java 8 Stream的性能到底如何?
之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。那么,Stream API的性能到底如何呢,代码整洁的背后是否意味着性能的损耗呢?本文我们对Stream API的性能一探究竟。为保证测试结果真实可信,我们将JVM运行在-server模式下,测试数据在GB量级,测试机器采用常见...转载 2019-10-18 14:30:00 · 1172 阅读 · 0 评论 -
MongoDB 使用 count 带来的分页问题与应对措施
count 在MongoDB 存在着不小的问题,对比关系型数据库,无固定结构的数据存储对count 函数存在着天然的缺陷,在大量数据情况下,count 函数计算非常慢,这对分页查询产生了不小的影响。 毫无疑问,count 的查询语句使用了索引比没有使用索引快上1000倍不止,因此,一定要用 explain 函数看看,count 的查询语句是否使用了索引。 ...原创 2019-10-15 16:33:26 · 2295 阅读 · 0 评论 -
为什么不推荐使用Spring @Scheduled 中的 Cron 表达式
原因: Spring @Scheduled 使用非常方便,你只需要在指定执行定时任务的方法上添加 @Scheduled 注释即可,但是在最近用 @Scheduled 使用 Cron 表达式时,出现了大问题,问题如下: 首先,时钟往过去拨,@Scheduled 的 Cron 表达式不会按预期执行了。(原因见后续源码分析) 其次,Cron 不按预期执行了...原创 2019-08-16 16:47:38 · 1508 阅读 · 1 评论 -
Java 获取操作系统时区
Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下:// 获取 JVM 启动时获取的时区TimeZone.getDefault();// 获取任意指定区域的时区String[] zoneID...原创 2019-08-16 14:33:32 · 20400 阅读 · 0 评论 -
什么是分布式系统,如何学习分布式系统
《什么是分布式系统,如何学习分布式系统》转载 2019-08-25 17:55:50 · 106 阅读 · 0 评论 -
License设计
What is License Management License是对软件使用的许可,可分为资源型和功能性许可。 资源型License 对软件使用数量,内存,容量,期限等使用资源的限制或许可。 功能型License 对软件的功能列表的限制或许可。Design Principles 设...原创 2018-11-06 21:22:32 · 1555 阅读 · 1 评论 -
切面AOP追踪大法--参数追踪法
前言切面AOP 是指,系统运行时,动态的将代码切入到指定的地方执行,常在日志,事务,访问控制,过滤器等地方使用。在面向对象编程(OOP)时,我们将不同功能分割在不同的对象中管理,尽可能的满足单一职责原则。这样做的好处时降低程序复杂性,提高代码复用性。但是,多个类存在相同的行为,例如,它们都需打印日志,事务,又例如,在删除数据之间都需要对删除操作做权...原创 2019-04-30 16:28:03 · 1438 阅读 · 0 评论 -
重构之Code Small 代码的坏味道
前言本篇文章的内容是学习完《重构 改善既有的代码设计》而整理的内容,其中有一些是我在运用这些重构手法的的理解。写代码如同写文章,好的文章总是能让人津津乐道,而坏的文章读起来味同嚼蜡。评论一篇文章的好坏,首先要看语言是否表达通畅,然后要看文章结构组织是否合理。软件编程亦如此。重构教你如何将代码书写得通顺,那么《设计模式》就是将代码合理组织起来的内经心...原创 2019-05-27 21:35:47 · 712 阅读 · 0 评论 -
对异常处理的思考
简介 程序运行的分支中,正确结果只有一种,而异常情况却有很多种。在刚开始编程时,我几乎把所有的关注点都放在了那唯一的一条正确分支上,很少处理异常。然而,当那些不得不处理的异常处理代码添加到我的代码中时,突然发现,代码的逻辑变得混乱了。了解异常 异常的有两大类,Error和Exception。 Error 一般是 JVM 处理不了,可能导致JVM崩溃...原创 2019-05-31 21:51:19 · 207 阅读 · 0 评论 -
String 工具之StrSubstitutor, 字符替换
字符替换,可以使用正则表达式对匹配的字符进行替换,这种方式比较灵活。而StrSubstitutor是一个工具类,它的目的也是字符替换,但是它封装了由正则表达式灵活性带来的复杂性,从而以更简单,通用的方式组织数据。 首先,明确它是apache工具包下的一个类;然后来学习学习它的简单调用。1 简单的调用。 Map valuesMap = new HashMap()...原创 2019-06-19 18:29:23 · 16098 阅读 · 2 评论 -
卸载动态库DLL(Dynamic Link Library)
在给热部署系统热加载资源时,如果不掌握对象和资源的生命周期,系统运行时很容易产生一些意想不到的错误。从Jar 加载到系统中,到被替换,不同的资源生命周期是不一样的。 首先是对象,如果一个对象没有手动的丢弃,那么它的生命周期与加载它的 ClassLoader 生命周期一样。销毁对象时,只需要确保对象的引用为 null 即可,清理游离的对象的工作由GC处理。 ...原创 2019-06-19 19:08:25 · 2554 阅读 · 0 评论 -
单元测试—— Spring @Scheduled
系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— 强大的 PowerMock》Maven依赖 <dependency> <groupId>junit</groupId> <artifac...原创 2019-07-04 16:52:06 · 4817 阅读 · 0 评论 -
单元测试—— Mock 对象行为之 Mockito
系列文章《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— 强大的 PowerMock》《单元测试—— Spring @Scheduled》前言 本章要介绍的工具时 Spring 的单元测试工具之一,Mockito,Mock对象的行为。 满足单一职责原则的类,都有自己独立的功能与行为,而类与类之...原创 2019-07-24 15:19:02 · 1878 阅读 · 0 评论 -
单元测试—— 强大的 PowerMock
系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— Spring @Scheduled》 Mockito 这个测试工具已在前面的文章写道,它能够 Mock 对象的行为,模拟测试对象的依赖,基本上能够满足大多数的单元测试。但是 Mockito 不可以实现对...原创 2019-07-30 15:32:25 · 404 阅读 · 0 评论 -
单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner
系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— 强大的 PowerMock》《单元测试—— Spring @Scheduled》前言 上篇文章《单元测试—— Mock 对象行为之 Mockito》介绍的实践部分是运行MockitoJUnitRunner 上的,Mockito 它可以模拟 Bean 的行为,但是它并没有真正的创建 Bea...原创 2019-07-25 17:50:32 · 3697 阅读 · 0 评论 -
Retry,Spring 重试策略
前言 失败了重来,重试策略在一定程度上提高了程序的健壮性。一些偶尔失败的程序,例如web服务的短暂网络故障,第三方设备故障,如果第一次运行失败,在接下来的重试能够保证程序运行成功,那么这段程序就应该引入重试策略,保证程序的健壮。 最简单的重试策略就是 while 循环,这里介绍 Spring 的重试策略其底层实现也是while循环,只是对其进行了封装,然后对外提...原创 2019-07-22 20:57:09 · 618 阅读 · 0 评论 -
Java多线程什么时候释放锁—wait()、notify()
什么时候释放锁:(1)当前线程切换为wait 状态时释放同步锁(2)当同步块执行结束时释放同步锁正确阻塞线程示例:(在同步块中,在循环中调用阻塞方法) public void execute() throws InterruptedException { synchronized (this) { while (isAwakened...转载 2019-08-25 17:00:36 · 427 阅读 · 0 评论 -
Java 获取运行程序安装路径
System.getProperty("user.dir");原创 2018-11-06 18:54:36 · 3508 阅读 · 0 评论