自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gzyes

在技术的道路上,永远不缺乏充满激情、勇于创新的人们。

  • 博客(565)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 认识2个单词:goal/target —————— 为什么Maven是 “goal“ 而不是 “target“?

设计哲学Maven Goal:强调"要完成什么"(声明式)Ant Target:强调"要执行什么"(命令式)简单记忆看到goal→ 想到Maven看到target→ 想到Ant看到task→ 想到Gradle。

2026-03-05 22:04:00 260

原创 聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用

策略模式(Strategy Pattern)定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户端。通过策略模式,我们成功地将不同银行的支付逻辑解耦。工商银行:使用特定的签名算法和通信方式建设银行:使用特殊的加密方式和请求头农业银行:需要SSL双向认证创建实现实现该银行的特定逻辑自动被Spring扫描并注册到策略工厂这样的设计使得系统具备了良好的扩展性和维护性,完全符合开闭原则。

2026-03-01 01:21:00 499

原创 这样构建对象,太帅了!—— 阶梯式Builder模式与代码整洁之道

这种阶梯式建造者模式不仅仅是一种技术实现,更是一种设计哲学的体现。优秀的API设计应该引导用户正确使用,而不是依赖文档或记忆编译时检查比运行时检查更可靠代码应该表达业务意图,而不仅仅是技术实现它尊重读者的智慧:通过清晰的命名和结构,让代码不言自明它尊重维护者的时间:通过编译时检查和良好的封装,减少调试时间它尊重业务的变化:通过灵活的设计,优雅地应对需求变更它尊重团队的合作:通过一致的约定,降低沟通成本在《代码整洁之道》中,Robert C. Martin说:"整洁的代码只做好一件事。

2026-02-26 15:09:00 353

原创 灵活用工平台-连续劳务所得税-计算器-工具类,拿走不谢

本文主要讲新规下互联网平台从业人员的劳务报酬所得的计算方法。本文关键词:个人所得(个人收入);劳务报酬所得;互联网平台劳务报酬所得;个人所得税(本文简称“个税”);

2026-02-25 21:49:11 610

原创 注意!字段数据类型不匹配,这个sql会很慢

当SQL语句中参与比较运算的两个数据类型不一致时,MySQL会自动将它们转换为相同类型,这个过程称为隐式类型转换。场景转换方向索引是否可用性能影响字符串列 = 数字值数字→字符串否全表扫描,性能极差数字列 = 字符串值字符串→数字是正常使用索引字符串列 = 字符串值无转换是最佳性能数字列 = 数字值无转换是最佳性能黄金法则永远让查询值的类型与列定义的类型保持一致。

2026-02-13 16:14:00 378

原创 还在用ArrayList?用HashSet吧!--性能对比

/ 必须正确重写equals和hashCode@Override@Override// 使用users.add(new User(1L, "张三"));boolean exists = users.contains(new User(1L, "张三"));// true。

2026-02-10 20:24:00 344

原创 分页查询还在用create_time去做降序?

优化策略核心思想适用场景利用主键排序利用自增ID与时间的强相关性,避免新建索引。按时间顺序获取最新或最旧记录。游标分页记录位置而非页码,跳过OFFSET。无限滚动、只能顺序翻页的场景。延迟关联先通过索引定位主键,再回表,减少无效IO。深分页且排序字段有索引的场景。数据库优化乃至程序优化,转换思路有时比一味增加资源更有效。在面对性能问题时,先深入理解业务逻辑(如数据生成规律)和数据库原理(如索引机制),往往能找到更优雅、更高效的解决方案。

2026-02-04 23:01:00 259

原创 从 synchronized 到 ConcurrentHashMap:一个小小的并发控制策略升级优化,证明我还是初级程序员

从一种较重的“互斥锁”模式,升级为一种更轻量的“无锁编程”模式,这一次并发控制策略的升级CASE,也许证明我还停留在初级编程阶段。当然,此前的项目中也有使用 ConcurrentHashMap,只恨书到用时方恨少。下班后消停了,我又在琢磨并发调用的问题,因为我知道 synchronized 锁的粒度比较粗,会影响性能。代码完成后,考虑到Mybatisplus调用及java反射机制的性能损耗,我使用Map来缓存数据关系。其中,考虑到并发调用,我随即在方法上加了synchronized。

2026-02-04 22:04:00 281

原创 面试题整理

这个表的state=2代表成功,另一个表state=3代表成功,第三个表state=2表示失败,第三个表的state=SUCCESS表示成功。int与Integer-基本类型与包装类型的区别、使用场景, 如 数据表对应的实体类中,int类型字段对应的 属性 为什么是Integer?学生管理系统,同样是定义“学号”,有的叫 xuehao、有的叫 sno、有的叫 studentNo。-- 如何实现这个场景?以调银行出款为例,如何为各银行抽象共同的interface能力。数据的状态字段,如何存值?

2026-01-30 00:54:00 278

原创 面试题沟通整理

这个表的state=2代表成功,另一个表state=3代表成功,第三个表state=2表示失败,第三个表的state=SUCCESS表示成功。int与Integer-基本类型与包装类型的区别、使用场景, 如 数据表对应的实体类中,int类型字段对应的 属性 为什么是Integer?学生管理系统,同样是定义“学号”,有的叫 xuehao、有的叫 sno、有的叫 studentNo。-- 如何实现这个场景?以调银行出款为例,如何为各银行抽象共同的interface能力。数据的状态字段,如何存值?

2026-01-30 00:54:00 291

原创 【研发笔记20260120】值得记录:靠谱的程序员的回聘

【研发笔记20260120】

2026-01-21 11:18:00 406

原创 【研发笔记20260120】值得记录:靠谱程序员的回聘

【研发笔记20260120】

2026-01-21 11:18:00 270

原创 开发笔记:如何消除秘钥数据对RPC负荷、日志、系统安全的伤害?

这种从数据模型、接口设计到工具支持的全方位思考,正是构建安全、高性能系统的关键所在。彼时的2025年5月份,消费券系统开始立项研发,在程序设计阶段,我们要为系统的两个关键参与者——消费企业 与 核销企业——设计数据表结构,我主张为两者分别创建各自的表,至于两者的营业资质信息,则存储到一个共同的营业资质表。看来,通过这种数据隔离方式的数据结构设计,亦可以有效规避这些营业资质信息在上述两方面对系统产生的伤害。————设若。

2026-01-13 22:29:00 449

原创 研发笔记:如何消除长字符串的秘钥数据对RPC负荷、日志量、系统安全所带来的伤害?

这种从数据模型、接口设计到工具支持的全方位思考,正是构建安全、高性能系统的关键所在。彼时的2025年5月份,消费券系统开始立项研发,在程序设计阶段,我们要为系统的两个关键参与者——消费企业 与 核销企业——设计数据表结构,我主张为两者分别创建各自的表,至于两者的营业资质信息,则存储到一个共同的营业资质表。看来,通过这种数据隔离方式的数据结构设计,亦可以有效规避这些营业资质信息在上述两方面对系统产生的伤害。————设若。

2026-01-13 22:29:00 337

原创 未给entity的主属性赋值,Mybatisplus却抛出了type mismatch异常。——————分享一下Mybatisplus主键填充机制

今天在客户联调时,程序出现一个异常。通过分析异常堆栈及代码得知,在使用Mybatisplus的com.baomidou.mybatisplus.core.mapper.BaseMapper#insert保存LevyAccountRecharge数据时,当程序未给主键字段“orderNo”赋值时,就会抛出来这个异常。

2025-12-24 21:03:00 368

原创 在java中实现c#的int.TryParse方法

先看一个思维训练题 - - - -> 一个西瓜进价 50 元,卖了 70 元,老板收了 100 元假币。问:亏了多少钱?↑ 上面小题与本文无关。↓ 如下是本文正文。在.net(c#)的mscorlib程序集中,以System.Int32(int的实际类型)为例,有如下TryParse方法。TryParse方法是一种安全、高效的类型转换方式。它不会在转换失败时抛出异常,而是返回一个布尔值来指示转换是否成功,并通过 out参数返回转换结果。如下示例代码,显而易见,这个方法为我们做数据转换带来了极大便利。

2025-12-09 22:44:00 306

原创 灵活用工-连续劳务-计算器工具类,拿走不谢

本期应预扣预缴税额 =(累计收入 - 累计免税收入 - 累计费用 - 累计减除费用 - 累计其他扣除)× 预扣率 - 速算扣除数 - 累计减免税额 - 累计已预扣预缴税额。新规的核心变化之一,是优化了灵活用工人员个人所得税的预扣预缴方式,这对不同收入水平的从业者影响各异。理解了这个税率结构后,关键就在于如何计算出“应纳税所得额”和最终的“应纳税额”。“应纳税所得额”与“应纳税额”的区别:简单来说,​“应纳税所得额”是计算税款的。确定应纳税所得额后,就可以根据税率表计算最终需要缴纳的税款。

2025-11-12 22:38:00 1130 1

原创 灵活用工平台-连续劳务所得税-计算器-工具类,拿走不谢

本文关键词:个人所得(个人收入);劳务报酬所得;互联网平台劳务报酬所得;个人所得税(本文简称“个税”);本文主要讲新规下互联网平台从业人员的劳务报酬所得的计算方法。

2025-11-12 22:38:00 448 1

原创 Apollo场景建议配置指南:充分发挥分布式配置中心优势

建议在 Apollo 中配置的核心场景需要集中管理、动态调整、多环境隔离、权限管控或需要灰度发布的配置。这些场景能充分发挥 Apollo 的实时推送、统一管理、安全加密和审计追踪等优势,提升系统灵活性和可维护性,特别适合中大型分布式系统和企业级应用。Apollo 最擅长的是管理那些变化频繁、需要动态调整且对系统影响较大的配置,而非静态不变的数据。摘自公司内部WIKI知识库。

2025-11-06 23:06:00 808

原创 两行日志的时间差很大,有经验的开发者会分析为...

执行的sql语句是'select * from emax_enterprise where enterprise_id=1723705456764793 AND products IN('BossKG','SHENBIANYOUHUO') limit 1'①。观察第一个红框中的两行log,16:40:02.446 - 16:40:01.964 = 482ms, 这个时间程序在做什么?执行完sql后,又出现一个莫名的时间差,16:40:03.433 - 16:40:02.988 = 445ms。

2025-11-03 20:57:00 406

原创 程序日志优化:精准捕获与日志分级,践行数字低碳

海量的日志,尤其是冗长的异常堆栈,不仅占据大量存储空间,其写入过程也持续消耗着计算和电力资源。我们的系统日志优化,也正是遵循类似的“”并非遥不可及的口号,它同样体现在我们编写的每一行代码、每一次针对性的技术优化中。当数百次的异常日志从每天占用数MB空间锐减至几KB时,我们为减少数字世界的“碳足迹”做出了实实在在的努力。对所有的异常“一视同仁”,打印完整的堆栈轨迹,导致单次异常日志就可能超过100行。面对系统每日产生的海量日志,我们的一次小小技术优化,不仅是提升效率,更是一次实实在在的“

2025-10-22 20:47:00 442

原创 聚合系统设计-批付交易中的“双批次ID设计(or双批次号设计)” // 双批次ID设计:在复杂业务场景下构建清晰、可维护的应用系统

在实际应用中,双批次ID设计是一个解决特定复杂性的优雅方案。例如,当一次商户批量请求需要系统内部重试时,可能会生成新的batch_id,但商户用于追踪的保持不变。同时,在进行数据库分库分表时,一个设计良好的batch_id(如雪花算法ID)也能更好地支持数据分布。理解这个设计思想其实并不复杂。我们可以回想一个熟悉的场景:在单笔交易中,我们设计了系统订单号(用于内部流程追踪)和商户订单号(用于与商户侧业务交互)。这两个ID各司其职,共同保证了交易的清晰可溯。

2025-10-14 09:48:00 277

原创 经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡

依赖倒置原则(Dependency Inversion Principle,DIP)作为SOLID原则中的重要组成部分,其核心主张是高层模块不应依赖低层模块,两者都应依赖于抽象;抽象不应依赖细节,细节应该依赖抽象。在经典三层架构(表示层-业务逻辑层-数据访问层)中,这一原则的传统应用方式是通过在层与层之间引入接口层,实现所谓的"面向接口编程"而非"面向实现编程"。在典型实现中,表示层依赖于业务逻辑层提供的接口(如),而非具体的业务实现类。

2025-09-25 12:01:00 307

原创 还在人云亦云地使用“单接口实现”?---------经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡

依赖倒置原则(Dependency Inversion Principle,DIP)作为SOLID原则中的重要组成部分,其核心主张是高层模块不应依赖低层模块,两者都应依赖于抽象;抽象不应依赖细节,细节应该依赖抽象。在经典三层架构(表示层-业务逻辑层-数据访问层)中,这一原则的传统应用方式是通过在层与层之间引入接口层,实现所谓的"面向接口编程"而非"面向实现编程"。在典型实现中,表示层依赖于业务逻辑层提供的接口(如),而非具体的业务实现类。

2025-09-25 12:01:00 303

原创 靠谱的程序员推荐阅读----->《阿里Java开发手册》【强制】所有的覆写方法,必须加@Override注解

为所有覆写方法添加@Override注解,是一个低成本、高回报的最佳实践。它充分利用编译器的静态检查能力,在开发阶段早期就能发现因拼写错误或签名不匹配导致的问题,极大提升了代码的健壮性和可维护性,是团队协作和代码质量保障中非常重要的一环。

2025-09-24 12:48:00 349

原创 Clean Code/代码简洁性Good-Practice:使用统一异常捕获来取代错误处理

Getter// 将第4个参数 writableStackTrace 设置为false,规避使用自定义异常所带来的性能损耗这样改造的主要优势校验逻辑纯净了if语句只关心检查条件并抛出异常,职责单一。消除了重复代码:错误处理逻辑只在一处(catch块)实现,符合DRY原则。代码可读性提高:业务主线更加清晰,不会被大量的错误处理代码所淹没。通过统一异常处理和自定义异常机制,我们能够将参数校验这类重复且繁琐的代码转化为清晰、简洁且易于维护的形式。关键的优化步骤包括定义代表业务错误的自定义异常。

2025-09-18 23:28:00 259

原创 别滥用面向对象设计(OOD)中的继承:从一则简单的回调工具类的重构案例,来看OOP/OOD原则

/ 其他方法省略...重构前问题无法替代工具类作为父类没有提供可替换行为合法的OOP继承关系示例@Override// 支付特定逻辑。

2025-09-08 23:14:00 282

原创 妙哉!这个业务语义化的Builder模式,让对象构建变得更稳、更准、更快

/ AuditSaveBuildSteps.java - 独立的构建步骤接口定义/*此class不对package外暴露*/ interface AuditSaveBuildSteps {// 其他步骤接口...

2025-09-08 22:55:00 342

原创 【程序员英语】程序设计中,day 与 date 这2个单词的区别

总的来说,"day" 更倾向于表示时间单位(一天内的某一时刻,或一周中的某一天),而 "date" 更倾向于表示具体的日期。在不同的编程语言或数据库中,"day" 和 "date" 可能有不同的含义和用法。"by" 强调通过某种方式、手段或工具,表示经由某个地点或路径,或表示由某人或某物完成或引起。"with" 和 "by" 是两个常用的介词,它们在不同的语境中有不同的含义和用法。"with" 强调伴随、附带条件,表示具有某种特征或状态,或表示伴随某人或某物;junit包里的@RunWith注解。

2025-09-01 22:19:00 973

原创 程序设计原则 之——Fail-Fast

在定义RPC接口(如Dubbo或gRPC)时,也应在接口文档或Proto文件中明确参数的约束条件,让调用方和提供方达成共识。服务提供方在实现时,必须再次进行校验,因为调用方可能是不可信的。第一层:前端校验- 在浏览器或客户端进行初步过滤,提供即时用户体验。(可绕过,不可信)第二层:网关层校验- 在API网关(如Spring Cloud Gateway)进行统一的鉴权、限流和基本参数过滤(如必填字段检查)。第三层:Controller层校验核心防御层。使用JSR注解进行声明式的、全面的。

2025-09-01 21:52:00 1012

原创 【面向接口编程(IOP)典型场景】底层组件如何实现回调通知上层应用系统?

本文介绍了在账务插件开发中,如何通过“面向接口编程”实现异步转账完成后的回调通知机制。通过定义回调接口,账务组件在异步操作完成后可通知上层应用进行后续业务处理。文章提供了纯 Java 和 Spring 两种实现方式的代码示例,展示了接口在插件化架构中的重要作用,体现了面向接口编程在解耦与扩展方面的优势。我们在开发一个账务插件(sby-plugin-accounting),将账户的充、转、提等记账功能进行封装,实现复用。

2025-08-24 18:36:00 366

原创 一个表示金额的数字是 100000000L,这是多少米?

这段代码所体现的业务逻辑是,转账交易金额低于 100w 时,银行会实时结算;而超过 100w 时,会走快速转账方式,结算时效会下降。银行不同的结算通道,会直接影响到交易的时效。掌握了这一点,转账交易的业务层就可以调整相应的产品策略,以满足结算时效。有同学会说,不就是一个数字嘛,管它是多少呢?那么,从代码可读性的角度来看,怎么能让人一眼就能看出来。当然, 除了javadoc注释,你还有什么更好的实践?持这种想法的同学,估计这半辈子注定是一个码农。今天下午,我在CR时,注意到下面代码中的。

2025-08-12 16:14:00 399

原创 一个表示金额的数字是 100000000L,这是多少米(多少钱)?【代码可读性实践】

这段代码所体现的业务逻辑是,转账交易金额低于 100w 时,银行会实时结算;而超过 100w 时,会走快速转账方式,结算时效会下降。银行不同的结算通道,会直接影响到交易的时效。掌握了这一点,转账交易的业务层就可以调整相应的产品策略,以满足结算时效。有同学会说,不就是一个数字嘛,管它是多少呢?那么,从代码可读性的角度来看,怎么能让人一眼就能看出来。今天下午,我在CR时,注意到下面的银行付款程序中的。持这种想法的同学,估计这半辈子注定是一个码农。当然, 除此之外,你还有什么更好的实践?表示的是 1百万 呢?

2025-08-12 16:14:00 308

原创 【分享排雷经历】系统引入Apache-Tika产生的NoClassDefFoundError错误

我们是在lib库的 sby-component-dfs 包 中添加的Tika依赖。,发现在顶层maven依赖管理文件 spring-base.pom 中,的确显式定义了 commons-io 的版本号!系统的文件导入做安全控制,主要是通过判断文件的扩展名和类型,来限定用户导入文件的合法性,防止非法文件进入系统造成风险。而且,这不符合我们的系统开发规范————maven包依赖统一在顶层pom来管理。错误,并且经测试,这个版本的Tika可以满足我们对系统文件导入的安全控制。同样的Tika,为什么搬到。

2025-08-07 23:30:00 687

原创 聚合系统设计:利用泛型来重构三方服务的底层调用

针对这种三方服务对接的需求场景,我们需要把握好一个设计理念:将三方服务调用涉及的数据加密/签名、http通信、验签/数据解密等通用性功能封装在底层,使上层的接口处理方法专注于接口数据的逻辑处理。三方服务API对接层中,我们将数据加密/签名、http通信、验签/数据解密等通用性功能封装在底层,见下面的。通过使用泛型,让调用者可以指定期望返回的业务数据类型,将类型安全性提前至编译期,有效增强程序健壮性。非正常响应时,code是非200的错误码,data为空。注意,后面我们重点要谈针对这个方法的重构。

2025-07-28 09:25:00 358

原创 `System.out.println(Object)` 的打印行为详解

是 Java 中最常用的输出方法之一,它的行为等同于,因为System.out是一个 PrintStream 实例。方法会打印对象的其中,描述了对象转字符串的机制。继续来看方法,该方法返回一个类名@十六进制哈希码串。

2025-07-22 18:36:00 268

原创 javadoc can be as clear and readable as “@JsonUnwrapped“

【代码】javadoc can be as clear and readable as “@JsonUnwrapped“

2025-07-18 14:35:00 373

原创 使用Apollo配置中心,**静态字段通过`@Value`的setter方法可以实现热更新**

注解并提供了setter方法,Apollo在配置变更时会主动调用该setter方法,从而更新静态字段的值。也就是说,静态变量支持配置热更新吗?由后面的执行日志可以看出来,这3种使用。:在Apollo的扩展支持下,即使是静态字段,只要通过。“的值发生变更时,static变量。是一个静态field。问题:当apollo里的配置项”有如下springbean。的方式,都可以实现配置热更。(静态字段的setter)(实例字段的setter)(静态字段的setter)方法来进行配置参数赋值。

2025-07-11 22:12:00 537

原创 SpringBean的静态字段/静态属性(static的field),支持Apollo配置热更新吗?

因为这与field是否静态无关,而与 @Value修饰的setter方法有关。当配置值变更时,这个setter方法就会触发执行。我们知道,springbean的静态field可以通过显式的setter方法(实例方法)实现注入。也就是说,静态属性(static field)支持配置热更新吗?好奇的我,想看看apollo的相关日志。由后面的执行日志可以看出来,这3种使用。“的值发生变更时,static变量。是一个静态field。问题:当apollo里的配置项”的方式,都可以实现配置热更。

2025-07-11 22:12:00 340

原创 # 跨系统异步业务调用的第一法则::明确失败才失败

我司企服系统的企业客户实名认证,通过与三方服务商“ebaoquan”的API通信来实现。email地址email地址近期,我司系统频繁出现一个问题: 明明企业实名认证数据是正确的,系统里的认证状态却是“FAILED经分析系统代码 , 发现程序调用时, ebaoquan 返回的报文是“”,其中表示异常或错误,而不巧的是,我司程序将这个错误解读成了“认证失败”,将认证记录的认证状态设置成了“FAILED进一步分析程序日志,发现,在调用。

2025-06-27 15:00:00 340

使用sql server Profiler监听应用程序执行的sql

Sqlserver Profiler是DBA进行sql监控和调优时必用的一大利器。不过,对于开发人员来说,能够监控到程序运行时的sql,对于排障已经相当方便了。

2013-11-08

tomcat-redis-session-manager-1.2.jar

基于redis缓存的session共享使用的jar包。 tomcat集群环境下(通常是借助于nginx),利用这个session共享策略可以共享同一个session。从而保证客户端iip发生变化时(session相同),不会重新登录。

2021-07-23

MySql客户端连接工具SQLyog_Enterprise

mysql客户端连接工具, 简单易用, 推荐大家使用哦~

2013-06-19

jsonclassgenerator源码

json作为互联网上轻量便捷的数据传输格式,越来越受到重视。但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率。JSON C# Class Generator 能将json格式所表示的Javascript对象转化成强类型的C#实体类,来实现减少代码输入的效果。

2016-04-29

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

TA关注的人

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