<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jiwangyi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jiwangyi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jiwangyi]]></copyright><item><title><![CDATA[IO中BIO,NIO,AIO的区别]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/114868941</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/114868941</guid><author>jiwangyi</author><pubDate>Tue, 16 Mar 2021 10:14:02 +0800</pubDate><description><![CDATA[常见的 IO 模型有哪些？Java 中的 BIO、NIO、AIO 有啥区别
I/O既输入/输出
为了保证操作系统的稳定性和安全性，一个进程的地址空间划分为 用户空间（User space） 和 内核空间（Kernel space ）
像我们平常运行的应用程序都是运行在用户空间，只有内核空间才能进行系统态级别的资源有关的操作，比如如文件管理、进程通信、内存管理等等。也就是说，我们想要进行 IO 操作，一定是要依赖内核空间的能力。
从应用程序的视角来看的话，我们的应用程序对操作系统的内核发起 IO 调用（系统调]]></description><category></category></item><item><title><![CDATA[摩尔投票算法]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/113877996</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/113877996</guid><author>jiwangyi</author><pubDate>Sat, 20 Feb 2021 10:34:32 +0800</pubDate><description><![CDATA[1.摩尔投票算法(获取数组中多余一半的数)
从数组第一个开始循环数组，用array{}作为暂存集合，end{}为结果集合
例：{1,2,1,3,1,1,2,1,5}，输出结果应该为1
	从第一个数字1开始，我们想要把它和一个不是1的数字一起从数组里抵消掉，但是目前我们只扫描了一个1，所以暂时无法抵消它，把它加入到array，array变成了{1}，result由于没有抵消任何元素所以还是原数组{1,2,1,3,1,1,2,1,5}。
	然后继续扫描第二个数，是2，我们可以把它和一个不是2的数字抵消掉了，因为]]></description><category></category></item><item><title><![CDATA[记录：mysql的日常获取]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/112528870</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/112528870</guid><author>jiwangyi</author><pubDate>Tue, 12 Jan 2021 15:20:08 +0800</pubDate><description><![CDATA[正常where  IN 字符串的时候会有问题
但是我们经常会有一个字段中存了好几个甚至一堆的值 ，例如 字段IDes(字符串类型)里面存了100,200,300,400
此时 FIND_IN_SET 就能解决我们这个棘手的问题了
用法如下
SELECT A.Name FROM `t_personal` A WHERE FIND_IN_SET( A.ID , '1,2,3,4,5')
 
SELECT * FROM test_0 where find_in_set('女',t_sex);

查询t_perso]]></description><category></category></item><item><title><![CDATA[java中使用（mq）消息队列]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/111225838</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/111225838</guid><author>jiwangyi</author><pubDate>Tue, 15 Dec 2020 17:16:56 +0800</pubDate><description><![CDATA[为什么使用消息队列
1.解耦 一个系统或一个模块，调用多个系统或模块，耦合性高，不易维护，中间部署mq，当系统需要调取其他的系统或模块时，从mq中消费消息。（谁需要，谁调用）
2.异步 一个系统或模块调取多个系统或模块，运行时间是所有运行时间总和。在调取的中间使用mq，当发起调取时，发送消息进去mq,mq获取返回多个系统和模块的响应，时间减少很多。
3.削峰 在系统使用高峰期时，每秒并发请求5k+,系统直接访问mysql，最多每秒处理2k，高峰期会造成系统崩溃。在中间使用mq，没有的并发请求打到mq中，mq]]></description><category></category></item><item><title><![CDATA[如何实现限流（java）]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/111214700</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/111214700</guid><author>jiwangyi</author><pubDate>Tue, 15 Dec 2020 14:57:44 +0800</pubDate><description><![CDATA[自我理解
服务降级的一种，限制系统输入和输出，达到保护系统的作用。方法【1.计数器（控制单位时间的请求数量，缺点两个单位时间内没有监控，处于监控漏洞）2.滑动窗口(把单位时间等分成若干份，计数器的改进)3.Leaky Bucket 漏桶（通过控制输出速度达到限流的目的）4.Token Bucket 令牌桶（固定容积的容器，以固定速度填充token,每次访问移除token，没有token访问失败）5，spring cloud gateway 默认使用 redis 进行限流，6.sentinel通过配置来控制每]]></description><category></category></item><item><title><![CDATA[简单的WebSocket传输协议]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/110186787</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/110186787</guid><author>jiwangyi</author><pubDate>Thu, 26 Nov 2020 14:30:24 +0800</pubDate><description><![CDATA[前端：
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;springboot项目WebSocket测试demo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;springboot项目websocket测试demo&lt;/h3&gt;
&lt;h4&gt;测试说明&lt;/h4&gt;
]]></description><category></category></item><item><title><![CDATA[BigDecimal的运算及常用知识]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/110110793</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/110110793</guid><author>jiwangyi</author><pubDate>Wed, 25 Nov 2020 09:39:12 +0800</pubDate><description><![CDATA[/**

多个BigDecimal数相加和

@param i
@param arg
@return
*/
public static BigDecimal getBigDecimalSum(BigDecimal i, BigDecimal… arg) {
BigDecimal sum = i;
for (BigDecimal b : arg) {
sum = sum.add(b);
}
return sum;
}

/**

差
@param i
@param arg
@return
*/
public ]]></description><category></category></item><item><title><![CDATA[group_concat()与distinct共同使用]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/109674004</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/109674004</guid><author>jiwangyi</author><pubDate>Fri, 13 Nov 2020 14:19:39 +0800</pubDate><description><![CDATA[SELECT
cid,
GROUP_CONCAT( DISTINCT sname )
FROM
student
GROUP BY
cid;**   ------------可用**
SELECT
cid,
GROUP_CONCAT( distinct sname )
FROM
student
GROUP BY
cid;   --------- 不可用
– DISTINCT  将名字去重
– SEPARATOR 每个名字间有使用"–"连接

...]]></description><category></category></item><item><title><![CDATA[HTML生成PDF模板(Java iText+FreeMarker生成PDF(HTML转PDF))]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/109654942</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/109654942</guid><author>jiwangyi</author><pubDate>Thu, 12 Nov 2020 20:12:48 +0800</pubDate><description><![CDATA[Java iText+FreeMarker生成PDF(HTML转PDF)
1.背景
在某些业务场景中，需要提供相关的电子凭证，比如网银/支付宝中转账的电子回单，签约的电子合同等。方便用户查看，下载，打印。目前常用的解决方案是，把相关数据信息，生成对应的pdf文件返回给用户。

本文源码：http://git.oschina.net/lujianing/java_pdf_demo
2.iText
iText是著名的开放源码的站点sourceforge一个项目，是用于生成PDF文档的一个java类库。通过iTe]]></description><category></category></item><item><title><![CDATA[浅克隆的图解和深克隆图解对比]]></title><link>https://blog.youkuaiyun.com/jiwangyi/article/details/109639142</link><guid>https://blog.youkuaiyun.com/jiwangyi/article/details/109639142</guid><author>jiwangyi</author><pubDate>Thu, 12 Nov 2020 10:55:24 +0800</pubDate><description><![CDATA[**java浅克隆和深克隆**

浅度克隆
JDK提供的克隆是浅度克隆，它只将对象中的基础数据类型的成员变量克隆到新对象中，对象中的引用类型只是克隆了一个引用，克隆后的引用类型还是指向原对象

修改克隆的对象的name和age参数，原user对象内的name和age参数不变，
而修改克隆的对象内内的teacher对象的参数，原user对象参数也发生改变
深度克隆
深度克隆就是把整个对象完全克隆一份，包括对象中的引用类型,如图所示

通过读写操作实现深度克隆【实体必须implements Ser...]]></description><category></category></item></channel></rss>