java
文章平均质量分 67
爱程序的小姚
这个作者很懒,什么都没留下…
展开
-
CompletableFuture(异步任务编排)
CompletableFuture它可以完成复杂的异步任务编程功能,异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。通过这种方式我们的主线程就不需要阻塞等待返回结果。必须要等异步任务完成才能继续执行主线程,不仅如此,当我们在碰到一下业务场景的时候,单纯使用Future接口或者FutureTask类并不能很好地完成以下我们所需的业务.加入我们的异步任务非常的耗时由于get方法会阻塞主线程就会导致程序的吞吐量下降。原创 2023-04-06 18:02:35 · 180 阅读 · 0 评论 -
@Transactional与synchronized同时使用synchronized失效
起因,前端新增时,新增按钮没有加load,导致可以在弹框没有消失时可以点击很多次新增按钮从而出现很多重复数据,一开始数据表这个订单号没有加唯一索引,也才会出现这种情况 我一开始开发时给我service的方法加了事务和同步锁,以为没问题,后面发现并发测试时出现了重复数据,然后我才注意有问题,才深究首先这种情况 同步锁也许都不能生效。因为针对@Transactional标注的方法,Spring在AOP中实现,它会生成一个临时类,并用一个实现了开启和关闭事务的同名方法来覆写原本这个被标注的方法。大概类似这样原创 2022-12-07 17:15:29 · 921 阅读 · 0 评论 -
poi设置将所有列打印成一页失效
poi设置将所有列打印成一页失效原创 2022-10-17 11:59:29 · 1261 阅读 · 0 评论 -
Spring事务的隔离级别与传播行为
发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。READ:可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读),方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务。原创 2022-10-07 14:46:12 · 1693 阅读 · 0 评论 -
SpringBoot事务注解@transactional无法生效的七个场景
SpringBoot事务注解@transactional无法生效的七个场景Propagation.NOT_SUPPORTED: 表示不以事务运行,当前若存在事务则挂起,都主动不支持以事务方式运行了,那事务生效也是白搭。原创 2022-10-07 11:06:42 · 1338 阅读 · 0 评论 -
线程与线程池的理解
1,什么是线程,线程和进程的区别是什么线程,程序执行流的最小执行单位,是行程中的实际运作单位,进程简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者,进程中包含了多个可以同时运行的线程。2,线程的生命周期(1)是用new Thread()的方法新建一个线程,在线程创建完成之后,线程就进入了就绪(Runnable)状态,此时创建出来的线程进入抢占CPU资源的状态,(2)当线程抢到了CPU的执行权之后,线程就进入了运行状态(Running),(3)当该线程的任务执原创 2021-09-28 11:44:20 · 304 阅读 · 0 评论 -
阻塞队列(BlockingQueue)
线程池、连接池、内存池、对象池jdbc的连接和关闭是非常1耗费资源了池化技术∶事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池的好处1,降低了资源的消耗,提高响应的速度,方便管理...原创 2021-09-27 15:59:45 · 431 阅读 · 0 评论 -
JMM和Volatile
1,什么是JMMJMM即为JAVA 内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。简单的理解他是一种概念,约定是一种不存在的东西2,内存划分JMM规定了内存主要划分为主内存和工作内存两种。此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在原创 2021-09-22 17:17:11 · 186 阅读 · 0 评论 -
Java新特性Lambdab与四大函数式接口
java1.8的新特性 lambda表达式、链式编程、函数式接口、Stream流式计算1,函数式接口它有有个专门的注解,含有@FunctionalInterface注解的接口,就只有一个方法的接口,我们平时使用的Runable 接口就是一个函数式的接口。函数式的接口可以使用lambda 表达式来简编程。@FunctionalInterfacepublic interface Runnable { void run();}常见的函数式接口都在java.util.functi..原创 2021-09-17 15:42:44 · 126 阅读 · 0 评论 -
可重入锁(synchronized ,ReentrantLock ),读锁(共享锁),写锁(独占锁),公平锁,非公平锁与自旋锁(也称乐观锁,自己编写)
1,可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized 和 ReentrantLock 都是可重入锁。可重入锁的意义之一在于防止死锁。//可重入锁public class ReentrantLockDemo{ public static void main(String[] args) { Phone phone = new Phone(); new Thread..原创 2021-09-16 20:05:20 · 742 阅读 · 0 评论 -
CAS与ABA问题
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。为了保证原子性操作就引出了CAS独占锁是一种悲观锁,syn原创 2021-09-15 14:43:04 · 212 阅读 · 0 评论 -
代理模式——两种动态代理
JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。优点:都解决了静态代理多个实现类重复写的问题JDK动态代理 这里举的是一个房东租房的例子//租房public interface Rent { public void rent();}//房东 真实角色public cl原创 2021-09-04 15:28:45 · 75 阅读 · 0 评论 -
代理模式——静态代理(贴近业务)
静态代理概念:所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了举例理解:以结婚为例,当事人只需要处理自己的主要事儿即可,比如典礼、洞房,其他的杂事儿可以交给代理公司即可静态代理需要满足三点:1、需要有真实角色2、需要有一个代理角色3、这两个角色之间必须实现相同的接口静态代理类优缺点优点:1,可以使真实角色的操作更加纯粹!不用去关注一些公共的业务。2,公共也就交给代理角色!实现了业务的分工。3,公共业务发生扩展的时候,方便集中管理!缺点:原创 2021-09-04 10:22:31 · 166 阅读 · 0 评论 -
桥接模式的理解
以前我们我的多继承关系是这样子的如果我们电脑接口类要多个方法,其他实现都得改动,不符合开闭原则桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。他的场景分两个维度,两个维度的变化互不影响。一个维度的增加不用改变另一个维度的代码//品牌public interface Brand { void info();}public class Lenovo imple.原创 2021-08-27 14:43:39 · 269 阅读 · 0 评论 -
适配器模式——结构性
结构性:从程序的结构上实现松耦会,从而可以扩大整体的类结构,用来解决更大的问题。模式都来源于生活,举一个生活的列子//要被适配的类 网线public class Adatee { public void request(){ System.out.println("连接网线上网"); }}//接口转换器的抽象实现public interface NettoUsb { //作用:处理请求 能网的接口 public void handl原创 2021-08-26 16:19:26 · 75 阅读 · 0 评论 -
原型模式的理解
原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象!需要实现Cloneable接口重写clone()方法或实现Serializable 接口如果不实现Cloneable接口将会报不支持克隆的错误/** * 原型模式 实现Cloneable接口 */public class Demo implements Cloneable{ private String name ; private Date createtime; @Ove.原创 2021-08-26 15:50:15 · 72 阅读 · 0 评论 -
建造者模式的理解
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示例子:工厂(建造者模式)∶负责制造汽车(组装过>程和细节在工厂内)汽车购买者(用户)︰你只需要说出你需要的>型号(对象的类型和内容),然后直接购买就可以使用了(不需要知道汽车是怎么组装的(车轮、车门、>发动机、方向盘等等))例子2:假设造房简化为如下步骤:(1)地基(2)钢筋工程(3)铺电线(4)粉刷;i“如果”要盖一座房子,首先要找一个建筑公司或工程承包商(指挥者)。承...原创 2021-08-21 16:06:04 · 83 阅读 · 0 评论 -
抽象工厂的理解
定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类,围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。//手机产品接口public interface IPhoneProduct { void callup(); void sendSMS();}//路由器产品接口public interface IRouterProduct { void openwifi(); void setting();}p.原创 2021-08-21 14:53:30 · 178 阅读 · 0 评论 -
工厂模式的理解
1,静态工厂模式也称简单工厂模式public interface Car { void name();}public class TeSla implements Car{ @Override public void name() { System.out.println("特斯拉"); }}public class WuLing implements Car{ @Override public void .原创 2021-08-21 11:09:51 · 147 阅读 · 0 评论 -
基于JavaSDK调用FISCO BCOS 区块链
基于https://fisco-bcos-documentation.readthedocs.io1,需要将文件的sha256Hex哈希值存于搭建的FISCO BCOS 区块链中并验证文件的hash是否改变达到知晓文件是否改动的效果,并能查询出区块链的相关信息比如区块链的总高度,当前高度,区块链的hash值什么是FISCO BCOS 区块链FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源。社区以原创 2021-08-07 15:52:23 · 7843 阅读 · 3 评论 -
JavaJDK实现无钥签名根证书与沙箱安全机制
1,起因:接到项目经理的需求,项目有涉及文件的上传,需要把上传的文件进行数字签名,简称无钥签名,然后对签名后的文件进行无钥验证,判断文件签名后是否改变,对于从来没有听过无钥签名的我感觉很懵,后面就去上网查数字签名是java的那一块,得到以下结果:Java里其实有两大机制,第一是双亲委派机制,第二是沙箱安全机制,双亲委派机制相信大家学习jvm的类加载器时肯定都有做了解,那这个沙箱安全机制是什么呢什么是沙箱安全机制Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?...原创 2021-08-07 13:48:51 · 287 阅读 · 0 评论 -
jackson 包版本低导致java.lang.NoSuchMethodError
1,起因,本地window10项目运行无误,发布项目到正式环境Liunx系统后编译打包部署都没有问题,但是验证一个双因子认证功能时就报错2,我看到这个错误,就知道肯定是 Maven 依赖问题,要么是版本冲突(存在不同版本的 2 个相同依赖),要么是依赖版本不对(太高或者太低),但为了保险起见,我还是先检查了一下 svn的提交记录,看看有没有对 pom.xml 配置文件做相关改动。检查后发现,除了一些业务逻辑的变动,对于这个包没有人动过因为这个双因子认证的功能也添加了两个jar,但是报的错与...原创 2021-08-06 17:28:26 · 575 阅读 · 0 评论