随笔分类 - JAVA基础
摘要:顺序集合(Sequenced Collections) 提供了几个新的接口,用于实现有序的集合。 在没有提供有序集合操作之前,我们进行集合的序列操作一般如下 First element Last element List list.get(0) list.get(list.size() - 1) D
阅读全文
摘要:Records Records(记录)是Java 16引入的一个新特性,旨在提供一种更简洁、更表达力的方式来声明用于存储和访问数据的简单类。Records通过自动生成常见方法,如构造函数、equals()、hashCode()和toString(),来减少样板代码的编写。 以下是Records的一些
阅读全文
摘要:Dynamic constant 以下是一个示例,演示了如何使用动态类文件常量(DCFC)来处理配置管理的情况。假设我们有一个简单的应用程序,它需要从配置文件中读取数据库连接信息。配置文件的路径和内容在运行时可能会发生变化,因此我们可以使用DCFC来动态计算这些值。 首先,我们创建一个包含动态常量的
阅读全文
摘要:Switch Expressions (Preview) "Switch Expressions" 是 Java 编程语言中的一个新特性,它在 Java 12 中作为预览功能引入,然后在 Java 13 中进一步完善。这个特性旨在改进和扩展传统的 switch 语句,以提供更强大的语法和功能。 以下
阅读全文
摘要:Text Blocks https://openjdk.org/jeps/378 Text Blocks(文本块)是Java语言中的一个特性,用于更容易地创建和处理多行文本字符串。这个功能是在Java 13中引入的,旨在改善多行字符串的可读性和可维护性。 以下是关于Text Blocks的一些关键信
阅读全文
摘要:密封类(Sealed Classes) Sealed Classes和interfaces限制了有哪些类可以继承和实现他们 目标 1.限制有哪些类可以继承和实现他们 2.提供一种具体的修饰符,更声明性的限制继承和实现 3.通过提供详尽分析模式,为进一步模式匹配提供基础 密封类对其子类有以下约束: 1
阅读全文
摘要:ArrayList的sublist方法 返回的是创建的List的内部类SubList的对象 public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, this.size); r
阅读全文
摘要:开闭原则 对新增开放,对修改关闭 开闭原则的使用方式 面向接口编程:定义清晰的接口,通过接口来定义方法,实现类实现接口,通过接口来调用方法。 抽象层编程:通过抽象层来定义方法,实现类实现抽象层,通过抽象类的子类来实现功能。 依赖倒置原则 依赖于抽象方法,而不是具体实现 主要内容: 高层模块不应该依赖
阅读全文
摘要:继承类和实现接口 可以看出LinkedHashMap继承了HashMap,那么主要方法都是和HashMap相同,那么主要看相对于HashMap重写了那些方法就能确定LinkedHashMap相对于HashMap的特征 public class LinkedHashMap<K,V> extends H
阅读全文
摘要:进行总结 1. TreeMap的数据结构是红黑树 存取都是根据红黑树的规则进行 https://www.cnblogs.com/perferect/p/13569671.html 2.Comparator比较器有两种 通过构造器传入 public TreeMap(Comparator<? super
阅读全文
摘要:参考博客:蟹粉小笼包https://www.cnblogs.com/aalex/p/8480112.html [美团技术团队文章]('https://tech.meituan.com/2022/05/12/principles-and-practices-of-completablefuture.h
阅读全文
摘要:对于我们而言,经常会遇到服务器服务出现异常的情况,一般情况下,我们可以通过查看应用日志解决。但是有些特殊情况就不适用了。 例如:服务器有段时间总是莫名挂掉了;应用访问变得特别慢;cpu占用突然变高又突然变低等等,这些就涉及到服务器管理相关操作。 最常见的异常:1.oom异常,服务器kill应用,我们
阅读全文
摘要:在集合使用中,我们经常会用到HashSet,一般用于过滤一组数据,保证数据唯一。今天看一下HashSet的源码,之前看过HashMap,再来看,HashSet可以说是很简单了。 源码分析 初始化 底层是通过HashMap存储数据的。 PRESENT成员变量用于HashMap的value值 priva
阅读全文
摘要:首先,我们先了解一下什么是阻塞队列: 当队列满了时,队列会阻塞插入元素的线程,直到队列不满; 当队列为空时,获取元素的线程会等待队列变成非空。 常用到的方法 上面是对阻塞队列的简单了解,下面重点分析一下LinkedBlockingQueue。 源码分析 Node节点 可以看出是单向的链表结构 sta
阅读全文
摘要:Semaphore主要用于对线程的控制,举个使用场景,几十个excel文件,数量千万。通过多线程几十个线程读取数据之后,要写入到数据库。但是数据库的连接数只有10。这个时候我们就要通过这个类对这些线程进行控制。因为数据写入时间过程,其他线程无法获取连接,出现无法获取数据库连接报错的情况。 主要的方法
阅读全文
摘要:CyclicBarrier一般也是用于对多个线程任务进行同步执行。是多线程并发开发中重要的一个工具类; 分析一下源码 初始化 //用于控制栅栏进入的锁 private final ReentrantLock lock = new ReentrantLock(); //条件锁 private fina
阅读全文
摘要:源码解析 内部锁结构 (共享锁) /** * 继承AQS,实现共享锁的获取和释放方法 */ private static final class Sync extends AbstractQueuedSynchronizer { Sync(int count) { setState(count);
阅读全文
摘要:数据结构(和ConcurrentHashMap类似) 存储数据的基础结构时Node的数组; 节点中保存的是当前节点的hash,主键Key,对应值value,链表的next; transient Node<K,V>[] table; static class Node<K,V> implements
阅读全文
摘要:参考书:《Java并发编程艺术》 在学习这一块知识之前,可以先学习一下JMM相关的知识,回过来再看这个问题,就很好理解:https://www.cnblogs.com/perferect/p/13680158.html volatile 特性 可见性:对一个volatile变量的读,总能看到任意线程
阅读全文
摘要:参考书:《Java并发编程艺术》 附图均来自:《Java并发编程艺术》 先了解一下基础的概念:什么是JMM? JMM(全称:Java Memory Model), JMM定义的是线程和主内存间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Lo
阅读全文

浙公网安备 33010602011771号