自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 布隆过滤器的原理及使用

布隆过滤器

2022-10-23 11:23:46 900

原创 什么情况下考虑分库分表

什么情况考虑分库分表

2022-07-05 12:57:41 1304

原创 幂等处理技术方案

一、背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题等等很多重要的情况都需要幂等的特性来支持。二、幂等性概念幂等(idempotent、idempotence)

2021-11-11 12:05:39 219

原创 MySQL缓存机制

1. MySQL缓存简介MySQL缓存机制说明MySQL缓存机制即缓存sql 文本及缓存结果,用KV形式保存再服务器内存中,如果运行相同的sql,服务器直接从缓存中去获取结果,不需要再去解析、优化、执行sqlMySQL缓存失效在表的结构或数据发生改变时,查询缓存中的数据不再有效,查询缓存值的相关条目将被清空INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效使用场景对于频繁更新的表,

2021-09-28 10:30:30 3706

原创 父 pom 文件打包注意事项

【代码】父 pom 文件打包注意事项。

2024-01-30 15:40:19 171

原创 简述 AOP 动态代理

JDK 动态代理的限制在于,它只能代理实现了接口的类,如果一个类没有实现任何接口,JDK 动态代理就无法代理它,这是因为 JDK 动态代理是基于接口的代理,它生成的代理对象会实现指定接口,然后通过该接口来调用被代理类的方法。

2023-10-06 13:07:05 371

原创 elasticjob 教程

是 ElasticJob 的管理控制台,包含了动态配置、作业管控等功能。需要使用 jdk 1.8 编译和运行。解压 elasticjob-lite-ui-bin.tar.gz 运行 bin/start.sh。,可以通过直接对注册中心进行操作的方式控制作业在分布式环境下的生命周期。ElasticJob-Lite 提供了。解压后执行 bin/start.sh。方法一:直接下载编译好的二进制包。方法二:使用 jdk1.8 编译。jobs 的配置项是否必填。

2023-10-03 11:51:24 281

原创 Kafka Streams

用 docker-compose.yml 启动一个测试的 kafka。创建一个 srping boot 项目,pom.xml 配置依赖。启动 spring boot 项目。

2023-10-03 11:33:36 106

原创 定时任务分析

通过 Spring 提供的 @Scheduled 注解即可定义定时任务.

2023-10-02 01:04:09 46

原创 conductor-05

设计一个容量为 1 的队列(假设名称为 workflow_group_a),流程 1 和流程 2 每次执行结束都把执行的结果存入这个队列。如果是实例级别对齐,相当于流程 1 每执行一次,都需要流程 2 执行一次才能执行流程 3(流程 2 也如此)。先拆分成三个流程,在流程 1 和流程 2 的结束增加一个自定义 task,用来判断流程 1 和流程 2 是否都执行完成。假设流程三永远取的是流程 1 和流程 2 最新的数据。conductor 的 DAG 图是一种只有一个起点和一个终点的对称的结构。

2023-10-02 00:54:53 107

原创 conductor-04

并行并不代表“同时”,joinOn 的数量可以少于总数,0~n,如果 joinOn 为空,则这个工作流在 conductor 的 Executions 界面一将会一直在 RUNNING 状态,但在详情内是 COMPLETED 状态。

2023-10-02 00:44:27 30

原创 conductor-02

自定义任务(Worker Tasks)由应用程序实现,并在与 Conductor 不同的环境中运行。工作线程任务可以用任何语言实现。这些任务通过 REST/gRPC 与指挥服务器通信,以轮询任务并在执行后更新其状态使用 Clojure、C#、Go、Java、Python 的 Conductor SDK可以开发的自己 worker,实现注册/更新工作流和任务定义、启动新工作流、获取工作流的执行状态、轮询任务、执行后更新任务结果、获取任务状等参考文档工作流引擎对比。

2023-10-02 00:38:26 69

原创 conductor-01

垂直的一条服务,假设其他功能也需要短信通知、邮件通知、http 通知。有可能其他服务的参数不一样,且顺序不一样,还有就是可能不需要部分服务。把这些服务拆成原子化的,然后通过 conductor 就可以随意组合拼接这些服务,执行完一个节点后,conductor 会自动启动下一个节点。为什么需要 conductor 原来: 下订单、算积分、短信通知、邮件通知、http 通知。定义工作流(编排任务) 拿一个或多个小方块拼接成一个整体(流水线)搭建 conductor 服务。定义任务 小方块(工人)

2023-10-02 00:16:13 48

原创 conductor-03

假设有个业务,需要按顺序一次执行 sms 通知用户、email 通知用户、http 通知另一个业务系统。通过 conductor-server 的 api 接口提交 worker 的定义。如果安装了 conductor-ui 的话,也可以通过 ui 界面操作。同理也可以通过 conductor-ui 界面来定义 workflow。同理定义完成短信通知和 http 通知的 worker。也可以通过 conductor-ui 的界面启动工作流。通过 conductor-ui 的界面查看。

2023-10-01 23:43:32 178

原创 git cherry-pick 用法

说明,其他分支例如 dev 提交的代码,使用 jihulab.com 比较 master-fxd 和 dev 分支,下图右侧复制单个提交 id。说明:本人基于 master 新建分支 master-fxd,那么目标分支为 master-fxd。

2023-07-06 19:08:58 299

原创 RocketMQ 怎么实现的消息负载均衡以及怎么能够保证消息被顺序消费

需要注意的是,RocketMQ的消息顺序消费是在消息队列的粒度上保证的,即同一个消息队列上的消息会按照顺序消费,但不同消息队列之间的消息消费顺序是无法保证的。另外,为了进一步提高消息的可靠性和顺序性,可以在RocketMQ的配置中启用消息的同步复制(Sync Replication),确保消息在主备节点之间的同步复制过程中不丢失和乱序。RocketMQ是一种开源的分布式消息中间件,它使用了一种称为消息负载均衡的机制来实现消息的分发和消费的负载均衡。

2023-05-23 14:13:04 978

原创 本地 docker 发布 java 项目,连接本地 redis 配置

3、由于项目带有本地 redis,所以需要首先需要创建容器间共享网络(redis 容器和 java 项目容器共享网络),其次 docker 启动 redis 容器(端口映射),再次 java 项目中配置的 redis 链接需要使用宿主机的 ip 地址,命令如下。1、本地项目 install 相应的 jar 包到 target 目录下,jar 包的路径步骤 2 要填写。3、在项目跟目录执行 docker build -t gateway .2、项目根目录下创建 Dockerfile 文件。

2023-05-22 23:09:32 511

原创 pom 依赖中 <optional> 和 <scope> 标签作用

true” 是在该依赖项元素中的一个子元素,它指定了这个依赖项的可选性。在你提供的代码片段中, 元素指定了一个名为 “jakarta.servlet-api” 的依赖项,属于 “jakarta.servlet” 组织(groupId),“provided” 是在该依赖项元素中的一个子元素,它指定了该依赖项的作用域。“provided” 的意思是该依赖项在编译和测试阶段是可用的,但在运行时由部署环境提供,这通常用于标记那些在编译和测试期间需要使用,但在部署时已经由容器或服务器提供的库。

2023-05-17 17:04:57 1778

原创 mysql 分页 limit

如果limit后面是2个参数,就是从offset+1行开始,检索rows行记录。如果limit后面是一个参数,就是检索前多少行。

2023-05-06 14:38:38 56

原创 解决IntelliJ IDEA无法启动问题(通用排查定位思路)

1、找到idea的安装目录,如:D:\IDEA\IntelliJ IDEA 2019.1.2\bin。4、 双击启动,查看错误信息,定位到错误信息是启动时,找不到jar包。3、编辑此文件,在最后一行,添加:pause。2、找到idea.bat文件。

2023-05-05 20:23:14 1931

原创 一个机器人在m*n的棋盘上,从最左上角开始往下走,要走到最右下角的那个位置,有多少种走法

具体来说,令 obstacleGrid[i][j] 表示坐标为 (i,j) 的格子是否有障碍物,若 obstacleGrid[i][j] == 1,则将 dp[i][j] 设为 0。令 dp[i][j] 表示机器人从左上角走到坐标为 (i,j) 的格子时的走法总数。从左边的格子 dp[i][j-1] 往右走一步到达 dp[i][j];从上边的格子 dp[i-1][j] 往下走一步到达 dp[i][j]。最终的答案是 dp[m-1][n-1],即从左上角到右下角的走法总数。假设棋盘的行数为 m,列数为 n。

2023-04-25 17:45:58 1195

原创 jenkins、kubernets 和 docker 的区别

总之,Jenkins用于自动化和持续集成/持续交付,Kubernetes用于容器编排和管理,Docker用于容器化和打包。这些工具可以结合使用,创建一个流畅高效的软件开发工作流程。Jenkins、Kubernetes和Docker是软件开发中使用的不同工具,它们各自担负不同的任务。

2023-04-25 15:40:48 1193

原创 docker 安装应用程序

在上图中可以看到我们已经安装了最新版本(latest)的 mysql 镜像。

2023-04-24 11:01:28 455

原创 docker 发布java 项目

一、使用 Docker 来构建 Java 应用程序的镜像,你需要编写一个 Dockerfile 文件来定义 Docker 镜像的构建过程,下面是一个示例 Dockerfile 文件FROM maven:3.8.4-openjdk-11 AS builderCOPY settings.xml /usr/share/maven/conf/settings.xml# 使用官方的 Java 8 镜像作为基础镜像FROM openjdk:8-jdk-alpine# 设置工作目录WORKDIR /app

2023-04-23 20:10:36 524

原创 Java 异步 Future 使用案例

如下代码 future.get() 报 null,原因是上方代码没加 return。

2023-04-19 19:21:25 300

原创 idea打开maven项目没有识别加载maven

【代码】idea打开maven项目没有识别加载maven。

2023-04-17 14:58:18 949

原创 kafka 详解

综上所述,Kafka 通过多种机制来保证数据不丢失,包括数据复制机制、持久化机制、批量发送机制和 ISR 机制,这些机制的协同作用可以保证 Kafka 的高可靠性和稳定性。

2023-04-14 14:22:31 29

原创 fastjson 与 java 交互

【代码】fastjson 与 java 交互。

2023-04-06 15:32:43 529

原创 java 线程安全的集合

CopyOnWriteArrayList :该集合是线程安全的,支持并发读取,但写操作时需要复制整个数组,因此可能会对性能产生一定的影响。Collections.synchronizedList :该集合可以将任何非线程安全的集合转换为线程安全的集合。ConcurrentLinkedDeque :该集合也是线程安全的,采用无锁的CAS算法实现并发访问,适合读写操作频繁的场景。需要根据实际情况选择合适的线程安全集合,保证在多线程访问时不会出现数据不一致的问题。

2023-03-30 18:18:46 851

原创 ldaptive 查询 OBJECT、ONELEVEL、SUBTREE、SUBORDINATE 的区别

在使用LDAP搜索操作时,正确选择Scope属性非常重要,它决定了搜索的深度和搜索结果的数量。SUBORDINATE:仅搜索基础DN指定的对象的直接子对象,不包括这些子对象的孙子对象,相当于SCOPE为ONELEVEL和OBJECT的并集。ONELEVEL:搜索基础DN指定的对象的直接子对象,但不包括这些子对象的孙子对象。SUBTREE:搜索基础DN指定的对象及其所有子对象,包括子对象的子对象。OBJECT:仅仅匹配搜索基础DN指定的对象,不搜索任何子对象。

2023-03-30 13:11:17 374

原创 开发中什么场景使用分布式锁

在分布式事务中,需要保证不同节点对共享资源的访问是互斥的,否则可能会导致数据不一致的问题,此时可以使用分布式锁来保证在事务执行过程中,各个节点之间对共享资源的访问是互斥的。需要注意的是,分布式锁是一种非常重要的机制,但同时也会带来一定的性能开销和复杂度,因此在使用分布式锁时需要权衡系统的性能和可维护性,以及使用分布式锁所带来的成本和风险。在分布式缓存中,需要保证各个节点对缓存的访问是互斥的,否则可能会导致缓存中的数据不一致,此时可以使用分布式锁来保证各个节点对缓存的访问是互斥的。

2023-03-22 19:33:26 2082

原创 redis分布式锁,java 执行时间超过锁的过期时间如何解决

另一种方法是在获取锁时设置一个足够长的锁过期时间,比如设置为一个小时或一天等,这样可以确保在Java方法还未处理完的情况下,锁不会被其他线程获取,但是这种方法需要确保锁过期时间足够长,否则可能会造成锁被持有时间过长,影响系统性能。无论哪种方式,都需要确保获取锁和释放锁的代码能够正常执行,否则可能会出现死锁或锁无法释放的情况。

2023-03-22 19:06:54 1515 2

原创 openldap 的加密密码都是不可逆的吗

但是,尽管密码是不可逆的,黑客仍可以使用密码破解技术来尝试找到与给定散列值相对应的原始密码。为了增加密码的安全性,OpenLDAP 还可以使用“盐”(salt)来增加密码的复杂度,从而降低黑客破解的成功率。OpenLDAP 使用一种称为散列函数(hash function)的算法来加密密码。散列函数是一种单向函数,其将输入数据(即密码)转换为固定长度的哈希值,该哈希值通常被用作加密后的密码。因此,一旦密码被散列,就无法将其还原回原始密码。这意味着,OpenLDAP 中的密码是不可逆的。

2023-03-22 17:07:24 241

原创 java: 程序包sun.net.util不存在

common module jdk版本导致的问题。

2023-03-15 11:54:35 1521

原创 jvm 性能调优

jmap分析内存泄漏,首先应该明确的是,jmap命令只能为泄漏提供一些线索和依据,但是不能确切的排查出代码中哪一行真正的出现了问题。jstat用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译(即使编译)等运行数据。一、jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令。12、每1 秒一次显示进程号为6的java进程垃圾回收统计情况,显示10次。11、每1 秒一次显示进程号为6的java进程的GC情况。2、查看cup、内存使用情况。

2023-03-13 20:49:38 303

原创 MySQL 共享锁 (lock in share mode),排他锁 (for update)

mysql 共享锁 (lock in share mode)允许其它事务也增加共享锁读取不允许其它事务增加排他锁 (for update)当事务同时增加共享锁时候,事务的更新必须等待先执行的事务 commit 后才行,如果同时并发太大可能很容易造成死锁共享锁,事务都加,都能读。修改是惟一的,必须等待前一个事务 commit,才可以事务之间不允许其它排他锁或共享锁读取,修改更不允许所有事务中有一个排他锁执行 commit 之后,其它事务才可执行不允许其它事务增加共享或排他锁读取。

2023-02-13 15:03:07 703

原创 IDEA使用有道翻译引擎

​ 翻译引擎选择有道词典,点击配置 输入第三步获取的id,密钥。2、打开idea设置 settings - 工具 - 翻译。1、idea需要安装插件- Translate。背景:2022.10 谷歌翻译也不在中国了。

2022-12-21 23:00:49 3438

原创 Java 执行SQL脚本文件

【代码】Java 执行SQL脚本文件。

2022-12-21 21:45:00 1019

原创 @Transactional 注解 同一个类下的两个方法

calculateAllByEaArea方法(有声明式事务注解 事务传播级别为propagation = Propagation.REQUIRES_NEW 访问域为public)calculateAllByEaArea方法(有声明式事务注解 事务传播级别为propagation = Propagation.REQUIRES_NEW 访问域为public)calculateAllByEaArea方法(有声明式事务注解 事务传播级别为默认 访问域为public)原理是Spring的动态代理。

2022-11-30 15:30:21 1310

原创 docker 打包部署报错 no main manifest attribute, in xxx.jar

【代码】docker 打包部署报错 no main manifest attribute, in xxx.jar。

2022-11-18 17:09:07 594

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除