java中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器_架构悟道-编程思维

大家好,又见面了。 在我们的项目编码中,不可避免的会用到一些容器类,我们可以直接使用List、Map、Set、Array等类型。当然,为了体现业务层面的含义,我们也会根据实际需要自行封装一些专门的Bean类,并在其中封装集合数据来使用。 看下面的一个场景: 在一个企业级的研发项目事务管理系统里面,包含很多的项目,每个项目下面又包含很多的具体需求,而每个需求下面又会被拆分出若干的具体事项。 上

java中让swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容_架构悟道-编程思维

大家好,又见面啦。 在前一篇文档《JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率》中,我们探讨了如何通过自定义注解的方式扩展swagger的能力让Swagger支持自动从指定的枚举类生成接口文档中的字段描述的实现思路。 其实swagger作为一个被广泛使用的在线接口文档辅助工具,上手会用很容易,但想用好却还是需要一定功夫的。所以呢,本篇文档就和大家一起来聊一聊如

java中自定义扩展swagger的能力,自动生成参数取值含义说明,提升开发效率_架构悟道-编程思维

大家好,又见面了。 在JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导。越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来替代由开发人员手动编写接口文档,而Swagger作为一款优秀的在线接口文档生成工具,以其功能强大、集成方便而得到了广泛的使用。 在项目中有一种非常常见的场景,就是接口的请求或者响应参数中会有一些字段的取值会限定为固定的几个可选

用好java中的函数式接口,轻松从通用代码框架中剥离掉业务定制逻辑_架构悟道-编程思维

大家好,又见面了。 今天我们一起聊一聊JAVA中的函数式接口。那我们首先要知道啥是函数式接口、它和JAVA中普通的接口有啥区别?其实函数式接口也是一个Interface类,是一种比较特殊的接口类,这个接口类有且仅有一个抽象方法(但是可以有其余的方法,比如default方法)。 当然,我们看源码的时候,会发现JDK中提供的函数式接口,都会携带一个 @FunctionalFunction注解,这个注

聊聊spring事务控制策略以及@transactional失效问题避坑_架构悟道-编程思维

大家好,又见面了。 在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。比如,需要对SQL执行过程进行事务的控制与处理的时候,其整体的处理流程会是如下的示意: 首先是要开启事务、然后执行具体SQL,如果执行异常则回滚事务,否则提交事务,最后关闭事务,完成整个处理过程。按照这个流程的逻辑,写一下对应的实现代码: public void testJdbcTransact

不堆概念、换个角度聊多线程并发编程_架构悟道-编程思维

大家好,又见面了。 在上一篇文档《JAVA基于CompletableFuture的流水线并行处理深度实践,满满干货》中,我们一起探讨了JAVA中并行编码的相关内容,在文中也一起比较了并行与并发的区别。作为姊妹篇,这里我们就再展开聊一聊关于并发相关的内容。 俗话说,双拳难敌四手。 俗话还说,人多力量大。 在现实生活中,我们通过团队化的方式来获得比单兵作战更高的单位时间内整体产出速度。同样,在编码

使用java completablefuture实现流水线化的并行处理,深度实践总结_架构悟道-编程思维

大家好,又见面啦。 在项目开发中,后端服务对外提供API接口一般都会关注响应时长。但是某些情况下,由于业务规划逻辑的原因,我们的接口可能会是一个聚合信息处理类的处理逻辑,比如我们从多个不同的地方获取数据,然后汇总处理为最终的结果再返回给调用方,这种情况下,往往会导致我们的接口响应特别的慢。 而如果我们想要动手进行优化的时候呢,就会涉及到串行处理改并行处理的问题。在JAVA中并行处理的能力支持已经

讲透java stream的collect用法与原理,远比你想象的更强大_架构悟道-编程思维

大家好,又见面了。 在我前面的文章《吃透JAVA的Stream流操作,多年实践总结》中呢,对Stream的整体情况进行了细致全面的讲解,也大概介绍了下结果收集器Collectors的常见用法 —— 但远不是全部。 本篇文章就来专门剖析collect操作,一起解锁更多高级玩法,让Stream操作真正的成为我们编码中的神兵利器。 初识Collector 先看一个简单的场景: 现有集团内所有人员列

是时候优雅的和nullpointexception说再见了_架构悟道-编程思维

是时候优雅的和NullPointException说再见了 ☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️☝️ 最近在参加原创投稿比赛,本篇文章如果对你有帮助的话,欢迎帮忙点击助力下吧 NullPointException应该算是每一个码农都很熟悉的家伙了吧?谁的代码不曾抛过几个空指针异常呢... 比如:你写了段如下的代码: public void getCompanyFromE

全面吃透java stream流操作,让代码更加的优雅_架构悟道-编程思维

全面吃透JAVA Stream流操作,让代码更加的优雅 ☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝ 在JAVA中,涉及到对数组、Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。 例如,现在有这么一个需求: 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个 在JAVA7及之前的代码中,我们会可以照如下的方式进

java中计算两个日期时间的差值竟然也有这么多门道_架构悟道-编程思维

上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看。题目很简单: 给定一个日期,然后计算下距离今天相差的天数。 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼镜,真正能写出来的人竟然寥寥无几,很多人写了一整张A4纸都写不下,最后还是没写完...他们在做什么? 先取出今天的日期,然后分别计算得出年、月、日的值,然后将给定的字符串进行切割,得到目标的年

java中简单的for循环竟有这么多坑,你踩过吗_架构悟道-编程思维

JAVA中简单的for循环竟有这么多坑,你踩过吗 ☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝ 实际的业务项目开发中,大家应该对从给定的list中剔除不满足条件的元素这个操作不陌生吧? 很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式都是人畜无害的吗?很多看似正常的操作其实背后是个陷阱,很多新手可能稍不留神就会掉入其中。 倘若不幸踩中: 代码运行时直接抛异常报错,这个算是不幸中的万幸,至少可以及

我是如何将一个老系统的kafka消费者服务的性能提升近百倍的_架构悟道-编程思维

☞☞☞ 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的 ☜☜☜ ○○○○○○○☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝○○○○○○○○ 大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛的使用。 如果问你,如何提高kafka队列中的消息消费速度呢? 答案很简单,topic多分几个分片,然后使用消费者组(Consumer Group)去消费t

避坑手册 | java编码中容易踩坑的十大陷阱_架构悟道-编程思维

JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患。此外,这些陷阱也是面试的时候面试官比较喜欢问的问题。 本文对这些陷阱进行了统一的整理,让你知道应该如何避免落入陷阱中,下面就一起来了解下吧。 循环中操作目标list 遍历List然后对list中符合条件的元素进行删除操作,这是项目里面非常常见的一个场景。 先看下两种典型的错误写法: 错误写法1:

为什么不建议使用自定义object作为hashmap的key?_架构悟道-编程思维

此前部门内的一个线上系统上线后内存一路飙高、一段时间后直接占满。协助开发人员去分析定位,发现内存中某个Object的量远远超出了预期的范围,很明显出现内存泄漏了。 结合代码分析发现,泄漏的这个对象,主要存在一个全局HashMap中,是作为HashMap的Key值。第一反应就是这里key对应类没有去覆写equals()和hashCode()方法,但对照代码仔细一看却发现其实已经按要求提供了自定义的