
java基础
文章平均质量分 66
shenzhou_yh
个人博客:www.shenzhouyh.top
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
利用反射实现自定义比较器
问题背景需求:从第三方获取数据列表,传到前台进行展示,目前前台需要可以根据任意字段进行排序(升序和降序),但是第三方接口不支持排序功能,所以需要手动实现数据的排序。问题分析方案一:数据入库将第三方数据存储到数据库中,直接可以根据sql进行排序输出。缺点:本来就是实时数据,但是从数据库饶了一圈,先将数据写入,再将数据读出,增加了两次的数据库IO方案二:根据字段进行排序根据前台上送的字段信息和升降序信息,实现列表的排序功能。缺点:因为字段不确定,如果针对每个字段都实现一种排序方式,再加原创 2021-01-31 23:57:41 · 239 阅读 · 0 评论 -
Unboxing of ‘xxx‘ may produce ‘NullPointerException‘
背景今早在排查生产日志的时候发现了一个空指针异常,遂跟踪了一下,最后发现报异常的代码如下if (null != vo.getLongitude()) { rsp.setDistance(Objects.isNull(map.get("distance")) ? null : (double) map.get("distance")); } //distance定义 private double distance;以上代码逻辑很简单,就是在经度不为空且计算的原创 2020-10-15 10:16:47 · 24966 阅读 · 0 评论 -
RSA算法解密 javax.crypto.BadPaddingException: Decryption error 异常
背景最近需要对接京东的一个会员管家嵌入到小程序当中,在进行接口请求时,需要对敏感的字段进行RSA加密处理,所以想写一个工具类方便调用。生成秘钥、加密明文都没问题,就是在解密的时候时候出现了一下异常:原因在使用公钥加密的时候,最后我用了Base64进行了编码Base64.getEncoder().encodeToString(encryptedData)而在我进行解密的时候,直接使用了字符串的getByte获取了字节数组,导致得到的字节数组无法被秘钥解密。应该先使用Base64进行解码获取字节原创 2020-10-13 10:17:00 · 13183 阅读 · 3 评论 -
sun.misc.BASE64Decoder的替换方案,使用java.util.Base64代替
背景在项目进行编译时,控制台会出现以下警告信息,提示sun.misc.BASE64Decoder是内部API,会在将来的版本的进行删除,需要避免使用解决使用java.util.Base64来替代,如下:使用原始的BASE64Encoderpublic static String imageToBase64ByLocal(File file) { byte[] data = null; // 读取图片字节数组 try (InputStream in原创 2020-09-27 12:07:58 · 9929 阅读 · 0 评论 -
i++的线程安全性问题分析
背景今天分享一道常见的面试题:i++是线程安全的吗?既然这么问了,答案肯定是不安全啊,至于为啥不安全,咱们来说道说道分析前提谈到线程安全问题,那什么情况下会出现线程安全的问题呢,就是当多个线程操作同一个共享变量的时候,就会出现线程安全问题;那共享变量又是指哪些呢,就是存储在堆中即主内存的变量信息,包括全局变量、对象实例、静态变量等。而在方法内部的声明的临时变量是不会存在线程安全问题的,因为这些变量是存储在线程的工作内存中(即私有内存),线程与线程间是无法共享的。**所以,我们讨论的线程安全问原创 2020-09-23 11:19:45 · 2272 阅读 · 0 评论 -
辨析BigDecimal的toString()方法和toPlainString()方法
辨析BigDecimal的toString()方法和toPlainString()方法toString()toString方法会将BigDecimal的值以科学计数方式的字符串但是转换成科学计数的方式也是有场景的,并不是所有的值都会转为科学计数方式的字符串,网上好几篇文章感觉都是照搬的一样,并没有详细的说明什么情况会以科学计数的方式输出字符串, 只能自己去扒了一下源码,首先,任何一个BigDecimal都可以使用一个公式表示:unscaledValue × 10-scale解释一下:unsca原创 2020-08-11 10:32:39 · 31659 阅读 · 1 评论 -
BigDecimal去除尾部多余的0
方法new BigDecimal("100.20")).stripTrailingZeros().toPlainString()//100.2下一篇介绍一下toPlainString和toString的区别和用法原创 2020-08-11 10:31:22 · 360 阅读 · 0 评论 -
Bigdecimal除法异常Non-terminating decimal expansion
文章目录异常分析解决措施思考总结异常分析其实提示信息已经很明显了,出现了无限循环小数,无法返回bigdecimal的值,回顾一下项目中的代码方式:return new BigDecimal(baseMonth).divide(new BigDecimal(workDay)).setScale(2, BigDecimal.ROUND_HALF_UP);代码如上,使用baseMonth除以workDay,返回的值按照四舍五入的方式保留两位小数。但是还是出现了异常,原因就在于divide的调用方式。解原创 2020-06-16 11:55:40 · 1447 阅读 · 0 评论 -
java8中的Optional用法浅析
文章目录简介Option之前Option特性创建Optional对象Optional对象相关操作方法get()orElse(T other)ifPresent(Consumer<? super T>)orElseThrow(Supplier<? extends X> exceptionSupplier)其他Optional实践用于封装可能为null的值尽量不用于域模型中的某...原创 2020-05-07 15:11:24 · 4273 阅读 · 4 评论 -
浅谈Integer的缓存机制原理
来道常见面试题下面程序的输出结果是什么呢?public class IntegerTest { public static void main(String[] args) { Integer a = 100, b = 100, c = 200, d = 200; System.out.println(a == b); System.ou...原创 2020-02-29 23:48:12 · 927 阅读 · 0 评论