- 博客(115)
- 收藏
- 关注
原创 Spring:动态数据源
AbstractRoutingDataSource 是 Spring 框架中的一个抽象类,它主要被用来实现动态数据源切换的功能。在多数据源的应用场景下,例如读写分离、数据分片、环境隔离等,AbstractRoutingDataSource 提供了一种灵活的方式来根据不同的条件选择不同的数据源AbstractRoutingDataSource 允许你在运行时根据业务需求动态地选择不同的数据源。例如,在读写分离的场景中,你可以根据请求类型(读或写)选择不同的数据库连接@Override。
2024-07-26 16:23:37
310
原创 Java:自定义监听
场景描述:当订单流转到某一个节点之后,我们需要通知A系统、B系统、C系统。且通知的内容不一致。通常我们会将这些逻辑都集成在一起,增加代码复杂度、降低可维护性。我们可以使用自定义监听对该场景进行设计改造。我们可以将待处理的订单记录到一个个队列中,然后有一个线程一直在扫描该队列,然后封装成事件,发布事件。当对应事件的监听器收到后,会立即进行处理。多个监听器也可以处理同一类事件,也就是针对一个订单,我们可以有不同的处理逻辑,这些都是一个个单独的存在。互不干扰。
2024-07-09 09:45:49
378
原创 本机搭建RabbitMQ
Exchange(交换机)作用:Exchange是消息的路由器。生产者将消息发送给exchange,而不是直接发送给队列。exchange根据预定义的规则(称为binding)来决定哪些消息应该路由到哪个队列类型:Exchange有多种类型,如direct(直接交换机)、fanout(广播交换机)、topic(主题交换机)和headers(基于消息头的交换机),每种类型的exchange有不同的路由策略配置:Exchange需要预先声明,指定其类型和任何其他相关配置Queue(队列)
2024-05-15 15:15:54
1211
原创 Java:内存模型
Java内存模型,规范了JVM如何提供按需禁用缓存和编译优化的方法通俗的讲,就是约定了按需禁用缓存和编译优化的关键字、方法等等。来讲两个例子,大家就知道说的是什么了,例如:修饰变量的关键字关键字。也就是说这些个Java的关键字,是为了禁用缓存和编译优化而生。新事物的出现并非偶然,带着解决问题的思路去思考。
2024-05-07 16:00:50
817
1
原创 BigDecimal:踩坑
JDK为我们提供了带精度的divide方法,当遇到这种除不尽的场景,可以很好的处理,综上,建议在用BigDecimal进行除法运算的时候,优先采用有精度控制的方法。终于找到源头了吧,就是在我们使用单个参数的divide方法时,默认给的就是7,如果除不尽,有这个限制。Java 中使用 BigDecimal 做除法运算的时候,值有可能是无限循环的小数,结果是无限循环的小数,就会抛出上面这个异常。是不是抛出来的异常跟我们堆栈里的一样,我们接着进入divide方法看看。接着进入divideAndRound方法。
2024-05-06 16:20:26
398
原创 算法:最长有效括号子串的长度
给定一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度输入:s = "(()"输出:2解释:最长有效括号子串是 "()"输入输出:4解释:最长有效括号子串是 "()()"每天进步一点点!
2024-04-30 16:20:54
438
原创 算法:找不同
给定两个字符串s和t,它们只包含小写字母。字符串t由字符串s随机重排,然后在随机位置添加一个字母。请找出在t中被添加的字母。输入:s = "abcd"输出:e每天进步一点点!
2024-04-30 09:50:20
740
原创 算法:各位相加
给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数输入:38输出: 23 + 8 = 111 + 1 = 2。由于2是一位数,所以返回 2每天进步一点点!
2024-04-29 15:45:16
407
原创 算法:二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。输入:1/ \2 35输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3每天进步一点点!
2024-04-29 14:16:27
280
原创 算法:不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数输入:n = 3输出:5根节点分别为1、2、3时,一共有五种情况,分别是1)根节点为1,先给节点2,再给节点32)根节点为1,先给节点3,再给节点23)根节点为2,分别给节点1和34)根节点为3,先给节点1,再给节点25)根节点为3,先给节点2,再给节点1输入:n = 1输出:1每天进步一点点!
2024-04-28 16:47:47
247
原创 接口防刷:图形验证码
重置密码,会给用户手机号发送一个短信验证码,因为该接口是未登录就可以访问,所以存在防刷风险。还会遇到未申请重置密码的用户,收到了重置密码的短信。动动脑,能防老!
2024-04-12 15:02:44
352
原创 Springboot:Actuator监控
Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用查看哪些端点是开放的,通过get请求来访问自定义端点,可以实现我们想要的功能,比如对某一个、某几个请求做统计,我们通过metrics去访问这些细项。Actuator提供的各get接口,返回的数据都是JSON串,不太美观,有的返回的信息量很大,需要我们自己去筛选出来我们关心的常用指标。例如JVM的信息、线程的信息、内存的使用情况等等。
2024-03-26 11:41:30
982
原创 Lombok:@Singular集合元素灵活添加利器
Singular注解可以用在集合类型的字段上,它会生成两个方法,一个是添加单个元素的方法,一个是添加整个集合的方法。这两个方法可以和@Builder生成的其他方法一起链式调用,给你的类的所有字段赋值。每天进步一点点!
2024-03-21 16:48:48
569
原创 Lombok:@Cleanup资源释放利器
Cleanup可以自动管理输入输出流等各种需要释放的资源,确保安全地调用close方法每天进步一点点!
2024-03-21 16:31:12
368
原创 LiteFlow特性:选择编排Switch
原来不打算专门写这么细的一章,但是我自己实践过程中发现,框架还是有不少限制,但是没有在官方文档或者其他博客里提到,所以初次接入的人会特别郁闷,怎么调试都不好使。话不多说,开始今天的章节吧。提示:以下是本篇文章正文内容,下面案例可供参考每天进步一点点!
2024-03-01 17:56:40
377
原创 Springcloud:LiteFlow
在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以这样操作,在项目角度就无法一眼洞穿其中的环节和逻辑。在本文中,将引入规则引擎从全局角度来解决这个问题,这就是今天要介绍的主角 liteflow。liteflow 是一个轻巧而且强大的规则引擎,能够实现开箱即用,可以在短时间内就可以完成复杂的规则编排,下图是 liteflow 的整体架构。
2024-02-21 15:49:24
1507
原创 算法:柠檬水找零
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考没啥难度,简单到有手就行!
2024-02-18 17:39:43
345
原创 Java:获取pdf中某一页的宽度和高度
金融业务,经常会涉及到合同盖章,那么盖章的时候就需要知道位置信息。比如第几页,X坐标,Y坐标。那么如果给出的坐标超出了范围,就会导致章盖不成功,那么我们怎么才能知道这个pdf文件中某一页的XY坐标呢?各种工具类的使用,重在积累,不难,但是要找一翻。
2024-01-24 16:56:43
1407
原创 Java:synchronized
synchronized是Java中的一种关键字,用于实现线程同步。它的底层实现依赖于JVM的锁机制和操作系统的底层支持比较核心的概念,该看还得看!
2024-01-22 17:13:58
384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人