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

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

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

原创 【重构的哲学】这个方法调用,我们怎么重构?AI不一定能告诉你!

先上代码。public Result<RechargeResultVO> queryOrder(String orderNo) { JSONObject json = ... // 查询外部通道 RechargeResultVO rechargeResultVO = new RechargeResultVO(); rechargeResultVO.s...

2024-04-02 09:00:00 211

原创 福耀科技大学聘请新校长,致力于培养应用型人才!

这两天看到一则新闻:福耀科技大学聘请西安交大退休教授王树国为校长,为培养应用型人才夯实基础。福耀科技大学是国内呼声最高的民办高校之一,由福耀集团董事局主席曹德旺发起,以培养应用型人才为目标。王树国校长出身于哈工大,完成本硕博学历后又在这成为了教授、校长。在最艰苦的年代克服重重困难让更多人看到了哈工大的实力,也在西安交大排名屡屡下跌时,救其于水火。尤其是他的家国情怀,打动了一代又一代哈工大和西...

2024-03-27 20:19:00 264

原创 时区/时间戳

时区指地球上的一块区域使用的同一时间定义,以经度划分,每个时区横跨15经度,总共24个时区,东西各12个时区。格林威治时间(GMT)格林威治时间(Greenwich Mean Time,缩写为GMT)是以英国伦敦当地时间的标准,用作全球标准时间的参考基准。上述说的24个时区,分别以 GMT-12 到 GMT+12 来表示。 如果北京时间可表示为 GMT+8。java中new Date(...

2024-03-22 13:42:00 390

原创 数据状态中的“待Xx”如何命名?

先看一组数据状态↓红包发放状态:待领取支付单状态: 待支付订单状态:待发货Bosskg订单核验状态:待核验这些“待Xxx”的状态,我们在开发时如何命名呢?用TO_Xxx 还是用 UNXxx?基本释义:To表示to do sth,等待做某事Un表示未做/不做。例如:to pay表示“等待支付”, unpaid表示“未支付”从构词难度上来阐述,To直接跟动词原形。而...

2024-03-20 21:17:00 224

原创 从“[微信支付-现金红包]开发文档”来看接口文档和系统设计 --【附】微信支付产品(部分)...

【微信支付】现金红包开发者文档 : https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1文档特色1 红包是什么? - - 在“产品说明”里图文并茂地有介绍。数据词典-命名方面的瑕疵红包 的命名:发放红包接口名“sendredpack”里,“红包”被命名为“redpack”。而在“查询红包记录”...

2024-02-29 20:07:00 236

原创 接口设计的考究-会补贴用户端-应用跳转的网页授权

【业务场景】我司会补贴系统的员工移动端,点击商家应用图标,会跳转到外部的商家应用。UI原型如下图。技术实现方面,因为涉及到跨系统交互,并且要携带登陆用户信息,这里呢,网页跳转到外部应用需要一个网页授权码。那么,前端需要调用后端一个接口。【初始技术方案】后端提供的这个接口是——获取网页授权码请求示例:/user/auth_code?appId=xxx返回值示例: { "code":...

2024-02-29 20:06:00 269

原创 「好文档自己会说话」春节倒休计划表

2024年春节临近,要过年了,中国的传统大年,一年到头,不管大家身在何处,总要回去跟家人一起团圆几天。工作方面呢,按照历年惯例,得提前收集部门内每个人在假期前后的倒休安排。一个组长创建了在线表格,发到TL沟通小组里,供大家填写。很快,另一个组长也创建了在线表格,并建议大家使用这个。比较两个表格,后者更易于大家去填写,对吧?...

2024-02-03 18:09:00 146

原创 再申明一次:面向对象编程不是面向人编程

这个方法就我自己调用,所以就没封装...这个RPC方法只有我自己写的代码会调用,日期参数就用String了。因为我知道我会传“yyyy-MM-dd”格式的日期。为了使用spring事务,我就把这两个插入数据的操作放到一个方法里了。这个方法名还好吧,其他地方不调用。这个返回值用Map没关系,我在调用的地方知道怎么取值。屁话!↓↓↓一万只草尼????从心里面奔腾而过~~~类/方法的...

2024-01-31 20:33:00 299

原创 不能坐视了!Oracle数据库varchar2字段扩容,每月总有那么一两次。----- 优秀的程序应总是尽可能地规避问题...

Oracle数据库varchar2字段扩容-始末今天,有后端小伙伴提了个sql工单。对我司服务商系统Oracle数据库的一个mer_name字段扩容。alter table T_MER_SETTLE modify mer_name VARCHAR2(100)审批前,我查了一下当前这个mer_name字段的长度是 VARCHAR2(64)。基于对我司客户名称的长度通常不超过64字的了解...

2024-01-29 20:55:00 552

原创 在java中statement 和 expression 有什么区别?

园子里有一个关于lambda表达式的提问。 本文就此说一下java中的statement 和 expression。statement-语句expression-表达式表达式(expression)是可以作为函数参数的,如:10*a; 语句(statement):不能作为函数参数,如:print(a)。new test();是一条语句(statement)。i+1是一个表达式(expre...

2024-01-17 19:22:00 388

原创 从"他急匆匆地跑来了“来谈一下数据表字段命名

新项目中有个优惠券的功能,优惠券来源于合作通道系统,我们系统中存储优惠券,会基于使用情况对企业客户进行资金结算。设计的优惠券表,部分字段见下方:CREATE TABLE `coupon_batch` ( `batch_id` bigint(20) DEFAULT NULL COMMENT '批次Id', `service_id` bigint(20) NOT NULL CO...

2024-01-02 20:15:00 350

原创 关于异步处理,请分清真正需要异步处理的逻辑

我们的税地系统其中一次需求迭代的开发内容:每次调用银行接口查询订单支付状态时,如果对方返回404-订单不存在,并且如果订单是在5min前创建的,那么,就触发重新下发,要求每笔订单只可重发一次。展示代码前,下面用类时序图来直观介绍一下这3个类以及实现脉络。下面贴程序实现代码(含伪代码)。/** * 银行查单服务类 */@Servicepublic class BankOrder...

2023-12-25 21:34:00 394

原创 发现sql慢就加索引?非也!

【慢Sql,耗时≈5s】在Archery平台发现近期的一个慢sql:SELECT * FROM emax_order_detail WHERE import_order_no = ?经测试,的确是慢。SELECT * FROM emax_order_detail WHERE import_order_no = '1738120234847571968' 。尝试加上limit 1,依然超过...

2023-12-25 21:03:00 399

原创 mysql执行计划之Extra列-Using where

顾名思义, Extra 列是用来说明一些额外信息的, 我们可以通过这些额外信息来更准确的理解 MySQL 到底将如何执行给定的查询语句。 MySQL 提供的额外信息很多。这里单说 Using where。Using where 只是表示 MySQL 使用 where 子句中的条件对记录进行了过滤。与是否全表扫描或读取了索引文件没有关系, 网上有不少文章把Using where 与是否读取索引进...

2023-12-25 19:34:00 373

原创 rabbitmq listener注解@RabbitListener里的queues是个数组,你用了吗?

靠谱的程序员具有注重实效的偏执,对于重复多行的代码,总会想办法消除重复。我们zhongtai-channel里在调用服务商接口发起签约前,使用了mq进行异步处理。即:zhongtai-channel签约RPCAPI接收到上游的请求后,先同步持久化保存签约请求流水,然后将签约数据放入rabbitmq消息队列,等待程序里的消费者方法消费消息队列中的消息,调用服务商对接Service发起HTTP...

2023-12-21 09:00:00 171

原创 这儿有一个基于redis生成订单流水号的工具,拿走不谢!

1 import cn.hutool.core.util.RandomUtil; 2 import cn.hutool.core.util.StrUtil; 3 import lombok.extern.slf4j.Slf4j; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org....

2023-12-19 19:57:00 59

原创 apache HttpClient异常-ProtocolException: Target host is not specified

昨夜,甘肃临夏州积石山县发生6.2级地震,影响到甘肃、青海地区。截至目前,已有100多人遇难。百度了一下当地天气,还挺冷,夜间温度低到-15℃。时间就是生命,祈祷难民尽快得到救援!分享今天解决的一个生产问题告警。如下HTTP工具类中的httpClientPost方法使用apache的HttpClient(maven坐标:org.apache.httpcomponents:httpclie...

2023-12-19 19:27:00 335

原创 企业开发中,你“会说话”吗?

.outer-section { margin-top: 25px }.middle-section { padding-top: 3px; border-top: 2px solid rgba(241, 86, 66, 1); border-right: 0 solid rgba(241, 86, 66, 1); border-bottom: 0 solid rgba(241, 86, 66...

2023-12-09 22:09:00 33

原创 系统里的资金交易如何与银行通道对账?我们这样设计

以系统里的出金交易为例, 与银行对账不外乎做两件事:①T+1日拉取银行账单,保存银行账单交易流水;②银行账单交易流水与本系统里的通道交易流水比对,记录并处理差异。先统一词典T日:T日指交易日。银行系统在T+1日生成T日交易的账单,因此,对账发生在T+1日账单:bill对账:bill check银行账单:bank bill batch对账批次:bill check batch明细:d...

2023-12-09 21:42:00 42

原创 重构这段烂代码,差点把我整凌乱了...

????注重实效,不要靠巧合编程。????在构造一个对象的过程中,下文尽量不要依据对象已经set了值的field做判断然后继续给对象其他field赋值,而应该基于原有对象的field去判断。先看这段代码,烂不烂,你可以品一下,多半味道不怎么好。 1 try { 2 final ResponseDTO responseDTO = bindCardService.bindCard(bin...

2023-11-30 09:00:00 61

原创 乌龙!mybatis-plus的@TableId注解不生效,原来竟是因为它!

【先来个小测试】大家觉得下面的sql返回什么?select * from table1 where null=1答案:无返回。因为null=1是个false的表达式。这就像我们写where 1=2一样。【↓↓正文开始↓↓】本次迭代的需求开发完成,将开发分支merge到test分支,部署测试环境提测后,QA提了一个bug,附下面log截图。通过logtrace排查程序,定位到如下...

2023-11-28 20:06:00 360

原创 【不靠谱程序员】登录页,用户输了短信验证码却提示:用户不存在

【preface】用户输入手机号获取验证码时,是先校验手机号是否存在,还是先发验证码?靠谱的程序员一定有答案。用户在我们小程序端用短验(手机短信验证码)的方式登录。登录的逻辑实现,我用下面的时序图表示给你看。结果呢,领导review后,说在页面请求后端API获取手机验证码的时候,应该先校验手机号在系统是否存在,存在才给手机号发送验证码短信,不存在则直接给出友好提示,中止登录。我按我上...

2023-11-24 11:03:00 69

原创 设计文档中的流程图,靠得住吗?

先别被标题误解。流程图、系统调用关系图、状态图、业务流程图、业务时序图,还有思维导图、架构部署图、用例图、类图,等等,这些是我们的软件开发设计文档的不可或缺的组成部分。这些设计图能够以直观、清晰的方式传达设计意图,使得开发人员、测试人员和利益相关者更容易理解和沟通系统的设计和实现。一个只有文字排版而缺乏设计图的文档可能会显得呆板和难以理解。文字可以提供详细的描述和解释,但对于复杂的系统设计和结构...

2023-11-16 09:00:00 40

原创 【不靠谱程序员】不靠谱程序员这样做幂等控制

批处理定时任务的实现方式,不外乎下面这样。当然,在数据量较大时,也会采用分页获取数据分批处理。批处理程序通常包含大批量数据的处理,这样的程序执行时间一般也比较长。anyway,对于这样的程序,技术上做好防重复请求是一项基本要求。下面rest接口用来暴露给一个定时调度程序来调用。这个接口的业务逻辑是将系统里待付款的交易发往银行。做过支付的同学应该明白,这种程序是必须要做好重复处理的。当然,...

2023-11-02 21:22:00 37

原创 【不靠谱程序员】不靠谱程序员这样做幂等控制,你接受吗?

批处理定时任务的实现方式,不外乎下面这样。当然,在数据量较大时,也会采用分页获取数据分批处理。批处理程序通常包含大批量数据的处理,这样的程序执行时间一般也比较长。anyway,对于这样的程序,技术上做好防重复请求是一项基本要求。下面rest接口用来暴露给一个定时调度程序来调用。这个接口的业务逻辑是将系统里待付款的交易发往银行。做过支付的同学应该明白,这种程序是必须要做好防重控制的。当然,...

2023-11-02 21:22:00 40

原创 当下AIGC时代的软件开发模式——水母模式(水母式开发模式)

今天了解到一种新的软件开发模式————水母模式。我们知道,软件开发的流程通常包括需求分析、软件设计、编码、测试、部署、维护这几个阶段。软件开发模式,指的是在软件开发过程中使用的一种组织和管理开发活动的模式和方法。它们提供了一套指导原则、最佳实践,帮助开发团队有效地开展工作,提高开发效率和质量。水母模式是软件开发结合当下AIGC时代的产物。重视需求分析和软件设计,这些工作更多依赖于我们人脑的思...

2023-11-01 21:15:00 132

原创 MYSQL批量插入并发场景下的DEADLOCK

一、背景公元2023-10-12(周四)上午,组内的亚梅反馈,用户生成标签报死锁异常二、排查异常日志查到当时报错的日志具体异常信息如下server-provider-info-2023-10-12.0.log:2023-10-12 09:40:50.593 [TID:bf623bded189486cbb0b6a64d81b64b4.357.16970748504097047...

2023-10-26 20:10:00 476

原创 2023-8-11-OOM-爱才tomcat-web-JVM:生命只是大梦一场

p img { border: 1px solid rgba(51, 153, 204, 1) }h3 { margin: 30px 0 10px; padding: 10px 20px 10px 16px; border-left: 4px solid rgba(51, 153, 204, 1); border-bottom: 1px solid rgba(51, 153, 204, 1);...

2023-10-26 20:07:00 59

原创 SB了!给注解的数组属性赋值,我竟然...

近期在对项目中的结算代码进行优化,这里,我们先设定结算表仓储类名称是SettlementMapper。实现途径是将SettlementMapper从现有package移出去,并且让mybatis-plus追加扫描SettlementMapper所在的package。项目中要使用这个MapperScan注解来决定扫描Mapper类所在的包。mybatis-plus工具包的MapperScan注解见如下定义。于是,修改MybatisPlusConfig中MapperScan的value值。

2023-10-24 22:24:51 118

原创 IPSF—IpsfEnum 为何物?我为什么推荐IpsfEnum

本文摘自公司内部WIKI知识库先看IPSF这4个字母分别代表什么?Init-Processing-Success-FailIpsfEnum就好理解了。enum IpsfEnum { I, P, S, F }当一条数据的流转在上面4个状态中时,可以考虑直接用这个枚举。为什么?曾经在一个周末,因运营需要,我和王杰同学要修改 levy_payment_flow表的一条流水的状态为失败。王杰编...

2023-10-19 09:00:00 44

原创 【不靠谱程序员】订单付款成功后,不是先改状态,而是...

做过税地系统或三方支付或对接过银行支付通道的朋友应该清楚,我们的支付系统在调用银行通道获取到付款单的终态后,涉及到记账、结算、通知下游商户等业务逻辑。这其中,有一项默认的操作是,更新付款单的状态。并且,应该先变更状态,变更状态成功后,然后再去执行其他业务逻辑。我们在参与一次代码评审时,就发现了不靠谱的事情。开发人员先发起异步记账,然后才是更新付款单状态。 /** * 订单...

2023-10-18 20:37:00 44

原创 程序实现--对外接口可不仅仅是“给大佬递餐”,前置工作还是要做滴

我们来看一个案例。前端页面上,用户在订单详情页确认完信息后,点击“确认支付”,发起余额支付。这里,我们做如下3项假定。1)后台程序暴露的“支付”Rest接口名为 order/pay。2)后台程序对于“支付”的处理逻辑,我们简化成下面的业务流程。3)后台程序是微服务结构,包括提供RestAPI接口的springmvc服务和后面的订单服务、账户服务。那么,下面两种实现,你选择哪一种?...

2023-10-15 18:27:00 41

原创 将博客搬至CSDN

RT

2023-10-08 14:31:00 36

原创 【不靠谱程序员】接收到回调通知的异步处理

代码中在使用JUC、消息队列、回调函数、消息中间件等提高程序性能的方式进行异步处理时,一定要分清主次,哪些逻辑必须在主线程执行,哪些逻辑可以异步处理。

2023-10-01 18:19:03 65

原创 告别equals,这些姿势助你比较两个对象

我们复杂的企业级应用,总不可避免的会涉及到代码的重构,而一旦重构数据的数据类型时,equals的弊端就显而易见了,因为equals在编译期无法检测类型的一致性。

2023-10-01 17:43:03 37

原创 其实,我并不鼓励使用Object#equals

我们复杂的企业级应用,总不可避免的会涉及到代码的重构,而一旦重构数据的数据类型时,equals的弊端就显而易见了

2023-10-01 16:38:26 53

原创 生活小文《一夜》

我下意识里打开手机里的百度地图,突然精神起来,回北京还有一趟21:10的末班公交,811路,正好有“燕郊火车站口”这一站,坏消息是那几个红色告警文字:即将错过末班车。在站前街的红绿灯路口,我看到在等红灯的811,上天保佑我先赶到对面的公交站。火车站安检人员冷冰冰的告诉我“过点儿了,停检了,进去也没用”,我望了望检票口,已经没有检票人员的身影,闸机内侧的大门紧闭。我试图求助安检人员,表达我是从北京大老远赶过来的,能否行个方便让我进入站台,坐在沙发椅上看手机的安保男子,头也不抬,粗犷地甩一句“开不了”。

2023-09-24 19:45:00 34

原创 系统熵增是怎么产生的?————数据对象模型里添加属性欠思考

熵增定律指出,在没有外力作用下的封闭系统中,熵(或混乱度)总是增加的。就是说,任何封闭系统中、在没有外力作用下,都会陷入混乱。屋子不收拾会变乱;人不自律会懒散;生活不规律或无节制,人就会出现健康问题;同样,对于我们的信息系统,一旦缺乏规范和管控,就会越来越难于迭代和维护。这些例子都展示了在缺乏积极干预的情况下,事物往往会趋向于混乱和无序。因此,对于个人和社会来说,重要的是意识到这种趋势,...

2023-09-09 23:20:00 30

原创 《业务校验》

§ 业务校验,要着眼于整体流程——不做冗余校验我司是共享经济体制下的灵活用工企服平台。今天评审代码过程中,我们注意到一个实现细节,是在交付单完成后给用户结算时,判断了用户是否已签约,用户是否领取了任务,用户是否已经注销,当上面3个条件都满足后,才发起结算。先大致描述一下业务流程链:(1/7)企业客户发起灵工需求,生成任务单→(2/7)平台审核任务单,匹配灵工服务商→(3/7)企业支付完成任...

2023-09-02 10:51:00 31

原创 《因噎废食》

因噎废食,是指因为吃饭噎住过,就索性不吃饭了。在日常开发过程中,我们会遇到这样的情况:开发人员在使用工程内部或开源项目的组件或工具时遇到问题,他们往往不是首先反思自己的使用方式是否正确,而是直接选择放弃这个组件或工具。举例来说:当使用 Redis 缓存对象时,如果对象类没有实现 Serializable 接口以实现序列化,就会遇到序列化异常。此时,开发人员发现问题后,不是去解决这个问题,...

2023-09-02 10:43:00 21

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关注的人

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