
java源码
java源码
一只小小狗
大家好我是练习时长2年半的程序员
展开
-
--enable-preview JDK预览新功能运行打包
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。以下这段代码是无法运行的。启动成功,并且可以打包。原创 2023-12-05 17:45:52 · 800 阅读 · 0 评论 -
Type definition error: [simple type, class xxx.xxx.xxx]; nested exception is com.fasterxml.jackson.d
这个错误是因为 Jackson 试图将 JSON 数据反序列化为 XXX类的实例,但是 XXX是一个接口或抽象类,Jackson 不知道应该实例化哪个具体的类。一种解决方法是创建一个 XXX 的具体实现类,并告诉 Jackson 使用这个类来反序列化 JSON 数据。你可以使用 @JsonDeserialize 注解来实现这个目标。// ...// 实现 HistoricProcessInstance 接口的方法我的Github地址。原创 2023-12-04 17:24:02 · 3031 阅读 · 0 评论 -
Java 锁 面试题(ReentrantLock、synchronized)
可重入锁是指同一个线程可以多次获得同一把锁,而不会被阻塞。ReentrantLock和synchronized都是可重入锁。概念,具体实现方式有很多种。乐观锁认为数据一般不会造成冲突,所以不会上锁,而悲观锁认为数据一般会造成冲突,所以会上锁。自旋锁是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU。公平锁是指多个线程按照申请锁的顺序来获取锁,非公平锁是非顺序的,非公平锁的优点在于吞吐量比公平锁大。原创 2023-05-28 03:44:08 · 1767 阅读 · 0 评论 -
线程池面试题
抛出来拒绝新任务的处理。:调用执行自己的线程运行任务,也就是直接在调用execute方法的线程中运行(run)被拒绝的任务,如果执行程序已关闭,则会丢弃该任务。因此这种策略会降低对于新任务提交速度,影响程序的整体性能。如果您的应用程序可以承受此延迟并且你要求任何一个任务请求都要被执行的话,你可以选择这个策略。:不处理新任务,直接丢弃掉。:此策略将丢弃最早的未处理的任务请求。通过构造函数来创建(推荐)。原创 2023-05-28 03:41:40 · 1765 阅读 · 1 评论 -
ArrayList扩容机制
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-28 03:39:53 · 468 阅读 · 0 评论 -
HashMap面试题
为了减少哈希冲突,提高查询效率。数组大小是 2 的幂次方,那么取模运算可以转化为位运算,效率更高。原创 2023-05-28 03:37:20 · 901 阅读 · 0 评论 -
HashMap 、 HashSet 、 Hashtable 、 ConcurrentHashMap 、TreeMap 的区别是什么
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-28 03:37:23 · 2148 阅读 · 0 评论 -
ArrayList(数组) 和 LinkedList(双向链表) 的区别是什么?使用ArrayList而不使用LinkedList的原因
[toc](ArrayList(数组) 和 LinkedList(双向链表) 的区别是什么?使用ArrayList而不使用LinkedList的原因)原创 2023-05-28 03:34:05 · 755 阅读 · 0 评论 -
List Set Map Queue Deque 之间的区别是什么?
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-28 03:34:29 · 773 阅读 · 0 评论 -
Java 集合面试题、Map面试题、List面试题等
为了减少哈希冲突,提高查询效率。数组大小是 2 的幂次方,那么取模运算可以转化为位运算,效率更高。原创 2023-05-28 03:33:33 · 968 阅读 · 0 评论 -
Java中 动态代理的应用场景
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-23 16:20:07 · 473 阅读 · 0 评论 -
Java使用JDK动态代理和CGLIB动态代理,代码示例
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-23 16:18:41 · 174 阅读 · 0 评论 -
JDK动态代理 VS CGLIB动态代理
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-23 16:16:04 · 415 阅读 · 0 评论 -
动态代理是什么?
欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-05-23 16:14:28 · 567 阅读 · 1 评论 -
位运算判断两数符号是否相异
1 : 1;原创 2022-11-22 15:10:18 · 269 阅读 · 0 评论 -
Java中的 字符串和枚举之间的转换?
【代码】Java中的 字符串和枚举之间的转换?原创 2022-11-13 20:12:15 · 1967 阅读 · 0 评论 -
泛型方法的重载、JAVA的泛型?泛型擦除
Java的方法重载一般指在同一个类中的两个同名方法,规则很简单:两个方法必须具有不同的方法签名;由于编译器不能仅仅通过方法的返回值类型来区分重载方法,所以如果两个方法只有返回类型不同,其它完全一样,编译是不能通过的。这个时候会编译器报错,由于Java的泛型采用擦除法实现,List和List在运行时是完全一样的,都是List类型。只有返回值类型不同,这在两个普通方法的重载中是不允许的,一个类不能同时继承两个具有相同擦除类型的父类,也不能同时实现两个具有相同擦除的接口。原创 2022-09-09 10:31:14 · 942 阅读 · 0 评论 -
什么是LRU缓存淘汰算法?JAVA在链表中使用指针简单实现
什么是LRU缓存淘汰算法?JAVA在链表中使用指针简单实现什么是LRU缓存淘汰算法?简单的一个实现总结什么是LRU缓存淘汰算法?链表的三种策略先进先出策略 FIFO(First In,FirstOut)最少使用策略 LFU(Least Frequently Used)最近最少使用策略 LRU(LeastRecently Used)也就是将最近最少使用的数据进行淘汰删除。我们维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从链表头开始顺序遍历链表原创 2022-04-29 16:45:50 · 1115 阅读 · 2 评论 -
深入理解数组
深入理解数组如何实现随机访问?低效的“插入”和“删除”,如何高效?插入操作删除操作相比我们常用的Java ArrayList 我们在java中可以使用数组的场景如何实现随机访问?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址:a[i]_address = base_address +原创 2022-04-28 17:57:19 · 200 阅读 · 0 评论 -
异步同步阻塞非阻塞概念理解、JAVA中的三种(B、N、A)IO
五种IO模型、JAVA中的三种(B、N、A)IO1. 概念介绍1.1 什么是IO1.2 同步与异步,阻塞与非阻塞的区别1.2.1 同步1.2.2 异步1.2.3 阻塞1.2.4 非阻塞1.3 阻塞和非阻塞对CPU的影响1.4 形象比喻1. 概念介绍1.1 什么是IOJava中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的原创 2022-04-27 10:59:35 · 230 阅读 · 0 评论 -
java 中的转义问题
正常文字转义成字符串1.Java字符串中的转义字符转义字符意义\ttab\b退格键(在文本中向后退一步或删除单个字符)\nnew line 新行\r回车\f换页’单引号"双引号\反斜杠这个一般不需要担心,只要从外界读取出的文字就会在编译器中自动转义,并且输出时自动在转义成正常的形式。2.Java中JSON字符串的转义原文JSON{ "":""}字符串中JSON ,主要注意点就是在"增加转义 Stri原创 2022-04-26 11:10:26 · 4498 阅读 · 0 评论 -
值传递和引用传递,Java只存在值传递
值传递和引用传递值传递:引用传递:值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。值的引用一直都没有改变,指向的堆内存位置也没有改变,所以不存在引用的传递。如有错误欢迎指正...原创 2022-04-25 17:31:52 · 680 阅读 · 0 评论 -
接口和抽象类的区别,深入理解,场景
接口和抽象类的区别基础的三点深入理解场景基础的三点在类的层面,接口是多实现,而抽象类是单继原创 2022-04-25 13:31:48 · 233 阅读 · 0 评论 -
10亿手机号如何去重?(BitMap)
10亿手机号如何去重方案一使用数组方案二使用HashSet方案三BitMapjava.util.BitSet分桶理论方案一使用数组一个数组存入10亿数据,第一位手机号一定为1则忽略。如果存储的是String类型 存储10e个 需要9.5GB左右。如果存储的是Long类型 存储10e个 需要7.5GB左右。进行for循环运算效率很低,内存占用很大。方案二使用HashSetHashSet底层使用HashMap,需要记录hash值、value、key、next节点等各种各样的东西。消耗内存可想而知原创 2022-03-17 00:34:57 · 3453 阅读 · 0 评论 -
IO操作学会使用缓冲区和流式复制
在进行文件 IO 处理的时候,使用合适的缓冲区可以明显提高性能测试 //使用BufferedInputStream和BufferedOutputStream private static void bufferedStreamByteOperation() throws IOException { try(BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream原创 2022-03-11 00:21:24 · 427 阅读 · 0 评论 -
如何读取大文件?(java) 流式读取Files.lines()
如何读取大文件?(java) 流式读取当文件过大,并且你设置的 内存过下或者无法满足文件内存,一次性读取就会出现OOM内存溢出。当这时可以使用 Files.lines() 方法解决与 readAllLines 方法返回 List 不同,lines 方法返回的是 Stream。这,使得我们在需要时可以不断读取、使用文件中的内容,而不是一次性地把所有内容都读 取到内存中,因此避免了 OOM。 LongAdder longAdder = new LongAdder();原创 2022-03-11 00:08:11 · 3350 阅读 · 0 评论 -
Files.readAllLines()读取文件,无需担心字符集乱码问题
当读取一些特殊编码保存的文件时,读取时会出现乱码。当存入一个编码比如 GBK,都会转化为二进制存储,而GBK存储汉字为二个字节,UTF-8为三个字节,取出的时候使用UTF-8会造成乱码。使用Files.readAllLines(Path path, Charset cs)Files.readAllLines(Paths.get(""), Charset.forName("UTF-8"));会将文件一行一行读取,并且变为List集合返回。...原创 2022-03-10 23:46:06 · 5799 阅读 · 0 评论 -
全局异常处理?如何正确使用?
全局异常处理使用中的问题不在业务代码层面考虑异常处理,仅在框架层面粗犷捕获和处理异常。建议Controller层返回给用户友好信息,而不再Service业务中捕获。如果在Service 层捕获,往往涉及数据库事务,否则事务无法自动回滚。捕获了异常后直接生吞(无法找到BUG)不记录不抛出,导致无源可查丢弃异常的原始信息这个问题下一班建议先写入log日志,在捕获的同时就开始写入日志。catch (IOException e) {log.error("文件读取错误", e);thro原创 2022-03-09 23:54:14 · 294 阅读 · 0 评论 -
为什么不使用LinkedList (java)
教科书上的内容对于数组,随机元素访问的时间复杂度是 O(1),元素插入操作是 O(n);对于链表,随机元素访问的时间复杂度是 O(n),元素插入操作是 O(1)。由此可见在随机插入中应该会使用LinkedList ,但在实际中并不是这样。在大多数场景中ArrayList 在各种性能下都远胜LinkedList ,可以自行测试。这里只说明为什么不用。不能只考虑算法在LinkedList 中,在实现的时候,我们需要先通过循环获取到那个节点的 Node,然后再执行插入操作。前者也是有开销的,不可能只原创 2022-03-05 20:36:17 · 1037 阅读 · 0 评论 -
ArrayList和hashMap和HashSet之间的选择
1.时间消耗在查找搜索的功能中ArrayList的时间复杂度是O(n),而HashMap的时间复杂度是O(1)。如果需要较高的速度下,更多想选择HashMap2.空间消耗一个存储相同时间的HashMap和ArrayList对内存的消耗比是不一样的,ArrayList的内存含金量有70%而HashMap只有百分之20%如果在内存受限的情况下更多选择ArrayList3.去重效果在去重中ArrayList会使用 contains方法但是 contains个方法也是通过查找来进行的如同下列代原创 2022-03-05 20:24:55 · 529 阅读 · 0 评论 -
List.subList 进行切片操作导致 OOM
当使用List中的切片操作时,导致内存溢出错误。定义一个名为 data 的静态 List 来存放 Integer 的 List,也就是说 data 的成员本身是包含了多个数字的 List。循环 1000 次,每次都从一个具有 10 万个 Integer 的List 中,使用 subList 方法获得一个只包含一个数字的子 List,并把这个子 List 加入 data变量: private static List<List<Integer>> data = new A原创 2022-03-05 20:13:36 · 991 阅读 · 0 评论 -
java中 集合里存放的是对象的引用还是对象实例?
添加一个对象到集合中时,集合里面存放的是对象的引用既然存放的还是引用,那么涉及到一个问题,也就是说,当改变存放的这个对象实例的原本的值,这个集合内的数据也会改变。import java.util.ArrayList; import java.util.List; public class Test5 { public static void main(String args[]){ List<User> userList1 =原创 2022-03-05 19:58:44 · 817 阅读 · 0 评论 -
Java中的四种引用方式
引用等级: 强引用 > 软引用 >弱引用 >虚引用Java通过对象的四种引用从而控制,对象的生命周期。强引用(StrongReference)范围:强引用是使用最普遍的引用。效果说明:如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。问题:虚拟机宁可让整个程序崩溃也不愿意回收,导致程序稳定性收到巨大影响。案例Object原创 2022-03-04 18:04:36 · 820 阅读 · 0 评论 -
关于反序列化时抛出java.io.EOFException异常
反序列化时抛出java.io.EOFException异常问题描述:在反序列化对象时,对象IO流将文件的全部类反序列化之后,始终会抛出java.io.EOFException.(想把序列化的对象一个一个拿出)原因:java API文档中对于反序列化对象时使用的java.io.ObjectInputStream类的readObject()方法的描述有一句话是"该方法始终会抛出异常",也就是说该异常无法避免的.案例代码 ObjectInputStream ois2 = null;原创 2022-03-04 17:11:35 · 4310 阅读 · 0 评论 -
Arrays.asList()的三个坑
1.不能直接使用 Arrays.asList 来转换基本类型数组 int[] arr2 = {1, 2, 3}; List list2 = Arrays.asList(arr2); System.out.println(list2 + ":"+list2.size());可以看到这里list存储的是一个 Int类型的数组,而不是将其中的分别进行存储1.1debug点开内部代码发现非基本类型的存储后,在转化过程中变成了 分开的数组基本类型在 转化原创 2022-03-03 21:41:21 · 380 阅读 · 0 评论 -
数值溢出的问题,如何监控数值溢出?(java)
1.数值溢出问题当定义一个long给他赋值long i = Long.MAX_VALUE+1;在这个基础上+1会直接变成负数-9223372036854775808同样的几种基本类型都有这样的情况,数据不对也不会提示我们,并没有什么异常抛出。2. Math.addExact()监控溢出,抛出异常 long i = Long.MAX_VALUE; System.out.println(Math.addExact(i,1)); 会报出长度溢出3 BigI原创 2022-03-03 20:41:44 · 487 阅读 · 0 评论 -
java.lang.IllegalStateException: No match found
未找到匹配项import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexMatches { public static void main(String args[]) { String result = ""; String str = "32121123212"; String pattern = "([\\w]{2,})\\1"; Pattern r = Pattern原创 2022-03-03 18:00:20 · 213 阅读 · 0 评论 -
java.lang.InstantiationException: class has no zero argument constructor
java.lang.InstantiationException: class has no zero argument constructor顾名思义:JAVA实例化异常:类没有零参数构造函数加上无参构造器即可大部分时间还是建议加上无参构造器,免得使用工具创建pojo时会出错。...原创 2022-03-03 17:44:37 · 4401 阅读 · 0 评论 -
BigDecimal 判等问题
BigDecimal存在的判等问题1.打开源码查看BigDecimal 的equals方法2.解决方法 使用 compareTo仅仅进行值比较3.解决:BigDecimal在集合中使用3.1解决方案13.2解决方案2BigDecimal 可以解决浮点数精确的问题,但是浮点数在判等上又有无法和正常基本路线判等的效果。基本类型可以使用==进行判等,但是BigDecimal 并非基本类型,判等时一般会使用equals。 System.out.println(1.0==1);原创 2022-03-02 14:39:15 · 1229 阅读 · 0 评论 -
危险的Double类型 (BigDecimal)
1.在java开发中进行浮点数精确运算的时候会出现与预期结果不成立问题System.out.println(0.1+0.2);System.out.println(1.0-0.8);//结果0.300000000000000040.19999999999999996出现这种问题的主要原因是,计算机是以二进制存储数值的,浮点数也不例外。Java 采用了IEEE 754 标准实现浮点数的表达和运算。比如,0.1 的二进制表示为 0.0 0011 0011 0011… (0011 无限循环),原创 2022-03-02 14:04:48 · 335 阅读 · 0 评论