自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 利用JDK8的Stream进行不同多层嵌套GroupBy及其性能对比

本次需求涉及多层嵌套分组,为了保证执行效率,本次采用方案是按需查询所有的sku,在内存中进行分组处理。对于内存处理分组,我们很自然想到了JDK 8的新特性Stream,利用Stream下的Group By可以很好完成本次功能。因为涉及的嵌套分组过多,达到4次,当sku数量增多时,这里很快就会出行性能问题,因此不得不考虑分组效率的问题。本次列举了3种分组的实现方式,并通过JMH工具进行性能测试,得到多层嵌套分组的最佳实践。如果数据量上来之后,层层嵌套group by,并在group by后遍历组装数据。

2022-09-12 17:21:50 3939

原创 学习RocketMQ的AsyncTraceDispatcher并发处理队列任务的技巧

提供消息轨迹追踪的功能特性,用来记录消息发送前后和消息消费前后的消息消息状态、消息流向、耗时等等数据,我们可以在console中查询这些数据,进而跟踪消息的轨迹。

2022-05-31 23:44:31 717

原创 CompletableFuture异常优雅处理方式

CompletableFuture是Java 8提供了新特性,实现了CompletionStage接口和Future接口,增加了异步回调、流式处理、多个Future组合处理的能力。可以帮助我们简化异步编程的复杂性,让我们在Java在处理多任务的协同工作时更加顺畅便利。

2022-05-31 23:34:02 11095 2

原创 为什么SQL的结尾要加上ORDER BY NULL?

ORDER BY NULL什么梗?有时候我们会看到项目中有些SQL语句带有ORDER BY NULL,这时我们看的有点疑惑了。难道ORDER BY NULL是按null进行排序的意思么?关键是表中字段都是设置NOT NULL,那还怎么按照null排序?我们在学习索引优化时知道,ORDER BY 后面字段建立索引,可利用索引有序性而不用对字段进行额外排序操作,以提升语句执行效率。而null不是索引字段,也没代表什么实际的含义,那么在SQL语句带有ORDER BY NULL究竟有什么用?下面一起来一探究竟。

2021-09-18 09:44:46 1537

原创 Collections踩坑UnsupportedOperationException

Collections是什么?Collections是Java.util包下提供的一个工具类,相信大家不陌生,在我们的代码中也不乏其身影。因为其提供的静态API十分便捷地帮助我们完成对集合的相关操作,也让我们的代码也变得更加优雅。Collections常用的API一般情况下,我们在业务代码的编写中,使用频率最高的,就是借助Collections来创建集合了。这里我将其划分成为两部分:同步集合和不可修改集合。同步集合不用我多说了,就是将传入的集合进行包装,所有的方法都加上synchronized关键字

2021-06-28 17:45:56 1343 1

原创 为什么有的JVM启动参数加了-D

官方解析Set a system property value. If value is a string that contains spaces, you must enclose the string in double quotes:java -Dfoo="some string" SomeClass-D参数是用来设置一个系统属性,如果该值是一个字符串且包含空格,那么这个值需要包含到一对双引号中。实例代码如下,启动时加上JVM参数-Dcom.wenqi="12 空格 34".

2021-05-12 23:45:12 380

原创 加上@Transaction之后,synchronized的同步方法不能生效?

前提说明在电商项目中,下订单时通常会涉及多个表操作,比如商品表、订单表和订单状态表等。为了保证下订单这一操作的原子性,所以下单时需要保证这些表的操作要么同时成功要么同时失败。通常情况下我们都会在下订单方法中加上事务处理,常用的都是借助Spring来进行事务管理。同时下单时需要进行检查库存,扣减库存这些操作。为了防止超卖问题,通常我们会在这些操作加上同步锁来保证原子操作。本次我采用了Spring声明式事务@Transaction和synchronized标注的方法,发现在单体的架构下还是出现了商品超卖的

2021-04-25 12:06:43 590

原创 边遍历集合边增删元素,会产生ConcurrentModificationException?

我们开发过程中,经常会遇到一些业务模型,需要我们查询集合是否包含某个元素,然后对该集合进行一些增删操作。有时候,我们在遍历过程中会报ConcurrentModificationException,有时候且不会,看似一切正常。这究竟是怎么回事呢?情景复现首先我们先创建一个集合,往里面加入a, b, c, d四个元素。现在就来模拟业务模型:如果集合中包含b,就往集合添加一个e。我们可以通过遍历集合来看集合是否包含b,是否需要添加元素。List<String> list = new ArrayL

2021-03-01 18:31:40 425

原创 为什么PageHelper能实现分页?

为什么PageHelper能实现分页?今天处理分页查询时,报PersistenceException。查看控制台发现,sql中没有获取到分页参数,而且多了一个用来查询总数queryUpfile_Count方法。反复确认了传参无问题后,最后查看xml发现sql语句有拼接limit #{pageNo}, #{pageSize}。这时候我就想,原有项目中使用PageHelper做分页,是不是凭借的sql语句与PageHelper产生冲突呢?带着这个疑问我就来查看PageHelper的源码。<!--

2020-12-13 10:32:13 328 1

空空如也

空空如也

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

TA关注的人

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