<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[老白干的zone]]></title><description><![CDATA[不积跬步 无以至千里，不积小流 无以成江海]]></description><link>https://blog.youkuaiyun.com/pvfhv</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pvfhv]]></copyright><item><title><![CDATA[基于枚举 + 注解的 Java 数据脱敏实践（fastjson 序列化场景）]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/164115233</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/164115233</guid><author>pvfhv</author><pubDate>Thu, 27 Aug 2026 12:08:03 +0800</pubDate><description><![CDATA[环节方案策略定义枚举 +，策略即代码字段标记自定义注解@Sensitive，声明式配置触发执行fastjson反射扫描注解数据安全只在输出端脱敏，不污染原始对象枚举管"怎么脱"，注解管"脱哪里"，过滤器管"什么时候脱"。三者解耦，任何一层都可以独立扩展。]]></description><category></category></item><item><title><![CDATA[工程如何打包并验证 Chrome 80 兼容性]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163845109</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163845109</guid><author>pvfhv</author><pubDate>Tue, 18 Aug 2026 10:06:34 +0800</pubDate><description><![CDATA[背景：本项目是一个基于 Vite 5 构建的大型 React 微前端应用（含 antd、echarts、dayjs 等重型依赖）。部分内网用户仍在使用（发布于 2020 年初，V8 8.0），而 Vite 默认按现代浏览器（原生 ESM、可选链、空值合并、Array.at()等）输出产物。本文总结我们如何在不放弃现代开发体验的前提下，让打包产物平滑运行在 Chrome 80 上，并给出可落地的验证流程。]]></description><category></category></item><item><title><![CDATA[基于 Spring AOP 的操作日志记录：以 DeptController 增删接口为例]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163570517</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163570517</guid><author>pvfhv</author><pubDate>Fri, 07 Aug 2026 18:15:11 +0800</pubDate><description><![CDATA[Log。]]></description><category></category></item><item><title><![CDATA[手把手实现一个 Spring Boot Starter：把第三方类自动装入 IOC 容器]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163569960</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163569960</guid><author>pvfhv</author><pubDate>Fri, 07 Aug 2026 17:41:02 +0800</pubDate><description><![CDATA[在日常开发中，我们经常会引入各种第三方 SDK（OSS、MinIO、短信、支付等）。如果每次都在业务项目里手动new对象、手动注入配置，既繁琐又不优雅。Spring Boot 给出的标准解法就是。本文以一个极简示例为例，拆解"如何让一个第三方类被自动注册进 IOC 容器"。]]></description><category></category></item><item><title><![CDATA[把多个 Spring Boot 子模块整理进一个 Maven 聚合工程]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163461793</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163461793</guid><author>pvfhv</author><pubDate>Tue, 04 Aug 2026 09:43:45 +0800</pubDate><description><![CDATA[记录一次真实的多模块 Maven 工程整理过程：从复制工程、裁剪依赖、改名、解决 IDEA 报错到统一端口，踩过的坑与最终方案。]]></description><category></category></item><item><title><![CDATA[MySQL 8.4 容器启动后客户端连不上：Plugin ‘mysql_native_password‘ is not loaded]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163433325</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163433325</guid><author>pvfhv</author><pubDate>Mon, 03 Aug 2026 10:47:07 +0800</pubDate><description><![CDATA[别再抄 5.7 时代的配置模板了。这行配置在网上流传了近十年，但从 8.4 开始它已经是错误配置。镜像 tag 一定要写死小版本。mysql:8或会在某次后悄悄从 8.0 跳到 8.4，然后你的服务在半夜挂掉。认证插件迁移宜早不宜迟。9.x 已经删掉 native 插件，现在花十分钟把账号改成，比将来大版本升级时被迫加班要划算。初始化型参数要提前定好（部分场景）这类参数写进数据目录，改了就得重建。需要我把按方案一直接改掉吗？]]></description><category></category></item><item><title><![CDATA[jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163365273</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163365273</guid><author>pvfhv</author><pubDate>Fri, 31 Jul 2026 13:36:26 +0800</pubDate><description><![CDATA[环境：Spring Boot 3.5.16 / Java 21 / jjwt 0.9.1场景：在单元测试中签发 JWT，连续踩中两个运行时异常。]]></description><category></category></item><item><title><![CDATA[为什么 .gitignore 配置了却不生效？—— 一次 .idea 目录忽略失败的排查记录]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163340296</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163340296</guid><author>pvfhv</author><pubDate>Thu, 30 Jul 2026 17:00:09 +0800</pubDate><description><![CDATA[要点说明.gitignore的作用范围只影响未跟踪的文件，对已跟踪文件无效验证规则是否匹配已跟踪文件想忽略后提交忽略整个目录直接写/dir/，不要用*.*（会漏掉无扩展名文件）这是 Git 使用中最常见的误区之一：.gitignore不是"删除跟踪"的工具，而是"防止跟踪"的工具。遇到"配置了却不生效"的情况，第一反应应该是检查文件是否已经被跟踪。]]></description><category></category></item><item><title><![CDATA[一次 MyBatis 统计查询引发的 ClassCastException：Long 不能强转为 Integer]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163339323</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163339323</guid><author>pvfhv</author><pubDate>Thu, 30 Jul 2026 16:25:17 +0800</pubDate><description><![CDATA[COUNT()SUM()等聚合函数的结果，在 MyBatis 中通常映射为LongBigDecimal），而不是Integer。接收查询结果时，要清楚每个字段的实际类型，不要凭直觉强转。引用类型之间不能随意强转LongInteger没有继承关系，必须用数值转换方法（如intValue()涉及可能大数值的统计量，优先使用Long或BigDecimal承载，避免int溢出。一个小小的统计接口，背后是对 JDBC 类型映射规则的理解偏差。把Long当Integer。]]></description><category></category></item><item><title><![CDATA[MyBatis 动态更新 SQL 的那些坑：从 `updateById` 改造说起]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163329628</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163329628</guid><author>pvfhv</author><pubDate>Thu, 30 Jul 2026 11:19:58 +0800</pubDate><description><![CDATA[MyBatis 的里写的是OGNL 表达式。当字段是与""（空字符串，本质是String）做!比较，由于类型不同，OGNL 会直接判定为不相等，结果恒为true；再和前面的X!= null用and连接：字段为null→null!= null为false，整体false，被跳过（正确）；字段非null→X!= ''恒为true，整体等价于只看X!= null。所以gender!= ''对Short字段来说，和gender!= null完全等价，多写的!= '']]></description><category></category></item><item><title><![CDATA[Spring Boot 启动报错：Port 8088 was already in use 端口被占用的排查与解决]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163328621</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163328621</guid><author>pvfhv</author><pubDate>Thu, 30 Jul 2026 10:53:30 +0800</pubDate><description><![CDATA[IDE 重启时，上一次运行的 Java 进程没有被真正终止，它仍然在后台监听 8088 端口。新启动的服务「抢不到」这个端口，Spring Boot 的。，那就是上次没退掉的 Spring Boot 进程，杀掉即可。换端口后，前端调用后端接口的地址也要同步改。检测到端口不可用后直接启动失败退出。项目中端口是固定配置的（以本工程为例，执行完后再重新启动服务，问题即可解决。改端口只是临时避让，治标不治本。服务直接启动失败，退出码为 1。问题，而不是配置错误。]]></description><category></category></item><item><title><![CDATA[MyBatis 嵌套结果映射 Bug：列名冲突导致集合被去重只返回一条]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/163327455</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/163327455</guid><author>pvfhv</author><pubDate>Thu, 30 Jul 2026 10:38:26 +0800</pubDate><description><![CDATA[调用接口，数据库emp_expr表中该员工有但接口exprList只返回了id18910job"1"]]></description><category></category></item><item><title><![CDATA[upload在表单中宽度撑满设置]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/161792462</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/161792462</guid><author>pvfhv</author><pubDate>Mon, 08 Jun 2026 11:00:06 +0800</pubDate><description><![CDATA[.ant-upload-select    （空格）+ .ant-upload-select — 选中当前元素内部的所有 .ant-upload-select 子元素（后代选择器）[&_.ant-upload-select]:!&    引用当前元素自身（类似 Sass/Less 中的 &）w-full    Tailwind 的 width: 100%[ ]    任意选择器定界符，里面写标准 CSS 选择器。Tailwind 的!important 前缀。:    Tailwind 的变体分隔符。]]></description><category></category></item><item><title><![CDATA[eslint在react中的常用片断]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/150845772</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/150845772</guid><author>pvfhv</author><pubDate>Tue, 26 Aug 2025 09:52:23 +0800</pubDate><description><![CDATA[1. 禁止依赖检查 eslint-disable-next-line react-hooks/exhaustive-deps。]]></description><category></category></item><item><title><![CDATA[echarts中一些关键的配置]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/147945954</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/147945954</guid><author>pvfhv</author><pubDate>Wed, 14 May 2025 10:02:30 +0800</pubDate><description><![CDATA[8, 双y轴设置，配置yAxis和series均为数组，各自中对象的name值对应，其中series中某一个对象设置yAxisIndex: 1则可以将其置于右侧。2. label与empasis，pie中为显示标签，与某区域选中高亮时显示的配置，empasis中可以设置label，itemStyle等。1. series中silent: true，不响应鼠标的事件，在pie中应用较多，自动切换不同扇形，不用响应鼠标移入移出事件。还可以设置图表上下左右的距离。]]></description><category></category></item><item><title><![CDATA[uniapp工程中解析markdown文件]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/146365266</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/146365266</guid><author>pvfhv</author><pubDate>Wed, 19 Mar 2025 11:53:58 +0800</pubDate><description><![CDATA[导入md文件时必须加?raw，配置完成后重新启动一下开发服务即可！4. 在工程页面中引入markdown格式文件并渲染。2. 创建vite.config.js配置文件。3. 在dCloud插件市场安装以下。1. 安装以下3个依赖包。]]></description><category></category></item><item><title><![CDATA[gitcode、gitlee、gitlab等拉取代码问题]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/145008896</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/145008896</guid><author>pvfhv</author><pubDate>Wed, 08 Jan 2025 14:33:11 +0800</pubDate><description><![CDATA[复制id_rsa.pub内容至SSH 公钥模块中，新建一个公钥将内容粘进去。1. 无法使用用户名和密码的方式拉取代码？使用ssh方式，mac系统下。]]></description><category></category></item><item><title><![CDATA[z-index失效问题]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/142830314</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/142830314</guid><author>pvfhv</author><pubDate>Thu, 10 Oct 2024 19:31:15 +0800</pubDate><description><![CDATA[2. z-index的“从父原则”。当你发现把z-index设的多大都没用时，看看其父元素是否设置了有效的z-index，当然别忘了先看看自身是否设置了position。fixed元素会产生新的层叠上下文，所以在使用z-index时会遇到无论设置多大的值都无法起效。所以，如果想通过z-index改变层级，一定要设置该元素的position属性。1. z-index只有在设置了position为。]]></description><category></category></item><item><title><![CDATA[在OSX上: 使用brew安装nginx 后，在通过编译安装第三方模块]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/142343249</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/142343249</guid><author>pvfhv</author><pubDate>Wed, 18 Sep 2024 20:45:49 +0800</pubDate><description><![CDATA[后，复制objs/nginx至nginx的安装目录将原来的nginx文件覆盖。2. mac环境编译源码需要安装pcre、openssl等第三方依赖，可参考。3. nginx可支持的配置参考。1. 下载nginx安装包。]]></description><category></category></item><item><title><![CDATA[关于发布 npm 包镜像库，马上 pnpm 安装报未找到版本的问题？]]></title><link>https://blog.youkuaiyun.com/pvfhv/article/details/139868189</link><guid>https://blog.youkuaiyun.com/pvfhv/article/details/139868189</guid><author>pvfhv</author><pubDate>Fri, 21 Jun 2024 19:00:36 +0800</pubDate><description><![CDATA[一天内发布多个版本的新包后，因为包发到npm服务上，淘宝源需要定期同步，有时发新包后不能马上安装新包版本，提示找不到，则需要在淘宝源上手工同步一下。]]></description><category></category></item></channel></rss>