自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git中feature跟hotfix是什么意思

在 Git 工作流中,feature 和 hotfix 是两种常见的分支类型,它们分别用于不同的开发场景。通常以 hotfix/ 开头,后跟修复描述,例如:hotfix/fix-login-crash。将新功能的开发与主分支(如 main 或 develop)隔离,避免影响稳定代码。修复完成后合并回 main 和 develop 分支,确保修复内容同步到开发分支。含义:hotfix 分支用于快速修复生产环境中的紧急问题(如 Bug)。含义:feature 分支用于开发新功能或实现特定需求。

2025-03-26 10:02:08 286

原创 为什么说合并后删除分支是常见操作?

操作影响合并后删除 B 分支✅ 安全:A 分支保留所有已合并内容,B 的提交历史通过 A 分支永久存在。保留已合并的 B 分支⚠️冗余:增加分支列表的复杂性,无实际价值。删除未合并的 B 分支❌ 危险:未合并的提交可能丢失。因此,合并后删除 B 分支是安全且推荐的操作,既能保留修改内容,又能保持仓库的简洁高效。

2025-03-26 09:58:59 291

原创 Git合并删除原理

删除 B 分支后,仅仅是删除了指向 B 分支最新提交的“标签”,已合并到 A 的提交仍然被 A 分支的提交历史引用,因此这些修改会永久保留。如果 B 分支有未合并到 A 的提交(例如合并后又新增了提交),这些提交会随着 B 分支的删除变为“悬空对象”,最终可能被 Git 垃圾回收清理。如果有 A 分支,从 A 分支上新建 B 分支,B 分支做出修改合并到 A 分支,然后删除 B 分支,A 分支还有没有 B 分支修改的内容。仅 **未合并的提交可能丢失**,但这类提交本身未被整合到 A 分支中。

2025-03-26 09:48:06 226

原创 Git分支的创建原理及特性

B 分支初始状态与 A 完全相同(代码、提交历史)。无物理文件复制**,通过指针实现高效操作。后续对 B 的修改不会影响 A,除非主动合并。删除 A 不会影响 B 的现有内容(代码、提交历史)。唯一风险是(A 独有的未合并提交可能丢失),但这些提交本身与 B 无关。如果不小心误删分支,可通过 `git reflog` 找回提交(需在垃圾回收前操作)。

2025-03-26 09:24:51 360

原创 Hutool IdcardUtil:身份证处理专家

IdcardUtil是Hutool库中的一个工具类,主要用于身份证号码的验证和相关信息的提取。它支持中国大陆的15位和18位身份证号码,以及港澳台地区的10位身份证号码。IdcardUtil提供了多种方法来处理身份证信息,包括验证身份证的有效性、获取出生日期、年龄、性别、省份等信息。

2025-03-13 10:00:12 300

原创 Hutool RedisDS:Java开发中的Redis极简集成与高阶应用

Hutool的RedisDS模块通过高度封装,使Java开发者能够聚焦业务逻辑而非底层细节。无论是快速实现基础缓存,还是构建高并发分布式系统,该工具都能显著提升开发效率。结合本文提供的配置模板与代码示例,可快速落地到生产环境。立即体验RedisDS,享受“开箱即用”的Redis集成体验!

2025-03-13 09:52:39 513

原创 Hutool CronUtil:轻量级定时任务的极简神器

我强烈推荐Hutool工具包中的模块。它通过极简配置实现全局定时任务调度,无需依赖Spring或其他框架,堪称轻量级定时任务的标杆工具。

2025-03-13 09:39:30 238

原创 Hutool图形验证码

代码冗余安全性低维护成本高。无论是单体应用还是微服务架构,只需简单调用API,即可为系统筑牢第一道安全防线。

2025-03-13 09:29:36 171

原创 开发环境需要同时安装2个nodejs版本

由于同时有vue2和vue3的项目开发情况,vue2项目的nodejs版本是12,vue3项目在node12版本下运行不了,要求最低14版本,因此要用nvm同时安装和控制2个版本。注意:nvm可以选择安装路径,但是nodejs是不可以选择安装路径的,否则会报错,其实nodejs后来安装都会安装到nvm的目录下面的。安装完成后,cmd命令输入nvm,可以查看nvm安装版本信息,如果能正确返回版本信息,则安装成功。nvm默认下载地址是国外,比较慢,可以改成国内淘宝镜像,1、卸载已经安装的nodejs版本。

2025-03-01 16:11:35 362

原创 用 Spring AOP 优化 IN 查询,效率提升巨大!

线程池,可能阻塞比较大,不要用公共的线程池最好自己定义一个返回值回调函数,对应不同返回值处理逻辑:可能是合并可能取前十条可能求和超过多少需要拆分拆分时每组多少个/*** 设置线程池*//*** 返回值处理*/Class<?/*** 超过多少开始拆分 >*//*** 拆分后每组多少*/标记需要拆分参数的注解加在需要拆分的参数上,只支持一个。因为两两组合情况非常复杂,也一般不符合实际使用情况。使用AOP实现拆分多线程并发调用合并逻辑@Aspect@Component。

2025-02-19 23:10:03 190

原创 在做分层业务的系统架构中,如何使用MapStruct进行代码优化

通过 @AfterMapping 和 @BeforeMapping 注解,可以在映射前后执行自定义逻辑。通过 @MapperConfig 定义通用配置,然后在具体的 Mapper 接口中引用这些配置。2. 使用 MapStruct 的 @MapperConfig 和 @Mapper。通过使用 @Context 和 @Mapping 注解,可以处理更复杂的映射逻辑。通过定义通用的 Mapper 接口,可以减少重复代码并提高可维护性。通过使用 Spring 注解,可以简化 Mapper 的配置和注入。

2025-02-17 23:02:30 412

原创 Hutool的EnumUtil

EnumUtil是Hutool库中一个专门用于处理枚举类型的工具类。它为Java开发者提供了丰富的功能,以简化对未知枚举类型的操作。以下是EnumUtil获取枚举名称列表:通过方法,可以获取指定枚举类中所有枚举对象的名称列表,便于遍历、显示或记录枚举信息。获取枚举字段值:使用方法,可以获取指定枚举类中每个枚举对象的特定字段值,便于根据字段进行操作或展示。根据条件获取枚举对象:通过方法,可以基于lambda表达式和值,灵活地获取与之匹配的枚举对象,适用于需要通过属性值查找枚举对象的场景。

2025-01-25 07:22:31 743

原创 Java数字转换工具类-NumberUtil

NumberUtil是一个用于处理数字的工具类,提供了丰富的功能,包括数值运算、格式化、随机数生成、类型转换等。它广泛应用于各种Java项目中,特别是在需要处理浮点数精度、格式化输出以及数值判断的场景中。NumberUtil提供了多种数值运算方法,包括加法、减法、乘法和除法。这些方法支持多种数据类型,如floatdouble和BigDecimal,能够满足不同精度需求的计算。// 结果为4.0这些方法不仅简单易用,还能避免直接使用基本数据类型时可能出现的精度问题。NumberUtil。

2025-01-23 21:01:12 525

原创 我们说StringBuilder是线程不安全的,是什么原因呢?

尽管在单线程环境下提供了高效的字符串操作,但在多线程环境中使用时必须谨慎。由于缺乏同步机制,它容易引发竞态条件和数据不一致的问题。为确保线程安全,可以选择使用线程安全的或通过手动同步来控制对的访问。理解这些原理对于编写健壮的Java应用程序至关重要。

2025-01-23 20:55:10 302

原创 ReUtil- 一个强大的正则表达式工具库

ReUtil是Hutool库中的一个正则表达式工具类,它封装了多种常用的正则表达式操作方法,使得开发者可以更加方便地处理字符串。ReUtil提供了静态方法,允许开发者直接调用这些方法来执行正则表达式相关的操作,而无需手动编写复杂的正则表达式代码。ReUtil类通过封装常用的正则表达式操作方法,极大地简化了Java开发中的文本处理工作。无论是简单的字符串匹配、复杂的分组提取,还是特殊字符的处理,ReUtil都能提供高效且易用的解决方案。

2025-01-23 20:43:06 1005

原创 当小白拿到一个vue项目,如何初始化

确保兼容性:检查 package.json 中的 engines 字段,确认项目所需的 Node.js 和 npm 版本与你安装的版本兼容。通过以上步骤,你应该能够顺利安装 Node.js 环境并安装 Vue 项目的依赖。在拿到一个 Vue 项目后,按照以下步骤先安装 Node.js 环境,再安装项目依赖。输入 node -v 检查 Node.js 是否正确安装,应该显示已安装的 Node.js 版本号。输入 npm -v 检查 npm(Node 包管理器)是否正确安装,会显示对应的版本号。

2025-01-15 13:45:34 1006

原创 npm ERR! network request to https://registry.npmjs.org/yarn failed, reason: connect ETIMEDOUT 104.16

刚安装npm install xxx时,出现以下如图错误:原因:因为访问网址需要翻墙才能访问,所以在国内经常会出现连接超时等问题。为了解决这个问题,可以将npm的源设置为国内的镜像例如。

2025-01-15 13:37:50 218

原创 线程之间的通信,你悟了吗?

在多线程编程中,线程之间的通讯是至关重要的一环。它允许多个线程之间进行有效的数据交换和状态协调,以确保多线程程序的正确性和高效性。本文将介绍几种常见的Java线程通讯方式。这是最基础的线程间通信方式,它们需要与synchronized关键字一起使用:简单直接。:容易出错,例如忘记唤醒其他线程或错误地调用wait()/notify()。

2025-01-13 08:42:45 214

原创 零基础 监控数据可视化 Spring Boot 2.x(Actuator + Prometheus + Grafana手把手) (上)

依赖项:确保你的 Spring Boot 应用程序已经正确配置了 Micrometer 和 Prometheus 支持(如 micrometer-core 和 spring-boot-starter-actuator 依赖)。找到最新版本的发布页面,下载 prometheus-.windows-amd64.zip 文件(例如 prometheus-2.40.0.windows-amd64.zip)导航到 Prometheus 解压目录(例如 cd C:\Prometheus)。

2025-01-09 10:46:46 1813

原创 什么是看门狗机制?它是如何给Redis的Key续约?

看门狗”(Watchdog)是一个广泛应用于计算机科学和工程领域的术语,指的是一种监控机制,用于监督系统、应用程序或硬件的正常运行,并在检测到异常或故障时采取预定义的恢复措施。看门狗的主要目的是提高系统的可靠性和稳定性,防止系统挂起或出现长时间的无响应状态。本文,我们详细地分析了什么是看门狗以及Redisson 的看门狗机制,它通过自动续期锁的有效期,简化了分布式锁的管理,减少了开发人员手动处理锁续期的复杂性。然而,理解其工作原理和注意潜在的配置细节,对于确保系统的可靠性和性能至关重要。

2025-01-08 16:30:57 752

原创 线程池动态调整

想象一下这样的场景:在电商系统中,平时的订单量可能比较平稳,但在促销活动期间,订单量会突然暴增。这时候,我们就需要能够动态调整线程池的参数。动态调整线程池是一个非常实用的技术,它能够帮助我们的系统更好地适应负载变化。通过合理的监控和调整策略,我们可以让系统在保持高性能的同时,也能够更有效地利用系统资源。:除了上述实现的基础指标外,建议还要监控任务执行时间、拒绝任务数等指标,这样可以更全面地评估线程池的性能状况。:在调整线程池参数时,要注意线程安全性,避免因并发操作导致的问题。

2025-01-08 09:06:02 696

原创 Windows下批量删除 .DS_Store MacOS隐藏文件

从Mac电脑拷贝过来的项目含有大量以"._"开头的隐藏文件,不影响正常运行,但是很影响强迫症的心情,由于项目层级比较深,一个一个删除比较费时,如何批量把这些文件处理了呢?

2025-01-08 09:00:13 582

原创 9 个 Java 性能黑科技

性能优化是每个Java开发者绕不开的终极技能,无论是处理高并发业务还是优化系统响应时间,掌握一些性能黑科技绝对让你事半功倍!今天带来9个Java性能优化技巧,不仅适用于日常开发,还能在面试中让你脱颖而出!一、用替代String拼接掌握这9个Java性能黑科技,不仅可以优化代码运行效率,还能帮助你写出更优雅、更易维护的代码。性能优化并非一蹴而就,需根据业务场景权衡,切勿盲目过度优化。

2025-01-07 16:54:49 820

原创 SpringBoot内置工具类

一般来说,不同的SpringBoot应用程序将得到不同的位置,但是,只需重新启动应用程序即可获得相同的位置。内部注册的是一个BasePackagesBean,该类是静态私有的所以你没法直接访问,只能通过上面的方式。提供访问应用程序主目录的途径。注:这里的get方法参数是可变长参数,你可以传递多个key,获取时遍历遇到不为null的直接返回。如果你需要在代码中获取当前应用启动类所在的基包basePackages,那么你可以通过如下方式。通过jar运行后,source输出的是当前运行的jar包路径。

2025-01-07 16:00:25 1093

原创 Linux查看服务器日志

这个是我最常用的一种查看方式。

2025-01-07 15:47:54 1816

原创 Spring Boot 内置工具类

Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启。SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查。断言是一个逻辑判断,用于检查不应该发生的情况。获取当前对象的代理对象。

2025-01-03 09:48:13 462

原创 Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass

这个报错是由 Java 9 及之后的模块化系统(JPMS)引起的,这表明某个第三方库试图通过反射访问受限的 JDK 内部 API。这种访问在 Java 9 及之后的模块系统中受到严格控制,默认情况下不再允许访问 java.base 模块中的 java.lang 包。在运行项目时添加以下参数来开启这种默认不被允许的行为。

2024-12-07 15:08:45 1336

原创 手搓一个不用中间件的分表策略

首先,定义一个分片策略类,用于决定数据存储在哪个分表中分片策略:根据订单日期决定数据存储在哪个分表中。数据库连接管理:管理数据库连接,所有分表都在同一个数据库中。动态创建表:根据当前月份动态创建新的表。订单操作:执行具体的数据库操作,如插入和查询。通过动态生成表名来实现分表。使用示例:展示如何使用这些类来实现分表功能。这个方案适用于在同一数据库中按月份进行分表的需求,可以根据实际业务场景进一步扩展和优化。

2024-11-26 23:35:05 490

原创 当你项目服务器磁盘报警

但是又不能一味的直接删。因为直接删除,可能会造成应用无法打印后续的错误日志,该问题常见于weblogic服务器,jboss服务器等这些大型中间件,这个在生产环境上要尤需注意。nohup.out会一直一直自己增长下去,如果你的服务器硬盘不给力的话,很容易把应用也挂掉(硬盘没空间 ,啥都玩不转)两个我都用过,不用担心网上所说的性能问题,通常2/3 个G的文件都是1-2秒执行完毕。因此就有了我们不停止服务直接,清空nohup.out文件的方法。当你们公司运维收到这样的邮件,大概率日志文件过大引起的。

2024-11-21 15:42:01 430

原创 提升工作效率的好用的IDEA插件

助手,有2个非常实用的功能:①支持自动生成对象拷贝代码;增强插件,最好用的功能是可以查看到每一行代码的最近一次提交信息。:快速转换变量名称,支持常见的大小驼峰、常量等7中变量名切换。:编码绘制时序图、类图、对象图、活动图、思维导图。:可以在源码中添加注释,帮助阅读理解源码。:编辑器右侧展示代码小地图,方便定位。:在敲代码时有抖动酷炫的特效。:一键给所有类和方法生成注释。:查找解决项目中的依赖冲突。:自动找出一些简单的BUG。:翻译插件,帮助理解代码。:根据代码自动生成时序图。:代码大小/行数等统计。

2024-11-20 10:06:51 1062

原创 java.lang.IllegalAccessError: class lombok.class lombok.javac.apt.LombokProcessor报错解决

接着如果执行上述操作的时候你的IDEA没有关闭,那么terminal中还需要刷新配置,执行下面的命令(即上边的两个刷新命令根据情况选择)配置完之后再执行mvn compile或者mvn package就不会再有上边的错误了。在IDEA中执行mvn package或者mvn compile的时候,发现如下报错。版本不一致导致的解决方法就是降低JDK版本或者升级lombok版本。网查了一下,都说是jdk版本和。2. 切换jdk版本到1.8。或者直接重启IDEA也可以。

2024-10-25 14:25:40 916

原创 Spring Boot 封装统一返回结果及全局异常处理

为了更细致地控制异常处理,我们可以定义一些自定义异常。然后,在全局异常处理器中添加对自定义异常的处理。通过封装统一的返回结果和全局异常处理,我们可以让Spring Boot应用更加健壮和易于维护。这种方法不仅提高了代码的可读性,还有助于减少重复代码,使得异常处理更加集中和一致。

2024-09-30 14:39:43 820

转载 tldb分布式锁

分布式锁是分布式系统中一个极为重要的工具。目前有多种分布式锁的设计方案,比如借助 redis、mq、数据库、zookeeper 等第三方服务系统来设计分布式锁。tldb 提供的分布式锁,主要是要简化这个设计的过程,提供一个简洁可靠,类似使用程序中对象锁的方式来获取分布式锁。

2024-09-30 14:32:17 139

原创 Redis 如何实现库存扣减操作?

在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。

2024-09-30 10:32:43 1256

原创 在Spring中@componet跟@service有什么区别

当一个类的功能不能明确地归类为控制器、服务或仓库时,通常会使用@Component。(如@Controller, @Service, @Repository)的组件。使用@Service注解有助于表明该类的主要职责是执行应用程序的核心功能。,因为它们都实现了相同的元注解@Component,但是在实际开发中,,因为它传达了更多的语义信息,使得其他开发人员更容易理解该类的作用。为了提高代码的可读性和维护性,推荐根据类的具体职责来选择合适的注解。Java类标记为由Spring IoC容器管理的Bean的注解。

2024-09-25 22:04:47 492

原创 回调机制Callback和函数式编程优化代码

/ 回调接口定义// 回调接口定义。

2024-09-25 15:10:49 901

原创 Mysql的锁你了解哪些?

MySQL中的锁是用于控制多个用户对共享资源的并发访问,以确保数据的完整性和一致性。

2024-09-24 16:08:19 896

原创 阿⾥编码规范⾥⾯Manager分层介绍-专⽤名词和POJO实体类约定

开发⼈员:张三、李四、王五⼀个微服务起码两个⼈熟悉:⼀个是主程⼀个是技术leader ,推荐是团队⾥⾯两个开发⼈员。

2024-09-22 15:20:11 1042

原创 SpringBoot 更改启动图标

每次springboot开启时,开会显示spring的图标,这个图标是可以修改的。

2024-09-22 10:41:48 1434

原创 源码剖析|StringUtils中的isEmpty、isNotEmpty、isBlank和isNotBlank的区别

注:由源码可知(判断某字符串是否为空,为空的标准是str==null或str.length()==0)注:由源码可知(判断某字符串是否为空,为空的标准相当于isEmpty方法的结果取反,即str!=null或str.length()>0)

2024-09-22 10:17:45 446

大话Python|基础语法(上)

大话Python|基础语法(上)

2024-09-21

空空如也

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

TA关注的人

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