![](https://img-blog.csdnimg.cn/20210224204013688.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
Java 编程思想学习笔记
知之为知
记录学习内容
展开
-
内存溢出问题排查
【代码】内存溢出问题排查。原创 2023-04-05 00:01:01 · 396 阅读 · 1 评论 -
easyExcel - 读Excel
官方文档: https://easyexcel.opensource.alibaba.com/docs/current/Java解析、生成Excel比较有名的框架有Apache poi、jxl。原创 2023-03-29 20:52:05 · 201 阅读 · 0 评论 -
结算流程图
结算原创 2023-01-11 16:06:25 · 142 阅读 · 0 评论 -
开发中的坑
开发中的踩坑原创 2023-01-11 10:08:13 · 58 阅读 · 0 评论 -
阿里QLExpress
阿里QLExpress原创 2022-08-31 22:34:36 · 459 阅读 · 0 评论 -
Java开发规范
Java开发规范原创 2022-06-17 15:47:42 · 198 阅读 · 0 评论 -
阿里OSS对象存储服务
阿里OSS对象存储服务原创 2022-06-13 11:48:19 · 289 阅读 · 0 评论 -
XxlJob+钉钉机器人实现天气提醒
(1).XxlJob《分布式任务调度平台XXL-JOB》源码结构:xxl-job-admin:调度中心xxl-job-core:公共依赖xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器) :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式; :xxl-job-executor-sample-原创 2022-04-09 16:14:31 · 624 阅读 · 0 评论 -
JUC-CompletableFuture异步回调
1.无返回值的 runAsync 异步回调2.有返回值的 supplyAsync 异步回调public class CompletableFuture_ { public static void main(String[] args) throws Exception { //没有返回值的异步回调 runAsync() CompletableFuture<Void> completableFuture1 = CompletableFuture.ru原创 2021-12-28 15:36:01 · 237 阅读 · 0 评论 -
JUC-Fork/Join分支合并框架
public class TestForkJoinPool { static class MyTask extends RecursiveTask<Integer> { private static final Integer VALUE = 10; private int begin; private int end; private int result; public MyTask(Integer原创 2021-12-28 15:35:08 · 101 阅读 · 0 评论 -
JUC-ThreadPool线程池
1.四种线程池public class ThreadPool_ { public static void main(String[] args) { //singleTheadPoolTest(); //fixTheadPoolTest(); //cacheThreadPool(); scheduleThreadPool(); } //corePoolSize=1,maximumPoolSize=1 //k原创 2021-12-28 15:30:52 · 268 阅读 · 0 评论 -
JUC-BlockingQueue阻塞队列
ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列(常用)PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列DelayQueue: 一个使用优先级队列实现的无界阻塞队列SynchronousQueue: 一个不存储元素的阻塞队列(常用)LinkedTransferQueue: 一个由链表结构组成的无界阻塞队列LinkedBlockingDeque: 一个由链表结构组成的双向原创 2021-12-28 15:27:27 · 335 阅读 · 0 评论 -
JUC-读写锁
1.乐观锁 vs 悲观锁悲观锁:每次在拿数据的时候都会上锁乐观锁:拿数据的时候不会上锁,在更新时候判断数据是否被修改过,可以使用版本号等机制,乐观锁适用于多读的应用类型,这样可以提高吞吐量2.表锁 vs 行锁表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高3.共享锁 vs 排他锁排他锁:ReentrantLock和synchronized为排他锁,同一时刻只允许一个线程进行访问共享锁:可原创 2021-12-28 15:23:51 · 73 阅读 · 0 评论 -
JUC-JUC辅助类
1.java.util.concurrent.CountDownLatchpublic class CountDownLatch_ { @SneakyThrows public static void main(String[] args) { //the number of times must be invoked before threads can pass through CountDownLatch countDownLatch = new C原创 2021-12-27 15:45:10 · 91 阅读 · 0 评论 -
JUC-Callable接口
一种是通过创建Thread类,另一种是通过使用Runnable创建线程Runnable无法使线程返回结果,为了支持此功能,Java中提供了Callable接口public class FutureTask<V> implements RunnableFuture<V>public interface RunnableFuture<V> extends Runnable, Future<V>Callable是一个函数式接口,和Runnable类似,多了返原创 2021-12-27 15:43:05 · 466 阅读 · 0 评论 -
JUC-多线程锁
1.可重入锁,可重入锁有synchronized、ReentrantLock某个线程已经获得某个锁,可以再次获取锁而不会出现死锁public class WhatReentrant { public static void main(String[] args) { new Thread(() -> { synchronized (WhatReentrant.class) { System.out.println原创 2021-12-27 15:41:49 · 188 阅读 · 0 评论 -
JUC-集合线程安全
1.List多线程不安全示例及解决方案//异常:java.util.ConcurrentModificationExceptionpublic class CollectionSafe { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 30; i++) {原创 2021-12-27 15:40:21 · 85 阅读 · 0 评论 -
JUC-线程间通信
1.synchronizedpublic class Test{ private int number = 0; //+1 public synchronized void increment() { try { while (number != 0) {//不能使用if,会存在虚假唤醒问题 this.wait(); } number++;原创 2021-12-27 15:39:13 · 63 阅读 · 0 评论 -
JUC-Lock接口
1.Synchronized实现同步的3种形式private synchronized void sell() {} //普通同步方法,锁是当前实例对象private synchronized static void sell() {} //静态同步方法,锁是当前类的class对象synchronized (对象) { //同步代码块,锁是synchronized括号内的对象} 2.synchronized 实现卖票案例//下面代码存在问题,不能完成互斥同步,原因:同步方法(非静态)的锁原创 2021-12-27 15:36:11 · 66 阅读 · 0 评论 -
JUC-JUC概述
JUC就是 java.util.concurrent 工具包的简称这是一个处理线程的工具包,JDK1.5 开始出现的进程与线程进程(Process)是系统进行资源分配的基本单位线程(thread) 是操作系统进行运算调度的最小单位并发与并行并行依赖于多核 CPU用户线程和守护线程用户线程:平时用到的普通线程,自定义线程守护线程:运行在后台,是一种特殊的线程,比如垃圾回收如果没有用户线程,都是守护线程,JVM 结束...原创 2021-12-27 15:34:32 · 298 阅读 · 0 评论 -
Java线程-基础
进程 VS 线程并发 VS 并行线程4种实现方法:1.Thread2.Runnable3.FutureTask+Callable4.使用线程池启动线程用cat.start() 为什么不是 cat.run()原因:cat.run是一个普通的方法,没有真正启动一个线程,就会把run方法执行完毕,才向下执行真正实现多线程的是private native void start0();源码分析:start() -> start0(),线程并不一定立马执行,只是将线程变为可运行状态原创 2021-12-27 15:31:55 · 137 阅读 · 0 评论 -
集合工具类
是操作List、Set、Map等集合的工具类ArrayList list = new ArrayList();list.addAll(Arrays.asList(new Integer[]{8, -3, 2, 9, -1}));System.out.println("list:"+list);/** 排序操作 **/Collections.reverse(list);//反转System.out.println("reverse:" + list);Collections.shuffle(原创 2021-12-27 15:01:14 · 276 阅读 · 0 评论 -
Map常用方法及遍历
Map中的key、value可以是任何引用类型,封装到HashMap$Node对象中key不允许重复,原因和HashSet一样,具体看HashMap的源码,value可以重复,key和value都可以是null,key为null时只能有一个(key不允许重复)为了方便遍历,还会创建EntrySet集合,transient Set<Map.Entry<K,V>> entrySet;static class Node<K,V> implements Map.Entry原创 2021-12-27 14:59:35 · 147 阅读 · 0 评论 -
Java Map源码
HashMap源码 -> 见HashSetLinkedHashMap源码 -> 见LinkedHashSetTreeMap源码 -> 见TreeSetHashTable源码HashTable说明:1.hashtable键和值都不允许为null,如果null会报NullPointerException2.hashtable的基本方法和hashmap一样3.hashtable是线程安全的,hashmap是线程不安全的// initial capacity (11) an原创 2021-12-20 19:36:38 · 281 阅读 · 0 评论 -
Java集合 TreeSet源码
1.TreeSet说明:(1)元素不能重复。(2)具有排序功能。(3)TreeSet中的元素必须实现Comparable接口并重写compareTo()方法(或者通过TreeSet的构造函数指定一个自定义的比较器)2.TreeSet源码分析:构造器传入自定义的比较器Comparatorpublic TreeMap(Comparator<? super K> comparator) { this.comparator = comparator;}//value=PRES原创 2021-12-20 19:29:12 · 156 阅读 · 0 评论 -
Java集合 LinkedHashSet源码
HashSet底层使用HashMapNode(int hash, K key, V value, Node<K,V> next) { this.hash = hash; this.key = key; this.value = value; this.next = next;}LinkedHashSet底层使用LinkedHashMap//The head (eldest) of the doubly linked list.transient LinkedHas原创 2021-12-20 19:28:01 · 61 阅读 · 0 评论 -
Java集合 HashSet源码
1.HashSet说明:(1)元素不重复,可以添加null,只能有一个null(不重复)(2)遍历HashSet的顺序和元素hash后的位置有关(3)底层实现是HashMappublic HashSet() { map = new HashMap<>();}2.HashSet底层源码分析:-> HashMap底层public HashSet() { map = new HashMap<>();}public boolean add(E e)原创 2021-12-20 19:26:56 · 166 阅读 · 0 评论 -
Java集合 LinkedList源码
LinkedList说明:(1)permits all elements,including null(2)维护两个指向,transient Node<E> first;transient Node<E> last;(3)线程不安全private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> pr原创 2021-12-20 19:23:23 · 72 阅读 · 0 评论 -
Java集合 ArrayList源码
ArrayList说明:(1)permits all elements,including null(2)使用数组实现存储 transient Object[] elementData(3)线程不安全,但执行效率高ArrayList源码分析:(1)ArrayList维护一个Object类型数组transient Object[] elementData(2)扩容: 使用无参构造器,则初始elementData为空数组,第一次扩容为10,以后1.5倍扩容 使用有参构造器,则初原创 2021-12-20 19:22:33 · 182 阅读 · 0 评论 -
Java集合 Vector源码
Vector说明:(1)permits all elements,including null(2)使用数组实现存储 protected Object[] elementData;(3)线程安全,在开发中需要线程同步安全时,考虑使用Vector//无参构造器->默认初始化大小10public Vector() { this(10);}//有参构造器public Vector(int initialCapacity) { this(initialCapacity, 0原创 2021-12-20 19:21:39 · 99 阅读 · 0 评论 -
Java集合 常用方法及遍历
Colletcion接口包括List子接口、Set子接口迭代器:Iterator本质:指向集合数组的指针,常用方法:hasNext():检测是否还有下一个元素next():①下移 ②将下移以后集合位置上的元素返回remove():删除元素//Collection接口,以ArrayList实现类介绍public class Collection_ { public static void main(String[] args) { //常用方法 Coll原创 2021-12-20 19:20:42 · 85 阅读 · 0 评论 -
JFrame画心型-直男的浪漫
public class Thread_ { private static DrawLove love = new DrawLove(); public static void main(String[] args) { JFrame frame = new JFrame(); frame.setUndecorated(true); frame.setBackground(new Color(0, 0, 0, 0)); Dim原创 2021-10-25 22:31:03 · 109 阅读 · 0 评论 -
Java反射
//1.反射知识反射机制运行程序在执行期间借助Reflection API取得任何类的内部信息(如成员变量、构造器、成员方法等),并能操作对象的属性及方法,反射在设计模式和框架底层都会被用到类加载后,在堆中会产生一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类的完整结构信息反射机制可以完成:(1)在运行时判断任意一个对象所属的类(2)在运行时构造任意一个类的对象(3)在运行时得到任意一个类的所有成员变量和方法(4)在运行时调用任意一个对象的成员变量和方法(5)生原创 2021-10-11 23:27:41 · 60 阅读 · 0 评论 -
File、IO流
目录://创建文件、获取文件的信息、创建目录、删除目录、删除文件//文本文件拷贝(字符流、字节流、包装流)二进制文件拷贝(字节流、包装流)//对象处理流 ObjectInputStream ObjectOutputStream//标准输入输出流//转换流//打印流//Properties类-读写配置文件@Testpublic void test1() { //创建文件 File file1 = new File("D:\\file1.exe"); File fil原创 2021-10-10 13:19:44 · 52 阅读 · 0 评论 -
Java多线程
进程 VS 线程并发 VS 并行实现线程两种方法:1.extends Thread,重写run方法(class Thread implements Runnable)2.implements Runnable接口,重写run方法启动线程用cat.start() 为什么不是 cat.run()原因:cat.run是一个普通的方法,没有真正启动一个线程,就会把run方法执行完毕,才向下执行真正实现多线程的是private native void start0();源码分析:start(原创 2021-09-23 14:23:20 · 111 阅读 · 1 评论 -
Java内部类
局部内部类匿名内部类成员内部类静态内部类原创 2021-09-17 23:35:28 · 105 阅读 · 0 评论 -
浅拷贝深拷贝
构造方法:修改对象后需要修改构造方法,可用性差重载clone():修改对象后需要修改clone方法,拷贝类需要实现Cloneable接口,可用性差1.序列化:拷贝类需要实现Serializable接口@Datapublic class Person implements Serializable { public String name; public Address address; public Person(String name, Address address)原创 2021-09-17 19:34:34 · 51 阅读 · 0 评论 -
Java进制转换
2进制:以0b或0B开头,如0B10108进制:以0开头,如0101010进制:45616进制:以0x或0X开头,如0X10102转8、2转10、2转16原创 2021-09-17 00:38:09 · 127 阅读 · 0 评论 -
Java发送邮件
163邮箱为例:1.开启邮箱授权码邮箱的设置->开启服务->获得授权码POP3/SMTP服务IMAP/SMTP服务2.maven加入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>3.applic原创 2021-09-13 16:22:06 · 57 阅读 · 0 评论 -
Java序列化
序列化:对象->序列化流,方便网络传输,方便持久化反序列化:序列化流->对象需要被序列化的对象须implements Serializable 接口private transient String gender;//对类序列化时,会自动忽略被transient修饰的属性 public static void main(String[] args) { try { //序列化 ObjectOutputStream oos原创 2021-09-10 17:46:04 · 52 阅读 · 0 评论