<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BeNiceman的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BeNiceman</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BeNiceman]]></copyright><item><title><![CDATA[druid keepAlive 导致数据库连接数飙升]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/134557294</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/134557294</guid><author>BeNiceman</author><pubDate>Wed, 22 Nov 2023 17:03:36 +0800</pubDate><description><![CDATA[shrink方法中这两行代码从connections[]数组移除的数据库连接，和shrink方法中这两行代码上面的添加到keepAliveConnections[]数组中的连接不一致。1.本地环境在执行完某个复杂业务，主要包含20几个查询SQL的操作后，会导致数据库连接池一直升高maxActive限制失效。3.进行本地调试跟踪发现druid 的shrink 方法在保活处理时存在问题。打开druid debug日志,发现如下报错。druid版本：1.2.11。]]></description><category></category></item><item><title><![CDATA[Linux no such file or directiory ,文件存在但是报文件找不到 异常]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/129750259</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/129750259</guid><author>BeNiceman</author><pubDate>Fri, 24 Mar 2023 16:05:39 +0800</pubDate><description><![CDATA[让小哥通过locale命令查了下果然他们服务器上设置的编码是GBK的，但是我在将文件打包成ZIP的时候我的Mac是UTF-8的，并且启动脚本里设置了-Dfile.encoding=utf-8,简而言之是编码不匹配导致的，最终基于最小改动原则的解决方案是将ZIP在堡垒机里解压后通过FTP上传到服务器目录下，文件就可以正常下载了。我的第一反应是不可能，文件路径搞错了吧--。2）.排除程序权限问题--> 运维现场截图上看到文件权限-rw-r--r--，用户组也没问题。至此 排查结束就是编码不一致导致的锅。]]></description><category></category></item><item><title><![CDATA[EasyExcel excel读取功能源码走读]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/125620165</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/125620165</guid><author>BeNiceman</author><pubDate>Tue, 05 Jul 2022 16:23:58 +0800</pubDate><description><![CDATA[EasyExcel最简单的读示例代码：EasyExcel.read(fileName, DemoData.class, new PageReadListener(dataList -> {
for (DemoData demoData : dataList) {
log.info("读取到一条数据{}", JSON.toJSONString(demoData));
}
})).sheet().doRead();
public static ExcelReaderBuilder read(...]]></description><category></category></item><item><title><![CDATA[EasyExcel 读取不到数据]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/125404875</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/125404875</guid><author>BeNiceman</author><pubDate>Wed, 22 Jun 2022 10:49:27 +0800</pubDate><description><![CDATA[EasyExcel]]></description><category></category></item><item><title><![CDATA[算法复杂度分析]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/105524464</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/105524464</guid><author>BeNiceman</author><pubDate>Tue, 14 Apr 2020 23:57:58 +0800</pubDate><description><![CDATA[时间复杂度

时间复杂度：用大O来表示，一般的有O(1),O(n),O(logn),O(nlogn),O(n2)

O(1)：算法的运行时间不随数据集N的变大而变大

O(n)：算法的运行时间跟数据集呈线性增长趋势

O(n2)：一般多出现在两层循环中出现



上图程序总时间 

当 n 很大时，你可以把它想象成 10000、100000。而公式中的低阶、常量、系数三部分并不左右增长趋势，所以都...]]></description><category></category></item><item><title><![CDATA[VELOCITY 模板动态生成建表SQL]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/105438446</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/105438446</guid><author>BeNiceman</author><pubDate>Fri, 10 Apr 2020 18:37:06 +0800</pubDate><description><![CDATA[最近由于项目功能实现的需要，采用了Velocity模板引擎来实现动态生成创建数据库表的SQ语句，之后采用mybatis执行生成的SQL。(Velocity下文简称vy)

Velocity 官网：http://velocity.apache.org/engine/devel/user-guide.html#break，官方文档很重要！

在我的项目中Velocity的使用流程如下：



直接使用...]]></description><category></category></item><item><title><![CDATA[多线程知识点整理（一）]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/105307422</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/105307422</guid><author>BeNiceman</author><pubDate>Sat, 04 Apr 2020 13:52:47 +0800</pubDate><description><![CDATA[多线程是为了提高CPU的处理效率，也即提高程序的执行效率而引进的。因为在操作系统中CUP，内存，硬盘（IO设备）3者之间存在处理速度上的显著差异这是硬件层面无法解决的矛盾。CPU的处理速度&gt;内存&gt;硬盘(IO设备)，为了平衡和内存之间速度差异cpu中引入了缓存，为了能分时复用cpu引入了多线程。

多线程常用的实现方式有，继承Thread类和实现Runnable接口。

在单条件（con...]]></description><category></category></item><item><title><![CDATA[Spring源码解析复习]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/105128301</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/105128301</guid><author>BeNiceman</author><pubDate>Thu, 26 Mar 2020 22:06:48 +0800</pubDate><description><![CDATA[1.spring中如何解决循环依赖问题？

首先我们来说一下什么是循环依赖，所谓的循环依赖是指A类中有B类的属性，而B类中包含A类的属性。

spring中解决循环依赖有个前置条件，就是只针对scope是singleton的类才对循环依赖的问题给予解决，对prototype类型的不支持会抛出异常。spring在创建bean的时候，是不等bean创建完成就会将创建bean的objectFactory...]]></description><category></category></item><item><title><![CDATA[JVM知识点复习]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/104961808</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/104961808</guid><author>BeNiceman</author><pubDate>Thu, 19 Mar 2020 17:47:56 +0800</pubDate><description><![CDATA[JVM = 类加载器(classloader) + 执行引擎(execution engine) + 运行时数据区域(runtime data area)



运行时数据区域

JVM内存中的运行时数据区分为：方法区，虚拟机栈，堆，本地方法栈，程序计数器5大部分



其中JAVA堆和方法区是线程共享的内存，java虚拟机栈，程序计数器，本地方法栈是各个线程私有的内存区域。

程序...]]></description><category></category></item><item><title><![CDATA[Spring 复习之AOP]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/104945092</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/104945092</guid><author>BeNiceman</author><pubDate>Wed, 18 Mar 2020 15:41:23 +0800</pubDate><description><![CDATA[什么是AOP？

Aop是有别与OOP模式的切面编程模式。OOP将软件系统分为了多个模块类似的，用户管理模块，订单管理等，而AOP是对OOP模式的一种补充，把各个模块中需要重复涉及到的功能点给抽取出来做成一个切面的形式来提供给各个模块使用，这种方式对业务代码的侵入性小，耦合度低，常用的有日志系统，异常处理，性能统计等。

在Spring中可以直接通过注解或XML配置的方式来实现AOP功能，在这顺便...]]></description><category></category></item><item><title><![CDATA[JAVA基础复习（二），HashMap的实现原理]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/104924043</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/104924043</guid><author>BeNiceman</author><pubDate>Tue, 17 Mar 2020 17:23:39 +0800</pubDate><description><![CDATA[HashMap的JDK1.8的实现主要是由数组+单向链表+红黑树组成的,数据存储结构如下图。（JDK1.8之前采用的只是，数组+单向链表）

当链表长度大于8时会将链表转换成红黑树的结构来存储进一步提升性能。










HashMap默认数组长度为16，在往map中放元素时，首先会根据key进行Hash操作拿到hash值，然后进行取模操作，hash%16

得到在table中的inde...]]></description><category></category></item><item><title><![CDATA[JAVA基础知识复习（一）]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/104921752</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/104921752</guid><author>BeNiceman</author><pubDate>Tue, 17 Mar 2020 15:51:45 +0800</pubDate><description><![CDATA[1.String str="i"与 String str=new String("i")一样吗？

不一样，前一个是先去常量池中去找看看有没有“i”如果有的话，直接引用，否则就是在常量池中新建一个对象；

后一种，是直接在JVM的堆内存中去新建一个对象。

常量池，在JDK1.6之前是放在JVM的方法区中，JDK1.7后放到的堆内存中了

2.普通类和抽象类有什么区别？

普通类不能有抽象方法，抽...]]></description><category></category></item><item><title><![CDATA[Tomcat启动项目时加载了两遍Spring配置文件]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/79272482</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/79272482</guid><author>BeNiceman</author><pubDate>Tue, 06 Feb 2018 17:13:34 +0800</pubDate><description><![CDATA[解决方式，将Tomcat下的发布路径不直接放到webapps目录下，而是在Tomcat的webapps目录下建一个子目录，并将war
发布到改子目录下，就解决了重复加载spring配置的问题了。当然也可以将服务发布到与webapps同级目录下等其他方法，个人比较喜欢这种方式。]]></description><category></category></item><item><title><![CDATA[泛型通配符]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/79030992</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/79030992</guid><author>BeNiceman</author><pubDate>Thu, 11 Jan 2018 10:28:16 +0800</pubDate><description><![CDATA[泛型的通配符 ：？，表示可以设置任何泛型类型，但是由于类型的不确定性这个类型不能被修改。
衍生的两个子通配符：
？extends 类：设置泛型上限,如？ extends Number，表示？泛型类型只能为Number或Number的子类，Integer,Double等。
？super 类：设置泛型下限，例如 ？ super String ,表示只能设置String或其父类Object。
]]></description><category></category></item><item><title><![CDATA[BUG 关于iterator遍历JSONArray]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78754444</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78754444</guid><author>BeNiceman</author><pubDate>Fri, 08 Dec 2017 18:16:35 +0800</pubDate><description><![CDATA[用iterator遍历jsonArray时 
Iterator iterator=jsonArr.iterator(); 
while(iterator.hasNext()){ 
                                HighwayVehicleDto jo=(HighwayVehicleDto) iterator.next();]]></description><category></category></item><item><title><![CDATA[Matcher，Pattern]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78656853</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78656853</guid><author>BeNiceman</author><pubDate>Tue, 28 Nov 2017 16:54:12 +0800</pubDate><description><![CDATA[Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(string); 
matcher 有find(),matches(),lookingAt()等3个用于匹配的方法 
前两个在实际开发中运用较多， 
1.find() 有一个匹配就找到一个，匹配位置相应增加，直到匹配完整个字符串 
2.matche]]></description><category></category></item><item><title><![CDATA[用selectKey获取id值为负数]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78541009</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78541009</guid><author>BeNiceman</author><pubDate>Wed, 15 Nov 2017 15:06:47 +0800</pubDate><description><![CDATA[项目用的是oracle结合mybatise，可能是受Mysql的影响过深，我在上层（contoller层）获取用这种方式 
 
            select 
            nvl(max(ID)+1,1) from EDSP_CLIENT_KEY_CODE 
生成的id时都用了这样的方式： 
int id=edspClientKeyCodeService.newUpdateOrA]]></description><category></category></item><item><title><![CDATA[@Value在工具类中取到的值为null]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78540920</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78540920</guid><author>BeNiceman</author><pubDate>Wed, 15 Nov 2017 15:00:47 +0800</pubDate><description><![CDATA[@Component 
public class MailUtil {/** 日志 */
private static Logger log = LoggerFactory.getLogger(MailUtil.class);/** 发件人邮箱 */
@Value("${mail.senderMail}")
private String myEmailAccount;
在工具类中已用componen]]></description><category></category></item><item><title><![CDATA[在controller中获取不到的session值中的验证码问题]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78534265</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78534265</guid><author>BeNiceman</author><pubDate>Tue, 14 Nov 2017 19:51:03 +0800</pubDate><description><![CDATA[由于要对接口写单元测试用例，所以我就用httpClient模拟了浏览器访问，在这个过程中犯傻了。。。我用验证码的测试页面（浏览器端）去访问后台拿到了验证码，然后里利用我的httpClient将拿到的验证码数据和其他模拟的参数请求给后台接口校验，发现后台校验验证码的方法里总是取不到session值，这我就很郁闷了，怀疑是产生了两个请求的对象。。看代码果然CloseableHttpClient http]]></description><category></category></item><item><title><![CDATA[spring结合disconf时@Value注解获取不到值]]></title><link>https://blog.youkuaiyun.com/BeNiceman/article/details/78532371</link><guid>https://blog.youkuaiyun.com/BeNiceman/article/details/78532371</guid><author>BeNiceman</author><pubDate>Tue, 14 Nov 2017 16:55:47 +0800</pubDate><description><![CDATA[在controller中利用@Value注解获取配置信息时，发现没有获取到，网上看了很多文章，由于在项目中集成了disconf与网友提供的方案稍有出入。首先我们得知道，

在使用spring mvc时，实际上是两个spring容器：

1，dispatcher-servlet.xml 是一个，我们的controller就在这里，所以这个里面也需要注入属性文件

org.springfr]]></description><category></category></item></channel></rss>