技术漫谈优秀开源笔记
FANSEA优秀学习笔记
Canal:数据库实时更新通知
Canal是一款阿里的MySQL实时同步框架
数据想要实时同步?这才是最佳实践|Java|Canal|框架_哔哩哔哩_bilibili
alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 (github.com)
Ruoyi快速入门
若依框架快速开发项目(不涉及底层逻辑,只是简单使用)-CSDN博客
创建自己的模块需要对pom的操作:
- 创建自己的模块
ruoyi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>ruoyi</artifactId> <groupId>com.ruoyi</groupId> <version>x.x.x</version> </parent> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-test</artifactId>
<description> test系统模块 </description>
<dependencies>
<dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common</artifactId> </dependency>
</dependencies>
</project>
|
- 在根目录的
pom
中加入自己的model
和dependency
1 2 3 4 5 6 7 8 9 10
| <modules> <module>ruoyi-test</module> </modules>
<dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-test</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
|
3.在ruoyi-admin
引入自己的依赖
1 2 3 4 5 6
| <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-test</artifactId> </dependency>
|
网关是什么?
用于连接两个协议不同的数据传输,或者是不同网络下的信息传输,实时转换满足目的系统需求。并可以提供过滤和安全功能
网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层–应用层。
什么是网关,网关的作用是什么? - 知乎 (zhihu.com)
ForkJoinPool
Java高并发编程中ForkJoinPool的使用及详细介绍-刘宇_forkjoinpool最大-CSDN博客
1、提交任务的两种方式
我们在提交任务时,一般不会直接继承ForkJoinTask,只要继承它的子类即可:
- RecursiveAction:用于没有返回结果的任务(类似Runnable)
- RecursiveTask:用于有返回结果的任务(类似Callable)
2、构造函数
- parallelism:由几个线程来拆分任务,如果不填则更具CPU核数创建线程数
- factory:创建工作线程的工厂实现
- handler:线程因未知异常而终止的回调处理
- asyncMode:是否异步,默认false
1 2 3
| ForkJoinPool() ForkJoinPool(int parallelism) ForkJoinPool(int parallelism, ForkJoinWorkerThreadFactory factory, UncaughtExceptionHandler handler, bool
|
ForkJoinPool又叫分而治之,通俗来讲就是帮我们把一个任务分成许多小任务给不同的线程执行,然后通过join将多个线程处理的结果进行汇总返回。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; import java.util.stream.IntStream;
public class ForkJoinRecurisiveTask { private static final int MAX_THRESHOLD = 5; public static void main(String[] args) { ForkJoinPool pool = new ForkJoinPool(); ForkJoinTask<Integer> forkJoinTask = pool.submit(new CalculatedRecurisiveTask(0,100)); try { Integer result = forkJoinTask.get(); System.out.println("结果为:"+result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } private static class CalculatedRecurisiveTask extends RecursiveTask<Integer>{ private int start; private int end; public CalculatedRecurisiveTask(int start, int end) { this.start = start; this.end = end; } @Override protected Integer compute() { if ((end-start)<=5) { return IntStream.rangeClosed(start, end).sum(); }else { int middle = (end+start)/2; CalculatedRecurisiveTask task1 = new CalculatedRecurisiveTask(start,middle); CalculatedRecurisiveTask task2 = new CalculatedRecurisiveTask(middle+1,end); task1.fork(); task2.fork(); return task1.join()+task2.join(); } } } }
|
AIGC + 服装设计
30 秒出服装设计稿,森马用函数计算+AIGC 整“新活”! - OSCHINA - 中文开源技术交流社区
火山引擎推荐 + 搜款网
火山引擎&搜款网:服装批发背后的智慧与“荐”行 - OSCHINA - 中文开源技术交流社区