![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 56
w_tt
这个作者很懒,什么都没留下…
展开
-
WebFlux简单测试
响应式的web框架,不同于传统的WebMVC,WebFlux其内部使用Netty,基于异步和事件驱动,用少量Loop线程处理request、response io操作,而业务中阻塞的操作交由Work线程处理。总的来说客户端感知(响应时间)没什么差别,但是服务器端线程数能减少不少,适合网关这种io密集型服务。原创 2024-02-18 01:33:22 · 332 阅读 · 0 评论 -
Linux安装IPFS
删除引导程序节点的默认条目。因为是部署私有网络,所以需要移除原有的引导程序节点,如果不删除,启动后就会同步IPFS主网的数据。第一个节点之后的节点,启动前都要添加引导程序节点,与第一个节点的id建立起联系。查看第一个节点的peer id。通过节点一上传一个txt文件。创建节点目录(单机多节点)原创 2022-12-08 15:01:03 · 1112 阅读 · 1 评论 -
Stream源码笔记(一)
Stream源码笔记:ReferencePipeline、AbstractPipeline、Sink、ReduceOps、ReducingSink原创 2022-04-11 14:32:07 · 1424 阅读 · 1 评论 -
Java多线程学习笔记(二)
一、Future接口java.util.concurrent包下,有以下方法:cancel(boolean var1):取消Callable任务,未开始或已完成返回false,boolean参数表示是否中断执行中的Callable任务isCanceled():判断Callable任务是否取消了isDone():判断是否完成get():获得Callable的返回值get(long time, TimeUnit unit):设置超时时间,防止无限时间的等待二、CompletionStage接口原创 2022-02-28 16:36:37 · 1076 阅读 · 0 评论 -
ECDSA密钥
ECDSA密钥一、对称加密算法 指加密和解密使用相同密钥的加密算法。对称加密算法用来对敏感数据等信息进行加密,常用的算法包括DES、3DES、AES、DESX、Blowfish、、RC4、RC5、RC6。二、非对称加密算法 指加密和解密使用不同密钥的加密算法,也称为公私钥加密,公钥是公开的,私钥是私有的。 1.公钥加密,私钥解密: 当Alice给Bob写信,不希望信件被别人解读,可以使用Bob公开的公钥对信件加密。Bob收到信件后,用自己的私钥解密即可。 2.私钥签名,公钥验证:原创 2022-02-23 16:57:14 · 1519 阅读 · 0 评论 -
踩坑记录:spring事务和锁冲突,导致锁失效问题
一、背景前言前一段做的一个抢购秒杀的功能,用户只能限量抢到一个商品,但是后来发现有个用户抢到了两个商品?!排查问题时发现,是spring事务提交和redis锁释放的顺序,与预想中不一样导致的。二、问题描述@Transactional(rollbackFor = Exception.class)public void test() { if (!redisLock.tryLock("lock_1", "123", 5L, TimeUnit.SECONDS)) { throw new Ser原创 2022-01-07 15:48:08 · 2514 阅读 · 0 评论 -
踩坑记录:缓存导致事务提交报错Error committing transaction. Cause: java.lang.NullPointerException
一、问题描述@Transactional 包裹的业务代码中,先做了 select 查询,后 insert 插入数据,由于 mapper 使用了 CaffeineCache 做缓存,所以在 insert 后,更新了缓存,select 那里就报错了(具体为什么,有知道的大佬麻烦解答下困惑)二、解决方案1、select 语句不使用缓存,加 @Options(useCache = false)2、使用 redis 做缓存,redis 没有这个问题...原创 2022-01-06 13:44:11 · 1577 阅读 · 0 评论 -
Redis实现商品抢购秒杀
Redis 实现商品抢购秒杀一、 写在前面√\color{#FF7D00}{√}√ 写出来,像是单例写法里的双重检查√\color{#FF7D00}{√}√ 大佬们如果有更好的方法或建议,可以提一提,博主萌新一个二、代码// 商品列表collectionIdList = new ArrayList<>();static { collectionIdList.add(1L); collectionIdList.add(2L); collectionIdL原创 2022-01-05 16:57:25 · 1193 阅读 · 0 评论 -
list转tree
/** * list tree node * @Author: zilong * @Date: 2021/11/25 */@Datapublic class Node<T> { private T id; private T parentId;}/** * tree node * @Author: zilong * @Date: 2021/11/24 */@Datapublic class TreeNode<T, R extends TreeNo原创 2021-11-26 14:34:23 · 396 阅读 · 0 评论 -
Seata源码学习笔记(一):重写 SPI
一、common下的loader1、SPI 扩展(EnhancedServiceLoader)1)、测试@Testpublic void testLoadByClassAndClassLoader() { // 实际就是通过反射,创建对象 Hello load = EnhancedServiceLoader.load(Hello.class, Hello.class.getClassLoader()); Assertions.assertEquals(load.say(), "Ol原创 2021-08-18 15:17:09 · 343 阅读 · 0 评论 -
踩坑记录:生成的多个excel文件,压入压缩包返回
一、代码public static void exportXlsx2Zip(String fileName, List<Workbook> workbookList, HttpServletResponse response) throws IOException { // 1、创建临时zip文件 String zipPath = ""; File zipFile = new File(zipPath + fileName + ".zip");原创 2021-07-27 17:21:17 · 270 阅读 · 0 评论 -
netty学习笔记(一)
一、源码new NioEventLoopGroup(); // 点进去new NioEventLoopGroup(); 不传参数,则采用默认线程数private static final int DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));protected Multi原创 2021-06-17 17:29:03 · 98 阅读 · 0 评论 -
jdk中的Future.get()会阻塞当前主线程的运行,但不影响已经执行的其他线程
public class MyTest { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(2); Future<Integer> f1 = pool.submit(new MyCallable(100)); Future<Integer> f2转载 2021-06-17 17:12:45 · 2233 阅读 · 0 评论 -
Java多线程学习笔记(一)
一、看源码1、 java.util.concurrent 包√\color{#FF7D00}{√}√ Executor(interface):只有一个 execute ( Runnable command ) 方法,没有返回值,但是没有标注@FunctionalInterface?√\color{#FF7D00}{√}√ ExecutorService(interface)(extends Executor):在 executor 上封装了一层,提供了 Runnable(Callable原创 2021-06-04 09:52:05 · 182 阅读 · 0 评论 -
JavaFX学习笔记(一)
一、简介√\color{#FF7D00}{√}√ 用 Java 语言开发桌面应用,官网√\color{#FF7D00}{√}√ JDK8 中自带 JavaFX 开发包,JDK11 需要手动导入二、创建一个基础应用GUIpublic class LoginWindow extends Application { public void start(Stage primaryStage) throws IOException { Parent parent = FXM原创 2021-05-27 23:16:54 · 263 阅读 · 0 评论 -
Redis实现Mybatis的二级缓存
一、Mybatis 缓存机制 1、一级缓存:√\color{#FF7D00}{√}√ 默认开启,存在于 SqlSession 的生命周期中,Mybatis 会把执行的方法和参数通过算法生成缓存的键值对,并和查询结果存入一个 map 中,如果同一个 SqlSession 中执行的方法和参数完全一致时,通过算法生成相同的键值对,并在 map 中查找发现已存在,则会返回缓存中的对象。任何 insert、update、delete 操作都会清空一级缓存。√\color{#FF7D00}{√}√ 一般的我原创 2021-05-20 14:45:06 · 726 阅读 · 1 评论 -
AOP+EhCache实现接口访问黑名单
AOP+EhCache实现接口访问黑名单一、依赖<!-- aop --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency><!-- ehcache --><dependency> &原创 2021-04-29 17:44:31 · 269 阅读 · 0 评论 -
Nacos学习笔记(二)
一、SpringBoot + Nacos + Dubbo1、工程结构api目录:存放消费者与提供者调用的service接口consumer目录:消费者目录 调用提供者远程提供的接口实现provider目录:提供者目录 提供给消费者接口实现2、引入依赖父模块:<!-- nacos & dubbo --> <dependency> <groupId>com.alibaba.boot</groupId&g原创 2021-04-24 17:17:29 · 184 阅读 · 0 评论 -
Nacos学习笔记(一)
Nacos学习笔记(一)一、安装部署1、环境:CentOS7.6dockermysql8(可以不要)2、安装git clone https://github.com/nacos-group/nacos-docker.gitcd nacos-docker单机模式 MySQL 8(本地无MySQL)docker-compose -f example/standalone-mysql-8.yaml up因为我本地有装mysql了,所以要改下yml文件和mysql配置,用本地的数据库转载 2021-04-24 17:14:52 · 455 阅读 · 0 评论 -
excel数据录入数据库工具
excel数据录入数据库工具1、主要方法/** * 将excel表对应列,装入实体类对应字段,形成实体类结果集 * @param path excel表路径 * @param clazz 对应实体类 * @param result 结果集 * @param columns excel读取列,索引从0开始 * @param fns 对应实体类的lambda表达式,get方法 */public static <T> void Excel2EntityList(String pat原创 2021-03-08 17:12:28 · 606 阅读 · 0 评论 -
原子性问题、AtomicInteger类和CAS机制
一、原子性问题1、问题描述前几天在用lambda表达式遍历list时,遇到了需要使用AtomicInteger类的情况,于是便记录下学习过程。这里运行了20个线程,每个线程对count变量进行1000此自增操作,如果上面这段代码能够正常并发的话,最后的结果应该是20000才对,但实际结果却发现每次运行的结果都不相同,都是一个小于20000的数字。这是为什么呢? private static final int THREADS_COUNT = 20; public static int cou原创 2021-03-23 17:15:48 · 284 阅读 · 0 评论