java
文章平均质量分 70
lik_lik
学生
展开
-
NUL: Invalid file path 问题源码分析
环境操作系统:Win11jdk:corretto-11 (亚马逊)xnio: 3.8.0Final起因在使用xnio库创建Channel时,需要用到对各系统“黑洞”的路径。而undertow中,引入了xnio库。xnio创建channel的代码:后出现报错信息:Exception in thread “main” java.io.IOException: Invalid file path。解决方案在 jvm 参数中,添加-Djdk.io.File.enableADS=true即可。原创 2022-05-31 15:18:49 · 2120 阅读 · 0 评论 -
Spring 事务失效解决
问题代码示例public interface AService { public void a(); public void b(); } @Service public class AServiceImpl implements AService{ @Transactional(propagation = Propagation.REQUIRED) public void a() { this.b();原创 2021-07-10 10:39:26 · 128 阅读 · 0 评论 -
idea spring 项目 添加本地lib 运行到tomcat
项目结构其中,lib即为本地lib库。添加lib到工程File-> Project Structure将需要的jar包都添加添加lib到WEB-INF/lib 目录添加完成后,效果如图所示,此时即可在运行到tomcat时,将其输出到lib下部署时打包打包的时候,应选择war,不是war exploded噢...原创 2020-11-05 16:34:12 · 3245 阅读 · 0 评论 -
HashSet概览
类介绍(注释)HashSet是基于HashMap、Set接口的实现,它不保证元素的遍历顺序。add、remove、contains、size 方法,时间复杂度是O(1)HashSet是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException常用方法源码构造函数无参构造函数// 内部组合的HashMapprivate transient HashMap<E,Object> map;public HashSet() {.原创 2020-07-10 15:37:57 · 12518 阅读 · 0 评论 -
TreeSet概览
类介绍(注释)TreeSet是基于TreeMap的实现,它可以通过自然排序、显式``传入的Comparator对元素进行排序。TreeMap(和其他的可排序的Map)中的元素,在没显式传入构造器的时候,一定要使该类 实现Comparable、equals方法。add、remove、contains 方法,时间复杂度是O(log(n))TreeSet是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException常用方法源码构造函数public.原创 2020-07-10 14:39:39 · 12523 阅读 · 0 评论 -
LinkedHashMap常用方法源码
类介绍(注释)add、contains、remove 方法,时间复杂度是O(1)。LinkedHashMap的遍历耗时,与_capacity无关,与map的size(元素多少)呈线性。_HashMap的遍历,可能比_LinkedHashMap更耗时,其和_capacity呈线性关系。LinkedHashMap是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationException。可以使用_Collections.synchronizedMap(new Link.原创 2020-07-05 13:20:25 · 5257 阅读 · 0 评论 -
TreeMap概览
相对于HashMap来说,TreeMap 是较简单的。类介绍(注释)TreeMap是红黑树的实现,它可以通过自然排序、构造时传入的Comparator对key进行排序。TreeMap(和其他的可排序的Map)中的元素,在没显式传入构造器的时候,一定要使该类 实现Comparable、equals方法。containsKey、get、 put、remove 方法,时间复杂度是O(log(n))TreeMap是非线程安全的,并发出错时,会快速失败,抛出ConcurrentModificationE原创 2020-07-02 10:06:55 · 2964 阅读 · 0 评论 -
Guava 优秀源码记录
Guava 优秀源码记录Maps.difference(差异)两个Map间 高效的差异算法(Maps.difference)其底层的实现也算是最优的实现了,只需要循环一次。入参就是两个 Map,比较之后能够返回四种差异:左边 Map 独有 key。右边 Map 独有 key。左右边 Map 都有 key,并且 value 相等。左右边 Map 都有 key,但是 value 不等。// 对比两个 map 的差异private static <K, V> void doDiff原创 2020-07-01 19:03:41 · 2970 阅读 · 0 评论 -
HashMap初步解析
参考美团技术团队-Java 8系列之重新认识HashMap一些Map的比较HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全.原创 2020-07-01 10:54:57 · 1907 阅读 · 0 评论 -
ArrayList 源码
ArrayList 源码ArrayList概览基本概念ArrayList 的结构较为简单,就是一个数组。结构如下图所示。ArrayList中有一些重要概念、属性:index:当前下标elementData:数组,该数组的大小,经常与 ArrayList 的size 混淆,需要注意。DEFAULT_CAPACITY:数组的初始大小,默认是 10size 表示当前ArrayList实际有多少个数据,没有使用 volatile 修饰;modCount :当前数组的版本号,数组结构有变动,就会原创 2020-06-27 20:24:15 · 4152 阅读 · 0 评论 -
Arrays、Collections、Objects方法源码
Arrays、Collections、Objects,都是对应对象的工具类。好的工具类通用的写法特征:构造器必须是私有的。这样的话,工具类就无法被 new 出来,因为工具类在使用的时候,无需初始化,直接使用即可,所以不会开放出构造器出来。工具类的工具方法必须被 static、final 关键字修饰。这样的话就可以保证方法不可变、不能被重写,并且可以直接使用,非常方便。我们需要注意的是,尽量不在工具方法中,对共享变量有做修改的操作访问(如果必须要做的话,必须加锁),因为会有线程安全的问题。除上述情况原创 2020-06-26 16:55:06 · 1888 阅读 · 0 评论 -
《深入理解Java虚拟机(第2版)》使用MethodHandle来解决相关问题——错误更正
《深入理解Java虚拟机(第2版)》使用MethodHandle来解决相关问题——错误更正2018.04.14 14:49 1132浏览使用MethodHandle来解决相关问题——错误更正在阅读《深入理解Java虚拟机(第2版)》第8章——虚拟机字节码执行引擎时,发现作者给出了一个关于MethodHandle来解决相关问题的例子。我们直接给出代码,问题位于内部类SON中的注释。pack...转载 2019-04-15 10:49:09 · 408 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记 第七章 虚拟机类加载机制
概述1. 虚拟机把描述类的数据从Class文件加载到内存2. 对数据进行校验、转换解析、初始化3. 最终形成可被虚拟机直接使用的java类型类加载的时机"类从被虚拟机加载到内存,到卸载出内存的生命周期": 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initial...原创 2019-04-13 21:26:55 · 1266 阅读 · 0 评论 -
《深入理解java虚拟机》第十章 早期(编译器)优化
java语法糖的味道泛型与类型擦除在java还没有出现泛型之前,只能通过Object是所有类型的父类、类型强制转换两个特点的配合来实现类型泛化。java中的泛型,只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型,并在相应地方插入了强制转型代码。List<String>和List<Integer>就是同一个类,泛型技术实际上是java语言的一颗语...原创 2019-04-16 18:52:29 · 8451 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记 第六章 类文件结构
jvm的语言无关性时至今日,商业机构和开源机构已经在Java语言之外发展出一大批在Java虚拟机之上运行的语言,如Clojure、Groovy、 JRuby、 Jython、 Scala 等。Java虚拟机只与"Class这种二进制文件"绑定。Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流。当遇到超过8位的数据项时,则会按照高位在前(大端)方式分割后存储。...原创 2019-04-13 08:51:20 · 2530 阅读 · 0 评论 -
《深入理解java虚拟机》 第八章 虚拟机字节码执行引擎
概述执行引擎是java虚拟机最核心的组成部分之一。在java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型称为各种虚拟机执行引擎的统一外观(Facade): 输入的是字节码文件 处理过程是字节码解析的等效过程 输出的是执行结果运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,是vm运行时数据区中的虚拟机栈...原创 2019-04-15 22:24:22 · 1403 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记 第四章 虚拟机性能监控与故障处理工具
命令行工具jpsjstatjinfojmapjhatjstackhsdisjdk的可视化工具jconsolevisualvm具体待补充。。。原创 2019-04-10 12:08:36 · 265 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记 第三章 垃圾收集器与内存分配策略
为什么我们要了解GC和内存分配?当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。对象已死吗在堆里面存放着Java世界中几乎所有的对象实例垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法(Referen...原创 2019-04-10 12:03:44 · 1368 阅读 · 0 评论