- 博客(5)
- 收藏
- 关注
原创 Node和npm版本兼容性
很多后端同学不知要担任接口开发的工作,还要承担管理后台的开发工作,很多时候,我们需要升级node版本,使用nvm的同学有时候会出现node和npm版本不兼容导致的一堆报错(有时候装node的时候,没有自动下载 npm),那么问题来了,这俩货都有很多版本,我们使用的node版本和npm的版本对应关系上哪儿知道去?有了版本号,我们就能有目标的去安装对应版本的node或者npm了。
2024-07-23 14:47:51 687
原创 Java 循环依赖
针对引用B的属性类A,在类B中也存在应用类B的属性,形成了一个或者更多层的循环,在初始化bean时,会先生成半成品对象a和b(提前暴露对象就是暴露半成品对象),存放在缓存(三级缓存,看源码其实是一个map)中,a类初始化属性值b时,会把半成品对象b赋值给a类的b属性,同样的,b类在给a属性值赋值时,也会把半成品对象a赋值给b类的a属性,于是,A类和B类都有了完整的属性值,称为成品对象。这样就绕过了循环依赖问题。
2024-07-23 14:29:51 268
原创 Java 动态代理的增强方法篇
这个方法在被调用的时候,其实是调用代理类中的增强方法而不是原来类的方法,代理类在调用之前会启动transactional。所以如果在a方法中直接调用b方法其实是调用原始的普通方法b,而并非代理类中的增强方法,所以b方法事务不生效。我们可以把两个方法放在不同的类中调用,也可以在jdk1.8及之后版本的jdk中,循环注入该类的方式调用b方法(不推荐)同一个类中存在都带声明式事务注解的a、b方法,注解a方法中直接调用b方法,会发现b方法的事务不会生效。
2024-07-09 13:30:27 197 1
原创 JDK21新特性:虚拟线程
在主流的微服务架构中,特别是BI服务,常常会调用不同服务的FeignClient用以统计数据,旧版本的jdk中,涉及上下文切换的多线程实现通常采用线程池+Future、CompletableFuture等类异步编排。虚拟线程占用空间小,同时使用轻量级的任务队列来调度虚拟线程,避免了线程间基于内核的上下文切换带来的开销,因此可以极大量、高效地创建和使用。平台线程:实现了Runnable接口的Thread 类的每个实例,都是平台线程,是 Java 对操作系统线程的包装。对应实例为VirtualThread。
2024-07-09 11:59:30 200
原创 强大的PDF工具:aspose-word
转头看代码,不难发现不校验许可证时,生成的pdf被添加了水印。由于aspose非开源项目,需要购买使用,否则转换的pdf存在水印。尝试找高版本的许可证无果。
2024-07-09 11:18:25 200
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人