- 博客(48)
- 收藏
- 关注
原创 DataX与DataX-Web安装与使用
"job": {"speed": {},},},],"sliceRecordCount": 1 // 读取数据列中的重复次数},项目地址:GitHub - WeiYe-Jing/datax-web: DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。
2024-12-09 11:51:10
1332
1
原创 docker-compose部署java服务
命令执行后,Docker Compose 会根据 docker-compose.yml 文件启动所有服务,-d 表示在后台运行容器。在安装docker时,并不会同时把docker-compose安装好,需要额外安装一下。如何构建Dockerfile文件可以参考以往文章。
2024-11-26 17:44:37
507
1
原创 docker打包部署自己的应用
当谈及使用 Docker 进行容器化部署应用时,可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码,还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来,开发者就能够确保应用在任何环境中都能以一致的方式运行,而无需担心环境差异可能带来的问题。
2024-04-21 12:35:32
1329
原创 自定义多数据源
为了提升服务性能,减少数据库的压力,可以通过读写分离的操作,来提高数据写入和查询的速度,如何将SQL的执行对应不同的数据库,接下来由我来详细描述自定义多数据源的实现方案
2024-04-14 19:17:13
513
原创 Spring之寻找注入点详解
Spring在属性填充过程中,需要判断属性和方法是否为一个注入点,然后根据注入点找到对象赋值或者创建Bean进行赋值。
2023-04-08 21:58:43
1175
原创 Spring之属性填充
在开发中,如果需要将某个属性自动注入,一般是在这个属性上面添加@Autowired注解,这个使用是很方便,但是除了这种方式,还有很多方式可以注入属性,我将通过以下文章来详细描述Spring如何将不同情况的方式给属性赋值
2023-04-05 14:54:13
621
原创 Spring之Bean的获取过程
Spring创建Bean是一个复杂的过程,文章中主要介绍了大部分重要的过程,通过看Spring源码,能够很好的理解Spring的执行流程,方便以后工作对有疑问的地方进行排查。
2023-04-02 10:29:19
763
原创 Random与ThreadLocalRandom对比
例如:在实际工作中,需要借助java中已有的工具类生成随机数,像最常用的Random类,里面就有对应整型,长整型和浮点型等生成的方法。但在JDK7之后,在JUC包下有新增了一种ThreadLocalRandom类用来生成随机数。TheadLocalRandom使用了ThreadLocal的原理,让每一个线程都只有本地种子变量,该种子变量只有在使用随机数时才会被初始化。在多线程下计算新种子时是根据自己线程内维护的种子变量进行更新从而避免竞争。
2022-10-22 11:18:47
380
原创 【设计模式】之【建造者模式】
使用建造者模式能够很好的将对象的创建变得优美,尤其是在对象属性较为多的情况下。除了以上的情况,加入需要对某个对象的参数进行校验时,使用构造者模式也非常实用,在每一个设置属性的同时,根据实际情况进行判断,保证得到的是自己需要的属性,特别是在对判空尤为体现。抽象工厂模式。
2022-09-17 11:14:41
165
原创 【设计模式】之【抽象工厂模式】
假如我们需要定义一系列的规范,具体的实现由不同的使用去实现。例如:连接数据库,对应jdk来说,定义连接协议,执行命令协议等,具体如何实现连接,如何执行命令,由各自厂商去实现。抽象工厂模式是在多个方法工厂模式下建立起来,指在建立规则,不负责具体实现。尤其在服务中连接数据库特别明显,实现数据库的插拔。
2022-09-15 22:05:47
221
原创 【设计模式】之【工厂方法模式】
在实际开发过程中,有些情况下会遇到需要创建有共同类型的对象,而且对象之间又有一些共同的属性与行为。比如猫和狗,都是哺乳动物,同时邮箱相同的属性4条腿。在实际开发的过程中,如果对象种类不是很多的话,其实使用简单工厂就可以应对了。但是一旦后续还有种类要增加的话就涉及到需要更改旧代码,引来未知的风险。而使用工厂方法模式的话就避免了以上的问题,有新的种类增加,就只需要增加一个子类实现即可。
2022-09-15 21:26:58
535
原创 【关于Zookeeper的理论】
CAP理论指出一个分布式计算机系统来说,不可能同时满足以下三点:BASE 理论是**基本可用(Basically Available)、软状态(Soft-state)和最终一致性(Eventually Constant)**三个的缩写。在zookeeper中,ZAB 协议是用来实现分布式数据的一致性。ZAB 协议分为两个部分:消息广播Zookeeper使用单一的主进程Leader来接收和处理客户端所有事务请求,并采用ZAB协议的原子广播协议,将事务请求以Proposal提议广播到所有Follwer节点,
2022-06-10 11:17:12
92
原创 spring cloud gateway Route配置
gateway routes规则1、After Route所有匹配的请求必须在这个时间点之后spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - After=2022-05-23T19:52:33.736+08:00[Asia/Shanghai] #时间格式为ZonedDateTime.now()
2022-05-24 11:07:56
11320
原创 springcloud-gateway整合nacos
1、 首先创建一个maven项目2、在pom文件中添加依赖<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
2022-05-22 22:52:48
633
原创 使用idea将一个java类打成jar完整步骤
机缘提示:可以和大家分享最初成为创作者的初心例如:实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流…收获提示:在创作的过程中都有哪些收获例如:获得了多少粉丝的关注获得了多少正向的反馈,如赞、评论、阅读量等认识和哪些志同道合的领域同行…日常提示:当前创作和你的工作、学习是什么样的关系例如:创作是否已经是你生活的一部分了有限的精力下,如何平衡创作和工作学习…憧憬提示:职业规划、创作规划等Tips您发布的文章将会展示至 里程碑专区
2022-05-20 17:44:51
10399
原创 【文件每行读取】
文件读取public static List<String> importFile(String fileName) { List<String> list = new ArrayList<>(); try{ File file = new File(fileName); if (file.isFile() && file.exists()) {
2022-04-25 16:05:27
208
原创 Liunx常用命令
Linux基本命令目录操作mkdir 目录名称 增加目录ls或ll (ll是 ls -l 的缩写, ll命令可以看到该目录下的所有目录和文件的详细信息) 查看目录信息find 目录 参数 : 寻找目录(查)列出当前目录及子目录下所有文件和文件夹: find .在/home目录下查找以.txt结尾的文件名: find /home -name “*.txt”同上,忽略大小写: find /home -iname “*.txt”当前目录以及子目录下查找所有以.txt和.pdf结尾的文
2022-04-18 22:16:03
147
原创 【Java创建线程的3种方式】
文章目录Java创建线程的3种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口四、结果一、继承Thread类 public static class ThreadExtend extends Thread { public void run() { System.out.println("Thread extends method!"); } }优点在run()方法内部获取当前线程直接使用th
2022-04-13 20:45:59
408
原创 求2到n范围内的素数和
求2到n范围内的素数和一、暴力破解法二、埃筛法一、暴力破解法解题思路从2开始遍历每一个数字如果这个数组从2到n有一个数能够整除,那么这个数字就位合数否者,这个数字则为素数。 public static int bf(int num) { int count = 0; for (int i=2; i<= num; i++) { count+= isPrime(i)?1:0; } return coun
2022-04-09 11:02:50
1620
原创 Redis内存淘汰策略
系列文章目录Redis缓存不一致问题如何解决使用Redis缓存数据可能需要的问题文章目录系列文章目录前言一、如何给Redis设置缓存淘汰策略?二、内存淘汰策略1.TTL算法2.LRU算法(Least recently used)3.LFU算法(Least frequently Used)4.LRU和LFU对比总结前言在分布式系统中,为了提高系统的性能,会使用到Redis来作为缓存中间件,将一部分数据库中的数据存储到缓存中,但是不会把数据库中的数据全部都放到缓存中,而是将其中一部分热点数据放入缓存
2022-03-13 08:57:55
216
原创 Spring源码之推断构造方法
文章目录前言一、什么是构造方法?二、在Spring中如何找到最合适的构造方法1、找出所有的构造方法2、遍历所有的构造方法获取到的构造方法3、找到构造方法之后,需要找出合适的构造方法4、整个推断构造方法的总结5、在获取所有构造方法之前还使用了DCL来保证线程安全问题。总结前言在Spring容器启动的时候会把所有的单例bean都给加载到容器中,但是在这些单例bean是如何被创建出来的呢?在Spring容器中,会使用推断构造方法将单例bean的构造方法找出来,找到最合适的构造方法进行对象的创建,具体找到构造
2022-03-09 23:59:54
500
1
原创 Redis缓存不一致问题如何解决
Redis缓存不一致问题如何解决第一章 Redis之缓存可能遇到的问题文章目录Redis缓存不一致问题如何解决前言一、Redis是什么?二、使用Redis带来的缓存不一致问题1.搭建高可用的分布式缓存总结前言在单机、并发量小的情况下,我们可以直接让请求直接访问数据库,单机MySQL查询最大能够支持每秒1万左右的查询请求,3千左右的新增更改的请求。但是在高并发场面下,并发量远远大于这些请求,为了保证系统的安全和高可用,一般会使用缓存作为中间缓存层,避免请求直接访问数据库。一、Redis是什么?
2022-03-08 08:43:37
2108
原创 Redis数据缓存可能遇到的问题
Redis第一章 Redis之缓存可能遇到的问题文章目录Redis前言一、我们为什么使用缓存?二、使用缓存可能会带来哪些问题?1.缓存雪崩2.缓存穿透3、缓存击穿总结前言数据批量导入,这一批数据的过期时间可能一样,如果这时候有大量请求访问,该如何解决?如果别人知道缓存中的key某个生成规则,专门发送一些攻击请求,又该怎么办?一、我们为什么使用缓存?使用缓存的目的就是为了减少请求直接访问数据库,使用更高性能的缓存中间件来加快查询数据,同时保护数据库不被大量请求所打垮。二、使用缓存可能会带来哪
2022-03-07 23:44:41
702
原创 二叉树遍历(前中后)
二叉树定义:public class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(){} public TreeNode(int value) { this.value = value; } public TreeNode(int vlaue, TreeNode left, TreeNode right) { this.value = value; this.left = left;
2022-02-03 16:19:16
1279
原创 【算法】leetCde之反转链表(第206题)
一、题目给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。二、示例输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next
2022-01-31 11:47:59
74
原创 【算法】leetCde之反转链表(第206题)
一、题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。二、示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListNode(int val, ListNode next){
2022-01-30 16:32:57
567
原创 【算法】leetCde之删除排序链表中的重复元素(第83题)
一、题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。二、示例输入:head = [1,1,2]输出:[1,2]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListN
2022-01-24 22:10:05
105
原创 【算法】leetCde之合并两个有序链表(第70题)
一、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。二、示例输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListNode
2022-01-23 22:32:39
310
1
原创 【算法】leetCde之爬楼梯(第70题)
一、题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。二、示例输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶代码实现递归 public int climbStairs(int n) { if
2022-01-16 15:01:51
194
1
原创 设计模式之享元模式
工厂模式:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式分类:1、简单工厂(SimpleFactory)2、抽象工厂 (AbstractFactory)简单工厂利用简单工厂创建接口,但是也可以利用简单工厂创建抽象类或者普通类的实例。示例、利用简单工厂创建对象先定义一个接口,接
2022-01-12 23:43:29
72
原创 借助CountDownLatch解决并行执行相同任务后汇总问题
项目场景:借助CountDownLatch解决并行执行相同任务后汇总问题问题描述:由于其他平台有限制,每次远程查询信息量只有20个,如果大于20个,那就需要进行多次查询汇总,这个时候借助线程池,并且使用CountDownLatch来控制请求达到什么样的条件之后才开始汇总数据。业务执行内容:public static Integer getNum() throws InterruptedException { Thread.sleep(100); return new
2022-01-11 23:43:04
644
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人