<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kaoya156的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kaoya156</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kaoya156]]></copyright><item><title><![CDATA[利用JDK8的Stream进行不同多层嵌套GroupBy及其性能对比]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/126819789</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/126819789</guid><author>kaoya156</author><pubDate>Mon, 12 Sep 2022 17:21:50 +0800</pubDate><description><![CDATA[本次需求涉及多层嵌套分组，为了保证执行效率，本次采用方案是按需查询所有的sku，在内存中进行分组处理。对于内存处理分组，我们很自然想到了JDK 8的新特性Stream，利用Stream下的Group By可以很好完成本次功能。因为涉及的嵌套分组过多，达到4次，当sku数量增多时，这里很快就会出行性能问题，因此不得不考虑分组效率的问题。本次列举了3种分组的实现方式，并通过JMH工具进行性能测试，得到多层嵌套分组的最佳实践。如果数据量上来之后，层层嵌套group by，并在group by后遍历组装数据。]]></description><category></category></item><item><title><![CDATA[学习RocketMQ的AsyncTraceDispatcher并发处理队列任务的技巧]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/125075590</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/125075590</guid><author>kaoya156</author><pubDate>Tue, 31 May 2022 23:44:31 +0800</pubDate><description><![CDATA[提供消息轨迹追踪的功能特性，用来记录消息发送前后和消息消费前后的消息消息状态、消息流向、耗时等等数据，我们可以在console中查询这些数据，进而跟踪消息的轨迹。]]></description><category></category></item><item><title><![CDATA[CompletableFuture异常优雅处理方式]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/125075464</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/125075464</guid><author>kaoya156</author><pubDate>Tue, 31 May 2022 23:34:02 +0800</pubDate><description><![CDATA[CompletableFuture是Java 8提供了新特性，实现了CompletionStage接口和Future接口，增加了异步回调、流式处理、多个Future组合处理的能力。可以帮助我们简化异步编程的复杂性，让我们在Java在处理多任务的协同工作时更加顺畅便利。]]></description><category></category></item><item><title><![CDATA[为什么SQL的结尾要加上ORDER BY NULL?]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/120361212</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/120361212</guid><author>kaoya156</author><pubDate>Sat, 18 Sep 2021 09:44:46 +0800</pubDate><description><![CDATA[ORDER BY NULL什么梗？
有时候我们会看到项目中有些SQL语句带有ORDER BY NULL，这时我们看的有点疑惑了。难道ORDER BY NULL是按null进行排序的意思么？关键是表中字段都是设置NOT NULL，那还怎么按照null排序？
我们在学习索引优化时知道，ORDER BY 后面字段建立索引，可利用索引有序性而不用对字段进行额外排序操作，以提升语句执行效率。而null不是索引字段，也没代表什么实际的含义，那么在SQL语句带有ORDER BY NULL究竟有什么用？下面一起来一探究竟。]]></description><category></category></item><item><title><![CDATA[Collections踩坑UnsupportedOperationException]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/118308845</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/118308845</guid><author>kaoya156</author><pubDate>Mon, 28 Jun 2021 17:45:56 +0800</pubDate><description><![CDATA[Collections是什么？
Collections是Java.util包下提供的一个工具类，相信大家不陌生，在我们的代码中也不乏其身影。因为其提供的静态API十分便捷地帮助我们完成对集合的相关操作，也让我们的代码也变得更加优雅。
Collections常用的API

一般情况下，我们在业务代码的编写中，使用频率最高的，就是借助Collections来创建集合了。这里我将其划分成为两部分：同步集合和不可修改集合。同步集合不用我多说了，就是将传入的集合进行包装，所有的方法都加上synchronized关键字]]></description><category></category></item><item><title><![CDATA[为什么有的JVM启动参数加了-D]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/116724539</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/116724539</guid><author>kaoya156</author><pubDate>Wed, 12 May 2021 23:45:12 +0800</pubDate><description><![CDATA[官方解析

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"
.]]></description><category></category></item><item><title><![CDATA[加上@Transaction之后，synchronized的同步方法不能生效？]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/116122558</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/116122558</guid><author>kaoya156</author><pubDate>Sun, 25 Apr 2021 12:06:43 +0800</pubDate><description><![CDATA[前提说明
在电商项目中，下订单时通常会涉及多个表操作，比如商品表、订单表和订单状态表等。为了保证下订单这一操作的原子性，所以下单时需要保证这些表的操作要么同时成功要么同时失败。通常情况下我们都会在下订单方法中加上事务处理，常用的都是借助Spring来进行事务管理。
同时下单时需要进行检查库存，扣减库存这些操作。为了防止超卖问题，通常我们会在这些操作加上同步锁来保证原子操作。
本次我采用了Spring声明式事务@Transaction和synchronized标注的方法，发现在单体的架构下还是出现了商品超卖的]]></description><category></category></item><item><title><![CDATA[边遍历集合边增删元素，会产生ConcurrentModificationException？]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/114268956</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/114268956</guid><author>kaoya156</author><pubDate>Mon, 01 Mar 2021 18:31:40 +0800</pubDate><description><![CDATA[我们开发过程中，经常会遇到一些业务模型，需要我们查询集合是否包含某个元素，然后对该集合进行一些增删操作。有时候，我们在遍历过程中会报ConcurrentModificationException，有时候且不会，看似一切正常。这究竟是怎么回事呢？
情景复现
首先我们先创建一个集合，往里面加入a, b, c, d四个元素。现在就来模拟业务模型：如果集合中包含b，就往集合添加一个e。我们可以通过遍历集合来看集合是否包含b，是否需要添加元素。
List&lt;String&gt; list = new ArrayL]]></description><category></category></item><item><title><![CDATA[为什么PageHelper能实现分页?]]></title><link>https://blog.youkuaiyun.com/kaoya156/article/details/111088967</link><guid>https://blog.youkuaiyun.com/kaoya156/article/details/111088967</guid><author>kaoya156</author><pubDate>Sun, 13 Dec 2020 10:32:13 +0800</pubDate><description><![CDATA[为什么PageHelper能实现分页?
今天处理分页查询时，报PersistenceException。查看控制台发现，sql中没有获取到分页参数，而且多了一个用来查询总数queryUpfile_Count方法。

反复确认了传参无问题后，最后查看xml发现sql语句有拼接limit #{pageNo}, #{pageSize}。这时候我就想，原有项目中使用PageHelper做分页，是不是凭借的sql语句与PageHelper产生冲突呢？带着这个疑问我就来查看PageHelper的源码。
&lt;!-- ]]></description><category></category></item></channel></rss>