
Java
文章平均质量分 75
Java学习
lllllLiangjia
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
jar包反编译工具(java-decompiler)
我的电脑win11,下载前两个软件发现无法正常运行,在尝试第三个安装包中的程序可以正常运行。导出源代码:点击file -> Save All Sources按钮进行导出。导出源代码:点击 file-> save all 按钮进行导出。反编译的源代码基本符合,可以还原内部类。优点:反编译的源代码基本符合,没有乱七八糟新增的修饰符。导出的文件resources保存的是.class文件。导出源代码:点击 文件-> 全部保存 按钮进行导出。导出的文件sources保存的是.java文件。我的电脑目前无法使用。原创 2023-04-19 16:54:52 · 25917 阅读 · 0 评论 -
logback和log4j日志框架堆栈信息添加TraceId
logback和log4j修改打印的堆栈信息原创 2023-03-24 18:43:43 · 6091 阅读 · 4 评论 -
POI使用--循环word模版填入对应数据、图片(包含嵌套循环)
1.目录结构2.引入依赖 <!--poi-tl word支持--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.10.2</version> <.原创 2022-05-23 20:32:55 · 12292 阅读 · 7 评论 -
lambda表达式完成aop切面功能
背景:最近项目中涉及到自定义线程池中子线程获取父线程的traceId,这个数据的传递过程可以用lamdba表达式进行封装实现的。这让我想到spring容器的三级缓存。其中的一个缓存singletonFactories就是存放的lambda表达式的。// 缓存的声明private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);// lambda作为参数调用a原创 2022-02-16 18:10:44 · 966 阅读 · 1 评论 -
Spring Boot中调用@Async注解的异步方法并获取返回值
该方法无需创建任何实体,只需要通过传参即可获取返回结果需求背景 最近正在研发的系统有接口需要从多个表中获取数据进行处理,所以打算使用多线程异步获取到这几个表处理后的数据结果。由于Spring Boot提供多线程ThreadPoolTaskExecutor类,使用代码如下代码配置类@Configurationpublic class ThreadPoolConfig { @Value("${threadpool.core-pool-size}") private ...原创 2021-12-22 14:11:57 · 9042 阅读 · 0 评论 -
ThreadLocal源码分析理解弱引用和内存泄漏
目录一、说明三个API二、源码分析setThreadLocalMap底层结构结构图map.setgetremoveexpungeStaleEntryresize扩容三、思考与总结想共享线程的ThreadLocal数据怎么办?为什么ThreadLocalMap的key要设计成弱引用?示例代码代码中对象所在堆栈的对应图释放线程中引用后堆栈对应图使用弱引用将key为null,对应的Entry如何清除?内存泄露问题解决一、说明T原创 2021-07-22 14:43:52 · 3777 阅读 · 3 评论 -
redis乐观锁和悲观锁在spring boot的使用
目录乐观锁:使用乐观锁任务类悲观锁使用setnx分布式锁redission引入pom配置类任务类总结乐观锁:认为什么时候都不会出问题,所以不会上锁!更新数据的时候去判断一下,在此期间是否有人修改过这个数据 获取version 更新时候比较version使用监听操作和事务操作实现乐观锁测试多线程修改值,使用watch可以当作redis的乐观锁操作在事务执行之前先watch key,当事务前后key改变了事务失败,那就先取消监视,再重新监视进行事务操原创 2021-07-21 17:06:16 · 2297 阅读 · 2 评论 -
HashMap红黑树原理及源码分析---图形、注释一应俱全
一、红黑树定义红黑树是一种结点带有颜色属性的二叉查找树,除此还有以下5大性质: 节点是红色或黑色。 根是黑色。 所有叶子都是黑色(叶子是NIL节点,这类节点不可以忽视,否则代码会看不懂)。 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。) 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(黑色平衡)。NIL节点:为了红黑树平衡而添加的空节点二、节点新增原理:如果插入的是第一个节点(根节点),红色变黑色。-----基原创 2021-06-13 16:30:34 · 7418 阅读 · 14 评论 -
Spring循环依赖是如何解决的?
什么是循环依赖如何解决循环依赖问题spring通过提前暴露对象的方式(完成实例化但是没有初始化的对象)解决循环依赖问题原创 2021-05-30 18:40:21 · 1410 阅读 · 6 评论 -
JVM是如何回收垃圾的?
JVM如何回收垃圾其实就是GC操作,那GC操作的步骤是什么?我们可以将它分为两个步骤:找垃圾和清除垃圾原创 2021-05-30 16:27:56 · 418 阅读 · 4 评论 -
阅读Spring官网总结Aop用法
前置通知使用切入点表达式 @Before("execution(* com.xyz.myapp.dao.*.*(..))") public void doAccessCheck() { // ... }返回后通知 @AfterReturning( pointcut="com.xyz.myapp.CommonPointcuts.dataAccessOperation()", returning="retVal.原创 2021-05-30 12:10:18 · 914 阅读 · 4 评论 -
Spring的IoC容器Bean创建过程从理论到源码分析
文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言我们都知道Spring有以下很多优点:方便解耦,简化开发。降低了业务对象替换的复杂性,可以让开发人员更关注业务逻辑 方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付 数据库事务问题 ......1.那IOC起到了什么作用?IOC容器的主要作用其实就是第一点说的,方便解耦,简化开发。(1).那它是如何解耦的?这就.原创 2021-05-08 16:48:21 · 16989 阅读 · 34 评论 -
Map排序和遍历
computeIfAbsent最常见的用法是构造一个用作初始映射值或记忆结果的新对象,如:map.computeIfAbsent(key, k -> new Value(f(k)));或者实现一个多值地图, Map<K,Collection<V>> ,每个键支持多个值:map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);getOrDefault(Object key, V .原创 2021-03-31 22:08:52 · 274 阅读 · 3 评论 -
SpringBoot七大传播机制
事务传播行为类型 说明 PROPAGATION_REQUIRED required(必修的) 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS supports(支持的) 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY ...原创 2021-03-31 22:03:41 · 385 阅读 · 1 评论 -
aop中Pointcut切入点指示符
execution:用于匹配方法执行的连接点。这是在使用Spring AOP时要使用的主要切入点指示符。 within:将匹配限制为某些类型内的连接点(使用Spring AOP时,在匹配类型内声明的方法的执行)。 this:在bean引用(Spring AOP代理)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。 target:在目标对象(代理的应用程序对象)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。 args:将匹配原创 2021-03-31 22:01:50 · 1411 阅读 · 1 评论 -
java分别发送post请求application/x-www-form-urlencoded和application/json类型数据
有时候我们在postman上调用接口它可以正常返回结果,但是自己写后端代码时报400错误时,这可能就是对请求头的Content-Type没有设置的结果。post提交数据有多种方式,而application/x-www-form-urlencoded和application/json都是比较常见的方式。x-www-form-urlencoded是表单提交的一种,表单提交还包括multipart/form-data。以 application/x-www-form-urlencoded 方式提交数据,会原创 2021-03-05 20:58:51 · 24198 阅读 · 8 评论 -
compare()和compareTo()区别
compareToa.compareTo(b):将此对象与指定的对象进行比较以进行排序。Comparable接口:比较值并返回一个int,它告诉值是否比较小于,等于或大于。如果您的类对象具有自然顺序,请实现该Comparable<T>接口并定义此方法。所有具有自然排序实现的Java类Comparable<T>- 示例:String,包装类,BigIntegercomparecompare(a, b):比较其两个参数的顺序。比较器接口:比较两个对象的值。..原创 2020-10-28 17:04:05 · 2581 阅读 · 13 评论 -
多层嵌套break跳出指定循环
平常break最常出现的就是在for循环或者while循环中跳出到当前循环,但是在多层循环嵌套下break还能跳出指定的循环语法结构如下"自己定义的名称" : { for|while(){ break "自己定义的名称"; }}实例:定义两个数组 int[] nums1 = new int[6]; nums1[4] = 4; int[] nums2 = new int[6]; ..原创 2020-10-23 10:19:25 · 5049 阅读 · 8 评论 -
SpringBoot配置swagger2过程和详解
pom文件首先pom文件中引入依赖 <!--swagger2 依赖--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency原创 2020-06-29 16:43:46 · 7340 阅读 · 9 评论 -
IDEA中依赖报错Error:java: Annotation processing is not supported for module cycles...
报错提示:解决步骤:选择file->project structure->Modules由于我的maven项目是yingxue-web依赖yingxue-service,所以要删除yingxue-service中的yingxue-web依赖,留下yingxue-web中的yingxue-service依赖。问题原因:就是依赖循环,使得程序无法运行...原创 2020-06-20 14:58:24 · 18728 阅读 · 3 评论 -
匿名函数转换lambda表达式实例步骤
实例 // 1 完成匿名函数 Runnable runnable = new Runnable() { @Override public void run() { System.out.println("run"); } }; new Thread(runnable).start(); // 2 省略实例化对象原创 2020-06-14 11:06:13 · 1026 阅读 · 3 评论 -
Java动态代理如何使用
之前学习大话设计模式的时候就了解了代理模式,客户端显示执行的是代理的方法,其实代理实体真正执行的是被代理实体的方法,被代理实体在自己的方法中辛辛苦苦完成的功能被代理实体简单的一个调用就被实现了,这样其实就是给别人做了嫁衣。当时了解到的是静态代理模式,现在说说动态代理模式,相对而言,动态代理模式降低了耦合度,更方便了操作。并且在运行的时候才切入改变类的方法,而不需要预先定义它。代码:游戏玩家接口:public interface IGameplayer { public void l原创 2020-05-19 10:33:40 · 381 阅读 · 3 评论 -
Spring Boot Configuration Annotation Processor not configured 问题解决
问题背景:进行Spring Boot配置文件部署时,发出警告Spring Boot Configuration Annotation Processor not configured,但是不影响运行。问题解决方案:在pom.xml文件中引入依赖<dependency> <groupId>org.springframework.boot&l...原创 2020-01-21 16:22:08 · 107261 阅读 · 39 评论 -
Redis安装包下载、Jedis连接jar包下载
Redis安装包下载链接:https://pan.baidu.com/s/103uvg0wxBFVH0GaoKZqImQ提取码:42heJedis链接Redis的jar包commons-pool2-2.8.0.jar下载和jedis-3.1.0.jar下载链接:https://pan.baidu.com/s/1PwqQCf9kWmj17Vac0yIysA提取码:2i...原创 2020-01-16 17:31:42 · 2179 阅读 · 8 评论 -
三步实现Jedis连接Redis
一、首先下载Redis,解压后无需安装即可使用。运行Redis服务器端redis-server.exe和Redis客户端redis-cli.exe二、打开Java开发工具,导入jar包commons-pool2-2.8.0.jarjedis-3.1.0.jar三、输入Jedis连接代码 public void test(){ //获取连接 ...原创 2020-01-16 17:25:17 · 353 阅读 · 7 评论 -
Tomcat部署项目三种方式 附详细步骤直白易懂
更改web项目路径方法1.将项目放在webapps目录下直接将整个项目文件放在tomcat文件中的webapps目录下即可运行tomcat后,打开网页输入网址不更改web项目路径方法2.配置conf/server.xml文件打开tomcat文件,进入conf目录,打开server.xml配置文件在标签体中配置 'Context docBase="…" path=...原创 2020-01-07 16:19:28 · 12218 阅读 · 6 评论 -
Java线程的等待与唤醒
生产者和消费者必须使用同步代码块包裹起来,保证等待和唤醒只能有一个执行,同步使用的锁对象必须保证唯一Thread中重要方法void wait() 在其他线程调用此对象的notify()方法或notifyall()方法前,导致当前线程等待void notify() 唤醒在此对象监视器上等待的单个线程后,会继续执行wait方法之后的代码void notifyAll() 唤醒...原创 2019-12-23 17:17:52 · 856 阅读 · 8 评论 -
Java中List、Set单列集合的特点及使用
单列集合框架 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素。List和Set是它的子接口List:是有序的集合,存储和取出元素顺序相同。允许存储重复的元素。有索引,可以使用普通的for循环Set:不允许存储重复元素。没有索引(不能使用普通的for循环遍历)。List详...原创 2019-12-13 14:13:25 · 1086 阅读 · 6 评论 -
Java内部类分类及使用
概念:如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。内部类可以随意访问外部类,外部类只有借助内部类对象才能访问内部类。内部类分类:1.成员内部类2.局部内部类3.匿名内部类(属于局部内部类)成员内部类创建//外部类public class Body{ //内部类 Public class Heart{ ...原创 2019-12-12 21:59:05 · 239 阅读 · 7 评论 -
String与StringBuilder详解
字符串是一个常量,他们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。String字符串地城是一个被final修饰的数组,不能改变,是一个常量。private final byte[] value;进行字符串的相加,内存中就会有多个字符串,占用空间多,效率低下string s="a"+"b"+"c"="abc";创建一个"...原创 2019-12-09 10:58:15 · 378 阅读 · 4 评论 -
图文结合java的内存划分
java的内存需要划分为5部分1.栈:存放的都是方法中的局部变量。(方法运行一定在栈中)局部变量:方法的参数,或者是方法{}内部的变量作用域:一旦超出作用域(出了大括号),立刻从栈内存中消失2.堆:凡是new出来的东西,都在堆当中堆内存里面的数据,都有默认值,规则:如果是整数 默认为0如果是浮点数 默认为0.0如果是字符...原创 2019-12-01 21:43:31 · 251 阅读 · 5 评论