
build-in class 分析
静谧之心
专业摩的佬
业余吉他手
退役喷子
拍照小法师
展开
-
Java中String与File的互相转换
今天有这个需求, 记了下来, 算是搬运, 感谢!字符串转文件/** * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!) * * @param res 原字符串 * @param filePath 文件路径 * @return 成功标记 */ public static boolean string2Fi原创 2021-06-08 18:23:36 · 10612 阅读 · 0 评论 -
从RedisTemplate, StringRedisTemplate 的序列化异同引发的思考
长话短说:StringRedisTemplate, RedisTemplate 都是redis在Spring中的封装的模板工具类StringRedisTemplate 从名字看, 是用来存取String的RedisTemplate 从名字上看, 是什么都能干, 包含上面的两种实现都会将key使用对应的不同的序列化实现类实现因为是不用的序列化实现类, 所以出现了一个现象:比如在StringRedisTemplate中 将 a --> value 存入但是在 RedisTemplate 中原创 2021-04-27 17:52:23 · 6067 阅读 · 9 评论 -
利用序列化实现最优雅的深拷贝
最近碰到个线程安全问题, 遂想起是引用问题, 网上搬来的解决方案, 感觉很好, 记录一下 public static <T extends Serializable> T clone(T obj) throws IOException, ClassNotFoundException { ByteArrayOutputStream ous = new ByteArrayOutputStream(); ObjectOutput objectOutput = new原创 2021-01-21 17:36:33 · 614 阅读 · 0 评论 -
关于SpringBoot定时任务懒加载的问题
今天偶然发现springboot的@Schedule定时任务不执行, 因为这个bean是被默认延迟加载的.不多说, 最终加上关闭懒加载搞定. @Lazy(false) @PostConstruct @Scheduled(fixedRate = 60 * 1000) public void refreshL2Cache() { .... }...原创 2020-11-20 11:26:12 · 1785 阅读 · 1 评论 -
OKHTTP 回收资源的坑
最近使用OKHTTP发现不能重复读取返回体数据看了大佬的博客 https://blog.youkuaiyun.com/my_truelove/article/details/80133556总结一下:当我们第一次调用 response.body().string() 时,OkHttp 将响应体的缓冲资源返回的同时,调用 closeQuietly() 方法默默释放了资源。在实际开发中,响应主体 RessponseBody 持有的资源可能会很大,所以 OkHttp并不会将其直接保存到内存中,只是持有数据流连接。原创 2020-10-15 10:15:58 · 3790 阅读 · 0 评论 -
Java效率提升之 你现在还不会Stream() 函数式遍历集合?
JDK1.8的作者是Scala的作者 所以必然 --> FP(函数式编程)stream()函数是主要用于集合而言的,对于数组就没效果生成流函数把集合装成流,可以多次使用这个集合,但是不转换流的话,只能用一次,这就是转换成流的好处stream() − 为集合创建串行流。parallelStream() − 为集合创建并行流。List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");原创 2020-08-04 15:56:29 · 847 阅读 · 0 评论 -
Java 效率提升系列之 Optional对象
Optional 类(java.util.Optional)它是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。常用方法:Optional.of(T t) : 创建一个 Optional 实例。Optional.empty() : 创建一个空的 Optional 实例。Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例。原创 2020-07-07 10:41:01 · 676 阅读 · 0 评论 -
Java,小而有料的final
原文链接: https://zhuanlan.zhihu.com/p/61092019final这块肉虽然小,但不可不知,因为不仅面试可能会问,实际中也常使用。就问你常量声明时你为什么要加final?它有哪些作用?你思考过吗?final通常指被修饰的东西不能被改变的,不能被改变的原因旺往往出于设计和效率的考虑。先看final能修饰什么?修饰变量修饰方法修饰类修饰参数不同的修饰...原创 2020-04-20 15:06:53 · 202 阅读 · 0 评论 -
硬核讲解JDK1.8的ConcurrentHashMap为何放弃分段锁改用CAS + synchronized
jdk1.7分段锁的实现和hashmap一样,在jdk1.7中ConcurrentHashMap的底层数据结构是数组加链表。和hashmap不同的是ConcurrentHashMap中存放的数据是一段段的,即由多个Segment(段)组成的。每个Segment中都有着类似于数组加链表的结构。关于SegmentConcurrentHashMap有3个参数:initialCapacity:初...原创 2020-04-15 04:21:03 · 40034 阅读 · 13 评论 -
ConcurrentHashMap为什么比HashTable性能好?
ConcurrentHashMap为什么比HashTable性能好?答:ConcurrentHashMap里使用了Segment分段锁+HashEntry,而HashTable用的是Syncronized锁全部,所有线程竞争一把锁。Segment分段锁继承ReentrantLock,在并发数高的时候,ReentrantLock比Syncronized总体开销要小一些。参考 :https://...原创 2020-04-15 03:08:38 · 1155 阅读 · 0 评论 -
HashMap在 JDK1.7中的线程安全问题
HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。产生死循环的过程(仅在jdk1.7有效, 1.8由于变成了尾插法, 虽然也有并发线程安全问题, 但是不会造成死循环了) /**对HashMap进行容量扩充 * Transfe...原创 2020-04-15 02:37:21 · 537 阅读 · 0 评论 -
一文搞懂HashMap工作原理和扩容机制(深度对比JDK1.7和JDK1.8)
HashMap简介HashMap基于哈希表的Map接口实现,是以key-value存储形式存在.系统会根据hash算法来计算key-value的存储位置,可以通过key快速存取value.HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。key相同的查找? 因为key本身就是对象, 具有hashcode(...原创 2020-04-14 10:05:22 · 1903 阅读 · 1 评论 -
HashMap 1.7和1.8的区别
底层数据结构不一样,1.7是数组+链表,1.8则是数组+链表+红黑树结构(当链表长度大于8,转为红黑树)。JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。扩容后数据存储位置...原创 2020-04-14 08:16:41 · 800 阅读 · 0 评论 -
深入浅出HashMap原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...原创 2019-12-26 05:35:25 · 664 阅读 · 0 评论 -
一句话描述volatile关键字如何保证可见性
被volatile关键字修饰的变量,在每个写操作之后,都会加入一条store内存屏障命令,此命令强制工作内存将此变量的最新值保存至主内存;在每个读操作之前,都会加入一条load内存屏障命令,此命令强制工作内存从主内存中加载此变量的最新值至工作内存。...转载 2019-12-10 06:33:07 · 486 阅读 · 0 评论 -
JFileChooser Java提供的文件选择框(Swing)
package HaoxuanLi_Homework5;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.sw...原创 2019-11-16 15:31:16 · 371 阅读 · 0 评论 -
Java11(JDK11)中String的trim() 和 strip()的区别
JDK11发布也快两年了吧,strip()方法是JDK11中新方法,和trim()作用相同,就是去掉字符串的开始和结尾的空白字符。本文主要介绍一下他们之间的区别。1、trim()方法不足之处trim()早在Java早期就存在,当时Unicode还没有完全发展到我们今天广泛使用的标准。trim()方法移除字符串两侧的空白字符(空格、tab键、换行符)支持Unicode的空白字符的判断应该使用...原创 2019-10-30 04:07:05 · 8076 阅读 · 0 评论 -
RandomAccessFile 详解
RandomAccessFileRandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(Da...转载 2019-10-25 10:04:31 · 2652 阅读 · 2 评论 -
StringBuilder StringBuffer 多线程优缺点
StringBuilder 线程不安全 快StringBuffer 线程安全 慢原创 2019-09-25 07:46:48 · 959 阅读 · 0 评论