自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(289)
  • 资源 (4)
  • 收藏
  • 关注

原创 PowerShell(推荐,批量统计子文件夹大小)

PowerShell 可精确计算并格式化输出各子文件夹大小,适合批量统计和排序,以下是常用命令。

2026-01-23 17:38:02 229

原创 npm-cache 怎么迁移出C盘

你想把 npm 的缓存目录(npm-cache)从 C 盘迁移到其他磁盘(比如 D 盘),避免 C 盘空间被占用,对吧?这是前端开发中很常见的需求,核心是通过修改 npm 的配置指定新的缓存路径,下面给出的完整操作步骤,兼顾 Windows 和 macOS/Linux 系统(重点讲 Windows)。

2026-01-23 17:13:01 449

原创 Nginx转发自定义请求头踩坑实录:跨域、移动端影响及全场景解决方案

下划线请求头默认被忽略:Nginx 默认配置 `underscores_in_headers off;`,会直接忽略名称包含下划线(如 `gray_sign`)的请求头,既不读取也不转发给后端;自定义请求头未显式转发:Nginx 仅默认转发标准请求头(如 Host、User-Agent),自定义请求头需通过 `proxy_set_header` 显式声明转发,否则部分版本可能不传递。自定义请求头含下划线时,Nginx 必须开启 `underscores_in_headers on;`,并显式转发;

2026-01-21 09:56:39 870

原创 UniApp App端无需企微SDK!通过URL Scheme拉起企业微信转发教程

集成简单:无需集成企业微信 SDK,无需处理原生插件适配,复制代码即可快速落地;轻量无依赖:不增加项目体积,适合小需求场景;配置步骤少:仅需在企业微信管理端创建应用和配置可信域名。本文分享的 URL Scheme 方案,是 UniApp App 端拉起企业微信转发的轻量解决方案,无需集成 SDK,适合简单需求场景。若你的项目需要更完整的功能(如转发状态回调、复杂内容转发),建议后续切换到企业微信 SDK 方案。如果在配置或使用过程中遇到问题,可在评论区留言交流!

2026-01-14 13:39:08 740

原创 iptables实战:IP访问限制与解除限制教程

本文通过实战案例讲解了iptables添加IP限制(iptables -A INPUT -s 目标IP -j DROP)与解除限制(按编号/内容删除规则)的完整流程,核心要点如下:精准删除规则是首选,避免使用清空链命令(规则添加/删除后,务必保存规则,防止重启失效;操作前优先查看规则(),避免误操作。如果需要更复杂的场景(如限制IP访问特定端口、批量添加/删除IP规则),可在评论区留言,后续将补充相关教程~

2026-01-14 13:34:58 630

原创 Spring Boot整合Kaptcha生成图片验证码:新手避坑指南+实战优化

本文通过“配置优化+双场景实现+问题排查”,带大家完成了Kaptcha验证码的落地。核心要点:清晰易认的关键:关闭扭曲、排除混淆字符、高对比度样式;新手避坑核心:正确导入类、刷新Maven依赖、分布式用Redis存储;灵活适配:图片流适合传统Web,Base64适合前后端分离。

2025-12-26 14:15:41 935

原创 IntelliJ IDEA 设置导出与导入完整指南(备份 / 迁移 / 团队共享)

IDEA 的设置导出与导入功能是提升开发效率的关键技巧,无论是个人配置备份、环境迁移,还是团队协作统一,都能轻松应对。全量配置用 ZIP 包导出 / 导入,特定配置用.xml 文件精准同步,避开敏感信息和版本兼容坑,就能让 IDE 配置随取随用!

2025-12-17 13:59:43 1143 3

原创 钉钉群机器人 Markdown :颜色渲染 + 链接跳转 + 图片嵌入的正确实现

link类型天生不支持标签:不要尝试在link的title/text中加<font>/ 链接,会直接显示原始字符串;Markdown 的title字段无格式:仅text字段支持<font>、链接、图片;图片 URL 必须公网可访问:内网图片链接在钉钉中无法加载;引号必须转义:Java 中用\"包裹<font>的color属性,避免 JSON 语法错误;色值用 6 位十六进制#FF0000(红色)生效,red(仅 PC 端生效)、#F00(不生效)需避开。

2025-12-12 10:47:00 1071

原创 SQL Server 大小写区分坑:A≠a!密码 / 编码字段的正确处理方案

普通业务字段(编码、密钥):用 “字段级 CS 排序规则”,让数据库比较行为匹配业务语义;敏感密码字段:用 “应用层加盐哈希”,既保证大小写敏感,又避免明文存储的安全风险。A≠a的业务语义,需要技术方案精准匹配 —— 无需修改全局配置,按需处理即可,既解决问题又不引入新风险。如果你的项目中遇到类似场景,不妨试试文中的方案,欢迎在评论区交流实践心得!

2025-11-26 08:57:40 719

原创 UniApp 微信小程序分享

在 UniApp 中,是用于配置页面分享信息的生命周期函数,主要在微信小程序、抖音小程序等平台生效(不同平台对分享的支持略有差异,以微信小程序为例说明)。

2025-11-19 15:04:29 544 1

原创 企业微信群通知机器人添加点击链接教程(图文 / Markdown 两种方式)

企业微信群机器人添加点击链接的核心是:Markdown 消息适合文本内嵌入链接,图文消息适合图片 + 标题跳转。Markdown 格式支持在文本中直接插入可点击链接,语法与常规 Markdown 一致:[链接显示文本](链接地址),适合需要搭配文字说明的场景(如 “点击查看报表”“下载操作手册”)。图文消息(news 类型)支持 “图片 + 标题 + 描述 + 跳转链接” 的组合形式,点击图片或标题均可跳转到指定地址,适合需要视觉吸引的场景(如活动推广、重要公告)。2.3 多图文示例(支持多条链接)​。

2025-11-10 16:56:45 1422

原创 Java 中 超过1000 万数据就自动转为科学计数法?原因分析与解决方案

在 Java 开发中,你是否遇到过这样的场景:当数值达到 1000 万(10^7)时,原本期望的整数格式突然变成了1.0E7这样的科学计数法?解决问题的关键的是:​。Java 中的float和double是浮点类型,用于存储小数或大范围整数,但它们的toString()方法有明确的转换规则:​。如果你的数据本质是整数,最根本的解决方式是全程使用整数类型(long),避免转换为double或float。首先要明确一个关键结论:科学计数法的触发与数值类型直接相关,整数类型和浮点类型的表现完全不同。

2025-10-27 16:37:47 783

原创 JAVA 按 type 分组生成对应MAP

Data// 用于分组的字段@Data等注解来自 Lombok,用于简化 getter/setter 代码)除了直接使用实体类的字段分组,还可以通过自定义分类函数实现更灵活的分组逻辑。例如:将用户按「年龄段」分组(20 岁以下、20-30 岁、30 岁以上)。Stream API 的groupingBy方法为集合分组提供了强大支持,从基础的单字段分组到复杂的多字段联合分组,再到分组后的统计分析,都能通过简洁的代码实现。掌握这些用法可以大幅提升数据处理效率,让代码更易读、易维护。

2025-10-22 11:53:38 531

原创 Java Optional orElse orElseGet orElseThrow()

在 Java 中,Optional orElse类型 包含 .orElse() .为空,这个方法会立即抛出异常,而不是返回默认值,这是它与。带参版本:可以自定义抛出的异常类型。实际开发中需要按具体需求去使用它们。

2025-10-22 11:34:29 203

原创 MySQL实用技巧:存储过程实现字段不存在则添加

例如在 SQL Server 中可以通过COL_LENGTH函数判断字段存在性,但 MySQL 没有直接对应的函数。本文将介绍一种通过封装存储过程的方式,实现 “判断字段是否存在,不存在则添加” 的通用解决方案。在日常数据库开发中,我们经常会遇到这样的场景:需要给指定表添加字段,但不确定该字段是否已存在。核心思路是利用 MySQL 的系统表INFORMATION_SCHEMA.COLUMNS查询字段是否存在,结合动态 SQL 实现条件性添加字段:​。3.3 如果不想继续使用则可删除。

2025-10-16 10:13:04 352

原创 MySQL 实现汉字首字母提取函数

在日常开发中,我们经常会遇到需要对汉字进行首字母提取的场景,比如根据姓名首字母实现排序、检索功能。本文将为大家详细介绍如何在 MySQL 中实现两个核心函数:f_frist_pinyin(提取单个汉字首字母)和get_first_pinyin(提取字符串中所有汉字首字母),并对函数逻辑进行解析,帮助大家理解其原理与应用。本文介绍的 f_frist_pinyin和 get_first_pinyin函数,实现了 MySQL 中汉字首字母提取的核心需求,适用于简单的首字母检索、排序场景。

2025-09-25 09:46:03 523

原创 Java 异步支付的 “不安全” 风险点控制

核心思路:定义订单支付的 “状态流转规则”,确保每个状态只能按指定顺序切换(如 “待支付→支付中→支付成功 / 失败”),避免状态跳变。核心思路:异步任务处理支付时,不仅依赖 “实时调用结果”,还需结合 “第三方回调通知” 和 “定时任务查询”,确保结果不丢失。第三方支付平台回调通知晚于异步任务执行,导致任务误判 “支付失败”,后续无法同步真实结果。支付接口调用成功,但更新订单状态时线程异常中断,导致 “支付成功但订单仍显示待支付”此时的异步支付不仅安全,还比同步支付有两大优势:​。

2025-09-22 17:24:23 1187

原创 Java 8 DateTime API

为解决这些痛点,Java 8 引入了全新的DateTime API(位于java.time包下),遵循 “不可变对象” 设计原则,提供了清晰、易用且线程安全的日期时间处理方案。适用于需要跨时区的场景(如 “服务器日志时间”“国际航班起飞时间”),核心类是 **ZonedDateTime**(包含日期、时间、时区),依赖ZoneId(时区 ID)定位时区。适用于不需要时区的场景(如 “用户生日”“订单创建日期(本地时间)”),核心类包括:​。一、Java 8 之前日期处理的 “坑”:为什么需要新 API?

2025-09-18 17:29:38 643

原创 Java 8 Stream API 浅析

Java 8 引入的Stream API彻底改变了这一现状,它提供了一种声明式的数据处理方式,让开发者能够以更简洁、更优雅的代码实现复杂的数据筛选、转换、聚合等操作。Stream(流)是 Java 8 中引入的一个抽象概念,它本质上是一系列支持聚合操作的元素序列,但与集合(Collection)有显著区别:​。需求 1:提取筛选后用户的 “姓名和薪资”,转换为Map<String, Integer>(姓名→薪资)需求:统计所有用户的 “薪资” 相关指标(总和、平均值、最大值、最小值、数量)

2025-09-18 17:09:04 589

原创 LambdaQueryWrapper 组织多列模糊查询

LambdaQueryWrapper 的LIKE查询,如果需要匹配多个字段的模糊查询,怎么处理呢?

2025-09-05 10:18:13 350

原创 Class A 包含字段 x Class B 也包含字段 x,如果判断List<A> lista 和 List<B> listb 有相同的 x?

要判断两个不同类型的对象列表 List<A> 和 List<B> 是否包含相同的 x字段值(即两个列表中至少有一个 x是相同的),你可以使用 Java 8 的 Stream API 来实现。

2025-08-21 11:31:27 263

原创 com.alibaba.fastjson.JSONObject cannot be cast to xxx 异常处理

→ 表示这是 Fastjson 的 类型提示(type hint),告诉 Fastjson:这个 JSON 应该反序列化为 SysUser 类。开发时候遇到一个错误com.alibaba.fastjson.JSONObject cannot be cast to xxx.xxx。第一个包含 "@type":"com.hieasy.system.domain.user.SysUser"不管用哪个 上面2个字符串解析都不能一起正确,然后写了下面的方法。第二个没有 "@type" 字段。先看两个JSON字符串。

2025-08-21 11:26:19 467

原创 el-form 的resetFields()方法

注意:它不会重置你在 data 中定义的默认值,而是重置为字段初始绑定的值(通常是 null、''、undefined)3、在方法中调用 this.$refs.formRef.resetFields();clearValidate() ---只清除校验状态,不重置值。2、el-form-item 增加 prop="xxx"validateField() ---校验单个字段。重置的是“初始值”,不是 data 中的默认值。validate() ---校验表单。1、el-form 添加 ref。

2025-08-21 11:11:29 343

原创 SQLSERVER ISNULL函数式查询和AND (D.SP = 0 OR D.SP IS NULL)哪个效率更高

→ 如果 SP上有索引,虽然 OR 会降低索引效率,SP 都在索引中,仍可利用索引查找或扫描数据库可以使用 索引查找(Index Seek) 快速定位 SP=0 的行。语句二:SELECT * FROM T WHERE SP=0 OR SP IS NULL;查询一:SELECT * FROM T WHERE ISNULL(SP,0) = 0;D.SP <> 1 包含 (D.SP = 0 OR D.SP IS NULL) 吗?查询二:WHERE SP=0 OR SP IS NULL;

2025-08-12 11:41:06 359

原创 Linx(centos) 安装中文字体

3、安装文泉驿正黑字体(wqy-zenhei,开源)1、更换 CentOS yum 源为国内镜像。安装完毕后查看是否安装中文字体。2、安装 fontconfig。

2025-07-16 15:19:40 262

原创 Quartz 定时任务执行传递参数信息

在 Quartz 中,你可以通过作业(Job)的上下文来传递和访问定时任务的参数信息。Quartz 提供了多种方式来设置和获取这些参数,这通常涉及到 JobDataMap,它允许你向 Job 传递数据。当你调度一个 Job 时,可以使用 JobDetail 或者 Trigger 来添加参数。在你的 Job 实现中,可以通过 JobExecutionContext 访问这些参数。使用 JobDetail 设置参数。或者使用 Trigger 设置参数。

2025-07-15 14:59:14 388

原创 Java @Synchronized的一些理解

当多个线程同时访问一个未缓存的 key 时,Caffeine 只会让 一个线程去加载数据,其他线程会等待并最终获取相同的结果(即 cache line locking);@Synchronized 注解来自 Lombok,它的作用是 对当前方法加锁,确保同一时间只有一个线程可以执行该方法,并发时候需要等上一个执行才能进入。@Synchronized 默认情况下,它会对整个方法进行同步控制,如果是静态方法,则会锁住类对象(MyClass.class)。在高并发场景下(如热点 token),响应延迟显著上升;

2025-07-09 14:32:23 201

原创 Caffeine的tokenCache与Spring的CaffeineCacheManager缓存区别

tokenCache 是 Caffeine 原生创建的缓存实例,它不需要依赖 Spring 的 CaffeineCacheManager,也不参与 Spring 缓存抽象体系(比如不能用在 @Cacheable 注解中)。否则,如果你只是某个局部业务逻辑需要缓存,不想引入太多 Spring 依赖,可以用 LoadingCache。而不用去配置CaffeineCacheManager这些配置文件,也不需要@EnableCaching。tokenCache 只需要简单的几行代码就可以实现本地缓存。

2025-07-09 14:23:17 288

原创 Springboot 本地缓存

第六步:自定义 CaffeineCacheManager。第七步:在主配置中注册自定义 CacheManager。springboot 监控中心可以看到缓存已存在。第三步:配置 application.yml。第四步:创建配置类用于映射 YAML 数据。第五步:注册配置类到 Spring 容器。第一步:添加maven依赖。第二步:启用缓存功能。

2025-07-09 13:37:58 370

原创 Vxe-table @cell-click 事件中,传递给处理函数的入参对象

在 vxe-table 的 @cell-click 事件中,传递给处理函数的对象包含了丰富的信息,可以帮助你了解用户点击的单元格的详细情况。通过这种方式,你可以非常灵活地根据用户的交互来执行相应的逻辑。例如,基于点击的列或行来更新状态、导航到不同的页面或者显示详细的编辑界面等。

2025-06-26 09:17:00 469

原创 JAVA List<String> 用 stream转为 List<Long>

可以使用 Java Stream 将 List<String> 转换为 List<Long>,前提是这些字符串可以被正确解析为数字。Long.valueOf() 内部调用的是 parseLong(),区别不大;把 Stream 中的元素收集回 List<Long>。都可以将字符串转换成 Long 类型;Optional 安全转换。

2025-06-26 09:03:36 651

原创 JAVA springboot Access-Control-Allow-Origin

也就是说,只有当你的请求是通过浏览器发起的(比如前端 JavaScript 使用 fetch 或 XMLHttpRequest),这个头才会起作用。只有来自https:/your-domain.com的前端页面(即请求的来源 Origin 是这个域名),才能通过浏览器发起跨域请求访问这个接口。https://epos.whbswdt.com/xxx  也被允许(路径不影响)https://www.epos.whbswdt.com  子域名不同,也不被允许。区分大小写 & 完全匹配。

2025-06-06 09:52:38 459

原创 Springboot从consul中获取配置

3、在http://127.0.0.1:8500页面的 key/value 新建文件夹 /config/your-service/2、新增 bootstrap.yml ,springboot版本低于3.3是优先读取bootstrap.yml的配置的。Springboot项目如何实现一启动就读取consul配置的信息如数据库连接。以下是实现步骤:(Springboot版本是 2.2.5.RELEASE)然后再建一个名叫data的key,设置yaml配置。启动后可以验证下启动端口是不是consul配置的端口。

2025-05-22 15:22:00 480 1

原创 Linux Systemd 管理java服务

systemd 是现代 Linux 发行版中用于初始化系统并管理服务的主要工具。通过创建一个 .service 文件来定义您的 Java 应用程序服务。1、创建一个服务单元文件,例如 /etc/systemd/system/my-java-app.service。2、刷新 systemd 配置:sudo systemctl daemon-reload。3、启动服务:sudo systemctl start my-java-app。

2025-05-22 14:57:50 398

原创 JAVA8怎么使用9的List.of

在 Java 8 中,List.of 方法并不可用,因为这是从 Java 9 开始引入的用于创建不可变列表的便捷方法。要在 Java 8 中达到类似的效果,您需要使用其他方式来创建列表。常规的方法是先创建集合对象然后再添加元素。1、使用Arrays.asList。

2025-05-22 10:43:38 706

原创 Linux /etc/rc.d/init.d/

在传统的 SysV init 系统中,服务启动脚本通常位于 /etc/rc.d/init.d/ 目录下。这些脚本可以直接执行以启动、停止或重启服务,并且可以接受参数如 start, stop, status 等。如果你想知道位于 /etc/rc.d/init.d/ 目录下的某个脚本文件实际上指向哪里,如果你想获取符号链接的目标而不关心其他信息,可以使用 readlink 命令。这对于脚本编写特别有用。

2025-05-19 11:14:08 314

原创 记录一个空指针的异常排查

(2) i.getSrvBegin() 返回 null。(3) i.getSrvEnd() 返回 null。(4) 字符串长度不够这个不是空指针异常,这个排除。点击这个单据,有时候却是正常的,没出现空指针的情况。(2) i 的srvBegin 值也不是空的。(3) i 的srvEnd 值也不是空的。1、加同步锁 synchronized。这就感觉很奇怪了,有点莫名其妙,😖。那么猜测出现问题的原因可能是。(1) i 为 null。(4) 字符串长度不够。(1) i 不是空的。3、设计为不可变对象。

2025-04-30 09:45:13 358

原创 为什么大多数JAVA应用不需要进行JVM优化

6. 性能监控和动态调整的能力通过使用性能监控工具(如 JVisualVM、JProfiler、Prometheus 等),可以实时观察 JVM 的运行状态,并根据实际需求进行动态调整,而不是一开始就进行复杂的调优。大多数 Java 应用程序不需要进行 JVM 优化的原因主要在于以下几个方面:1. JVM 本身的优化能力JVM(Java Virtual Machine)经过多年的发展,已经成为一个高度优化的运行环境。•JVM 调优可能会引入新的问题,例如内存泄漏、GC 暂停时间增加等,增加了调试的难度。

2025-04-29 17:31:40 459

原创 JAVA 枚举类的ordinal用法

通过上述方法,你可以根据 ordinal 值找到具体的枚举值,但请务必注意其潜在的风险并采取相应的预防措施。在这个例子中:BusinessType.TYPE_A.ordinal() 返回 0。BusinessType.TYPE_B.ordinal() 返回 1。BusinessType.TYPE_C.ordinal() 返回 2。或者如果枚举有特定的属性,可以遍历枚举实例来匹配这些属性值。2、values() 返回该枚举类型的所有实例的一个数组。1、.ordinal() 返回该枚举常量的序数。

2025-04-29 17:24:24 638

原创 Java \n使用注意事项

1、判断是否有换行符用indexOf,这里面用的是 \n。2、拆分正则表达式, 这里面用的是 \\n。\n是一个转义字符,表示换行符。

2025-03-11 10:12:45 386

WinSW.NET4.zip

WinSw(Windows Service Wrapper)是一个开源项目,它可以让我们快速把一个可执行的程序注册为Windows的系统服务。

2020-04-17

notepadd++.zip

notepad(记事本)是代码编辑器或WINDOWS中的小程序,用于文本编辑,在文字编辑方面与Windows写字板功能相当。是一款开源、小巧、免费的纯文本编辑器。 Notepad内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美支持 .nfo 文件查看),也支持自定义语言。

2020-04-17

app.sh jar安装成linux服务安装命令脚本

app.sh 是java将jar安装成linux服务安装命令脚本 脚本使用方式 : 1-改好配置文件 2-将app.sh 与 jar 放置一个文件夹 3-给与app.sh相应执行权限,chmod 777 app.sh 4-启动 ./app.sh start

2020-04-17

JAVA-COM Bridge 中间件

Jacob 是 JAVA-COM Bridge的缩写,是一个中间件,能够提供自动化访问MS系统下COM组件和Win32 libraries的功能。 • MS系统提供的COM组件 COM组件 对象ID MS Word Word.Application MS Excel Excel.Application MS Powerpoint Powerpoint.Application MS IE InternetExplore.Application

2020-04-17

空空如也

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

TA关注的人

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