![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 71
Java基础知识博客,如JVM、集合、IO、并发等
xl拾一
这个作者很懒,什么都没留下…
展开
-
EasyExcel读取多sheet excel异常
使用Spring Boot集成EasyExcel进行导入excel多sheet,执行异常。原创 2023-07-24 20:49:04 · 2055 阅读 · 2 评论 -
Java同步集合 源码摘要
Java同步集合 源码摘要文章目录Java同步集合 源码摘要1. 迭代器核心接口快速失败ArrayList#Itr2. ListArrayListLinkedList3. MapHashMapNode和成员变量及默认值哈希计算getputresize1.7 尾插法死循环作用:一种访问集合的方法1. 迭代器核心接口interface Iterator<E> { boolean hasNext(); E next(); // default方法,抛Unsupport原创 2021-12-10 17:05:02 · 444 阅读 · 0 评论 -
Queue 源码阅读
Queue 源码阅读仅大致过了下,有问题的请指出,谢谢。版本1.8介绍主要接口及实现队列接口,抽象实现,优先级队列双端队列接口,双端队列实现Queueabstract class AbstractQueue<E>class PriorityQueue<E> extends AbstractQueue<E>Dequeclass ...原创 2020-01-15 12:46:45 · 123 阅读 · 0 评论 -
有向图 DFS+回溯检测环数量
key临接矩阵dfs递归遍历回溯标识数组:有向标识矩阵public class Graph { public static void main(String[] args) { int[][] graph = { {0, 2, 0, 0}, {0, 0, 3, 0}, {1, 0, 0, 4}, {2, 2, 0, 0} }; new Grap原创 2020-12-11 09:56:40 · 281 阅读 · 0 评论 -
编码——阿里巴巴Java开发手册笔记
编码——阿里巴巴Java开发手册笔记文章目录编码——阿里巴巴Java开发手册笔记①编程规约1、命名风格【强制】【规约】各层命名规约2、常量定义3、代码风格基本风格换行示例方法/if示例4、OOP规约5、日期时间6、集合处理7、并发处理8、控制语句9、注释规约10、前后端规约11、其他②异常日志1、错误码设计2、异常处理3、日志规约③单元测试④安全规约⑤MySQL数据库1、建表规约表容量2、索引规则3、SQL4、ORM⑥工程结构JVM参数⑦设计规约①编程规约1、命名风格【强制】不能以下划线或美元原创 2020-12-26 23:37:22 · 143 阅读 · 0 评论 -
归并排序与逆数对
归并排序与逆数对文章目录归并排序与逆数对一)分治法二)归并排序三)逆数对一)分治法分而治之,大化小。步骤:分解;递归解决子问题;合并;详情见:百度百科二)归并排序图源自:图解排序算法(四)之归并排序步骤见图:分解:递归分解数组,左半部分和右半部分解决:递归合并:合并左半部分和右半部分,都局部有序。Java实现:public class Merge { private static int[] init(int len) { int[] dat原创 2020-06-05 15:11:12 · 196 阅读 · 0 评论 -
lombok @Builder与.class
lombok @Builder与.class1:@Builder@Builder,生成的.class的构造器:Person(String name, SexEnum sex, int age, String description)@Builder + @NoArgs,生成的.class的构造器:编译报错,没有.class文件// @Builder所在行:14Error:(14) java: 无法将类 reflect.Person中的构造器 Person应用到给定类型;@Builder +原创 2020-12-20 01:08:55 · 310 阅读 · 1 评论 -
JMM简单总结
JMM概述Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有利武器并行处理。物理计算机中的并发CPU和内存的差异:速度。为了解决内存IO和CPU运算之间的速度差异,引入了高速缓存。CPU与缓存的差异:一致性。在共享内存多核系统(共享同一主存的多个处理器,每个处理器有独立的Cache)中,当涉及同一块主存时,可能导致各个CPU的缓存数据不一致,最后主存以哪个Cache的数据为准?引入一些协议,需要各个CPU读写Cache时都遵循这些协议,如MSI、原创 2020-11-22 10:26:51 · 270 阅读 · 2 评论 -
线程池源码阅读(二)
线程池源码阅读(二)仅大致过了下,有问题的请指出,谢谢。版本1.81 线程池添加任务通过一个样本场景了解添加任务流程。样本场景线程池配置:核心线程数:3最大线程数:5keepAliveTime:10s阻塞队列LinkedBlockingQedue:5线程工厂:默认拒绝策略:默认任务:输出1,睡眠300s,输出2执行:添加9个任务至线程池调试submit提交任...原创 2020-01-17 13:29:44 · 99 阅读 · 0 评论 -
二维数组排序
二维数组排序int[][] arr = {{1, 2, 3}, {4, 7, 9}, {3, 3, 5}};Arrays.sort(arr, Comparator.comparingInt(a -> a[0]));public static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor) { Objects.requireNonNull(keyExtract原创 2020-11-23 19:17:32 · 153 阅读 · 0 评论 -
线程池源码阅读(一)
线程池源码阅读(一)仅大致过了下,有问题的请指出,谢谢。版本1.8类关系1. Executors提供创建ThreadPoolExecutor类的快速方法。建议:不要使用Executors类创建ThreadPoolExecutornewFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledT...原创 2020-01-16 18:51:00 · 140 阅读 · 0 评论 -
Vector 源码阅读
Vector源码阅读仅大致过了下,有问题的请指出,谢谢。版本1.8介绍属于废弃类,内部方法线程安全,原因:synchronized修饰。属性下述属性不像LinkedList和ArrayList使用transient修饰,但仍重写了writeObject()和readObject()protected Object[] elementDataprotected int elemen...原创 2020-01-15 11:09:31 · 94 阅读 · 0 评论 -
Java同步集合 源码笔记
ArrayList 源码阅读仅大致过了下,有问题的请指出,谢谢。版本1.8属性默认容量为:private static final DEFAULT_CAPACITY = 10最大容量为:Integer.MAX_VALUE - 8原因:部分VM在数组中保留header words(扩容时,当容量超出MAX_ARRAY_SIZE,会扩至Integer.MAX_VALUE)数据保存:t...原创 2020-01-14 16:19:19 · 90 阅读 · 0 评论 -
Java集合 HashMap小结
集合 Map HashMap文章目录集合 Map HashMap①存储结构②冲突解决③hash④定位桶④定位节点⑤扩容机制⑥树化和链表化⑦快速失败机制 fail-fast⑧JDK 7的死循环其他①存储结构数组链表红黑树②冲突解决拉链法常见冲突解决方式:开放地址法:线性探测、平方探查、双散列函数探查拉链法再哈希法建立公共溢出区③hash^运算符:对应位相同,值为0,对应位不同,值为1即:0^0=0, 0^1=1, 1^0=1常用:x^0=x说明:key的has原创 2021-01-01 17:03:26 · 103 阅读 · 0 评论 -
引用:强软弱虚
引用:强软弱虚分类强,软,弱,虚。强引用存在引用则不回收,即使OOM。T t = new T();// 使用// 回收:t置为null,下次GC原来指向的对象如果没有其他引用,会被回收t = null;软引用内存不够,GC会回收;内存够,则不回收。// 场景:-Xms20M -Xmx20M。软引用指向byte[10*1024*1024],然后byte[] bytes = new byte[10*1024*1024],此时内存不够,会回收软引用指向的byte[],然后将内存给byte原创 2020-12-02 16:14:12 · 103 阅读 · 0 评论 -
系列:《Java核心技术 卷1》笔记
《Java核心技术 卷1》笔记文章目录《Java核心技术 卷1》笔记一)简介1. 语言特点2. 数据类型3. 枚举类型4. 位运算符之移位5. 直接输出数组6. 新的日期时间7. Java的传参方式二)OOP1. 封装访问权限2. 继承3. 多态4. 类之间的关系5. 关键字6. 初始化顺序7. 抽象类和接口8. lambda表达式9. 内部类10. 函数式接口三)反射和代理1. 什么是反射2. 相关API3. 静态代理4. 动态代理角色实现机制四)异常体系1. 异常层次结构2. 非检查型异常3. 检查型原创 2020-05-24 01:44:50 · 734 阅读 · 0 评论 -
系列:多线程(四)J.U.C简介
系列:多线程(五)J.U.C简介文章目录系列:多线程(五)J.U.C简介构成1. volatile和CAS2. AQS3. 原子类4. LockReentrantLockReadWriteLock5. 同步器CountDownLatchCyclicBarriesSemaphore6. 阻塞队列7. 线程池 & Executors8. 并发容器9. Fork/Join参考构成[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4mZELyP-1596121383728原创 2020-07-30 23:04:03 · 182 阅读 · 0 评论 -
系列:IO模块
Java笔记文章目录Java笔记IO模块BIO流的分类装饰器模式 & 适配器模式装饰器模式适配器模式常用API节点流:数据源处理流demo1. 使用FIleInputStream2. 使用BufferedInputStream3. 序列化:基本类型+String、对象参考BIO + 网络编程主要APIdemo1. 通信2. 多客户端参考NIOLinux的IO模型NIO的JDK三大组件API简略部分说明(`**`)缓冲区说明通道说明demo1. 文件复制2. 简单聊天室参考IO模块常见数据源:文原创 2020-07-09 23:03:20 · 726 阅读 · 0 评论 -
系列:多线程(三)线程通信
Java多线程:线程通信简介线程之间不是相互独立的,需要相互通信和协作。通信方式wait + notify/notifyAllLock + Conditionvolatile共享内存:状态变量join等demo:模拟生产者-消费者public class PAndC { public static void main(String[] args) { Container container = new Container(); new Threa原创 2020-07-30 21:02:44 · 124 阅读 · 0 评论 -
系列:多线程(二)线程安全
多线程:线程安全原子三大特性原子性可见性有序性模拟不安全问题原子性一个对象Count count,10个线程执行+1 100次,输出最后结果(正确:1000)demo@Dataclass Count { private int count; public void add() { ++count; }}void test2() throws InterruptedException { ThreadPoolExecutor poo原创 2020-07-29 22:59:20 · 119 阅读 · 0 评论 -
系列:多线程(一)Thread
多线程: Thread属性属性说明作用name线程名称priority线程优先级daemon线程是否守护线程,true是false否private static int threadInitNumber;用于匿名线程的自动编号,作用于name属性For generating thread ID用于产生线程Id,作用于id属性private Runnable target;将要run的Runnableprivate ThreadGroup g原创 2020-07-30 21:05:20 · 178 阅读 · 0 评论 -
JVM系列之《深入了解Java虚拟机》笔记
《深入了解Java虚拟机》笔记文章目录《深入了解Java虚拟机》笔记一)简介二)关注1. 运行时数据区程序计数器Java虚拟机栈本地方法栈堆方法区运行时常量池其他直接内存2. 对象深入对象的创建``内执行顺序对象的内存布局对象的访问定位3. 垃圾收集垃圾收集区域垃圾对象探测问题1:相互循环引用Gc Roots对象四种引用类型垃圾对象的二次标记方法区回收垃圾收集算法标记-清除算法复制算法标记-整理...原创 2020-03-10 22:33:58 · 568 阅读 · 0 评论 -
记录一次碰到的并发安全问题
记录一次碰到的并发安全问题还未进行生产测试,若存在问题请指出。描述 两个线程A,B。共享一个ArrayList。 线程A接收数据,add到ArrayList,根据列表中的记录条数决定是否发送到中间存储件。 线程B定时执行发送。线程数2共享数据ArrayList<byte[]> buffer详细流程private final static int COUNT =...原创 2020-01-17 12:25:09 · 114 阅读 · 0 评论