自定义博客皮肤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

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

  • 博客(508)
  • 资源 (4)
  • 收藏
  • 关注

原创 如何精准做到合同到期后不再发生业务?还是邻家系统做得真好!

本文以“合同”为例,来探讨特定应用场景的程序设计方案。合同数据包含生效日 和 到期日。到了合同的到期日,合同涉及的业务就不能再做了。这是企业应用系统中常见的应用场景。即:业务发生时,要判断对应的合同是否有效合同到期时,要标记为“已到期”我们先定义合同的数据结构:名称类型说明contactIdint合同ideffectiveTimedate生效...

2025-02-27 22:59:00 399

原创 缓存过期的惰性删除(Lazy Deletion)策略

缓存过期 - 惰性删除(Lazy Deletion)是一种用于处理缓存过期的策略,它在读取缓存数据时才去判断缓存项是否过期,如果过期则将其删除并返回空值,而不是在缓存项过期的瞬间就立即进行删除操作。以下从原理、优缺点、适用场景、实现示例几个方面为你详细介绍:原理在采用惰性删除策略的缓存系统中,为每个缓存项设置了过期时间,但系统不会主动去监控这些缓存项是否过期。当客户端发起对某个缓存项的读取请...

2025-02-27 22:33:00 596

原创 一则修复数据的case,来看什么是*解决问题要彻底*

我司年久不修的商旅系统,今天突然遇到一个问题,程序执行的一个sql时出现数据类型转换异常。经排查,这是一个多表join的sql。select ... from t_enterprise ent join t_passenger psg on ent.ent_id = psg.ent_idwhere ...上面sql涉及的企业表t_enterprise里,ent_id是bigint。企...

2025-02-27 21:59:00 116

原创 Oops! 更改field的数据类型,影响到rabbitmq消费了...(有关于Java序列化)

程序中有如下entity类-LevyPaymentFlow@Data@TableName(value = "levy_payment_flow", autoResultMap = true)public class LevyPaymentFlow implements Serializable { private static final long serialVersionUID...

2025-02-20 15:20:00 480

原创 【研发笔记250214】do what you do

do what you do.开发团队里曾经一个中级开发水平的小伙因为KPI不达标而被优化。离职前小伙跟我说:“战哥,我觉得咱们这儿的氛围特别好!”,他接着解释:“你看昨天你觉得我把’联调时间‘命名成’joint_debug_time‘不合适,我立即就按你说的改了。你觉得我那个model定义不符合编码规范,我也立即就改了”。我只是点了点头。我其实想告诉他:我们需要的是更优秀的伙伴,能够开发...

2025-02-14 10:16:00 127

原创 【注意】sql语句where条件中的数据类型不一致,不仅存在性能问题,还会有数据准确性方面的bug......

隐式类型转换规则MySQL 在进行比较操作时,如果比较双方的数据类型不一致,通常会尝试将其中一个数据类型转换为另一个数据类型,以便进行比较。对于 select * from t_order where order_no = 1538808276987285507 ,当 order_no 为 varchar字符串类型的情况下,MySQL 会把 varchar 类型的 order_no 列的值转...

2025-02-10 22:32:00 415

原创 状态机幂等

何为状态幂等?先了解何为幂等。幂等大家应该都知道。在针对数据更新操作的幂等中,有一个实现方案是基于版本号的数据库乐观锁。在账户记账业务中,我们通常会使用这种方式。具体的姿势是下面2步(前提是表里有version):查询数据,然后执行业务逻辑处理执行完业务逻辑,在更新数据时,将数据中的version作为update语句的where条件有了这些知识,我们再来理解状态幂等,就比...

2025-01-16 21:36:00 202

原创 【研发笔记20251114】技术自信 & 不因纠结于细节而放弃本该做的事情

技术自信我们要拥有技术自信!我们许多同学,是缺乏技术自信的。我们习惯了代码有改动,就提测给测试组的同学来进行测试验证。虽说有测试组,但有些开发改动,我们开发者,凭借我们的专业能力(技术能力),可以自己确信没有问题,可以不用一律提测。例如:重命名一个底层工具类的public static方法,这会涉及到上层的项目跟着发生变更。对于这种重构来说,只要IDE可以compile通过,就没有必要...

2025-01-14 22:44:00 427

原创 来了,资金类交易业务(如电商交易、支付)中,经常提到的Money类!

资金类交易业务中 经常提到的Money类,大家了解一下。 了解了Money类,就会对资金类业务如电商交易、支付更了解。资金类业务中,金额如果处理得不好,带来的直接后果就是资金损失(资损风险)。对于研发经验不足的团队而言,经常会犯以下几种错误:不统一,存在各系统使用BigDecimal、double、long等数据类型来定义金额。手动对金额进行加、减、乘、除运算,单位(元与分)换算。...

2025-01-07 15:24:00 186

原创 浅谈分布式锁的常用实现

序言在单机时代,虽然不存在分布式锁,但也会面临资源互斥的情况,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就需要对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在 Java 中 synchronize/Lock 等。但是到了分布式系统的时代,这种线程之间的锁机制,就没作用了,系统可能...

2024-12-27 18:09:00 324

原创 【开发笔记041211】论“俯瞰”的重要性

2024.12初我司零工平台,为合作企业客户提供向税地服务商充值的功能,我们内部叫在线分账。我们的在线分账功能,包括充值、分账、提现、通知上账这几个步骤。具体来讲,①充值:充值指的是客户将资金转入到我们为客户开通的银行虚户里。一般有两种途径,一种是客户线下自行转入,一种是通过我司平台提供的B2B网银充值页面来操作。我们系统中这个的充值步骤,指的是后者。对于前者,我们系统会忽略此步骤。②分...

2024-12-18 10:57:00 318

原创 系统网站登录,如何合规传输用户登录密码?

对于系统登录页面来说,我们作为开发人员,应该没有陌生的吧。就像下面这样子。点击登录,调用/login 接口。来看下面截图中的 载荷(payload)数据,其中,密码 password 的值是明文。这里要说的是,用户登录密码属于用户隐私数据。首先,隐私数据属于敏感数据,不能明文传输;其次,系统server端不能直接触碰用户密码。也就是说,server端程序不能知道用户真实的登录密码。...

2024-12-17 21:42:00 379

原创 知识就是力量?

我司零工结算平台的系统架构模式是:前端的bosskg业务线-----→中台的RPC服务-----→后端的税地服务商系统。其中,bosskg提供了商户结算的HTTP接口,zhongtai-trans为bosskg等业务线提供付款交易服务。bosskg为每个商户提供一个商户id,商户侧系统通过HTTP调用bosskg提供的商户结算查询API,进行结算结果的查询。显然,bosskg的商户结算查询A...

2024-12-09 21:38:00 256

原创 开发一份API接口,需要注意这些,看你做到了几项

在实际工作中,我们需要经常跟外部三方系统打交道,可能会提供API接口给外部三方系统调用。API接口通常通过WebController来实现。如果设计一个优雅的API接口,能够满足安全性、稳定性、易维护等多方面需求呢?下面几项,看你做到了哪些。1. 数字签名为了防止API接口中的数据被篡改,我们需要对接口做签名。接口请求方将请求参数 + 时间戳 + 密钥拼接成一个字符串,然后通过md5...

2024-11-20 10:15:00 1291

原创 API接口的请求参数要更名,如何保持代码可读性?

接口参数名与程序里定义的model属性名,是完全一致的吗?本文通过案例,来讲述他们之间的联系与区别。1我们会补贴系统对外暴露的获取收银台地址的API,响应参数是一个url地址,这个url地址包含一个参数,就是我们的订单号。形如:http://***.com/#/pages/orderPay/index?orderNo=4d2b8e3f9a6c4e278b5e对应到程序里的spring...

2024-11-18 21:26:00 269

原创 发现一肉鸡接口,快来围攻啦~

系统登录页面,为防止明文传输用户密码,开发者做了安全加固。服务端暴露一个 loginEncryptKey 的API,用来根据登录名 username 获取 加密秘钥 encryptKey。 前端页面 获取到 encryptKey 后,在请求login登录接口时,会对 用户密码 进行加密传输。这个 loginEncryptKey 接口的服务端怎么写的呢?下面是完整代码,其中SysLoginMo...

2024-11-11 12:46:00 261

原创 【聚合系统业务场景设计】异步回调先于同步响应,怎么办?

以请求三方付款为例,通常是先发起付款请求,然后等待三方异步通知付款结果,或者我方主动调三方查询付款结果。见下方时序示意图。#我方聚合系统三方支付系统#1发起付款请求→接收付款请求,处理付款#2.1接收请求,变更付款状态←←付款完成,主动回调#2.2主动查单→接收查单请求,返回付款状态本文我们谈回调,所以让我们细化其中的#1、#2.1,下面时序示意...

2024-11-04 20:29:00 321

原创 【开发笔记241025】她趣介意时效超5分钟的付款交易。简单一招,应对!

她趣介意时效超5分钟的付款交易。简单一招,应对!我们平台近期入网一个新客户是她趣。她趣这个企业比较关注下发时效,他们那边系统做了告警,当存在超5分钟时效的交易,就会发告警。然后,那边的人就来质问。并声称,现在只是放了3%的量,就总出现下发慢的交易,如果10月份剩下的这5天里依然存在,就不打算用我们这个通道了。销售经理询问有什么办法,连销售老大老董都亲自来找我们技术老大了。近期系统交易量大,而...

2024-10-31 20:56:00 212

原创 Mybatisplus TableInfoHelper:获取entity对应的数据表字段列表

如题,调用 TableInfoHelper#getTableInfo(clazz) 这个工具方法可以得到entity类所对应的数据表的字段列表。import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;i...

2024-10-23 19:45:00 760

原创 发现问题就解决,往往是低效的方式。关于对象参数的赋值取值问题

走查我们zhongtai-task(中台的task服务,注意,这个task不是Spring/Java里的task,而是我司业务中的企业用工任务)代码时发现一个问题。先看下面的方法调用关系①TaskJobProxy#updateTaskStatus②TaskLevyReviewServiceImpl#levyAudit↘↙③TaskApplyS...

2024-10-22 09:28:00 463

原创 spring mybatis upgrade to mybatisplus 实战小记

我司压箱底儿的灵工服务商系统,系统框架是spring,持久层是mybatis。最近,将Mybatisplus集成到系统中,以提高开发效率。升级版本:mybatis版本3.2.2,升级到3.5.16Mybatisplus版本:3.5.3mybatis-spring版本1.2.0,升级到3.0.0pagehelper版本:5.3.1【注】mybatis官方提供了My...

2024-10-22 09:27:00 462

原创 定义明确的参数名/变量名--许多时候,授人以渔还真不如直接授人以鱼

定义明确的参数名/变量名,是软件开发中的一个重要准则。但是,总这么强调,起的作用似乎并不大。许多时候,授人以渔还真不如直接授人以鱼。所以,我们具象化,看一个栗子。下面是一个业务服务类UserTagService中的一个私有方法。这个方法控制业务逻辑并调用仓储类UserTagManager实现向user_tag表批量新增数据。 user_tag表是用户技能标签表,字段包括 用户id、用户名(u...

2024-10-22 09:27:00 305

原创 程序埋点(Event Tracking)

程序埋点(Event Tracking)是指在软件程序中嵌入记录用户行为或系统运行状态的代码,以便收集数据用于分析和监控。程序埋点通常用于分析用户行为、性能监控、问题排查、产品优化等目的。何时使用程序埋点:用户行为分析:了解用户在应用中的行为,例如点击量、页面访问次数等。性能监控:监控应用性能指标,如响应时间、资源利用率等。问题排查:记录应用中的异常情况,帮助定位和解决问题。产品优化...

2024-09-27 09:00:00 488

原创 系统里这个同时查冷热表的sql,动动手指,从12s降到3s

系统将交易数据按交易时间分为热表(最近3个月)和冷表(3个月前)。为保证用户体验,当企业门户端查询跨越冷热表时,尤其针对大客户,查询性能优化至关重要。以下是程序的SQL查询语句及其优化版本。系统里的交易数据按交易时间做了冷热表分离(热表仅存储最近3个月的交易数据,3个月前的交易数据自动结转至冷表),我们内部运营系统的交易查询功能进行了冷热数据分开查询。然后企业客户端呢,为了不影响用户体...

2024-09-26 21:18:00 449

原创 redis序列化数据时,如何包含clsss类型信息?

通过配置 `com.fasterxml.jackson.databind.ObjectMapper` 的 `enableDefaultTyping` 方法,可以使序列化后的 JSON 包含类信息。大家可能留意过,在redis里缓存的数据经常有下面两种形式。不难发现,这两者的区别就是后者包含了JavaObject类型信息。{"levyName":"test","levyCode"...

2024-09-24 20:11:00 510

原创 程序设计中,day 与 date 这2个单词的区别

先看下面几个例句感受一下:What day is it today? - It's Firday.What's the date today? - It's September 10th, Teacher's Day.It takes me 5 days to read the book.在不同的编程语言或数据库中,"day" 和 "date" 可能有不同的含义和用法。通常情况下,在处...

2024-09-23 20:18:00 584

原创 niubility!即使JavaBean没有默认无参构造器,Fastjson也可以反序列化。- - - - 阿里Fastjson反序列化源码分析...

niubility!即使JavaBean没有默认无参构造器,fastjson也可以反序列化。看下面示例代码,User这个JavaBean不包含默认无参构造器。执行这段代码不仅不会像Jackson那样抛出“没有无参构造器”的异常,还能正常反序列化。@Testpublic void testFastjsonCoDec() { String jsonString = JSON.toJSO...

2024-09-21 11:32:00 944

原创 别总是“系统错误,请稍后重试!”了,解决问题要彻底!

经过这些努力后,将显著提升系统的用户体验,同时,也便于系统的维护。

2024-09-10 20:25:09 1385

原创 【优秀程序设计】【good-practice】聚合系统如何实现通道侧回调的业务结果通知?...

本文介绍了公司短信平台聚合系统中,短信通道回调的业务处理方法。文章详细描述了如何通过统一回调接口与合理分层设计优化代码结构,避免烟囱式代码堆砌,提高扩展性和维护性。§. 短信平台(聚合系统)的回调-业务说明我司短信平台聚合了朗宇、漫道、华信等多家短信服务商通道,并输出统一的接口能力供业务系统使用。本文以短信平台(sms)为例。来说一下各短信通道回调sms的代码实现。注:下文提到的”短...

2024-09-07 23:26:00 911

原创 java中的enum-java中特殊的class;通过字节码来分析enum构成

§1先思考一个问题先思考一个问题:我们在enum类里,可以直接使用values()或valueOf(String name)方法,我们也没有在enum类里定义这两个方法,怎么就能直接使用呢?这里先按下不表。下面是正文。§2 enum类及其编译后的字节码在java编程中,我们经常会定义和使用枚举。简单的enum类及其字节码概览一个简单的 enum 类定义如下:pu...

2024-08-29 20:32:00 1123

原创 异常捕获点滴。【plus】对于apache-common ExceptionUtils,我来揭个短儿

本文通过示例展示了Java编程中异常处理的几种不当做法,包括无意义地捕获并重新抛出异常、改变异常堆栈信息以及私自“吞噬”异常等,并指出了这些做法可能带来的问题,如增加排障难度等。同时,文章推荐了在捕获异常后打印错误日志的良好习惯,并介绍了如何使用`try...finally`结构进行资源管理和程序状态记录。此外,还特别提到了Apache Commons Lang库中的`ExceptionUtils`工具类在记录异常堆栈信息方面的应用价值,但也对其某些行为提出了疑问,鼓励读者深入探究。

2024-08-04 17:49:50 767

原创 什么是RESTful API,如何使用它构建 web 应用程序

RESTful API 的主要原则是将应用程序的功能和数据组织成一组独立的资源,并使用统一的 URL 标识这些资源。————每个资源都有一个唯一的 URL(也称为端点),并通过一组固定的HTTP方法(如GET、POST、PUT、DELETE)来对资源进行不同的操作。实现API端点:在服务器端实现API端点,处理客户端的HTTP请求,并根据请求的URI和HTTP方法执行相应的操作。处理错误和安全性:处理错误情况,如无效的请求、授权失败等,并实施必要的安全措施,如身份验证、授权等。

2024-08-02 10:07:47 391

原创 解决非Spring Bean访问Spring Bean的问题:实用指南

在非SpringBean类里获取SpringBean,会是什么情况?case1下面这段代码中,PlainClass 表示一个普通Java类:public class PlainClass { public void foo1() { TheOtherBean bean = SpringContextUtils.getBean(TheOtherBean.cla...

2024-07-31 09:30:00 429

原创 【日常设计案例分享】通道对账

为避免不久的将来各业务线都重复竖烟囱,因此,我们打算将通道对账做成系统通用服务,以降低各业务线的开发成本。

2024-07-29 21:27:38 206

原创 局部变量,在使用时再定义

关于局部变量,适时定义可以提高代码可读性并规避不必要的bug。示例代码中,为了避免误解`checkTaskApplyDTO`仅设置了`userId`,在`existAppliedTask`方法内部,可以通过将`checkTaskApplyDTO`的定义与设置属性的操作靠近,以明确其所有属性值的来源。另外,本文还展示了一个因提前定义变量`ret`而导致的bug实例。如果将此变量的定义延迟至其实际使用前,则可以避免此类问题。适时定义变量有助于减少混淆,提高代码质量。

2024-07-29 20:58:11 318

原创 jackson序列化(jackson codec)

Jackson 是一个用于 Java 平台的开源 JSON 库,它提供了灵活且高效的方式来处理 JSON 数据的序列化(Java对象 → JSON字符串)和反序列化(JSON 字符串→ Java对象)。以下是 Jackson 的一些主要特点和功能:高性能:Jackson 通过使用基于流的处理模型和性能优化技术,提供了出色的性能。它支持快速的数据绑定和处理大型 JSON 数据。灵活性...

2024-07-23 21:39:00 1462

原创 系统运营支持-如何快速协助处理excel里的数据?来吧,教你一招

今天,一个销售MM发来一个excel文件,里面是客户的结算数据。需要我们技术协助,为excel里每一行的个人银行卡号,匹配出来所对应的银行机构编码和银行名称。下方是excel文件里其中一部分数据的截图。预期结果是:这要依托我们系统里的卡bin数据来完成。查询卡bin的sql是:select * from card_bin where card_bin=left('[银行卡号]', ca...

2024-07-19 09:00:00 276

原创 通过一个简单的案例,来谈谈代码的重构

上伪代码:func a(){ ... order = ***; payOrder = new v1{orderNo=order.orderNo, amt=order.amt, remark='结算资金下发'}; //通过order得到v1; pay(payOrder) ; ...}func b(){ ... order = ...

2024-07-12 11:23:00 296

原创 MySQL 中 SQL 查询语句的执行顺序

在 MySQL 中,SQL 查询的执行顺序通常按照以下顺序进行:FROM:从指定的表中选择数据。WHERE:对数据进行筛选,只选择满足条件的行。GROUP BY:按照指定的列对数据进行分组。SELECT:选择要返回的列或表达式。HAVING:对分组后的数据进行筛选,只选择满足条件的分组。UNION [ALL]ORDER BY:对结果进行排序。LIMIT:限制返回的行数(也称of...

2024-07-03 16:05:00 639

原创 乌龙!Hystrix命令执行超时!

我在使用hystrix编写一个模拟命令执行超时的demo。 1 import com.netflix.hystrix.*; 2 import lombok.extern.slf4j.Slf4j; 3 4 @Slf4j 5 public class HystrixTimeoutDemo { 6 7 static class TestCommand extends Hy...

2024-06-21 20:29:00 505 1

tomcat-redis-session-manager-1.2.jar

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

2021-07-23

jsonclassgenerator源码

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

2016-04-29

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

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

2013-11-08

MySql客户端连接工具SQLyog_Enterprise

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

2013-06-19

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

TA关注的人

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