- 博客(260)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之接口改造案例的设计思路(代理、适配器、工厂、模板方法)
文章目录1.背景概述1.1 controller层1.2 facade层2.设计思路2.1 UML图2.1.1 QueryListContext2.1.2 QueryListHandle2.1.3 QueryFlowListHandle2.1.4 QueryListHandlerFactory2.1.5 AbstractQueryListHandler2.1.6 AbstractQueryFlow...
2019-06-16 12:28:53
1651
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之工厂方法模式的几种实现方式
工厂方法适用于派生不同的产品类,而对于产品类则交由工厂类创建,对于客户端无需关注产品是如何创建的,把创建的细节委托给工厂统一处理。但是工厂方法从代码设计又有几种设计方法,我们切看几种方式实现的差异。1.正统工厂方法模式特征归纳:1、产品类继承抽象类或者实现共同的接口。2、工厂类实现接口,接口方法是产品子类共同的抽象类或接口。3、工厂类通过枚举控制输入类型,以返回对应类型的对象实例。...
2019-05-30 22:23:10
600
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之基于google guava和redis的一二级缓存设计实现
我们通常在接口QPS特别比较高的情况下,为了减少对数据库的频繁查询,会引入缓存,以提高接口查询性能。但是对于缓存,为了减少对Redis耦合依赖,以进一步减少网络调用,通常又会引入一级缓存,这样一二级缓存双保险可以避免缓存击穿而带来数据库QPS瓶颈而带来的灾难。而本文采用基于google guava(一级缓存)+redis(二级缓存)设计实现,同时为了后期扩展性一级可维护性,即所谓的“开闭“原则...
2019-05-18 16:36:17
2336
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之switch case重构案例精讲
目前系统应用中,有一个业务功能模块,是提供一个页面查询结果接口,通过参数控制以调用查询不同接口数据集,并对查询结果集做相应处理,封装并返回调用方。但是,该方法体使用了switch case控制不同业务场景,造成方法体行数较长,而每次新增业务又需要变动该方法,存在冗余的代码。鉴于此,通过分析业务逻辑,并进行抽象封装。1、案例再现1.1、原始的switch case 业务代码逻辑public...
2018-11-21 16:26:34
5685
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之金融产品中心之设计模式的应用案例
本文阐述如何运用设计模式在代码设计中的应用,通过案例说明介绍。本文涉及的业务需求场景有:计算引擎、资金方准入、产品规则准入、产品费用项重置。通过案例引用的设计模式包括:模板方法模式、责任链模式、策略模式、工厂方法模式、中介者模式、观察者模式。1、设计原则的应用意义2、揭秘计算引擎的设计理念目前金融产品的核心是面向车贷放款前车贷总金额的公式,因此其根本也就是围绕着车贷费用项的计算,这些...
2018-11-19 20:07:31
1471
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之一个榨汁机应用场景示例
文章目录1、原料定义抽象水果类:AbstractFruit具体水果类:Apple具体水果类:Banana2、机器定义榨汁接口:Juicing果汁类:Juice抽象榨汁机:AbstractJuicer通用榨汁机类:GeneralJuicer3、榨汁比例策略比例配置类:ScaleConfig榨汁策略上线文:ScaleContext抽象榨汁输出策略类:AbstractJuiceStrategy苹果原...
2018-10-05 18:25:35
1820
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【设计模式活用】之适配器、中介者、简单工厂、享元模式的示例应用
最近有一个需求,由于涉及调用第三方接口有所改变,而需求所涉及的应用(lyqc-cas)由于涉及一个基于暴露dubbo服务的应用(lyqc-data),而目前又不想再修改这个应用,只好在一个新应用(gps-provider)中提供基于Eureka服务注册。但是对于该需求,新提供的接口又不兼容老的代码调用,而又希望通过开关开启关闭,以防上线新接口有问题,可以进行降级。鉴于此,认真想了一下,通过设计模...
2018-10-02 22:25:20
332
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于oval注解与自定义aspect应用对接口DTO数据约束校验
我们在对外提供接口服务时,对于参数校验总会存在大量的if条件语句判断,代码冗余,本来代码看起来挺干净整洁的,但是恰巧看到这些大量的if判断语句代码,显得那么碍眼。因此,我们在开发的道路上,总会想到是否有更好地方法以解决这种碍眼的代码?鉴于我的实践道路上,我悟出了自己的一条光明之路,以分享给大家,那就是基于oval的entity注解+aspect实现。1、初识Ovaloval,是...
2018-09-11 18:24:36
1341
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于google aviator计算引擎的场景应用
Aviator是一个开源的Java表达式求值器,不仅支持四则运算、三元运算、逻辑运算,而且其强大的接口支持自定义扩展函数。鉴于此,金融产品重构优化团队在金融产品平台中,选择了这个google的计算引擎,为了扩展我们业务需求,我们自定义了一系列自定义函数,以支撑我们业务场景。1、简单地API调用示例第一步:我们的maven工程需要引入依赖<!-- 表达式解析引擎 -...
2018-09-11 18:23:22
3969
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 linux安装jdk1.8出现错误bash: export JAVA_HOME=/usr/local/java/jdk1.8.0_144: 没有那个文件或目录
昨天在公司一台物理机配置环境,安装jdk1.8 从oracle官网下载1.8 tar包,然后解压,并配置环境变量 但是 执行source /etc/profile遇到如下截图问题:bash: export JAVA_HOME=/usr/local/java/jdk1.8.0_144: 没有那个文件或目录-bash: export JAVA_BIN=/usr/local/java/jdk1.8.0
2017-09-13 12:09:13
36470
13
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于SpringMVC +前台页面基于bootstrap 的 echats+jquery.slider 堆积图
实现要点1、基于jquery.slider 动态设置series,数据基于前台动态渲染。2、legend的动态创建。效果图:JSP页面源码: APP统计 | 神州专车
2016-12-09 17:40:21
1206
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于SpringMVC +前台页面基于bootstrap 的 echats 柱形图
功能相关要点1、柱形图legend 可控 颜色。2、默认设置legend 选中状态。3、自定义柱形图上的tooltip。截图:JSP页面源码: APP统计 | 神州专车
2016-12-09 17:33:58
3315
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Nutz+jQuery esayUI Datagrid实现增删改查以及分页效果
本实例通过国内比较流行的MVC框架-Nutz,前台使用jquery EasyUI,其中表格使用的Datagrid实现数据员工管理,其中涉及增加、删除、修改、分页效果。maven管理依赖源码:https://gitee.com/suze/zms_mavenJar包管理源码:https://gitee.com/suze/zms_jars 本实例在开发中涉及的的问题有:1、如何共...
2014-05-12 20:33:59
9044
7
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 jQuery EasyUI+Nutz实现增删改查
说明:目前该项目已经更新到git上。基于maven请下载:http://git.oschina.net/suze/zms_maven基于传统jar包引入方式请下载:http://git.oschina.net/suze/zms_jars请在git主页下载附件zms.sql 安装数据库文件,基于mysql. 截图 1、JAVA代码 package o...
2014-04-26 15:47:33
4571
22
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 使用jQuery Uploadify借助Dorado平台实现批量上传文件动态显示实时上传文件状态
今晚为了完善一个系统比较重要的一个数据导入功能模块,加上晚上有大量的时间,充分施展自己的技能,实现了还算自己满意的一个【使用jQuery Uploadify借助Dorado平台实现批量上传文件动态显示实时上传文件状态】的功能。1、批量上传布局2、单个文件上传布局3、可以选择多个文件,可以设置选择的文件类型4、动态显
2013-11-25 22:50:27
3230
1
原创 Caused by: java.lang.VerifyError: Stack map does not match the one at exception handler 9
由于gradle依赖,springboot工程中spring-aop存在两个不同高低版本,导致应用程序idea本地部署没问题,docker jar包启动出现Caused by: java.lang.VerifyError: Stack map does not match the one at exception handler 9,通过固定springframework版本解决。
2023-07-31 14:07:05
786
原创 java.lang.ClassNotFoundException: sun.misc.BASE64Decoder
java.lang.ClassNotFoundException: sun.misc.BASE64Decoder
2023-07-27 12:02:00
2581
原创 异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。
今天应用服务启动式,出现一个异常`lineNumber: 1; columnNumber: 589; 元素内容必须由格式正确的字符数据或标记组成。`,经过一步步排查总算解决问题了。
2023-05-08 14:50:26
790
1
原创 原创|关于一次产品需求程序设计及优化的经历
由于一次需求变更,由于的业务流程不支持这种新的场景,这也意味着需要设计支持新场景的业务逻辑处理。但是又要考虑后期的扩展性,同时尽可能不影响原来的业务,需要分析利弊寻找一种技术设计方案来解决当前需要解决的问题。通过分析,勾勒出涉及的变动点,这些变动点如果在原有代码新增if else就会造成程序的可维护性很差,而且不利于后期场景复用,因此寻找一种策略+分发的处理机制,通过上下文封装场景,然后通过调度器来分发处理器完成处理,同时把稳定的能力下沉到能力层,跟业务场景有关的通过路由分发完成最终业务逻辑处理。
2023-02-18 12:19:40
464
原创 原创|对接三方服务商回调鉴权的程序代码设计
通过系统应用服务总会与三方服务商进行对接,既然有对接,就会有回调。但是此应用服务由于部署在公网访问,为了考虑系统安全系以及防止报文被篡改,这就意味着我们需要跟三方服务商进行鉴权技术方案设计。此文章,就是一个具体典型的案例,由于此应用服务有两个不同的场景,但是鉴权设计上又有不同差异之处,所以在总体程序设计上巧妙的满足场景的需求前提下,又能尽可能做到更好的扩展维护。
2022-12-02 21:09:43
1153
原创 原创|一个统计查询模块基于设计模式的抽象设计
我们经常会遇到形形色色的产品需求,在快速的迭代中,我们设计的代码会变得越来越臃肿。之所以会这样,来源于我们没有更好的抽象设计,仅仅是基于`Controller`、`Service`、`DAO`三层分层设计,我们把更多的业务逻辑代码通过一个个方法堆积在`Service`层。我相信大家心有体会,这个Service伴随着业务迭代会越来越多的代码。试想一下,我们应该怎么可以更好的抽象设计,来达到避免这种现象产生呢。
2022-11-30 21:14:11
783
原创 SpringCache @Cacheable keyGenerator
有时候我们想自定义@Cacheable 的key,由于自定义的key通过方法的参数无法给出,这时候就需要使用keyGenerator了。
2022-10-20 17:38:33
1406
原创 SpringBoot jar包resource文件内容读取
在springboot工程中,如何读取jar包中resource目录下文件,有所讲究,鉴于踩坑,因此需要记录。
2022-10-12 10:17:50
313
原创 jdk8 | Function<T,R>实践应用
自动JDK8诞生,基于stream api的程序编码成为程序员秀代码的平台。事实上,除了stream相关api外,提供的lambda表达式,更新精简了不少代码。然而,对于大多数开发者而言,灵活运用基于函数式编程依然窃取,倘若灵活使用jdk8的相关函数式编程,可以有效精简我们的冗余代码,使得我们的代码可以更灵活的复用。这边,今天来谈谈JDK8中的Function具体该如何更灵活的运用,相信通过这篇文章,你有所收获。.........
2022-08-18 16:08:21
512
原创 MacPro Java服务端研发 新手入门指导
文章目录一、导读二、认识系统1、启动台(Launchpad)2、访达(Finder)3、终端(Terminal)4、办公软件(Office)5、应用商店(App Store)三、开发软件1、JDK2、Maven3、git4、idea5、.ssh四、快捷键idea一、导读首先,第一点MacPro的操作系统跟Linux系统在命令上大致相同,因此如果掌握Linux相关命令的基础上,使用Mac系统会容易的多。此外,MacPro系统有GUI,因此安装相关程序跟Windows系统也很类似。二、认识系统1、启动台
2022-04-09 09:24:39
1595
原创 Spring同一个Service类非事务方法调用事务方法事务失效解决方案
今天看到线上异常,根据异常排查了相关落库存储的数据,然后进而排查相关业务Service中逻辑代码,事务方法中对A、B、C三张表调用其相关Service依次插入记录。但是B插入失败,A表插入记录并没有事务回滚。然后排查了一下业务代码逻辑,发现在一个Service中,一个非事务方法调用事务方法导致的事务并没有生效导致的。
2021-12-08 15:45:00
5129
3
原创 java.io.IOException: Broken pipe
今天排查一个线上问题,然后查看了error日志,发现了一系列java.io.IOException: Broken pipe异常,然后咨询了接口的调用方,发现网络请求连接超时时间为3秒,这时候由于server端建立的网络连接并没有完整的写完毕,而client端就直接关闭了http connection,就会出现此异常。文章目录场景OutputBuffer#realWriteBytes分析结论场景[http-nio-5000-exec-5] ERROR 2021-12-07 08:08:51.973.
2021-12-07 14:57:06
30164
原创 基于模板方法+协调者委托对现有冗余代码的改造案例
文章目录一、背景二、分析1、CustomerRelationService2、CustomerRelationServiceImpl三、重构1、UML设计2、BindContext3、AbstractBindHandler相关实现类CrzReleaseBindHandlerEscPaymentBindHandlerEscRefundBindHandlerEscReleaseBindHandler4、BindHandlerDispatcher5、CustomerRelationServiceImpl四、总结
2021-11-12 15:26:48
546
原创 基于Forest实践|如何更优雅的统一处理请求签名
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。本文基于Forest实践,来源于实际业务场景需求,诞生了这篇文章。通过这篇文章,你可以学习到如何更优雅的统一处理基于Forest三方接口请求响应报文存储,如果你读完这篇文章,相信你会有所收获!文章目录1、背景介绍2、实现方案MethodAnnotationL.
2021-11-08 18:00:27
1476
原创 基于Forest实践|如何统一对请求响应进行日志处理
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。本文基于Forest实践,来源于实际业务场景需求,诞生了本篇文章,通过本篇你可以学习到如何更优雅的统一处理请求签名,相信你会有所收获!文章目录1、背景介绍2、实现思路2.1、基于@Header增强代码样例方案总结2.2、基于Proxy委托代理代码样例方案总结.
2021-11-08 17:56:21
1632
原创 Forest源码探析
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。本篇通过分析其源代码,列出了相关重要组件类,并最终通过一个流程图,分析其整个编码实现,以分享给大家。最主要这个工程源代码,通过引入大量设计模式(模板方法、工厂、代理、策略等),使得代码组织地相当美感,整洁,有助于提高你的阅读兴趣,很次写了这篇文章留念,同时分享给.
2021-08-06 16:49:17
1423
原创 Maven deploy Return code is: 405, ReasonPhrase: Not Allowed
昨日在家里window电脑通过maven deploy 一个jar,出现Return code is: 405, ReasonPhrase: Not Allowed错误,没有解决。今日到公司,使用mac没有遇到这个问题,今日下班后,继续回到家解决window的电脑遇到的问题。排查历程无论通过idea自带的,还是通过maven命令都遇到同样的错误。截图如下:我的 maven setting.xml配置如下继续核对 代码工程 pom.xml 配置没有问题,无论百度,还是Bing查到的相关解.
2021-04-13 22:25:01
4788
1
转载 关于Redis数据过期策略
1、Redis中key的的过期时间通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除127.0.0.1:6379> setex s 20 1OK127.0.0.1:6379> ttl s(integer
2021-02-27 20:48:52
492
原创 致那些奋斗的青春岁月(上)
今年春节期间,无意中翻开QQ说说,阅读那些岁月工作生活笔录,往日的工作经历仿佛历历在目,如同昨日。【说说】对于我来说,意义颇大,它承载着我生活和工作轨迹,我从这些说说中寻找那些奋斗的青春岁月,最终截图留存。从时间的维度,透过这些工作历程,发现自己一直是一个对工作热爱,对工作沉醉的的Coder。在那些青春岁月中,加班成为一个永久的话题。正如一位同事所言"无论我到哪家公司,你依然都是苦逼的加班",事实上那些年,所待过的公司事实确认如此。下面的是我的公众号二维码图片,欢迎关注,或公众号搜索【秋夜无霜】。.
2021-02-18 17:06:14
283
原创 致那些奋斗的青春岁月(下)
今年春节期间,无意中翻开QQ说说,阅读那些岁月工作生活笔录,往日的工作经历仿佛历历在目,如同昨日。【说说】对于我来说,意义颇大,它承载着我生活和工作轨迹,我从这些说说中寻找那些奋斗的青春岁月,最终截图留存。这一篇就进入了J这家公司的工作片段,这家以传统型的行业公司,给我留下很深的印象。长期的上海驻地出差,从最初的新鲜,到最终的逃离。这些工作日志片段发生在2015年10月份之前,你很难想象期间将近两年,我北京的房子依然未退租,那是因为每次从上海回京,我依然可以有个微暖的家。沪闵路汉庭酒店,成为我在上.
2021-02-18 17:04:22
435
1
原创 关系图谱服务的技术方案设计
在二手车业务线,现阶段无法实现车辆、人、车商信息的在业务审核流程中的数据查重应用,因此业务方为了达成这一目标,基于数据采集和数据查询,应运而生了关系图谱服务。文章目录一、系统架构二、业务概述三、方案设计3.1、数据采集3.1.1、SourceInfoContext3.1.2、AbstractInfoHandler3.1.3、AbstractVehicleInfoHandler3.1.4、AbstractCarDealerInfoHandler3.1.5、AbstractPersonInfoHandle.
2021-01-08 19:04:39
406
3
原创 报警信息系统的前世今生
报警信息系统是司机系统研发团队微服务化的产物,它为司机业务涉及司机通知、警示牌、处罚单业务拆分奠定了基础。报警信息系统见证了专车业务快速发展以及司机研发团队的成长,因此我想围绕它做一篇技术研发回忆类文章。文章目录一、导读二、项目背景三、需求分析四、技术设计4.1、数据双写4.2、数据同步4.3、通知下发4.4、通知详情富文本编辑静态页面生成4.5、同步写入老库五、尾语一、导读报警信息系统(ucaralarminfo),最初于2015年年底开始搭建,最初是为一个司机通知的产品需求而诞生的。这个产品需.
2020-12-20 21:58:23
941
原创 车金融|我在M公司的那两年
回顾那段公司的工作经历,经过两年多时间的洗礼,我觉得最大的收获就是遇到一位好老板,得以器重与栽培。自委以重任后,带领金融产品团队进行了一系列的系统重构和改造优化工作,重新塑造了一系列车金融相关业务核心系统,从而从根本上改善原来的糟糕面貌,根除了一系列诟病和问题,为业务长期发展奠定坚实基础。温馨提示:全文共计4600余字,乃上班地铁途中码字编写,实属不易,感谢关注。起草于2020年11月16日,终稿于2020年12月5日。车金融|金融产品中心的前世今生车金融|GPS审核系统的前世今生车金融|基础.
2020-12-05 16:06:22
412
1
原创 车金融|金融产品规则引擎的前世今生(下篇)
金融产品费用规则相对于资金方维度和金融方案维度来讲,是金融产品系统中最小颗粒度单元,它为实现车金融产品运营多样化和差异化提供决策落地支撑,构成了金融产品金融方案试算的最核心部分,为支撑业务场景快速发展以及开展政策调整落地奠定基础。温馨提示:全文共计3200余字,乃上班地铁途中码字编写,实属不易,感谢关注。起草于2020年11月27日,终稿于2020年12月5日。车金融|金融产品中心的前世今生车金融|GPS审核系统的前世今生车金融|基础数据平台的前世今生车金融|合同中心系统的前世今生车金融|.
2020-12-05 14:32:11
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人