<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[future_xiaowu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/future_xiaowu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; future_xiaowu]]></copyright><item><title><![CDATA[java文件下载接口无法识别文件名问题]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/124795688</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/124795688</guid><author>future_xiaowu</author><pubDate>Mon, 16 May 2022 11:23:07 +0800</pubDate><description><![CDATA[按照网上的资料，实现一个springboot文件下载接口，调用时出了问题，postman send and save之后，得到的永远是response.json 和 response.bin,无论断点时的文件名是什么，总是下载这个文件名


    String fileName = URLEncoder.encode(
                    "your file name",
                    "UTF-8");
    httpServletResponse.se]]></description><category></category></item><item><title><![CDATA[基于Redis和RabbitMQ实现一个异步并发限制工具]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/124174904</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/124174904</guid><author>future_xiaowu</author><pubDate>Thu, 14 Apr 2022 17:29:22 +0800</pubDate><description><![CDATA[背景：

现有一个分布式的应用要与第三方报表服务对接，对方提供restful接口，调用这些接口以获取报表信息或者下载报表文件。首先，如果不需要下载文件，直接在MVC架构的service调用这些rest接口就好。可涉及到文件下载，网络IO耗时可能比较长而报表服务能承受的并发量有限，请求过多可能压垮报表服务的接口

问题分析与解决思路：

限制报表请求的并发量防止报表服务端报错或者崩溃，将请求参数放入分布式队列，利用redis计数currency，超出并发数量就限流，给出排队提示并将请求打回队列头部，未超出则从]]></description><category></category></item><item><title><![CDATA[Redis分布式锁]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/124173836</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/124173836</guid><author>future_xiaowu</author><pubDate>Thu, 14 Apr 2022 16:05:27 +0800</pubDate><description><![CDATA[背景：新工作的第一个需求要实现分布式的并发控制，跟以往写过的单服务应用不同，synchronized 锁sempheore信号量这种jvm层级的锁就不能满足要求了，要考虑类似阿里开源组件sentinel或者自己实现一个。

要实现分布式下的原子性，就要保证进程在操作竞态资源的时候是唯一的，不能出现并发的情况

redis锁可以满足这种要求，应用之间，能同时拿到redis锁的服务只能有一个，可以保证分布式下某个操作的原子性



对于springboot项目，首先引入redis依赖


        &lt]]></description><category></category></item><item><title><![CDATA[maven高版本引起的项目不被识别问题]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/124167992</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/124167992</guid><author>future_xiaowu</author><pubDate>Thu, 14 Apr 2022 11:44:58 +0800</pubDate><description><![CDATA[近来换了工作和电脑，需要重新配置开发环境，分享一个maven版本引起的问题

环境：idea jdk8 maven3.8.5

问题描述：

1 pom文件无报错，但是代码中所有依赖无法解析，springboot的注解飘红报错

2 右键点击项目无法看到maven选项，点击右侧工具栏中的maven选项 + 号选中pom文件直接抛出异常

3 点开ProjectStructure 的Libraries选项，发现空白，无任何依赖jar被引入，这表明该项目未被识别成maven项目



解决过程：起初以为是配..]]></description><category></category></item><item><title><![CDATA[源码阅读的注意点]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/123222379</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/123222379</guid><author>future_xiaowu</author><pubDate>Wed, 02 Mar 2022 09:49:27 +0800</pubDate><description><![CDATA[记录一下，工作时一段FIX的源码看不懂，找朋友帮忙一起看时候学到的技巧

1 源码类中定义的属性

要先看这个部分，简单了解这块源码是做什么的(实现什么功能)，源码的命名往往比较规范，通过属性名的定义，很多时候直接能猜到它的职能，比如 DEFAULT_CAPACITY,见到它，就知道它是作为某个默认下标使用

2 尝试模拟源码场景，断点

尝试将源码的数据输入模拟成main方法进行断点，观察源码走向

3 联系类内部属性，划分结构查看

好的代码会对不同逻辑进行拆分，联系类内部定义的属性，如if（A） ge]]></description><category></category></item><item><title><![CDATA[理解线程回调(转)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/122875091</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/122875091</guid><author>future_xiaowu</author><pubDate>Fri, 11 Feb 2022 10:26:02 +0800</pubDate><description><![CDATA[java——多线程回调函数 - kelelipeng - 博客园 (cnblogs.com)
]]></description><category></category></item><item><title><![CDATA[多线程-回调]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/122668551</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/122668551</guid><author>future_xiaowu</author><pubDate>Mon, 24 Jan 2022 17:59:58 +0800</pubDate><description><![CDATA[参考：wenzhi的博客_峥嵘life_优快云博客-android,java,UI领域博主

简单介绍下背景，为什么会突然想到去学回调相关的，虽然之前不会，但是也没有想到去看

最近换了一个项目组，我之前是做OA系统的，总的来说，OA的代码没什么难度，就是各种形式的CRUD。新项目组代码难度直接提升了一个量级，自研自封装通信协议，自研框架，fix通信协议与自研协议转换以及各个系统交互。

其中有一个点，据负责人说，线程回调相当普遍，我之前看博客的方向主要是锁，有个大佬告诉我，实际项目中细粒度的锁使用并不普]]></description><category></category></item><item><title><![CDATA[平时工作遇到的一些小问题]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/120059168</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/120059168</guid><author>future_xiaowu</author><pubDate>Thu, 02 Sep 2021 14:17:33 +0800</pubDate><description><![CDATA[我平是的工作主要是写一些功能模块和接口，以及bug的定位和修复，罗列一些工作中遇到的小问题，算是个整理

1 一次开发dubbo接口时，在dubbo调用的接口里又调用了第三方接口，于是我本地同时启动两个springboot项目，但是一直报错，后来才突然意识到，是dubbo的默认20880TCP端口和tomcat的8080端口冲突了，且注意，dubbo的请求与响应实体类要实现序列化接口，另外，dubbo的测试可以直接使用命令行，telnet IP port,调用方法用invoke，不要再去安装jemeter插]]></description><category></category></item><item><title><![CDATA[多线程基础-ReetrantLock]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118933042</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118933042</guid><author>future_xiaowu</author><pubDate>Thu, 29 Jul 2021 14:37:02 +0800</pubDate><description><![CDATA[参考：

https://csp1999.blog.youkuaiyun.com/article/details/116331409

https://blog.youkuaiyun.com/javazejian/article/details/75043422

你知道怎么实现多线程同步问题吗？join不算，还知道吗 - 知乎 (zhihu.com)

学习多线程一段时间后，视野中出现了各式各样的“锁”，起初是眼花缭乱的，但是仔细整理一下发现还是有规律可循的。

现在我理解的大致基础向并发编程学习思路就是

1 多线程基础，包括]]></description><category></category></item><item><title><![CDATA[Bigdecimal构造注意事项]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118807282</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118807282</guid><author>future_xiaowu</author><pubDate>Fri, 16 Jul 2021 16:43:37 +0800</pubDate><description><![CDATA[使用Bigdecimal运算时，如果使用double类型入参会引起进度问题，需要统一转为字符串构造方法

如下

Bigdecimal a = newBigdecimal(0.06);  ×

Bigdecimal b = new Bigdecimal("0.06") √
]]></description><category></category></item><item><title><![CDATA[自旋锁的简单介绍]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118702018</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118702018</guid><author>future_xiaowu</author><pubDate>Fri, 16 Jul 2021 10:23:17 +0800</pubDate><description><![CDATA[参考：

http://blog.onlycatch.com/post/自旋锁

https://blog.youkuaiyun.com/qq_34337272

https://blog.youkuaiyun.com/qq_34337272

可重入锁的获取和释放需要注意的一点儿事_aty-优快云博客

Java并发编程-无锁CAS与Unsafe类及其并发包Atomic_zejian的博客-优快云博客

深入理解Java并发之synchronized实现原理_zejian的博客-优快云博客_synchronized原理

]]></description><category></category></item><item><title><![CDATA[ThreadLocal使用与原理（转）]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118692974</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118692974</guid><author>future_xiaowu</author><pubDate>Tue, 13 Jul 2021 10:06:20 +0800</pubDate><description><![CDATA[转自：ThreadLocal使用与原理_敖丙-优快云博客

本准备看ConcurrentHashMap的知识，突然发现需要很多并发方面的知识，于是又去补多线程和并发知识，除了基础方法 线程状态 CAS AQS 和ThreadLocal这些也都需要做些了解

https://blog.youkuaiyun.com/javazejian/article/details/75043422(AQS)

https://blog.youkuaiyun.com/javazejian/article/details/72772470（CAS）]]></description><category></category></item><item><title><![CDATA[java中强弱虚软四种引用简介]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118692110</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118692110</guid><author>future_xiaowu</author><pubDate>Tue, 13 Jul 2021 09:19:33 +0800</pubDate><description><![CDATA[文章转自:Java的四种引用之强弱软虚 - zwbg - 博客园 (cnblogs.com)

要知道ThreadLocal内存泄漏的原因，需要先了解java中的强软弱虚四种引用
ThreadLocal中的key属于弱引用，而value属于强引用
对于不同类型的引用，java的GC对其有不同的回收机制

在java中提供4个级别的引用：强引用、软引用、弱引用和虚引用。除了强引用外，其他3中引用均可以在java.lang.ref包中找到对应的类。开发人员可以在应用程序中直接使用他们。

1 强引用

强引用.]]></description><category></category></item><item><title><![CDATA[多线程基础-ThreadLocal(转)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118654208</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118654208</guid><author>future_xiaowu</author><pubDate>Sun, 11 Jul 2021 16:15:46 +0800</pubDate><description><![CDATA[转自

https://blog.youkuaiyun.com/qq_35190492/article/details/107599875(ThreadLocal)

https://blog.youkuaiyun.com/zxh87/article/details/19414885(simpleDateFormat线程安全问题)

题外话：

提到ThreadLocal，我还能记起很久之前看的一篇文章，主题并不是关于ThreadLocal，主要是将SimpleDateFormat这个类的线程安全问题，以及具体的解决办法，初读这一]]></description><category></category></item><item><title><![CDATA[多线程基础-CAS(乐观锁)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118544847</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118544847</guid><author>future_xiaowu</author><pubDate>Sat, 10 Jul 2021 20:25:46 +0800</pubDate><description><![CDATA[参考:

https://blog.youkuaiyun.com/Hellowenpan/article/details/103202898

https://blog.youkuaiyun.com/v123411739/article/details/79561458

https://csp1999.blog.youkuaiyun.com/article/details/116136920

写在前面：很多人(包括我)刚了解多线程这个概念的时候，对并发的概念理解是很模糊的，也不清楚所谓的线程安全问题到底是什么意思，这些概念是必须要明确清晰]]></description><category></category></item><item><title><![CDATA[java中的深浅拷贝]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118599886</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118599886</guid><author>future_xiaowu</author><pubDate>Sat, 10 Jul 2021 15:20:25 +0800</pubDate><description><![CDATA[参考:https://csp1999.blog.youkuaiyun.com/article/details/115702607

在过去很长的一段时间里，博主对深浅拷贝的区别在脑海中的概念大概如下：

首先，拷贝这玩意儿就像是复制，有点像我们把对象中属性通过反射遍历然后挨个赋值给另一个对象

假如一个类由若干类组合而成，内部包含若干其它类的对象的引用

浅拷贝就只拷贝一般属性值，不拷贝引用，而深拷贝则会拷贝所有属性

然后我看了一眼大佬的博客，发现完全错了，属于是歪到银河系以外了已经是

对象的存储机制

此处是jv]]></description><category></category></item><item><title><![CDATA[HashMap源码解析(转载)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118520462</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118520462</guid><author>future_xiaowu</author><pubDate>Tue, 06 Jul 2021 14:53:14 +0800</pubDate><description><![CDATA[转自

https://csp1999.blog.youkuaiyun.com/article/details/109442223
https://csp1999.blog.youkuaiyun.com/article/details/109496637

HashMap主要考点就是hash冲突处理方式和扩容机制，以及后续引入的红黑树

涉及红黑树会有更多的考点 左旋 右旋 染色以及其定义特征 还有插入 删除的平衡操作

到现在我也没有找到合适的删除数据平衡的总结，实在不行去捋下HashMap中的树的删除方法
...]]></description><category></category></item><item><title><![CDATA[HashTable源码解析(转载)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118520319</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118520319</guid><author>future_xiaowu</author><pubDate>Tue, 06 Jul 2021 14:46:55 +0800</pubDate><description><![CDATA[转自

https://csp1999.blog.youkuaiyun.com/article/details/112853249

如果你看过一些HashMap的源码，不难发现，很像hash算法不同的旧版HashMap，且所有方法加了锁所以是线程安全的，另外就是在put null作为key的时候会抛出NPE异常而不是像HashMap一样专门留个位置存null的key
...]]></description><category></category></item><item><title><![CDATA[HashSet源码解析(转载)]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118518849</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118518849</guid><author>future_xiaowu</author><pubDate>Tue, 06 Jul 2021 13:58:50 +0800</pubDate><description><![CDATA[转自草帽的博客

https://csp1999.blog.youkuaiyun.com/article/details/112602510

HashSet基于HashMap实现，所有元素的value值均为一个Object常量值，所以它也具有HashMap的特性，无序，线程不安全，键值不能重复

在工作中我曾遇到一个问题，就是连续操作几个Set，其中一个Set包含""元素，我调用remove("")无法删除其中的""空元素，导致DB仍旧写入了这个空值，具体原因没有深究，当时的解决方案是new一个HashSet，旧的s]]></description><category></category></item><item><title><![CDATA[java8 HashMap面试问题点整理]]></title><link>https://blog.youkuaiyun.com/future_xiaowu/article/details/118220841</link><guid>https://blog.youkuaiyun.com/future_xiaowu/article/details/118220841</guid><author>future_xiaowu</author><pubDate>Tue, 06 Jul 2021 10:29:22 +0800</pubDate><description><![CDATA[这里放一个大佬博客的传送门

https://blog.youkuaiyun.com/v123411739/article/details/78996181

在开始看JDK8之前，我注意到博客中提到java7中的HashMap在多线程下会抛出异常，HashMap本身并不是线程安全的，但还是关注一下用来学习。

java7下HashMap并发条件下行程环形链表并在调用get方法后报错的原因


do {
    Entry&lt;K,V&gt; next = e.next; // &lt;--假设线程一执行到这里就被调]]></description><category></category></item></channel></rss>