- 博客(130)
- 收藏
- 关注
原创 Redis防重复点击与分布式锁
当你想"限制用户在N秒内不能操作"时,用带过期时间的标记;当你想"确保只有一个线程能操作"时,才用分布式锁。防重复点击和分布式锁是两种完全不同的语义,但开发者常因"都用到Redis"而混用。防重复点击 = 冷却计时器:用SET NX EX,自动过期,无需释放分布式锁 = 互斥信号:用,手动释放,保护资源选错工具不仅代码复杂,还会引入死锁、性能下降、用户体验差等隐患。希望这篇文章能帮你避开这个90%开发者都踩过的坑。
2025-12-23 21:52:59
561
原创 Redis防重复点击与分布式锁实现方案对比笔记
维度防重复点击分布式锁核心语义冷却计时器互斥访问生命周期自动过期(无需手动)必须手动释放性能极高(单次操作)较高(需竞争)代码复杂度极低(3行)较高(try-finally)事务兼容性✅ 完美⚠️ 需分离锁与事务适用场景防重、限流资源竞争、排他操作。
2025-12-23 21:47:23
141
原创 “An I/O error occurred while sending to the backend” 时,可能是你的 SQL 参数超过了 32767
结果 DBA 说数据库一切正常,别的业务也稳如老狗。于是开始漫长的“甩锅”之旅……1 800 × 4 条 UNION × 3 天批次 ≈ 34 000 个参数,。34524 > 32767(0x7FFF),直接越界,驱动抛错。PostgreSQL JDBC 驱动在组装。MyBatis Foreach 陷阱 –。报文时,需要把参数个数写成 2 字节。JDBC 驱动只是忠实实现,。,参数个数瞬间降到 3 个。,提前留好分批/临时表口子。生产日志里突然冒出:复制。32767 是硬天花板,
2025-12-11 20:04:29
366
原创 Java 8 时间类型序列化翻车现场:从 LocalDateTime 不支持的异常到一劳永逸的 ObjectMapper 配置
Java 8 时间类型 → 必须注册从此LocalDateInstant都能被 Jackson 当成普通字段无缝转换,导出、缓存、RPC 全场景通用。
2025-12-09 17:07:09
264
原创 解决 Spring Security 在异步线程中用户信息丢失的问题
Spring Security 在异步线程中丢失用户信息是一个常见但容易解决的问题。简单项目:使用方案1(手动传递)即可中型项目:建议使用方案2(自定义线程池)大型项目:推荐使用方案3(Spring Security官方方案)或综合方案性能敏感:考虑方案4(避免在异步中使用安全上下文)无论选择哪种方案,都要记住:始终在finally块中清理安全上下文合理配置线程池参数添加适当的监控和日志进行充分的测试。
2025-12-09 17:04:50
786
原创 Java正则表达式性能优化指南:编译开销、类加载与线程安全深度解析
推荐做法静态常量预编译java使用Holder模式延迟加载javaPattern.compile("复杂正则");缓存动态生成的正则java。
2025-12-02 17:02:11
891
原创 一文吃透 Maven:生命周期、常用命令与实战场景全解析
无论你是刚转 Java 的新同学,还是在云原生里摸爬滚打的“老鸟”,Maven依旧是当下最主流的构建与依赖管理工具。我天天敲,但它到底干了啥?和 IDEA 绿色三角启动有什么区别?“集成测试、发版、排包冲突,分别该用哪条命令?今天这篇文章就把 Maven 的生命周期高频命令与真实场景一次性梳理清楚,让你不再“盲敲”,而是“心中有谱”。Maven├─ clean 生命周期│ └─ clean├─ default 生命周期├─ site 生命周期│ └─ site└─ 常用插件目标。
2025-12-01 23:46:30
794
原创 深度解析 Maven 配置架构:从 “No plugin found“ 错误看配置协同工作原理
Maven 的配置体系是一个精心设计的分布式配置管理系统。理解serversmirrorsprofiles和之间的协同工作原理,对于解决复杂的依赖管理问题至关重要。当遇到 "No plugin found" 这类问题时,我们应该从配置协同的角度系统分析,而不是孤立地看待单个配置项。这种系统性的思考方式,不仅适用于 Maven 配置调试,也适用于其他复杂系统的故障诊断。记住:好的配置设计应该是显式的、可调试的、符合约定的,这样才能在复杂项目中保持构建过程的可维护性和可靠性。
2025-11-27 20:43:49
854
原创 报表权限系统设计演进:从权限混乱到精细化管控
- 审计字段...致命缺陷:无法支持多个自定义报表,所有配置混在一起-- 问题:用户可能配置没有权限的字段-- 这里没有验证用户是否真的有权限查看这些字段COMMENT ON TABLE report_column_definition IS '字段定义表:统一管理所有可配置字段的元数据';COMMENT ON COLUMN report_column_definition.is_sensitive IS '是否为敏感字段,用于默认脱敏策略';-- 自定义报表主表。
2025-11-24 20:57:09
691
原创 Spring Boot 数据源健康检查技术文档
Spring Boot 提供了强大的健康检查功能,通过 Spring Boot Actuator 模块,可以轻松监控应用程序的运行状态,包括数据源的健康状态。本文将详细介绍 Spring Boot 数据源健康检查的实现原理、查看入口以及自定义健康检查的方法。创建一个自定义的@Component@Autowired@Override@Component@Autowired@Override。
2025-11-20 22:11:05
505
原创 Java 序列化与反序列化:深入解析与实践
通过定义一个自定义的序列化器,可以明确地告诉 Jackson 如何处理JSONNull类型。@Override// 将 JSONNull 序列化为 JSON 的 null然后,将这个自定义序列化器注册到 Jackson 的@Bean序列化和反序列化是 Java 开发中不可或缺的技术,它们使得数据能够在不同的存储和传输格式之间进行转换。通过合理选择序列化工具和格式,可以确保数据的高效传输和安全存储。在实际开发中,遇到序列化问题时,可以通过自定义序列化器或手动处理数据来解决问题。
2025-11-20 20:08:23
638
原创 华为云高斯数据库索引命中查询
从你提供的数据来看:所有索引的idx_scan都为 0,说明这些索引从未被使用过。这通常意味着:查询条件没有命中这些索引字段;或者优化器认为全表扫描更快;或者这些字段的过滤性太差,索引无效;或者这些索引是刚创建的,还没有查询使用它们。
2025-11-19 23:43:21
868
原创 LinkedHashMap 访问顺序模式
但在实际业务中,经常出现“只想拿到第一个插入的元素,却又不想破坏原有 LRU 顺序”的需求。本文给出三种零副作用(或低副作用)的解决方案,并附可直接落地的源码。适用场景:仅想知道“第一个 key/entry”是什么,而不需要 value。适用场景:必须根据 key 拿 value,但又不希望该节点被“访问后移”。都会把被访问节点移到双向链表末尾,以保证 LRU 语义。顺序的前提下,拿到 key="A" 的 value。适用场景:数据量不大、只读频繁、可接受额外内存。,链表就不会被修改。
2025-09-21 13:35:03
389
原创 PostgreSQL 索引使用分析2
1. EXPLAIN 验证索引 |v| 2. pg_stat_user_indexes 观察 || - 非实时 || - 非历史累计 |v| 3. 长期监控与优化 |索引优化不是一锤子买卖,而是一个持续观察-调整-验证的过程。理解统计信息的更新机制、正确使用 EXPLAIN、建立长期监控体系,才能让索引真正服务于业务性能。希望本文能帮你避开那些看似正确实则坑人的误区,真正做到“用数据说话”。
2025-09-03 15:07:25
454
原创 优化正则表达式性能:预编译与模式匹配的最佳实践
正则表达式是文本处理的强大工具,但在Java应用中不当使用会导致严重的性能问题。本文将深入分析正则表达式的性能优化策略,通过实际代码案例展示如何将正则表达式性能提升数倍。通过实施这些优化策略,我们可以将正则表达式相关操作的性能提升数倍甚至数十倍,显著提高应用程序的响应速度和吞吐量。正则表达式是强大的文本处理工具,但需要正确使用才能发挥最佳性能。这种写法在每次方法调用时都会重新编译正则表达式,对于高频调用的方法会造成巨大的性能开销。// 使用预编译的Pattern,性能大幅提升。
2025-09-01 18:07:38
1097
原创 优化括号匹配检查:从Stack到计数器的性能提升
在Java开发中,我们通常使用Stack数据结构来处理这类问题,但在特定场景下,使用简单的计数器可以获得显著的性能提升。通过本文的分析,我们可以根据实际需求做出明智的选择。在只处理一种括号类型且对性能有要求的场景下,使用计数器方案可以带来显著的性能提升,而不牺牲代码的可读性和维护性。传统的做法是使用Stack数据结构,但当我们只处理一种括号类型(如小括号)时,是否有更高效的解决方案?从测试结果可以看出,计数器方案在性能上有显著优势,比Stack方案快3-4倍,且内存占用和GC影响极小。
2025-09-01 18:04:07
466
原创 多维度指标交叉计算查询方案
业务方经常需要把“来源不同、口径不同、甚至维度列不完全一致”的 N 个指标拉到同一张结果表里做加减乘除。每多一个指标就再 JOIN 一次,JOIN 条件里还要层层 COALESCE,SQL 很快失控。比第一种稍好,但仍逃不掉 FULL JOIN 带来的复杂度 O(n²)。本文用一套“行转列”范式()彻底解决扩展性问题,并给出维度缺失、类型兼容、动态 SQL 等常见坑的填法。下文所有表名均已脱敏为tbl_xxxtbl_yyy,字段名保持原义便于阅读。
2025-08-25 20:30:08
929
原创 可扩展的三层级校验架构
解耦与复用校验逻辑与业务处理器解耦校验器可在不同场景复用灵活扩展新增校验规则不修改已有代码支持运行时动态调整校验链可观测性完整记录各阶段校验结果提供性能监控数据组合优于继承避免深度类层次结构支持更灵活的校验策略组合架构适应性可适配传统单体架构也适用于微服务架构这种接口化校验架构已在多个大型业务系统中验证,特别适合需要多维复杂校验的业务场景。通过将校验逻辑分解为独立的阶段,我们实现了关注点分离,提高了系统的可维护性和扩展性。
2025-08-16 16:11:11
1301
原创 draw.io编辑 UML 类图
文本型(写代码就出图) • PlantUML:在 VS Code / IntelliJ / Eclipse 里装 PlantUML 插件,新建 xxx.puml 文件,直接把你贴的那段粘进去就能实时预览、导出 PNG/SVG/PDF。纯图形(完全拖拽) • ProcessOn(国内在线)、Lucidchart、Gliffy 等:浏览器里拖框画线即可,不支持直接粘贴文本,但适合不会写 PlantUML 的同学。• Kroki、PlantUML Server:不想装插件,直接网页粘贴也可生成。
2025-08-16 13:31:01
834
原创 MyBatis-Plus中JSON字段处理的常见问题与解决方案
当我们使用自定义Mapper方法时,MyBatis会严格按照XML中定义的SQL和映射规则执行操作,包括使用指定的typeHandler处理JSON字段。-- 其他字段映射... --></insert>通过以上配置,我们就可以正常使用MyBatis-Plus的内置方法来处理包含JSON字段的实体对象了。这个问题的核心在于MyBatis-Plus的自动SQL生成机制与自定义类型处理器之间的兼容性问题。
2025-08-08 00:07:36
723
原创 Fastjson 与 Jackson 的本质区别
Fastjson 默认忽略未知字段。A 库写出的 JSON 可能包含 B 库不认的字段,导致 400/500。等细节差异,都会导致“看起来一样的 JSON”在另一端解析时报错或丢数据。功能最全:流式、树模型、数据绑定、JSONPath、XML/YAML 扩展。:尽快迁移到 Fastjson2 或 Jackson,别再混用。一、Fastjson 与 Jackson 的本质区别。二、混用为什么“必炸”(序列化/反序列化异常):直接 Jackson,省心稳当。,字段名对不上直接反序列化失败。
2025-08-06 15:17:57
615
原创 PostgreSQL针对Json设计规范
• T_IND 里 dependence_model_id / dependence_indicator_id 采用「互斥空值」设计,符合当前三种指标类型,未来若出现多依赖再拆关系表。• related_tab_id / related_col_id 仅用于事实表字段→维表字段导航,不做冗余存储。3.2 模型字段关系数组(T_MOD_CFG.table_field_relationship)3.1 GROUP 维度数组(T_IND_CFG.config_detail → GROUP)
2025-08-05 02:43:29
626
原创 RECURSIVE递归查询:PostgreSQL 多级依赖血缘系统的设计与落地
维度实践要点存储只存依赖 ID,避免全量冗余查询函数封装递归,必要时图数据库状态触发器 + 服务层双重锁性能缓存 + 预编译 + 异步刷新可视化Neo4j / ECharts 桑基图至此,我们完成了从“原子→派生→复合”多级指标依赖的完整设计与落地。
2025-08-05 01:45:05
610
原创 笔记本电脑联想T14重启后无法识别外置红米屏幕
将红米显示器连接到其他电脑(如手机或另一台笔记本),确认显示器本身无故障。:先关闭显示器电源,再重启T14,最后开启显示器,避免信号握手失败。:若红米显示器通过DP菊花链连接其他设备,断开其他显示器后重试。,尝试更换线缆或接口(如换另一个USB-C口或HDMI口)。或联系联想售后检查USB-C接口硬件(如CC引脚损坏)。(混合显卡)已启用(部分型号需禁用才能识别外接屏)。(在设备管理器中找到红米显示器,右键禁用再启用)。:若T14为AMD版本,部分用户反馈需通过。:若近期更新过驱动,尝试回退到上一版本。
2025-08-04 10:14:39
939
原创 基于Java对于PostgreSQL多层嵌套JSON 字段判重
场景:把复杂的条件树以 JSON 形式存入 PostgreSQL,并要求:子条件顺序、valueList 重复值、展示用字段(如别名)“相同业务逻辑”的判定。本文给出一条的端到端可复制方案。
2025-07-30 18:17:01
926
原创 哈希算法简介
MD5/SHA-2把消息补位→分块→多轮循环更新寄存器→输出摘要。差异主要在轮数、寄存器长度和常量。SHA-256 轮数更多、输出更长,抗碰撞能力显著优于 MD5。xxHash64将输入切成 64-bit 块,用乘法-旋转-异或组合快速混合,最后合并结果。目标是速度而非抗密码学攻击。
2025-07-30 18:15:12
815
原创 PostgreSQL 中 date_trunc 为什么能走索引?【待验证】
date_trunc 能走索引,不是因为黑科技,而是因为你提前把「表达式结果」存进了索引。“表达式一致 + IMMUTABLE + 索引”三件套,就能让时间截断查询飞起来。
2025-07-29 20:33:39
540
原创 VALUES 使用
可以在任何需要表的地方(FROM、WITH、INSERT…括号里只有一条记录,字段名/类型由字面量推断;一条记录用括号包起来,多条记录用逗号隔开;在 PostgreSQL 里的作用就是。,后续 SELECT 里就能直接引用。单行常量表(演示函数 / 表达式)外层给这张临时表起别名(最常用的 3 种用法。
2025-07-29 20:12:19
355
1
原创 别让 WHERE 把 LEFT JOIN 偷偷变成 INNER JOIN —— 一个极易忽视的 SQL 语义陷阱
在日常开发中,多表 LEFT JOIN 后再加 WHERE 过滤,看起来人畜无害,实则暗藏“语义降级”风险。若必须保留 LEFT JOIN 语义,又想在右表走索引,可在 ON 子句里加过滤,再对右表建。LEFT JOIN 后再对右表字段做非 NULL 过滤,等同于 INNER JOIN;要么改写成 ON 条件,要么接受语义变化,千万别被“LEFT”字样误导。LEFT JOIN 会保留左表(main_trade)的所有行。于是 LEFT JOIN 退化成 INNER JOIN。一旦对右表字段写了过滤条件(
2025-07-29 18:52:10
4450
原创 时间运算:PostgreSQL 时间旅行指南—— 彻底搞懂 INTERVAL 的十八般武艺
如果你只会,那这篇文章就是为你准备的。在日常开发中,这类需求几乎天天见。PostgreSQL 的INTERVAL类型提供了非常优雅且强大的时间计算能力,但很多人只用到冰山一角。本文一次性把常见场景、踩坑点和进阶技巧全部整理给你。
2025-07-29 14:36:37
814
原创 时间截断:PostgreSQL 与 MySQL 时间类型避坑指南
从精度、索引、到 Java 入参的完整梳理在日常开发中,时间字段的设计与查询往往最容易踩坑:精度到底选到秒还是毫秒?和差多少?用DATE_TRUNC会不会让索引失效?Java 想按季度查询该怎么传参?本文基于 PostgreSQL 与 MySQL(5.7/8.0)最新行为,一次性把高频问题讲透。
2025-07-28 15:41:59
615
原创 PDManer TIMESTAMP 默认会自动写成 TIMESTAMP 而不是 TIMESTAMP(0)
打开 “设置->模板->DDL 模板->PostgreSQL”直接把数据类型写成 “TIMESTAMP(0)”在字段编辑框里,把“数据类型”从下拉框里选成。在菜单 “数据库->自定义数据类型” 里新增一条。最简捷的就是方法 1:直接把字段的数据类型写成。这样导出的建表语句就会原样保留这段文本,生成。回到表设计界面,把字段的数据类型选成刚建的。但这样会把所有 TIMESTAMP 都加。精度的字段都可以复用这个自定义类型。,除非项目统一这么做,一般不推荐。要让它在导出的 DDL 里出现。
2025-07-28 15:24:09
411
原创 向前滚动累加SQL 实现思路
为了便于阅读,下文所有表名、字段名都做了脱敏混淆,但逻辑 100 % 保留。“把维度切到省、市、房型、项目经理、代理商等,结果又是什么?为每个月生成一个 6 个月窗口(含自己 + 前 5 个月)。“截至今天,过去 N 天/月/周累计发生了多少?= 过去 7 天(不含当日)的同维度放款单量之和。= 过去 7 天(不含当日)的同维度放款金额之和。的窗口函数,逻辑更简洁,但引擎需要支持。(含当月)的累计订单数,维度为代理商。如果窗口更大(如 12 个月),可把。用窗口月把“干净集合”挂上去,再。
2025-07-25 14:22:56
995
原创 Cause: org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command
这是 PostgreSQL 被管理员或自动化运维工具强制终止连接导致的偶发故障,优先排查数据库端的操作记录和超时配置。
2025-07-21 11:10:44
961
原创 JPA 与 MyBatis-Plus 数据库自增主键实现方案
两种主流 ORM 的完整实现步骤、代码示例及注意事项,方便团队快速落地。以 MySQL 为例,PostgreSQL 把。)作为主键,以减少主键生成逻辑复杂度。在实际项目中,常需使用数据库自增列(MyBatis-Plus:确认。MyBatis-Plus 可在。
2025-07-17 21:17:56
456
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅