- 博客(44)
- 收藏
- 关注
原创 Nacos的加密解密配置方案
由于项目中Nacos的配置项的密码都是明文存储在Nacos配置中心里面的,这样就会有潜在的安全隐患。所以,我们引进了一项Nacos的加密解密插件,来对Nacos中的配置项进行加密,并且服务在使用这些Nacos配置项的时候可以自行解密。首先,将明文密码给到开发,开发有一个开发工具将明文密码进行加密,加密后,开发会把明文密码返回给运维。Nacos会对配置中的密文配置项进行解密,然后注入到服务中,这样就极大的保证了安全性。在Nacos的配置中心中,需要新增如下配置,让服务知道是如何加密解密的。
2026-04-20 18:12:58
406
原创 Synchorinzed和Lock
如果你问面试官是怎么实现的,答案永远指向AQS。AQS 内部维护了一个变量。$state = 0$:锁是空闲的。$state > 0$:锁被占用了。因为是可重入的,同一个线程每重入一次,$state$ 就 $+1$。线程尝试通过 CAS 将 $state$ 从 0 改为 1。成功了就代表拿到了锁。抢锁失败的线程会被封装成一个Node节点,放入一个双向链表中挂起等待。
2026-03-05 10:07:05
357
原创 Spring Bean生命周期
在 Spring 框架的容器管理中,是一个极其强大的扩展点。简单来说,它是 Spring 提供给开发者的**“后置处理器”**,允许你在 Bean 的生命周期中横插一杠,对实例化的 Bean 进行加工。(前置处理)是该接口中的核心方法之一。是 Spring 赋予你的“切入点”,让你能在 Bean 初始化前进行干预;而 Spring 自身也巧妙地利用这个机制,通过 BPP 实现了大部分Aware接口的自动注入。国内很多金融或电商公司出于合规要求,数据库密码、密钥等不能在apollo或nacos中明文存储。
2026-03-03 20:21:42
438
原创 关于@Async的一切
在Spring生态中,@Async注解是实现异步执行的标志性方案。自Spring 3.0引入以来,经过多年迭代,已成为企业级应用处理异步任务的事实标准。
2026-02-14 00:27:02
693
原创 Java线程实战
因为面试中暴露出来的不足,所以写一写线程池,也算是复习一下。什么是线程池线程池是一种,它预先创建一定数量的线程并放入池中,当需要执行任务时,从池中获取空闲线程来执行任务,任务完成后线程不销毁而是返回池中等待下一次任务。
2026-02-01 21:56:20
638
原创 关于对Seata的理解和分布式事务的demo
摘要:Seata是阿里开源的分布式事务解决方案,包含TC(事务协调器)、TM(事务管理器)和RM(资源管理器)三大核心组件。支持AT、TCC、Saga和XA四种事务模式,其中AT模式通过SQL解析和undo日志实现无侵入的事务管理。TC负责全局事务协调和锁管理,TM定义事务边界并传播XID,RM执行具体分支事务。Seata通过全局锁机制解决脏写问题,支持集群部署保证高可用。各模式各有优劣:AT适合常规业务,TCC性能优但需手动实现,Saga适用于长事务,XA提供强一致性但性能较差。面试常考组件职责、AT模式
2026-01-23 14:33:33
592
原创 nacos中的一种导入方式
最近从gitee上拉了一下他人的项目进行学习,因为之前所用的项目中nacos并没有内置到idea中做成服务,这次从这个项目中看到了,所以在这里记录一下,好好学习,爱你。我怀疑是创建好之后,再导出sql文件,有人克隆项目就可以直接执行脚本进行导入。修改了一下数据库,是本地的,里面是项目在nacos中的配置。可以看到,nacos是被打包进了server包里面的。顺便一提,想新建模块最好还是用idea来新建。
2026-01-08 21:49:57
178
原创 docker部署项目,/var/lib/docker/overlay2目录满了如何清理?
摘要:Docker项目启动失败,发现Redis连接问题是由于磁盘空间不足。检查发现/var/lib/docker目录下的containers文件夹占用大量空间,其中多个-json.log日志文件高达4GB以上。通过du命令分析磁盘使用情况,发现volumes目录也有日志文件占用空间。解决方案是停止容器后清理这些日志文件,释放磁盘空间。
2026-01-08 20:50:54
508
原创 使用@FunctionalInterface进行异步导出Excel数据
项目中需要使用Excel导出大量数据,首先要进行大量的查询,但是由于数据量太大,导出的时候会让前端在pending,所以需要使用异步的方式先让前端返回。
2025-01-06 15:01:20
316
原创 docker里的jenkins迁移
因为原来虚拟机的硬盘要满了,所以要把jenkins迁移到新的虚拟机里,免得影响发布。首先docker save当前container,然后传过去,加载。再把虚拟机上挂载的东西找到迁过去,再运行命令即可。
2024-11-27 11:32:27
862
原创 LeetCode297.二叉树的序列化和反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。观察可知,二叉树的序列化和反序列化都是通过二叉树的层序遍历进行实现的,所以我们想要解题,就要通过二叉树的层序遍历的性质来进行解题。遍历数组,当1个节点进入队列的时候,且弹出该节点之时,则当前处理的该节点算是一个根节点。当弹出节点的时候,i正好位于当前节点的左子结点。i自增1之后,则i处于当前根节点的右子节点中。若非空,则子节点加入栈。
2024-11-14 22:50:13
432
原创 LeetCode105.从前序与中序遍历构造二叉树
在前序遍历中,我们知道一般是通过根左右的顺序进行遍历,所以我们可以在前序遍历中找到根节点,和当前根节点的左子树右子树的根节点。而在中序遍历中,根节点的左边是所有左子树的节点,根节点的右边是所有右子树的节点,依此我们可以推断出左右子树的长度。根节点在前序遍历的索引 root 、子树在中序遍历的左边界 left 、子树在中序遍历的右边界 right。2. 划分左右子树: 查找根节点在中序遍历 inorder 中的索引 i。根据根节点,左右子树的长度作为条件,可以使用回溯的方式进行二叉树的构建。
2024-11-14 11:03:33
735
原创 LeetCode.102 二叉树的层序遍历
对二叉树进行层序遍历即可,下一层的所有节点是当前层的所有左右子节点。用一个队列存储当前层的所有节点就好。3.2.3添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue。2.初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root]。3.2当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度)。3.1新建一个临时列表 tmp ,用于存储当前层打印结果。1特例处理: 当根节点为空,则返回空列表 []。
2024-10-19 10:53:42
500
原创 LeetCode110.平衡二叉树
思路:可以构造一个函数来判断当前树的左子树和右子树深度差是否大于1:abs(depth(root.left) - depth(root.right)) <= 1,从而判断当前树是否为平衡二叉树,如果是的话,进行先序遍历,先遍历左子树,再遍历右子树。因为没有确实理解104中,递归函数所返回的值是当前节点的深度。所以说对递归的性质还是不太熟悉。这里的2,3步是必要的,我当时在想,是否在这个节点里,他是平衡二叉树,但是他的左右子节点并不是。重要性质:当前节点的深度为左子树深度和右子树深度之间的最大值+1。
2024-10-14 23:25:19
654
原创 LeetCode104.二叉树的最大深度
当root==null时,说明上一个递推层的左子树或者右子树为空。通过遍历的方式对树进行深度优先遍历,从而进入到叶子结点中,从叶子结点回溯的过程就可以得知树的深度。那么本题中我们采用后序遍历,也就是先遍历左子树,再遍历右子树,最后从本节点返回。2.2 计算当前root节点的右子树深度。比较左子树和右子树的深度,再加一(他自己也是个节点),向上返回。是指从根节点到最远叶子节点的最长路径上的节点数。深度优先遍历分别有:前序遍历,中序遍历,后序遍历。由终止条件,递推工作,返回值组成。这是一个典型的递归写法。
2024-10-13 23:00:49
323
原创 LeetCode50.Pow(x, n)
0 的 0 次幂和负数次幂没有意义,因此直接返回 0.0 即可。b的值只有两种情况,0和1,如果是1的话那就是x的2的某一个次方,0的话那就是1,用公式表示是这样的。求x的n次方最简单的方法是写一个n次的循环,每一次循环乘以一个x,那这样的话时间复杂度就是n。所以在循环中,我们要求x的2的n次幂的话,就执行x = x²就行。所以根据以上推导,可以把求x的n次方转化成求上面那条公式的积。利用十进制数字 n 的二进制表示,可对快速幂进行数学化解释。观察发现,当 n 为奇数时,二分后会多出一项 x。
2024-10-12 16:48:22
1035
原创 LeetCode101.对称二叉树
利用递归来确定两个对称的点是不是值相等(包含null的情况),如果是的话,选择当前递归层的节点的下一层对应的对称节点作为参数进入递归。而每一递归层的任务就是判断当前递归层的两个参数节点的值是否相等。那什么是当前递归层的下一层的对应节点呢?给你一个二叉树的根节点。, 检查它是否轴对称。带注释的代码实现如下。
2024-10-12 10:36:57
396
原创 LeetCode 226.翻转二叉树
开启递归 右子节点 invertTree(root.right) ,并将返回值作为 root 的 左子节点。开启递归 左子节点 invertTree(tmp) ,并将返回值作为 root 的 右子节点。1.终止条件: 当节点 root 为空时(即越过叶节点),则返回 null。在每个节点中,递归下一个节点,用自底向上的方式去交换各个节点的左右节点。初始化节点 tmp ,用于暂存 root 的左子节点。3.返回值: 返回当前节点 root。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。
2024-10-10 14:00:10
382
原创 LeetCode79.单词搜索
这个题目是很典型的深度搜索优先加上剪枝做法,从每一个格子开始,上下左右走格子,看看是不是符合当前所需要的字符,当走进去一个格子之后,需要判断是否越界和已经走过该格子。如果当前格子是需要的字符,则往下走。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。4.进行下一层递归,前面已经判断过各种条件,现在上下左右即可。1.判断是否左右越界,是否上下越界,当前字符是否符合要求。入参:二维数组,字符数组,i,j,当前字符数组的下标k,5.回溯,当前字符放回去。
2024-09-26 10:55:43
408
原创 LeetCode39.40 组合总和和组合总和2
同理,第二轮的两个 4 也会产生重复子集。例如,给定数组 4,4,5和目标元素 9 ,则现有代码的输出结果为 [4,5],[4,5] ,出现了重复子集。若第一轮选择 5 ,则第二轮应该跳过 3 和 4 ,因为子集 [5,3,⋯] 和子集 [5,4,⋯] 和 1. , 2. 中生成的子集完全重复。若第一轮选择 4 ,则第二轮应该跳过 3 ,因为该选择产生的子集 [4,3,⋯] 和 1. 中生成的子集完全重复。第一轮和第二轮分别选择 3 , 4 ,会生成包含这两个元素的所有子集,记为 [3,4,⋯]。
2024-09-24 18:56:03
841
原创 参考一下同事在项目中的countDownLatch使用方法,以上传Excel为例
在系统中有一个通过上传表格进行业务数据导入的操作,使用了线程池和countDownLatch来处理以提升效率。简单讲一下怎么用。
2024-05-19 12:58:13
751
1
原创 总路线与心得
项目响应时间优化:需要了解应用架构、网络协议、操作系统等多方面知识,并结合实际情况进行调优。编码效率提升:需要了解团队管理、代码规范、自动化测试等,并能建立良好的编码规范和开发流程。资源利用率优化:需要了解虚拟化技术、容器技术、云计算等,并能合理规划资源分配和部署。监控和治理:需要了解监控系统、运维工具等,并能制定合理的监控策略和治理方案。流量抖动处理:需要了解缓存、限流、负载均衡等技术,并能制定合理的应对策略。弹性部署:需要了解虚拟化技术、容器技术、自动化部署工具等。
2024-04-02 21:45:35
246
1
原创 MyBatis中动态sql的if条件判断的各种使用方式
mybatis的动态sql拼接让很多复杂业务的处理变得简单化,开发人员只需要在xml文件中直接编写sql语句即可。
2024-01-07 10:26:38
28214
6
原创 在项目中使用增强类
项目中需要对操作进行记录,一般有2种方式,在正常的操作接口中内聚一个操作方法,操作表的同时在另一个操作记录表中记录。另外一个就是写一个增强类进行操作表的写入。这里采用第二种操作方法简单地演示了注解型aop的使用方法。这下没了。
2023-12-05 18:39:12
535
原创 如何查看一个 docker 镜像有哪些版本
在平时的开发中,我们需要使用到docker search来寻找具体的镜像,但是docker search并不能查看到某个镜像的版本信息,如果我想查找某个镜像的具体信息的话,该怎么做呢?可以使用DockerHuB查看具体的版本和tag,地址如下:https://hub.docker.com。4、找到Tags 后,就可以根据需要的版本来下载了。如tags为6.2.5的版本。可以看到,我们在dockerhub网站就可以找到镜像添加了。3.点击tags,可以看到所有的版本。1.可以在右上角搜索。
2023-11-13 16:39:54
7365
原创 测试的时候出现java.lang.IllegalStateException Unable to find a @SpringBootConfiguration异常
使用idea进行测试SpringBoot的项目。
2023-11-13 09:31:14
878
原创 异常sql injection violation, part alway true condition not allow 解决方案
前几天在写项目中的Mapper的时候,遇到了这种报错,在这里记录一下。免得以后忘记。
2023-11-02 21:34:10
2051
原创 使用ShiroFilter的具体执行流程
今天在项目中进行迁移的时候,因为用的是人人的开源后端系统。该系统集成了Shiro,因为这段时间个人也在研究Shiro。看到人人后端的用法与自己之前所学的并不是很相同,所以就在网上找了下为什么要这么写。并把想法记录下来。
2023-10-26 22:36:28
819
原创 quartz.JobPersistenceException: Couldn‘t retrieve trigger
文章浏览阅读1.9k次。结果quartz就不认识Caused by: org.quartz.JobPersistenceException: Couldn't retrieve trigger: io.renren.modules.job.enti原因分析:因为quartz在job_details中进行_org.quartz.jobpersistenceexception: couldn't retrieve trigger: bad value for。所以只要删除下面的表就行。删了下面这几个表就行。
2023-10-24 22:16:39
1189
原创 在Docker上部署SpringBoot项目
需要在Docker上部署SpringBoot项目。Docker的本质就是在现在的系统里虚拟化了一个操作系统,所以在Docker上部署更加方便。
2023-10-22 12:17:51
252
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅