- 博客(113)
- 收藏
- 关注

原创 Java Boy敲代码提效必备的这些工具,骚年们,你们都用到了吗?
必装的一个插件,除非你用Gradle,那当我没说,通过这个插件可以很清楚看到各依赖关系,妈妈再也不用担心我把版本或者包搞错了。Apifox可谓是后起之秀,除了接口调试,还能保存接口文档,还能进行版本管理,还能保存运行测试用例,功能确实全面。可能是工具没选对,也有可能是工具选对但没用好,纵有单身20几年的手速,效率却输给了刚毕业的小伙。总体我觉得还是很方便的,响应速度也很快,平时遇到一些忘记的API之类的,问一问立马就出。这个工具可谓是集齐了开发者必备的小工具,实在是日常开发必备,这不得赶紧下载一个。
2025-03-18 19:00:49
798

原创 4万的私活接商城小程序,通过微信商家转账到零钱实现返佣,我决定做一个电子钱包!
设计就到这里,整体业务流程还是相对不复杂的,了解基本的账户概念就可以上手。这里不得不提微信商家转账到零钱出新版API了,老版本的API设计说实话有点复杂,引入了转账批次和转账详情的概念,但实际业务场景不用拆分。重点是升级后的API版本对用户收款的体验做了优化,大家有类似接入微信商家转账到零钱的需求可以使用最新版本,API更简单。
2025-03-17 18:31:07
640
2

原创 全网最详细Jenkins一键远程部署Maven项目和Vue项目
的服务通常会隔离开来,部署在不同的服务器上,这时我们需要远程登录服务器将打好的包上传至目标服务器上,并执行相应的shell脚本启停服务。其实和上面Maven项目的操作一样,只不过H5是静态部署,不需要重启Nginx服务器,直接放入Nginx目录下即可。,并且实现了当应用进程和Jenkins进程在同一台服务器上时,应用服务的自动化发布。接下来我们需要添加需要连接的服务器列表,建议专门为Jenkins开设一个登录用户,下面是需要上传的文件配置,上传至哪台服务器,上传哪些源文件,上传至哪个目录等等。
2025-02-02 15:54:59
1077

原创 推荐一款轻量级权限认证框架Sa-Token,集成JWT和Redis轻松实现认证鉴权
Sa-Token是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。// 会话登录,参数填登录人的账号id// 登出,自动清空会话信息// 将账号id为 10077 的会话踢下线// 根据路由划分模块,不同模块不同鉴权// 更多模块...除了上面的身份认证,还有权限认证记住我SSO单点登录OAuth2.0等更多功能等待解锁。总体来说,Sa-Token。
2024-11-17 22:13:58
1819

原创 Redis集群分片存储最佳实践,手把手搭建Redis集群
高性能: 高达1000个节点的线性扩展,无代理,异步复制,对值没有合并操作。写安全的可接受度:系统尽量保留连上master节点客户端的写请求。通常有段小的时间窗口,可能会丢失确认的写入。当客户端处于少数分区时,丢失确认写的时间窗口会更大。可用性:Redis集群是能在大多数master节点可用的分区中存活,对于每个不可用的master节点至少会分配一个可用的从节点。此外,通过副本迁移,没有任何从节点的master节点将会从其它有多个从节点的master节点中接收一个从节点。
2024-10-26 20:48:29
1274

原创 Redis主从复制机制详解
1、什么是主从复制?2、为什么要使用主从复制?redis-server单点故障。单节点QPS有限。3、主从复制应用场景分析?读写分离场景,规避redis单机瓶颈故障切换,master出问题后还有slave节点可以使用。
2024-10-12 09:13:19
1226

原创 Redis持久化机制(RDB&AOF详解)
Redis的数据都存放在内存中,如果没有配置持久化,Redis重启后数据就丢失了,于是需要开Rredis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。RDB持久化能在指定的时间间隔对你的数据进行快照存储。客户端直接通过命令bgsave或者save来创建一个内存快照。bgsave调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程则继续处理命令。save执行过程中,不再响应其它命令。
2024-10-08 18:44:36
1501
2

原创 数据库索引和磁盘的关系大揭秘
上面说了,1000条数据需要构建32个索引block,如果我们以32为单位,只存32条二级索引记录,再次构建二级索引,则只需要1个索引block。以这100条数据为例,我们用4个block存索引数据,25个block存储列数据。为100个记录,我们先扫描索引,最多读取4个block就可以找到该数据所在磁盘扇区,再经过1次磁盘查询就可以找到该数据,也就是说最多经过5次磁盘查询。问题又来了,如果数据量越来越大,变成10w条,100w条,就算建立10w条,100w条索引,速度还是会越来越慢,该怎么办呢?
2024-10-02 17:23:15
1257

原创 快速了解:MySQL InnoDB和MyISAM的区别
除非在创建表的时候手动指定存储引擎,不然创建的表都是InnoDB管理的表。除了InnoDB,MySQL还支持其它的存储引擎,比如。今天我们根据官方文档详细聊聊InnoDB和MyISAM的区别。在MySQL 8.0中,
2024-10-01 12:55:02
1006

原创 一篇文章让你秒懂MySQL中的各种锁
InnoDB实现了标准级别的锁,这种锁主要有两种类型,共享锁(S)和独占锁(X)。共享锁(S)允许获得锁的事务读行数据。独占锁(X)允许获得锁的事务去更新或者删除行。事务T2如果请求获取共享锁(S),那么将会授权成功。T1和T2两个事务都会持有对数据行R的共享锁(S事务T2如果请求获取独占(X),那么授权将会失败,事务T2必须等待T1释放共享锁(S)。备注:共享锁和读占锁只是一种概念,表级别和行级别都有共享锁和独占锁。根据功能划分:分为共享锁(S)和独占锁(X),S锁和X锁互斥。根据粒度。
2024-09-27 17:07:49
1341

原创 解决事务提交延迟问题:Spring中的事务绑定事件监听机制解析
从Spring 4.2版本开始,事件监听器可以绑定到事务的某个阶段,最典型的应用就是当事务完成时再处理事件。注册一个常规的监听器我们可以通过来实现。如果我们需要将事件和事务绑定可以使用注解,默认情况下,监听器会绑定到事务的提交阶段。举个例子:@Component@Override@Component注解暴露了一个phase:事务提交前。:事务提交后。:事务回滚后。:事务完成后(提交或者回滚)。如果事件发布时没有事务运行,事务监听器不会被调用,但可以通过设置为true。
2024-09-23 13:05:40
1246
1

原创 XXL-JOB实践:从零开始构建你的任务调度系统
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块。是一个分布式任务调度平台,部署方便,使用简单,开箱即用,目前已经有600多家公司线上已经接入。启动执行器后,我们会发现三个作业处理器注册成功,并且执行器启动了内置服务器,并暴露。这里我们添加了两个任务,可以点击操作中的执行一次进行调度测试。配置为执行器与调度中心通讯的访问token,为可选配置。主要由两个模块组成,一个是调度中心,一个是执行器。
2024-09-06 17:43:06
1232
2

原创 Linux快速安装Jenkins一键部署Maven项目
以上的场景是Jenkins和应用服务在同一台服务器上,如果应用服务不在同一台服务器上,可以通过插件来实现远程构建和自动化部署,具体后面章节再做详细介绍。
2024-07-29 18:23:50
1934
2

原创 Vue项目Nginx子目录部署(Vite和Vue-CLI)
生产环境中Vue项目我们一般会部署在域名的子目录下,在了解如何部署时我们先了解下Vue构建相关的基础知识。Vue CLI目前已经处于维护状态,一般老项目可能还在用它来开发,Vue CLI打包时基于。目录下找名为hwc的目录,以及该目录下的文件,如果都没有找到,则回退访问。,如果想在Nginx中指定前缀访问静态资源和文件,需要在打包构建时配置。中进行修改,指定base配置即可,这里我们指定了。目前是Vu3主流构建工具,打包配置我们可以在。,也就是说所有的静态资源都会带上该前缀。支持3种历史记录模式,分别是。
2024-05-20 00:46:48
805
1

原创 Spring RabbitMQ那些事(3-消息可靠传输和订阅)
在RabbitMQ官方文档描述中,持久化的消息在Broker重启时也是应该存活的,这里的词用的是应该,因为消息有可能在落地磁盘前Broker就挂了,导致消息丢失。,一旦Broker处理完就会确认消息,而且这个过程是异步的,生产者可以流式发布消息,不需要等待Broker,并且Broker会批量高效将消息落盘。消费者端确保消息消费很简单,关闭消息自动确认就好,开启消息手动确认。备注:这里我们开启了消息的手动确认,如果消息处理失败没有确认,那么消息将会在下次消费者参加连接时再次被投递。
2024-01-20 18:32:11
1778
3

原创 Spring RabbitMQ那些事(2-两种方式实现延时消息订阅)
被消费者nack(negatively acknowleged)的消息。TTL过期后未被消费的消息。超过队列长度限制后被丢弃的消息。备注:更多信息请参考RabbitMQ中的。
2023-11-26 13:28:48
2060
7

原创 Spring RabbitMQ那些事(1-交换机配置&消息发送订阅实操)
*** 定义4个队列*/@Bean@Bean@Bean@Bean/*** 定义Fanout交换机和对应的绑定关系*/@Bean/*** 定义多个Fanout交换机和队列的绑定关系* @return*/@Bean备注:这里我们将4个队列绑定到了名为的交换机上。@Bean@Bean备注:这里我们定义了名为的交换机并通过路由key将queue-3绑定到了该交换机上。@Bean@Bean这里我们定义了名为。
2023-11-07 18:03:33
1586
5

原创 内存爆炸、CPU100%问题定位
最小堆内存并不是程序一启动就申请这么多内存,而是当前进程如果申请的内存已超过最小堆内存,内存回收时,大于最小堆内存的部分会返回给操作系统,其它申请的内存不会。简单来说就是没有开启预热时,JVM只是向操作系统做了登记,告诉操作系统我需要多少内存,但实际上并没有进行物理分配,加上该参数后在程序启动时就会分配物理内存。参数时,JVM进程申请的内存只是虚拟内存,程序运行时根据虚拟内存地址映射到实际的物理内存,缺页时才将数据加载到物理内存,分配实际的物理空间。现在可以看到该线程的方法调用栈,进而找到相应的代码。
2023-10-20 15:19:17
1010
9

原创 RabbitMQ中的核心概念和交换机类型
下面让我们用一幅图来总结一下RabbitMQ中的概念模型,所有RabbitMQ对象以虚拟主机区分,如下:上面我们介绍了4种交换机,Fanout交换机Direct交换机Topic交换机和Headers交换机,其实还有一种是默认交换机。发送消息时如果只指定了交换机而没有指定队列,那么消息会通过默认交换机直接转发到指定的队列中,比如上图中的消息1。消息2和消息3发送到了exchange-2上,该交换机类型为Direct,因此消息2会通过路由keyorder发送到queue-3上,而消息3会通过路由key。
2023-10-19 19:34:27
809
2

原创 WebSocket的那些事(6- RabbitMQ STOMP目的地详解)
在上节中我们已经简单介绍了各种目的地类型,如下图:这一节我们来详细探讨一下各种目的地类型的区别。在MESSAGE报文中请求头amp.topic如果队列名、交换机名、路由key包含了或者非ascii字符,这些字符将会被替换为%dddd的意思是16进制编码。
2023-09-27 21:57:11
1047
4

原创 WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)
Data/*** 用户唯一ID*//*** 用户昵称*//*** 用于指定用户消息推送的标识* @return*/@Override@Slf4j@Override// 如果是连接请求,记录userId下一节我们将会详细说明RabbitMQ STOMP适配器支持的各种消息目的地类型的区别以及适用场景。
2023-09-07 18:34:55
2160
12

原创 Easy Rules规则引擎(2-细节篇)
语义就是先判断数字是否能被5和7同时整除,再判断是否能被5整除,再判断是否能被7整除,最后判断是否不能被5或7整除。,这是一个组合规则,也就是说当满足该组合规则的条件,且规则行为执行成功后,就会跳过后面低优先级的所有规则。该组合规则的源代码如下,可以看到只有最高优先级的规则可以被触发,才会继续应用其它规则中的规则。该组合规则判断规则是否触发的代码如下,可以看到,所有的规则如果被触发,相应的行为都会被执行。从该组合规则的源代码可以看到,该规则组中只有第一条可以被触发的规则才会执行相应的规则行为。
2023-08-23 19:07:39
2270
7

原创 Easy Rules规则引擎(1-基础篇)
Easy Rules是一个Java规则引擎,它提供了规则抽象,通过触发条件和触发后的行为去创建规则。还提供了规则引擎API,通过这些API可以基于一系列的规则去判断规则是否触发,以及触发后执行什么动作。轻量级Java库,易于学习的API。注解式编程模型实现基于POJO开发。通过抽象定义业务规则并且轻松应用规则。支持通过简单规则可以创建组合规则。支持通过表达式语言(MVEL、SPEL和JEXL)定义规则。--核心库-->--组合规则支持-->--SPEL表达式语言支持-->
2023-08-09 19:04:40
1925
6

原创 WebSocket的那些事(4-Spring中的STOMP支持详解)
上节我们在 WebSocket的那些事(3-STOMP实操篇)中介绍了STOMP协议以及和Spring集成的简单示例,这一节我们我们将用一个聊天Demo程序详细介绍相关注解使用和原理、拦截器、用户身份校验、还有事件。Maven依赖如下:1、前端页面chat.html2、相关实体(1) 请求消息参数(2) 响应消息内容(3) 自定义认证用户信息3、自定义用户认证拦截器4、WebSocket消息代理配置5、ChatController控制器四、测试用例打开浏览器访问可
2023-05-30 22:17:38
3319
11

原创 WebSocket的那些事(3-STOMP实操篇)
WebSocket协议定义了两种消息类型(文本类型和二进制类型),但是消息内容却是未定义的,下面我们介绍一下STOMP协议。STOMP(Simple Text Oriented Messaging Protocol) 起源于脚本语言,比如Ruby、Python和Perl,用于连接企业消息代理,它可以用于任何可靠的双向网络协议中,如TCP和WebSocket。尽管STOMP是一个面向文本的协议,但消息负载可以是文本或者二进制。STOMP。
2023-05-18 00:54:04
4565
9

原创 分布式事务之本地消息表解决方案(跨地区转账实际案例)
如果是直接轮询本地消息表,由于我们的本地消息表是广播表(PS:各个地区物理库都会有相同的表数据),查询时会随机查询各地区物理库,如果随机查询的是迪拜物理库本地消息表的记录,那么查询就会比较慢了。备注:在实际业务中,跨地区转账入账方真正到账是有延迟的,虽然出账和入账操作程序只需要在账面上进行余额的扣和减,但是比如从香港地区到迪拜地区,真正的钱要和当地结算后汇款过去才能到账的。,中间会有3个账户的余额变动和出账记录,如果是同步返回,响应时间会比较长,也会影响用户体验,出账操作这里可以通过线程异步。
2023-03-28 23:45:20
2705
12

原创 Freemarker动态模板渲染&flyingsaucer将html转PDF(多页固定头尾)
一般正常来说,生成PDF的操作都是通过将HTML转成PDF,HTML动态渲染可以借助模板引擎,如常用的。,里面会介绍CSS运行时元素以及如何控制打印PDF时的头部和尾部。,至于PDF样式,我们可以通过CSS打印样式来控制。控制PDF的内容呈现,固定每页PDF的头和尾部。来实现,可以参考之前博主写的一篇文章。HTML转PDF可以通过。今天这篇文章主要分享。
2023-03-01 18:50:56
2921
8

原创 前后端RSA互相加解密、加签验签、密钥对生成(Java)
PKCS#1和PKCS#8是两个不同的数字证书标准。PKCS#1是一个公钥加密标准,它定义了使用RSA算法进行加密和签名的格式。主要用于对数字签名、加密以及数字签名验证等应用。PKCS#8则是一个私钥保护标准,它定义了私钥的存储格式。它主要用于在文件中对私钥进行保护,以防止意外泄露或不当使用。总的来说,PKCS#1是针对公钥的标准,而PKCS#8是针对私钥的标准。
2023-02-11 17:55:18
15148
33

原创 短链是什么原理?怎么实现呢?
301其实是比较符合HTTP协议语义的,但浏览器会缓存目标网址,下次访问时会直接跳过短链,跳转到目标网址,无法做一些统计,比如短链访问次数等。常用的自增序列算法有雪花算法、Redis自增、MySQL主键自增等,生成唯一ID后,再转换为62进制字符串,转换后的62进制字符串可用作短链。原理还是很简单的,其实就是在后台保存有短链和长链的映射关系,然后进行重定向,让浏览器跳转到对应的长链接。302:浏览器访问时,会先后访问短链代理服务和目标服务,对服务器的压力也就相应大些,但可以做一些统计。
2022-12-14 18:56:31
8229
17

原创 Java如何生成花里胡哨的二维码
这个参数,二维码支持4种级别的错误校正,错误校正主要用来做缺失、误读或者遮盖数据修复。备注:所谓错误校正,说句大白话就是如果二维码有缺失,或者部分二维码有遮挡,还能不能被正常识别。我们都知道,微信二维码中间是不是带了个微信的logo,我们同样能实现,这里更多的是。备注:这里需要注意一下logo的图片尺寸,占用太大会导致二维码无法识别,同时最好将。,这个库能生成各种条形码,如:二维码、支付条形码等。相关的API并没有明确的相关解释以及使用示例,笔者也是在。的github上发现了一个在线生成二维码的网站,
2022-10-10 17:56:23
3157
9

原创 Spring声明式基于注解的缓存(3-精进篇)
在实例化时,我们可以指定key过期的entryTtl/*** 自定义CacheManager,具体配置参考{@link org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration}* @param redisConnectionFactory 自动配置会注入} }备注:这种方式有一个很明显的缺点,所有key都会共享配置,比如这里会设置所有key的过期时间都为1秒。Spring。
2022-09-29 16:58:40
2739
14

原创 Spring声明式基于注解的缓存(2-实践篇)
总得来说,声明式缓存抽象和声明式事务一样,使用起来都比较简单。Spring缓存抽象官方文档。有同学可能会发现,Spring提供的这些注解不支持过期时间的设置,官方文档也有一些解释,如下:官方提供的建议是通过缓存提供器来实现,其实就是我们可以通过自定义来实现。缓存抽象只是一种逻辑抽象,而不是具体的缓存实现,具体怎么写缓存,缓存写到哪里应该由缓存管理器来实现。下一节我们会通过自定义、、以及相关Cache注解来实现带过期时间的缓存实现。
2022-08-22 15:21:57
1358
22

原创 Spring声明式基于注解的缓存(1-理论篇)
从3.1版本起,Spring框架就已经支持将缓存添加到现有的Spring应用中,和事务支持一样,缓存抽象允许在对代码影响最小的情况下一致性地使用各种缓存解决方案。从Spring 4.1版本起,有了JSR-107注解和更多定制化的选项支持后,缓存抽象有个重大的改进。对于这种情况,@Cacheable注解有一个key属性,通过该属性可以自定义Key生成。我们也可以使用SPEL(Spring表达式语言)当然,我们也可以通过@Cacheable注解指定自定义的key和参数是互斥的,如果两者都指定会触发异常。....
2022-08-09 00:47:05
1407
11

原创 Linux下快速搭建YApi接口管理平台
是Node的一个版本管理器,可以自由切换Node版本,前端不像后端,不同项目有时适用的Node版本不同,版本不对,心态崩溃。是一个Node项目,在这里遇到了第一个大坑就是版本问题,中间试过Nodev16和v14版本,发现都不能用,最后发现安装。点击开始部署后,会弹出一个界面,里面展示的是应用部署的日志信息,同时shell终端也会出现同样的日志信息。应用的后台进程管理器,内置负载均衡器,可以实现无停机加载,帮助我们更好的管理和维护后台应用。为了团队成员更好地合作,准备搭建一个接口管理平台,之前一直用的是。..
2022-07-19 18:17:25
2168
5

原创 Java面试题之关于JIT编译器的那些个优化项
Java到底是一门解释型语言还是编译型语言呢?这取决于Java虚拟机,现在主流的商用虚拟机如HotSpot,都同时包含与,我们可以认为Java即是一门解释型语言,也是一门编译型语言。关于解释器与编译器的优势:当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码“。为了提高热点代码的执行效率,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为。锁粗化和锁消除都是针对synchronized平台级锁所做的优化,具体可参考:Java面试题之syn
2022-07-02 17:48:30
928

原创 Java面试题之synchronized平台级锁和Lock实现的锁区别
ReentrantLock和ReentrantReadWriteLock都是并发包下的工具类,ReentrantLock实现了Lock接口,ReentrantReadWriteLock实现了ReadWriteLock接口,而其中的ReadLock和WriteLock又实现了Lock接口。为了区别synchronized和ReentrantLock,我们先了解一下Lock接口相关的API。Object中的、、只能和关键字配合使用,可以唤醒一个或全部线程。Condition需要与Lock配合使用,提供多个等
2022-06-27 14:39:42
731

原创 Java面试题之synchronized关键字原理以及锁相关
特性:可重入、独享、悲观锁。锁相关的优化:2、锁粗化示例三、synchronized关键字原理1、关于Mark Word首先,对象在堆中由对象头、实例数据和对齐填充组成。对象头包含两部分信息,第一部分用于存储对象自身的运行时数据,如、、、、等,这部分数据官方称为"Mark Word"。对象头的另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。synchronized实现的锁是通过改变对象头的"Mark Word"来实现的。"Mard Word"
2022-06-22 01:37:07
2104
8

原创 Spring Cloud Gateway整合Nacos实现服务路由及集群负载均衡
基于Spring Flux和Project Reactor、Netty实现的高性能网关Spring Cloud Gateway,你知道有多少呢?今天让我们了解一下Spring Cloud Gateway如何实现服务路由及集群负载均衡。
2022-06-17 18:26:28
4050
5

原创 前端CryptoJS和Java后端数据互相加解密(AES)
前端CryptoJS与Java后端实现数据AES对称加密,有哪些不明白的地方嘞,一起来看下这篇文章吧!
2022-06-13 02:13:16
18396
14

原创 Spring Cloud Alibaba & Spring Cloud 整合Dubbo和Nacos
Spring Cloud Alibaba与Dubbo和Nacos整合,到底有哪些坑呢?请看文章!!
2022-04-17 03:10:06
2564
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人