<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AReallyMan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AReallyMan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AReallyMan]]></copyright><item><title><![CDATA[excel导出引发的cpu问题]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/148332481</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/148332481</guid><author>AReallyMan</author><pubDate>Fri, 30 May 2025 10:30:48 +0800</pubDate><description><![CDATA[问题：线上导出订单记录有十几万条，发现每次导出cpu都会爆满。Apache POI 的 XSSF API 导出大量数据。]]></description><category></category></item><item><title><![CDATA[nginx的配置和使用]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/140628651</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/140628651</guid><author>AReallyMan</author><pubDate>Tue, 23 Jul 2024 10:32:21 +0800</pubDate><description><![CDATA[server_name要监听的服务地址，可能是ip,也可能是域名，如果是ip则只有符合ip+端口才会被监听，如果是域名（域名已经指向了一个端口）则符合这个域名或者这个域名的一部分也会被监听，如果域名指向的端口和Listen的不一样则不监听。3、upstream tomcat_server这里是后台的服务地址，tomcat_server是自定义命名的服务名称，当location 配置了。2、在1条件满足下，会进入Location，可以对不同的url进行设置，比如完全匹配，前后缀匹配，部分匹配。]]></description><category></category></item><item><title><![CDATA[聚合项目学习]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/129306180</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/129306180</guid><author>AReallyMan</author><pubDate>Thu, 27 Jun 2024 14:55:02 +0800</pubDate><description><![CDATA[base基础工程不需要启动类，可以直接删除，也不需要配置文件，也可以直接删除，base主要就是写一些公共模块。--复制父工程的gav左边，因为base和parent是平级所有引入relativepath  ../-->删除<dependencies></dependencies>，父工程不需要依赖，只做管理，所以引入。父工程也不需要src可以直接删除，父工程只需要保留一个pom即可。2、父工程我们主要作用是管理依赖，版本控制，删除不需要的文件夹。3、修改父工程pom文件，打包方式用pom ，]]></description><category></category></item><item><title><![CDATA[MultipartFile 上传文件的踩坑点]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/127103514</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/127103514</guid><author>AReallyMan</author><pubDate>Thu, 29 Sep 2022 11:14:31 +0800</pubDate><description><![CDATA[上传文件]]></description><category></category></item><item><title><![CDATA[json字符串转换]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/123894030</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/123894030</guid><author>AReallyMan</author><pubDate>Fri, 01 Apr 2022 11:42:10 +0800</pubDate><description><![CDATA[转换：StringUtil.getValueFromMap(JSONObject.toJavaObject(JSON.parseObject(a), Map.class)))


]]></description><category></category></item><item><title><![CDATA[sql中用in 和not in分析]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/123420358</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/123420358</guid><author>AReallyMan</author><pubDate>Fri, 11 Mar 2022 11:21:06 +0800</pubDate><description><![CDATA[WHY？
IN 和 NOT IN 是比较常用的关键字，为什么要尽量避免呢？
1、效率低
项目中遇到这么个情况：
t1表 和 t2表  都是150w条数据，600M的样子，都不算大。
但是这样一句查询 ↓
select * from t1 where phone not in (select phone from t2)
直接就把我跑傻了。。。
十几分钟，检查了一下  phone在两个表都建了索引，字段类型也是一样的。原来 not in 是不能命中索引的。。。。
改成 NOT EXISTS 之后查询 20s ]]></description><category></category></item><item><title><![CDATA[ThreadLocal实际项目应用]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/119883736</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/119883736</guid><author>AReallyMan</author><pubDate>Tue, 24 Aug 2021 11:00:10 +0800</pubDate><description><![CDATA[一、定义
threadlocal：它是一个线程内部的存储类，可以在指定线程内存储数据，数据存储以后，只有指定线程可以得到存储数据，提供了线程内存储变量的能力，这些变量不同之处在于每一个线程读取的变量是对应的互相独立的，通过get和set方法就可以得到当前线程对应的值，
做个不恰当的比喻，从表面上看ThreadLocal相当于维护了一个map，key就是当前的线程，value就是需要存储的对象。
这里的这个比喻是不恰当的，实际上是ThreadLocal的静态内部类ThreadLocalMap为每个Thread]]></description><category></category></item><item><title><![CDATA[Mysql存储过程分析]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/119817972</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/119817972</guid><author>AReallyMan</author><pubDate>Fri, 20 Aug 2021 11:29:20 +0800</pubDate><description><![CDATA[一、
用户连接到myql服务端，执行一个sql语句会经过以下几个步骤，先与连接层进行连接，然后服务层对用户提供的sql进行优化（可能你写的sql查询的是a,但经过优化器之后他变成了查询b）,引擎层InnoDB支持事务，高并发，行锁（支持事务相率相对变慢，但因为他是行锁可以进行高并发，所以相率还算可以），MyISAM不支持事务，性能优先，表锁，一次锁住一张表

二、
sql执行过程
select …from …join …on …where …group by …having … order by … lim]]></description><category></category></item><item><title><![CDATA[Java常用工具库记录]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/119330565</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/119330565</guid><author>AReallyMan</author><pubDate>Mon, 02 Aug 2021 18:09:37 +0800</pubDate><description><![CDATA[1、比较两个对象是否相等

当我们用equals比较两个对象是否相等的时候，还需要对左边的对象进行判空，不然可能会报空指针异常，我们可以用java.util包下Objects封装好的比较是否相等的方法

Objects.equals(strA,strB);

源码是这样的

publicstaticbooleanequals(Objecta,Objectb){
return(a==b)||(a!=null&amp;&amp;a.equals(b));
}
...]]></description><category></category></item><item><title><![CDATA[linux自动备份数据库并发送邮件]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/115459424</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/115459424</guid><author>AReallyMan</author><pubDate>Tue, 06 Apr 2021 14:05:12 +0800</pubDate><description><![CDATA[首先写一个定时任务脚本：



第三行就是数据库备份命令，第四行就是发送附件的命令，其中发送附件我用mail -a +附件的方式一直无法发送，最后用mutt方式方式附件成功!

下方为配置安装邮件的步骤：

使用场景：
阿里云服务器centos7(linux)+发送端：163邮箱+接收端：qq邮箱

准备：
163邮箱配置


QQ邮箱配置


开始配置
阿里云封闭25端口，所以不能通过默认的端口（25）发送邮箱服务，需要通过邮箱服务器的加密端口（465）来完成发送邮件的服务。配置流程如下：

①修...]]></description><category></category></item><item><title><![CDATA[服务器内存占用问题]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/115373999</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/115373999</guid><author>AReallyMan</author><pubDate>Thu, 01 Apr 2021 14:54:11 +0800</pubDate><description><![CDATA[场景：业务突然报错，通过后台日志看的报错是 error writing file /tmp/XXX

一、在服务器上输入：df -h



当时dev/vdal这个盘已经100%利用率了，这个盘就差不多相当于win的c盘，只能去删除没用的文件，主要是日志文件

二、查看目录下每个文件磁盘占用大小：du -ah --max-depth=1



发现这两个文件比较大，再进入进行排查删除大文件即可
...]]></description><category></category></item><item><title><![CDATA[springboot打包项目报错文件找不到]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/115094776</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/115094776</guid><author>AReallyMan</author><pubDate>Mon, 22 Mar 2021 19:57:02 +0800</pubDate><description><![CDATA[场景：项目采用的是父子继承类型的项目

package打包一直报错，找不到依赖的java文件，但是项目可以正常启动，最后考虑到父项目并没有被打包进系统，首先打包依赖的父项目，再打包子项目成功运行
...]]></description><category></category></item><item><title><![CDATA[服务器相关命令]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/115004586</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/115004586</guid><author>AReallyMan</author><pubDate>Fri, 19 Mar 2021 13:45:36 +0800</pubDate><description><![CDATA[1、登陆root用户,再通过root用户登陆oracle用户，#su –oracle
2、开启数据库监听，$lsnrctl start
3、连接数据库，$sqlplus / as sysdba
4、启动数据库，SQL&gt;startup;
5、返回root用户，$su - root
6、进入jboss5路径，#cd /OA-YIYONG/jboss5/bin


1、登陆root用户,再通过root用户登陆oracle用户，#su –oracle
2、关闭数据库监听，$lsnrctl ...]]></description><category></category></item><item><title><![CDATA[sql优化学习]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/113178167</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/113178167</guid><author>AReallyMan</author><pubDate>Tue, 26 Jan 2021 14:25:03 +0800</pubDate><description><![CDATA[一、Order by排序优化

当需要对age,money进行排序时可以加上复合索引，然后 select id,age,money from eap order by age,money,这个时候使用的是usIng Index，orderby的顺序需要和索引的顺序相同



二、子查询用连接查询替代



三、Or操作

如果我们是用or关联两个字段，那么这两个字段都要有索引，如果一个有一个没有，则索引失效，加一个复合索引也不行

但可以用union替换or操作，提示查询效率



四、limit分页查询
]]></description><category></category></item><item><title><![CDATA[tomcat服务器经常报错PermGen Space]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/111675444</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/111675444</guid><author>AReallyMan</author><pubDate>Fri, 25 Dec 2020 13:49:42 +0800</pubDate><description><![CDATA[分析tomcat环境下的重启方式

方式一：sh shutdown.sh这种方式是让正在运行的java线程从运行态（running）改变为sleep，通过这种命名java线程会越来越多，这种方式关闭的tomcat，无法关闭JVM进程，JVM可以去清清除ermGenSpace中的内存（

方式二：kill -9 这种方式

当我们的tomcat中有很多的class文件时，就很有可能报错PermGen Space，指的是内存的永久保存区，该块内存主要是被JVM用来存放 class 和 mete 信息的，当 cl]]></description><category></category></item><item><title><![CDATA[Oracle锁表处理]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/110491627</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/110491627</guid><author>AReallyMan</author><pubDate>Wed, 02 Dec 2020 17:13:20 +0800</pubDate><description><![CDATA[第一步：

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

第二步
alter system kill session '869,209';
]]></description><category></category></item><item><title><![CDATA[jvm、树、数据库存储引擎知识总结]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/109443653</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/109443653</guid><author>AReallyMan</author><pubDate>Mon, 02 Nov 2020 18:06:42 +0800</pubDate><description><![CDATA[一、jvm相关

1、java执行流程以及五个运行时区



程序计数器：当前线程所执行的字节码的行号指示器，为了线程切换后能恢复到正确的位置，每条线程都需要有一个独立的程序计数器，互不影响，独立存储，我们称之为“线程私有”，他也是java虚拟机规范中没有规定任何oom情况的区域

虚拟机栈：线程私有，生命周期和线程相同，它是描述java方法执行的内存模型：每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接等信息，每个方法从调用到执行完成的过程，就对应这一个栈帧在虚拟机栈中从入栈到出]]></description><category></category></item><item><title><![CDATA[通过docker整合rabbitmq和redis项目案例]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/109380104</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/109380104</guid><author>AReallyMan</author><pubDate>Fri, 30 Oct 2020 15:14:18 +0800</pubDate><description><![CDATA[1、安装redis

docke pull redis:5.0.8(例如)

安装完成后，我们可以使用以下命令来运行 redis 容器：


$ docker run -itd --name redis-test -p 6379:6379 redis:5.0.8

-p 6379:6379：映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

安装成功

接着我们通过 redis-cli 连接测试使用 redis 服务。


$ do]]></description><category></category></item><item><title><![CDATA[深入理解java序列化及Serializable接口的作用]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/109334672</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/109334672</guid><author>AReallyMan</author><pubDate>Wed, 28 Oct 2020 16:03:47 +0800</pubDate><description><![CDATA[首先解释一下字节流和字符流：

要把一片二进制数据数据逐一输出到某个设备中，或者从某个设备中逐一读取一片 二进制数据，不管输入输出设备是什么，我们要用统一的方式来完成这些操作，用一种抽象 的方式进行描述，这个抽象描述方式起名为 IO 流，对应的抽象类为 OutputStream 和 InputStream，不同的实现类就代表不同的输入和输出设备，它们都是针对字节进行操作的。
    在应用中，经常要完全是字符的一段文本输出去或读进来，用字节流可以吗？计算机中的一切最终都是二进制的字节形式存在。对于...]]></description><category></category></item><item><title><![CDATA[关于return和finally的执行顺序问题]]></title><link>https://blog.youkuaiyun.com/AReallyMan/article/details/109329060</link><guid>https://blog.youkuaiyun.com/AReallyMan/article/details/109329060</guid><author>AReallyMan</author><pubDate>Wed, 28 Oct 2020 11:31:30 +0800</pubDate><description><![CDATA[第一种分析：




顺序是：


System.out.println("1111");
return 1;
System.out.println("1111");
return 2;

第二种分析：






System.out.println("1111");
return 1;
System.out.println("1111");
return 1;

第三种分析：




System.out.println("1111");


System.out.println("1111");

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