- 博客(133)
- 收藏
- 关注
原创 Transactional注解不生效场景
在 Spring 框架中,@Transactional基于实现。如果配置或使用不当,事务可能 silently fail(静默失效),即不报错但也不回滚或不开启事务。
2026-06-09 10:55:24
312
原创 加密数据模糊查询
场景 | 推荐方案 | 理由 || 手机号、身份证号等结构化数据 | 盲索引/分词哈希 | 性能高,安全性好,实现可控。通常只需支持后缀或固定位查询。| 姓名、地址等非结构化文本,需复杂搜索 | Elasticsearch | 支持分词、模糊、相关性排序,用户体验最好。需注意 ES 安全配置。| 仅需前缀匹配(如按姓氏查人) | 确定型加密 | 实现简单,但安全性略低,需评估业务风险。
2026-06-09 10:21:46
301
原创 Hibernate、MyBatis 和 MyBatis-Plus
Hibernate 是 Java 生态中最流行的 对象关系映射(ORM)框架 之一,它简化了 Java 对象与数据库表之间的映射关系,让开发者可以用面向对象的方式操作数据库核心特点1. 全自动 ORMHibernate 实现了对象-关系映射,开发者无需编写 SQL,通过操作 Java 对象// 插入数据 - 只需保存对象user.setName("张三");// 查询数据 - 返回对象2. 自动生成 SQL根据实体类的映射配置,Hibernate自动生成 CRUD SQL。
2026-06-01 11:20:26
357
原创 面向切面编程(AOP)@Aspect
注解,开发者可以在不修改原有业务代码的情况下,把这些通用逻辑“织入”到目标方法执行的前、后或异常时,从而实现关注点分离,让代码更清晰、更易维护。它的作用是将一个普通的 Java 类标记为。 是 Spring 框架(以及 AspectJ)中用于。
2026-05-26 16:26:48
183
原创 浮点数精度问题
计算机使用二进制浮点数存储数值时,由于IEEE754标准的限制,无法精确表示某些十进制小数(如0.1、0.2等)。POI库在处理Excel数据时会进行隐式格式化,可能导致数值显示不一致。解决方法包括使用BigDecimal精确转换数值,并通过特定方法处理单元格内容,确保数据精度。测试表明,直接使用Double进行运算会产生精度误差,而BigDecimal能保持计算准确性。Excel文件的不同创建方式和版本差异也可能影响数值的存储格式。
2026-05-20 17:30:44
276
原创 uni-app 介绍
uni-app是基于Vue.js的跨平台应用开发框架,支持一套代码编译到iOS、Android、Web及各类小程序平台。它继承了Vue的语法和组件化开发模式,通过标准API和组件规范实现跨平台一致性。
2026-05-13 15:37:14
318
原创 数据库序列(Sequence)
数据库序列(Sequence)是一种生成唯一整数序列的对象,主要用于自动生成主键值或唯一标识符。核心特点是保证唯一性、独立于事务、可配置性强(可设置起始值、增量、循环等)。
2026-05-06 15:38:43
398
原创 桌面应用开发技术:NetBeans RCP / Eclipse RCP / JavaFX / Electron / Qt / Flutter Deskto
本文对比分析了六种主流桌面应用开发框架。NetBeans RCP和Eclipse RCP基于Java,分别采用Swing和SWT/JFace,适合复杂企业应用但学习曲线陡峭。JavaFX提供现代化UI,支持CSS和FXML,适合轻量级Java应用。Electron使用Web技术,开发效率高但资源占用大。Qt基于C++/QML,性能优异且跨平台支持好,但开发效率较低。Flutter Desktop采用Dart语言,支持多平台且开发体验流畅,但桌面端生态尚不成熟。
2026-04-30 14:49:04
577
原创 Arthas 使用
Arthas是阿里巴巴开源的Java诊断工具,支持在不修改代码或重启应用的情况下实时监控和诊断Java程序。主要功能包括类加载诊断、方法调用追踪、性能分析、热更新代码、查看运行时数据和线程诊断等。它适用于线上问题排查、性能调优、方法链路追踪等场景。安装方式包括直接下载或通过Maven获取,启动后可通过dashboard、thread、sc等命令进行诊断。Arthas提供强大的方法观察(watch)、调用追踪(trace)和反编译(jad)能力,支持条件过滤和批量操作,是Java开发者排查问题的利器。
2026-04-24 10:06:25
357
原创 并发问题 最佳实践建议
本文提出四层防护体系防止订单重复提交:1.前端防抖按钮防止快速点击;2.Redisson分布式锁控制并发;3.数据库唯一索引作为最终保障;4.业务逻辑检查订单是否已存在。方案从用户界面到数据库层层递进,结合前端控制、分布式锁、数据库约束和业务验证,有效解决重复提交问题。文中提供了Vue防抖实现、Redisson锁使用示例、MySQL唯一索引创建及Java异常处理代码,形成完整的防护链。
2026-04-16 11:33:12
259
原创 序列化过滤 JsonSerializer
JsonSerializer是Jackson库提供的自定义序列化工具,主要用于控制Java对象到JSON的转换过程。核心功能包括:1)格式化控制(数值精度、日期格式);2)敏感数据脱敏(如手机号打码);3)类型转换(复杂对象转简化结构);4)动态输出(根据条件决定字段值)。典型应用场景:字段级定制(最常见)、类级序列化、枚举自定义输出以及集合/Map的特殊处理。通过继承JsonSerializer并实现serialize方法,开发者可以完全控制JSON生成逻辑,比如日期格式化"yyyy-MM-dd
2026-04-16 11:06:18
47
原创 函数、存储过程和聚集(聚合)函数
数据库对象功能对比摘要 函数、存储过程和聚合函数是数据库中三种重要对象,各具特色。函数用于计算和转换数据,必须返回值且无副作用;存储过程适合处理复杂业务逻辑,支持事务控制和批量操作;聚合函数则专用于数据统计分析。三者均可参数化调用,但函数可直接嵌入SQL,存储过程需EXEC执行。实际应用中,简单计算用函数,业务流程用存储过程,统计分析用聚合函数,三者常组合使用以提高代码复用性和执行效率。
2026-04-02 09:53:40
285
原创 JDK 17/21 新特性 ZGC
ZGC 的核心思想:用 CPU 换延迟—— 通过并发执行和读屏障,将 GC 工作分散到应用运行过程中,从而避免长时间停顿。染色指针- 在指针中存储状态信息读屏障- 在读取对象时触发 GC 操作并发化- 大部分工作与应用程序并行执行这种设计使得 ZGC 成为目前 Java 生态中最先进的垃圾回收器之一,特别适合对延迟要求极高的场景(如金融交易、实时系统、Web 服务等)。
2026-03-23 14:33:01
384
原创 JDK17 新特性
密封类是一种「限制继承关系」的类,它可以明确指定「哪些子类可以继承自己」,相当于给父类加了一个「继承白名单」,避免无关子类随意继承导致的逻辑混乱。在 JDK 8 中,我们定义一个父类后,无法限制其他开发者随意创建子类,尤其是在领域模型、状态机设计中,很容易出现「继承泛滥」的问题。密封类的核心语法是sealed(声明密封类)和permits(指定允许继承的子类),子类必须显式声明为finalsealednon-sealed三者之一。// 1. 密封类定义return 0;
2026-03-20 11:05:40
568
原创 MySQL 存储引擎 FEDERATED
如果是新项目,建议使用其他方案替代 FEDERATED。如果是现有系统在使用,建议制定迁移计划,逐步替换为更可靠的方案。
2026-03-11 15:13:22
363
原创 触发器:创建一个审计日志表
本文介绍了库存管理系统的完整审计日志实现方案。主要内容包括:1)创建详细的审计日志表(t_log_inventory),记录操作类型、用户、时间、IP等基础信息,以及新旧数据对比;2)通过三个触发器(tr_t_inventory_insert/update/delete_full_audit)自动捕获库存表的增删改操作;3)创建汇总视图(v_inventory_full_audit_summary)简化查询;4)提供实用查询示例,包括基本查询、物料变更历史、操作统计和异常监控等。
2026-03-03 14:56:20
314
原创 SOLID、DRY、KISS、YAGNI 原则 / OWASP 安全最佳实践
SOLID原则是面向对象编程的五个基本原则:单一职责(一个类只负责一项功能)、开闭(扩展开放修改关闭)、里氏替换(子类可替换父类)、接口隔离(客户端不依赖不需要的接口)和依赖倒置(高层依赖抽象)。此外,DRY原则强调避免重复代码,KISS原则提倡简单设计,YAGNI原则反对过度设计。OWASP安全最佳实践包括输入验证、强身份认证、访问控制、数据保护和日志监控,重点关注注入攻击、XSS和CSRF等漏洞防护。这些原则和实践共同提升代码质量和系统安全性。
2026-02-28 13:22:40
623
原创 sql记录 拆分逗号
这段SQL代码实现了一个字符串拆分功能,通过JOIN操作将包含逗号分隔值的表与辅助数字表关联。核心逻辑是:计算字符串中逗号数量(通过原始长度减去去除逗号后的长度),然后与数字表中的数值进行比较(n-1)。当字符串中的逗号数≥n-1时匹配成功,从而将单个逗号分隔的字符串拆分为多行。例如"A,B,C"会被拆分为3行。该方案适用于不支持原生数组操作的数据库,但需要注意性能问题,且数字表需要包含足够大的连续整数。在支持JSON/数组的数据库中,建议使用专门的拆分函数以提高效率。
2026-02-09 16:12:26
601
原创 Kubectl 命令记录
kubectl autoscale deployment <deployment-name> --min=1 --max=5 --cpu-percent=80 管理自动扩展 (autoscale)kubectl debug -it <pod-name> --image=busybox --target=<container-name> 查看调试信息 (debug)kubectl create role my-role --verb=get --resource=pods 管理 RBAC 权限。
2026-01-30 15:25:23
387
原创 Java框架中的分层架构
作用:定义数据模型,与数据库表结构对应职责:封装业务对象的属性和基本操作特点:通常是简单的POJO类,包含属性、getter/setter方法示例:用户实体类User包含id、name、email等属性。
2026-01-23 16:01:50
276
原创 Spring 事务嵌套 @Transational
Spring事务嵌套异常分析及解决方案:当内部事务失败被标记为rollback-only时,会导致外层事务提交失败。解决方法包括自定义异常避免触发回滚、修改全局配置或手动设置回滚状态。事务传播行为有7种类型(如REQUIRED、NESTED等),隔离级别分4种(从READ_UNCOMMITTED到SERIALIZABLE)。使用@Transactional时需注意:仅适用于public方法,默认对RuntimeException回滚,可通过rollbackFor指定其他异常类型。
2026-01-16 14:13:38
677
原创 Tcp SSE Utils
服务器向客户端推送数据,客户端无法通过同一连接向服务器发送数据。WebSocket:需要较新的浏览器版本,但支持度也相当广泛。SSE:较老的浏览器可能不支持,但在现代浏览器中支持良好。WebSocket:需要处理连接管理、消息格式等更多细节。建立TCP连接,处理返回的数据,并转换为十六进制字符串。SSE:实现相对简单,服务器端只需按SSE格式输出数据。过程,从HTTP升级到WebSocket协议。WebSocket:使用独立的。,使用标准的HTTP连接。WebSocket:需要。,在握手后建立独立连接。
2026-01-09 13:37:30
381
原创 Head First设计模式(十四) 设计原则 其他的模式
使用桥接模式不只改变你的实现,也改变你的抽象。优点:用途和缺点:使用生成器模式来封装一个产品的构造过程,并允许按步骤构造优点:用途和缺点:当你要把一个处理请求的计划给予多于一个的对象时,使用责任链模式优点:用途和缺点:当某个类的一个实例可以用于提供许多虚拟实例时,使用蝇量模式优点:用途和缺点:使用解释器模式为语言建造解释器优点:用途和缺点:使用中介者模式来集中相关对象之间复杂的沟通和控制方式优点:用途和缺点:当你需要让对象返回之前的某个状态时,例如,你的用户请求“撤销”,使用备忘录模式优点:用途和缺点:当创
2025-12-31 16:22:43
720
原创 Head First设计模式(十三) 设计原则 现实世界中的模式
描述对象之间的关系,而且对象模式主要通过组合定义。对象模式中的关系通常在运行时创建,更加动态和有弹性。牵涉到对象实例化,这类模式都提供一种将客户从需要实例化的对象中解耦的方式。:描述业务,顾客和数据之间的交互,可以应用于如何高效决策并沟通决策等问题。就是你所追求的东西:一个通用的设计,所有人都可以用来解决目标和约束集。指在此上下文中你想要达到的目标,但也要考虑该上下文中发生的任何约束。类模式中的关系是在编译时建立的。:用来创建生气勃勃的建筑,城镇和城市的架构。:是创建系统级架构的模式。
2025-12-22 17:41:51
513
原创 Head First设计模式(十二) 设计原则 复合模式
模式通常被一起使用,并结合在同一个设计解决方案中。复合模式在一个解决方案中结合两个或多个模式,以解决一般的或重复发生的问题。 呈现模型,视图通常直接从模型中取得显示所需的状态和数据。 取得用户输入并解读其对模型的含义。 模型持有所有数据,状态和应用逻辑。模型对视图和控制器是无视的,虽然它提供了操纵和检索其状态的接口,并发送状态改变通知给观察者。
2025-12-19 16:44:44
205
原创 Head First设计模式(十一) 设计原则 代理模式
在对象创建前和创建时,虚拟代理也会扮演对象的替身。复杂隐藏代理用来隐藏一个类的复杂集合的复杂度,并控制访问。复杂隐藏代理和外观模式的区别是,代理控制访问,而外观模式只提供了另外的一组接口。调用代理的方法,会通过网络转发到远程来调用,结构返回给代理,再由代理将结果转给客户。写入时复制代理控制对象的复制,做法是延迟对象的复制,直到客户需要为止。这是虚拟代理的变体。智能引用代理当主题被引用时,提供额外的动作,例如计算一个对象被引用的次数。防火墙代理控制网络资源的访问,保护主题免于“坏”客户的侵害。
2025-12-08 14:59:36
435
原创 Head First设计模式(十) 设计原则 状态模式
context随时(把责任)委托给这些状态之一。随着时间的推移,当前状态不断在各个状态对象之间改变,以反映context的内部状态,因此,context的行为也。如果你使用继承定义了一个类的行为,那么你就和这个行为粘在一起了,很难改变。有了策略,你可以通过组合不同的对象改变行为。,通过把行为封装进状态对象,你可以简单地在context中改变状态对象来改变其行为。现在,虽然模式提供了弹性,可以在运行时改变策略对象,
2025-11-25 17:13:44
438
原创 Head First设计模式(九) 设计原则 迭代器和组合模式
而不是聚合上,这样就简化了聚合的接口和实现,让责任放在合适的地方。,这个接口包含一堆有用的方法,用来操纵一组对象。换句话说,在大多数情况下我们可以。这些类中的每一个都实现。使用组合结构,我们可以对。
2025-11-25 15:22:24
419
原创 Head First设计模式(七) 设计原则 适配器模式 外观模式
但这到底是什么意思?意思是,当你在设计一个系统时,对于任何对象,都要注意它所交互的类的数量,以及它和这些类如何交互。这个原则防止我们创建有大量的类在一起的设计,免得系统一部分的变化会连锁影响到其他部分。当你在许多类之间造成许多依赖时,你的系统就是一个易碎的系统,需要花费许多成本维护,而且复杂得难以让别人理解。
2025-11-24 14:20:23
343
原创 Head First设计模式(六) 设计原则 命令模式
当你不想返回一个有意义的对象时,以及你要把处理null的责任从客户移除时,空对象就很有用。例如,在我们的遥控器中,没有一个有意义的对象来分配给每个槽,因此我们提供一个NoCommand对象作为替身,在excute()方法被调用时,不做任何事情。这种记录日志的方式对遥控器来说没有意义,但是,有很多应用调用大型数据结构的动作,不能每一次出现变化都快速保存。有了宏命令,你可以动态地决定哪一个命令进入宏命令,因此,其实相当容易,不只是保持一个到上一个已执行命令的引用,而是保持一个之前命令的。
2025-11-20 15:03:32
1018
原创 Head First设计模式(三) 设计原则 装饰者模式
OK,我了解观察者,但是通常怎样将某件东西设计成。对扩展开发和对修改关闭?我怎么知道哪个区域的。
2025-11-19 14:35:30
375
原创 Head First设计模式(1.5)共享词汇
当高级开发人员使用设计模式时,初级开发人员也会被推动来学习设计模式,从而在你的组织建立一个模式用户的社群。当你使用模式和另一个开发人员或你的团队沟通时,你沟通的不只是模式名称,还有一整套模式所代表的。当你在描述中使用模式的时候,其他开发人员会很快地准确了解你大脑中的设计。对于设计模式有深入了解的团队,相互之间。使用模式谈论软件系统,能让你把讨论。,能更快速地向前走。
2025-11-19 10:13:20
194
原创 Head First设计模式(一) 设计原则 策略模式
换句话说,如果每次有新的需求,某方面的代码就要变,那么你就知道了,这个行为需要抽出来,与其他不变的代码分离。“接口”一词在这里有多个含义。接口是一个概念,也是Java的一个构造。更棒的是,字类型实例化不用再代码中硬编码(像new Dog()),而是。尽管这个概念很简单,它却是几乎每一个设计模式的基础。,这意味着类声明时不必知道实际的对象类型!我们可以重新描述“针对超类型编程”为“,这样,分配给这些变量的对象可以是。要点是通过针对超类型编程来利用。,这样,实际的运行时。
2025-11-14 11:22:47
245
原创 sql查询 笛卡尔积 子查询
子查询 `summary` 对 `table_b` 表按照 `column_a` 进行了 `GROUP BY` 操作。- `table_a` 与子查询结果 `summary` 通过 `column_a` 字段进行 `LEFT JOIN`- 使用 `SUM()` 聚合函数处理 `column_b` 和 `column_c` 字段。- 由于子查询中每个 `column_a` 值唯一,主表每条记录最多匹配一条子查询记录。- 子查询预先对 `table_b` 中重复的 `column_a` 值进行聚合。
2025-11-10 17:43:20
324
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅