macrozheng

其他

SpringBoot + 规则引擎 Drools,强!

前言现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而且这些规则可能随时发生变化,甚至增加新的规则。面对这个需求,你该怎么实现呢?难道是计算规则一变,就要修改业务代码,重新测试,上线吗。其实,我们可以通过规则引擎来实现,Drools
2023年5月10日
其他

面试官:断网了,还能 ping 通 127.0.0.1 吗?

呢?这能说明你不用交网费就能上网吗?不能。首先我们需要进入基础科普环节。不懂的同学看了就懂了,懂的看了就当查漏补缺吧。什么是127.0.0.1首先,这是个
2023年5月9日
其他

技术总监:谁再不按规范写代码,以后就不用来了!

主键/唯一索引冲突状态机幂等抽取防重表token令牌悲观锁乐观锁分布式锁幂等要求有个唯一标记,比如数据库防重表的一个业务唯一键。同时强调多次请求和一次请求所产生影响是一样的。16.
2023年5月6日
其他

公司新入职一位大佬,把SpringBoot项目启动时间从7分钟降到了40秒!

上有许多注解,重点关注下@Import({CacheConfigurationImportSelector.class}),CacheConfigurationImportSelector
2023年5月5日
其他

和 if else说再见,SpringBoot 这样做参数校验才足够优雅!

注入攻击,我相信,很多时候并不是我们不想添加,而是没有统一方便的方式,让我们快速的添加实现参数校验的功能。世界上大多数碰到的困难,大多已经有了解决方案,特别是开发生态非常完整的java来说,早在
2023年5月4日
其他

用一个月重构了同事写的烂代码,我总结了8条重写烂代码的经验!

代码技巧?Controller层代码就该这么写,简洁又优雅!看了我常用的接口文档定义技巧,同事也开始悄悄模仿了...简化
2023年4月28日
其他

告警:线上慎用 ThreadLocal,坑的差点被开了!

前些日子我们线上出现了一个比较严重的故障,这个故障是多线程使用不当引起的,挺有代表性的,所以分享给大家,希望能帮大家避坑。问题简述先简单介绍一下问题产生的背景,我们有个返利业务,其中有个搜索场景,这个场景是用户在
2023年4月27日
其他

你见过哪些目瞪口呆的 Java 代码技巧?

userService.addUser(user);这两段代码都没有暴露实现,都是在讲如何在同一个方法中,做一组相同层次的语义操作,而不是暴露具体的实现。如上所述,是一种重构方式,读者可以参考
2023年4月26日
其他

Controller层代码就该这么写,简洁又优雅!

Controller,相信大家都不陌生,它可以很方便地对外提供数据接口。它的定位,我认为是「不可或缺的配角」,说它不可或缺是因为无论是传统的三层架构还是现在的COLA架构,Controller
2023年4月25日
其他

看了我常用的接口文档定义技巧,同事也开始悄悄模仿了...

前言我们做后端开发的,经常需要定义接口文档。最近在做接口文档评审的时候,发现一个小伙伴定义的出参是个枚举值,但是接口文档没有给出对应具体的枚举值。其实,如何写好接口文档,真的很重要。今天给你带来接口文档设计的12个注意点~1.
2023年4月24日
其他

简化 Hello World:Java 新写法要来了!!

语言非常适合开发和维护大型复杂应用程序,但学校在教编程时往往会从变量、函数和子程序等基本的小型编程概念开始,在这个阶段,往往不需要类、包和模块的大型编程概念。但现在的
2023年4月21日
其他

从120s到2.5s!看看人家的MyBatis批量插入数据优化,那叫一个优雅!

种主流API网关技术选型,yyds!优雅的接口防刷处理方案!重磅更新!Mall实战教程全面升级,瞬间高大上了!40K+Star!Mall电商实战项目开源回忆录!
2023年4月19日
其他

还在服务器上捞日志?试试这款可视化监控系统吧,真香!

如果线上出现问题后,直接去服务器上查看日志,不仅仅效率低,而且还是严重滞后,所以对于一个应用系统必须要具备分布式监控的能力!今天给大家推荐一款分布式监控神器
2023年4月18日
自由知乎 自由微博
其他

小公司工作 7 年,后面怎么走?

面试还有面试八股文的说法,根本没有怎么准备,就凭着一腔热血和真诚,其实是无知无畏和盲目自信,然后说着无比空白单调的项目经历,去面试!也幸亏当时的我们公司的确是缺人,否则我也进不来。bb
2023年4月16日
其他

新来个技术总监,把支付系统设计的那叫一个优雅,佩服!

新手打怵老手头疼的业务。一、业务背景通常在业务体系中,都会或多或少的涉及到支付相关的功能;对于一些经验欠缺同学来说,最紧张的就是面对这类支付结算的逻辑,因为流程中的任何细节问题,都可能引发对账异常的情况;错误发生之后,再想去修复流程,花费的时间成本又是高昂的,还牵扯错误数据的调平问题,最终很可能引发乱账算不清的结果,然后需要人工介入手动处理;在支付场景中,不但涉及诸多的复杂业务,结算规则,超长的流程,第三方对接,其中更是涉及到诸多技术细节,比如:事务管理、异步处理、重试机制、加锁等;下面来分析具体的细节逻辑。二、支付业务1、流程拆解面对复杂业务的时候,最基本的能力就是要懂得把流程拆成模块,做好各个模块管理,再考虑如何衔接起整个流程,从而形成解决问题的思路和经验;如图是对交易场景常见的分解,大致可以分为四个模块:账面管理:对于开通支付功能的用户,必须清晰的管理资金信息;比如可用,冻结,账单等;交易流水:整个资金管理的流水记录,不局限于交易场景,还有充值,提现,退款等;支付对接:通常流程中的支付功能都是对接第三方支付平台来实现的,所以要做好请求和报文的记录;订单结构:比如在电商交易中,订单模型的管理,拆单策略等,支付的商品规格等;这里只是从一个常规的交易流程中去分析,实际的细节描述会远比图例复杂,虽然业务细节各不相同,但是处理思路是大体相通的;再根据各个模块设计流程时序图,规划好节点之间的衔接和协作;2、流程时序通过时序图的设计,来分析各个节点在衔接协作时应该如何处理,在支付业务中,通常分为支付前、支付对接、支付后三个核心阶段:支付前:在商品下单时,构建订单模型,根据拆单规则校验库存、商品状态等,然后进行账户资金冻结,生成交易流水,此时的状态都是待支付;支付对接:支付前业务模型初始化成功之后,构建第三方支付对接请求,发起付款流程,并记录相应的请求动作和参数,等待支付结果的通知;支付后:根据支付结果的成功与否,执行相应的业务模型状态更新,如果支付成功则交易记录、冻结的资金、订单结构与库存等都需要做一系列更新;实际上对业务有清晰的理解和拆分之后,再做好时序流程的设计,这样就已经让一个复杂的场景看起来简单许多了,之后就是设计各个节点的数据结构;3、结构设计基于上面的业务场景分析和拆解,以及流程时序图的呈现,可以很容易输出一份基础维度的结构设计,下图可以作为参考:账面管理:三个核心维度,账户金额,可用余额,冻结金额;交易记录:存储用户的交易动作,但是可能会产生多个交易明细,典型的场景就是购物车下单;交易明细:通常因为订单拆分,从而导致交易被拆分多条明细,进而将资金支付给不同商家;支付对接:请求第三方支付平台时,需要记录请求时参数,以及第三方回调通知的报文;订单记录:在一笔订单中可能存在多个拆分的子单,拆分策略也很多,比如仓库,商家,品类等;订单明细:管理每笔子订单的信息,下单的商品、规格、买卖双方、单价、数量、金额等;即使单看上面的简单设计,都能感觉到支付业务的复杂性,更何况还会叠加红包或满减等优惠规则之后,其复杂程度可想而知;当然如果有明确的开发规范,在复杂版本中,所有开发必须输出业务的分解拆分思路,时序和结构设计,在统一评审之后再落地编码,这样即便是复杂的业务也会有极大的质量保证。三、关联业务上面单从支付的主逻辑去分析流程,实际上涉及到的业务远不止流程中提到的这些,以常见的电商场景为例,交易中还存在商品管理、库存管理、物流管理,支付对接还会涉及优惠规则嵌入等等;商品管理商品主体:维护商品各个维度的信息,并提供各种规格选项,以及基础的定价阶梯,构建商品详情描述;仓储管理:订单拆单之后,需要根据商品编号去校验仓储信息,进行相应的库存冻结以及支付后的仓库发货;优惠券规则优惠券主体:为了适配更多的业务场景,需要对优惠规则有诸多的设计,比如满减或折扣比例、按价格阶梯优惠、有效期限制等;发放规则:支撑日常的运营活动,用户生命周期的维护,以及渠道流量的转化,提供用户群营销的基础能力;这里简述的商品和优惠券业务,都是与支付流程有紧密的联系,比如拆单后库存不足,需要移除该商品;优惠券在支付中的使用策略,以及退款时的处理方式等;四、实践总结最后从技术实现的角度,总结一下支付流程中的一些关键问题:业务模型:对业务有清晰的理解,并能拆分出核心的节点,设计出相应的流程时序和数据结构;事务管理:交易流程中常用TCC事务机制,即Try(预处理)、Confirm(确认)、Cancel(取消)模式;加锁与重试:支付完成后发出支付成功的消息,而后进行业务更新,通常需要对处理的订单号加锁,避免消息重试机制引发数据问题;资金结算:涉及金额的计算,自然要求不能出现精度损失的问题,在一次交易中必须保证每笔资金可以通过对账核验;流程维护:流程本身是很难保证不出现错误的,需要在开发的时候,提供流程的可视化界面,并且支持手动维护的机制;很多复杂的业务场景管理,都需要一个长期的迭代过程,但是前提需要牢牢把握住核心的逻辑;对业务的认知是一个由繁入简的过程,而业务的实现是一个由浅到深的过程,即分析与理解,到落地实现,再到探索与创新。微信8.0将好友放开到了一万,小伙伴可以加我大号了,先到先得,再满就真没了扫描下方二维码即可加我微信啦,2023,抱团取暖,一起牛逼。推荐阅读还在手写
2023年4月13日
其他

还在手写 join 联表查询?MyBatis-Plus 这样写太香了!

种主流API网关技术选型,yyds!订单系统就该这么设计(万能通用),稳的一批!优雅的接口防刷处理方案!自从用了这款Linux可视化管理工具,睡觉真香!为什么魂斗罗只有
2023年4月12日
其他

5 种主流API网关技术选型,yyds!

Mobile、开放平台等特定客户端提供统一服务。指标监控:网关可以统计后端服务的请求次数,并且可以实时地更新当前的流量健康状态,可以对URL粒度的服务进行延迟统计,也可以使用Hystrix
2023年4月10日
其他

订单系统就该这么设计(万能通用),稳的一批!

订单,业务的核心模块。一、背景简介订单业务一直都是系统研发中的核心模块,订单的产生过程,与系统中的很多模块都会高度关联,比如账户体系、支付中心、运营管理等,即便单看订单本身,也足够的复杂;业务在发展的过程中,必然会导致订单量的持续增加,订单自身、数据体量、实现流程,都需要不断的迭代更新,如果在订单流程的研发初期,没有相对全面的考量,那么很有可能导致中后期的重构;从实践经验上说,围绕订单业务:建议过度设计,轻量级分步实现;在产品初期先做好全面的设计,场景和流程上做好可扩展性的保留,在数据层面规划好不同体量的应对方案,走在订单业务的前面避免被动,尽量不要被业务的发展和演变甩在身后;二、订单业务1、订单体系订单体系从角色上看,主要涉及:用户、商户、平台三个核心参与方,其订单流程的搭建就是围绕三方的交易场景展开;这里需要说明一些细节:商户可以是第三方商家,也可以是平台方自己,不影响概念上的划分;商品也存在多种形式,所以用交付来描述,可以覆盖物流的定义;用户:通过应用端,进行商品的选择和下单;平台:实现订单交易链路和支付能力,以及对整个流程的调度;商户:提供商品和交付能力;在图中,只是围绕订单体系做一个框架性的宽泛描述,在成熟的订单业务中,其复杂程度远超上图,下面围绕核心节点来细致分析;2、流程管理2.1
2023年4月7日
其他

优雅的接口防刷处理方案!

对于互联网来说,只要你系统的接口暴露在外网,就避免不了接口安全问题。如果你的接口在外网裸奔,只要让黑客知道接口的地址和参数就可以调用,那简直就是灾难。举个例子:你的网站用户注册的时候,需要填写手机号,发送手机验证码,如果这个发送验证码的接口没有经过特殊安全处理,那这个短信接口早就被人盗刷不知道浪费多少钱了。那如何保证接口安全呢?一般来说,暴露在外网的api接口需要做到防篡改和防重放才能称之为安全的接口。防篡改我们知道http
2023年4月6日
其他

自从用了这款Linux可视化管理工具,睡觉真香!

有如下功能。查看日志网络管理账户管理在这里可以创建账户,以及查看已有账户信息和密码维护。服务管理在这里可以查看服务列表,以及管理服务的启动和关闭。总结Cockpit
2023年4月4日
其他

从3s到25ms!看看人家的接口优化技巧,确实很优雅!!

作者:京东云来源:zhuanlan.zhihu.com/p/610756706大家好,最近看到京东云的一位大佬分享的接口优化方案,感觉挺不错的,拿来即用。建议收藏一波或者整理到自己的笔记本中,随时查阅!下面是正文。一、背景针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。二、接口优化方案总结1.
2023年4月3日
其他

为什么魂斗罗只有 128KB 却可以实现那么长的剧情?

:)微信8.0将好友放开到了一万,小伙伴可以加我大号了,先到先得,再满就真没了扫描下方二维码即可加我微信啦,2023,抱团取暖,一起牛逼。推荐阅读大型SaaS系统的数据范围权限设计与实现!船新
2023年4月2日
其他

大型SaaS系统的数据范围权限设计与实现!

前言多租户(Multi-Tenant)是SaaS中的一个重要概念,它是一种软件架构技术,在多个租户的环境下,共享同一套系统实例,并且租户之间的数据具有隔离性,也就是说一个租户不能去访问其他租户的数据。基于不同的隔离级别,通常具有下面三种实现方案:每个租户使用独立DataBase,隔离级别高,性能好,但成本大租户之间共享DataBase,使用独立的Schema租户之间共享Schema,在表上添加租户字段,共享数据程度最高,隔离级别最低。数据库设计Mybatis-plus在第3层隔离级别上,提供了基于分页插件的多租户的解决方案,我们对此来进行介绍。在正式开始前,首先做好准备工作创建两张表,在基础字段后都添加租户字段tenant_id:CREATE
2023年3月31日
其他

船新 IDEA 2023.1 正式发布,新特性真香!

转换神器不香么?面试官:如果让你去设计淘宝那么多订单的的系统,你怎么分库分表?重磅更新!Mall实战教程全面升级,瞬间高大上了!40K+Star!Mall电商实战项目开源回忆录!
2023年3月30日
其他

HTTP 3.0彻底放弃TCP,TCP到底做错了什么?

层为了保证数据的有序性,只有在处理完有序的数据后,滑动窗口才能往前滑动,否则就停留。停留「发送窗口」会使得发送方无法继续发送数据。停留「接收窗口」会使得应用层无法读取新的数据。其实也不能怪
2023年3月29日
其他

Java 20 正式发布!超神了。。。

VarHandle;控制外部内存的分配和释放:MemorySession;调用外部函数:Linker、FunctionDescriptor和SymbolLookup。下面是
2023年3月28日
其他

8 种主流数据迁移工具技术选型,yyds!

前言最近有些小伙伴问我,ETL数据迁移工具该用哪些。ETL(是Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业应用来说,我们经常会遇到各种数据的处理、转换、迁移的场景。今天特地给大家汇总了一些目前市面上比较常用的ETL数据迁移工具,希望对你会有所帮助。1.KettleKettle是一款国外开源的ETL工具,纯Java编写,绿色无需安装,数据抽取高效稳定
2023年3月27日
其他

Spring和IDEA都不推荐用的@Autowired注解,为什么还有那么多人用?

}}答案是使用WebApplicationContextUtils.getWebApplicationContext获取当前的ApplicationContext,再通过它获取到bean实例。6.3
2023年3月24日
其他

别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?

System.out.println(benz4SMall.toString());}执行结果深拷贝与浅拷贝深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。假设
2023年3月23日
其他

还在手动配置Nginx?试试这款可视化管理工具吧,用起来够优雅!

命令获取得到的ip。这里不填127.0.0.1的原因是使用的是docker容器搭建web应用,docker容器和宿主机即服务器不在同一个网络下,所以127.0.0.1并不能访问到宿主机,而ip
2023年3月22日
其他

面试官:如果让你去设计淘宝那么多订单的的系统,你怎么分库分表?

今天这篇文章,其实也是我曾经面试中遇到过的真题。分库分表大家可能听得多了,但读扩散问题大家了解吗?这里涉及到几个问题。分库分表是什么?读扩散问题是什么?分库分表为什么会引发读扩散问题?怎么解决读扩散问题?这些问题还是比较有意思的。相信兄弟们也一定有机会遇到哈哈哈。我们先从分库分表的话题聊起吧。分库分表我们平时做项目开发。一开始,通常都先用一张数据表,而一般来说数据表写到2kw条数据之后,底层B+树的层级结构就可能会变高,不同层级的数据页一般都放在磁盘里不同的地方,换言之,磁盘IO就会增多,带来的便是查询性能变差。如果对上面这句话有疑惑的话,可以去看下我之前写的文章。于是,当我们单表需要管理的数据变得越来越多,就不得不考虑数据库分表。而这里的分表,分为水平分表和垂直分表。垂直分表的原理比较简单,一般就是把某几列拆成一个新表,这样单行数据就会变小,B+树里的单个数据页(固定16kb)内能放入的行数就会变多,从而使单表能放入更多的数据。垂直分表没有太多可以说的点。下面,我们重点说说最常见的水平分表。水平分表有好几种做法,但不管是哪种,本质上都是将原来的
2023年3月21日
其他

MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。。

作者:huanghanqian来源:blog.csdn.net/huanghanqian/article/details/83177178/近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapper
2023年3月20日
其他

接手前同事代码,特别烂,各种BUG,看麻了。。。

年前公司优化了一些人,最近我开始接手他们的项目。然后...我就麻了。一开始接到这个任务的时候,我没怎么当回事儿,根据一些需求评估的时间也比较紧凑。后面越看越不对劲,估时两天的开发,我每天加班都硬生生的花了
2023年3月17日
其他

还在用main方法生成代码?MyBatis-Plus可视化代码生成器来了,yyds!

作者:夜郎king来源:blog.csdn.net/yelangkingwuzuhu/article/details/128077533前言在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。因此,我们需要一款支持高度定制化,带图形UI页面,能适配多数数据库的基础程序生成框架。本文就介绍这款基于Mybatis-Plus的代码自助生成器,github地址:mybatis-plus-generator-ui。文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,感兴趣的朋友可以自己clone下来,也可以自己进行扩展自定义。一、mybatis-plus-generator-ui是什么?它是对mybatis-plus-generator进行封装,通过Web
2023年3月16日
其他

美团二面:SPI 的原理是什么?

八股文背多了,相信大家都听说过一个词,SPI扩展。有的面试官就很喜欢问这个问题,SpringBoot的自动装配是如何实现的?基本上,你一说是基于spring的SPI扩展机制,再把spring.factories文件和EnableAutoConfiguration提一下,那么这个问题就答的八九不离十了。就像四五年前,我去面试的时候被问到这个问题,SPI动态扩展机制这几个词从嘴里一说出来,就把面试官唬的一愣一愣的。可能他们也没见过这么能装逼的,一句话能简简单单说明白,非要拽一个听上去很高大上的词。话说回来,被唬住的可不止是面试官,其实还有我自己。至于SPI扩展究竟是个啥,是怎么实现的,我当时也根本不明白。不过现在的面试就是这样,对线八股文,要想唬住面试官,就得先唬住自己。那么我们今天暂且不提spring的SPI扩展,先来看看java本身自带的SPI扩展机制是怎么一回事。1、简介SPI的全称是Service
2023年3月15日
其他

看了我常用代码优化技巧,同事也开始悄悄模仿了...

前言今天分享一些我日常工作中常用的代码优化技巧,希望对大家有帮助!正文类成员与方法的可见性最小化举例:如果是一个private的方法,想删除就删除如果一个public的service方法,或者一个public的成员变量,删除一下,不得思考很多。使用位移操作替代乘除法计算机是使用二进制表示的,位移操作会极大地提高性能。>
2023年3月14日
其他

在公司混的差,不一定是能力不行,可能和组织架构有关!

如果你接触过公司的面试工作,一定见过很多来自大公司的渣渣。这些人的薪资和职位,比你高出很多,但能力却非常一般。如果能力属实,我们大可直接把这些大公司的员工打包接收,也免了乱七八糟的面试工作。但可惜的是,水货的概率通常都比较大,新的公司也并不相信他们的能力。尤其是这两年互联网炸了锅,猪飞的日子不再,这种情况就更加多了起来。反过来说也一样成立,就像是xjjdog在青岛混了这么多年,一旦再杀回北上广,也一样是落的下乘的评价。除了自身的努力之外,你在上家公司混的差,还与你在组织架构中所处于的位置和组织架构本身有关。一般公司会有两种组织架构方式:垂直化划分和层级化划分。1.
2023年3月12日
其他

新来个技术总监:谁再用Redis实现订单超时自动关闭,以后就不用来了!

由于Redis具有过期监听的功能,于是就有人拿它来实现订单超时自动关闭的功能,但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案,总有一种适合你!这些方案并没有绝对的好坏之分,只是适用场景的不大相同。DelayQueue
2023年3月10日
其他

解放双手!一键打包部署SpringBoot项目,IDEA官方Docker插件真香!

自定义容器如下图所示,自定义一个容器跑配置。因为上面的步骤我们已经创建了镜像了,所以可以直接用这个镜像即可。话不多说,直接运行起来看下。再来看下端口映射,这次就映射好了,完美!再来测试下是否能访问
2023年3月8日
其他

还在手写CRUD代码?试试这款代码生成工具吧,彻底解放双手!

ToString{}可以看到,模版里分别使用了$table_desc$(表中文名)、$current_time$(当前时间)、$table_name_hump_A$(表名转首字母大写驼峰)
2023年3月6日
其他

看看人家的后台管理系统,确实清新优雅!

哈喽,大家好,之前给大家介绍过很多优秀的后台管理系统,但是都感觉还缺少点什么。最近新接触到一个项目,确实把我惊艳到了,太优雅清新了,忍不住今天要来给大家分享一下
2023年3月3日
其他

支付宝二面:使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!

都差不多。所以从字节码层面来看,没抛错两者的执行效率其实没啥差别。“那为什么网上流传着try-catch会有性能问题的说法啊?”老陈觉得非常奇怪。这个说法确实有,在《Effective
2023年3月2日
其他

如何去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!

中的元素,心态崩了。。。SpringBoot一行代码实现文件上传20个平台!少写代码到极致!重磅更新!Mall实战教程全面升级,瞬间高大上了!40K+Star!Mall电商实战项目开源回忆录!
2023年3月1日
其他

IDEA 28 个天花板技巧,yyds!

People();我们想稍微查看一下People这个类,但是tab已经够多了,ctrl+alt+b会打开新的标签,标签多了就混乱了,尤其一堆命名类似的tab,这时候我们可以按ctrl+shift+i
2023年2月27日
其他

新来了个同事,代码命名规范是真优雅呀!代码如诗!!

日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力。那它们有什么规律呢?Java项目的代码结构,能够体现它的设计理念。Java采用长命名的方式来规范类的命名,能够自己表达它的主要意图。配合高级的IDE,可以减少编码人员的记忆负担,靠模糊的匹配就能找到自己所需要的资源。为了让大家更好的理解命名的套路,我借鉴了最流行的Java接开源软件(spring系列,netty,libgdx,guava,logback等等),总结了10类常见的类命名。大多数是以后缀形式存在的,也有不少可以组合使用,用来表达多重的意义。这些单词很简单,但可以让你的类命名看起来更加清爽和专业。接下来,我将带大家游览一遍。为了方便理解,每种类型,我都配备了相应的
2023年2月23日
其他

订单超时自动取消的 3 种解决方案,yyds!

大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消。下单今天,我们来聊聊订单超时未支付自动取消的几种方案。1.定时任务这是最容易想到的办法,定时任务去轮询数据库,取消即将超时的订单。订单轮询定时任务实现方式有很多种,大概可以分为两类:本地定时任务和分布式定时任务。定时任务实现本地定时任务,适用于单机版的业务系统,实现方式非常多样:永动机线程:开启一个线程,通过sleep去完成定时,一些开源中间件的某些定时任务是通过这种方式实现的。JDK
2023年2月22日
其他

Spring Event + DDD = 王炸!!

导入导出,百万数据量,性能爆表!电商系统中MySQL数据同步到ES的4种解决方案,yyds!重磅更新!Mall实战教程全面升级,瞬间高大上了!40K+Star!Mall电商实战项目开源回忆录!
2023年2月21日
其他

带了一个 3 年的开发,不会循环删除 List 中的元素,心态崩了。。。

王炸!!电商系统中MySQL数据同步到ES的4种解决方案,yyds!重磅更新!Mall实战教程全面升级,瞬间高大上了!40K+Star!Mall电商实战项目开源回忆录!
2023年2月20日
其他

SpringBoot一行代码实现文件上传20个平台!少写代码到极致!

又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo地址放在文末了。文件上传在平常不过的一个功能,做后端开发的基本都会接触到,虽然不难可着实有点繁琐。数据流的开闭、读取还容易出错,尤其是在对接一些OSS对象存储平台,一个平台一堆SDK代码看起来乱糟糟的。下边给我大家推荐一个工具Spring
2023年2月17日
其他

美团面试:这个 SQL 语句加了哪些锁?

4:非唯一索引范围查询范围查询和等值查询的区别在上面唯一索引章节已经介绍过了,就是范围查询需要一直向右遍历到第一个不满足条件的记录,和唯一索引范围查询不同的是,非唯一索引的范围查询并不会退化成
2023年2月16日