<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[非正常人研究室]]></title><description><![CDATA[【github：https://github.com/PaulWangCN】研究一些不正常的东西，所有博客不定期修改更新。]]></description><link>https://blog.youkuaiyun.com/ColdFireMan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ColdFireMan]]></copyright><item><title><![CDATA[Linux服务器定时执行脚本清理日志]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/130698962</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/130698962</guid><author>ColdFireMan</author><pubDate>Tue, 16 May 2023 09:50:38 +0800</pubDate><description><![CDATA[程序的日志不正确或者启动脚本命令不正确，随着程序的持续运行，日志文件越来越大，持续占用设备硬盘，如果定期手动清理日志又比较占用大脑CPU和内存，如果忘了就是事故，所以写一个定时执行的脚本去清理日志很有必要。]]></description><category></category></item><item><title><![CDATA[【mybatisplus】版本升级后异常PaginationInnerInterceptor cannot be cast to org.apache.ibatis.plugin.Intercepto]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/127924603</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/127924603</guid><author>ColdFireMan</author><pubDate>Fri, 18 Nov 2022 16:09:06 +0800</pubDate><description><![CDATA[发现还是报错，提示：PaginationInnerInterceptor cannot be cast to org.apache.ibatis.plugin.Interceptor。升级mybatisplus从3.1.2到3.5.2错误修复记录。]]></description><category></category></item><item><title><![CDATA[【exception】通过mysql客户端登录oceanbase异常]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/122583613</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/122583613</guid><author>ColdFireMan</author><pubDate>Wed, 19 Jan 2022 16:14:46 +0800</pubDate><description><![CDATA[现象
有一个oceanbase数据库，提供了登录连接
mysql -hxxx.xxx.xxx.xxxx -P2883 -uroot@xxx#xxxx -pxxxx

但是执行这个命令就报错
Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: NO)

一开始以为是网络或者mysql的root登录权限配置的缘故，但是尝试了别的设备上mysql客户端是可以连接的，那么问题就是自己的mysql客户端有问题。
最后发现是因为oceanba]]></description><category></category></item><item><title><![CDATA[【MySQL】升级增量脚本的编写]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/120742855</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/120742855</guid><author>ColdFireMan</author><pubDate>Wed, 13 Oct 2021 14:20:21 +0800</pubDate><description><![CDATA[升级现场的数据库脚本，因为不同现场的版本不一致，所以如果是要升级，需要找到对应的版本，然后一个一个增量脚本升级，但是有的时候有一些现场是直接修改的，不一定是满足某个版本的实际情况，所以想了一个办法，推出升级的所有增量脚本。

总的思路就是如果不存在就添加。具体涉及到：表的新建、字段的新建和修改和基础数据的插入。
表的新建
判断一张表是否存在，不存在就新建，这个比较简单，如下：
CREATE TABLE IF NOT EXISTS T_TEST  (
  `id` varchar(64)  NOT NULL.]]></description><category></category></item><item><title><![CDATA[【ThreadLocal】单线程反射方法传参使用ThreadLocal]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/120225502</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/120225502</guid><author>ColdFireMan</author><pubDate>Fri, 10 Sep 2021 16:47:10 +0800</pubDate><description><![CDATA[参考使用ThreadLocal

业务场景
在一个线程中，需要使用反射的方式去调用某个类的方法，如：
String randomStr = "ugefqbfl";
//获取类对象
Class clazz = Class.forName("com.xxx.Test");
//实例化对象
Object o = clazz.newInstance();
//获取想要执行的方法
Method execute = clazz.getDeclaredMethod("execute", String.class);
/.]]></description><category></category></item><item><title><![CDATA[【Exception】fastjson的toJSONString()导致OOM]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/116263548</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/116263548</guid><author>ColdFireMan</author><pubDate>Thu, 29 Apr 2021 11:01:51 +0800</pubDate><description><![CDATA[现象
线上代码跑一段时间后出现了OOM的问题，经过日志的检查，发现异常出现在fastjson的toJSONString()导致的OOM
解决
将toJSONString()方法改成jackson的转字符串方法
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(obj);

原因
fastjson在转成json字符串的时候会分配一个byte[]，当数据量很大的时候，需要分配]]></description><category></category></item><item><title><![CDATA[【netty】主动关闭netty server]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/114393476</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/114393476</guid><author>ColdFireMan</author><pubDate>Fri, 05 Mar 2021 13:47:41 +0800</pubDate><description><![CDATA[设计一个可以控制监听端口的http服务端的开启和关闭的功能，启动部分比较简单，关闭查了一下，找到了功能，以下是demo

import com.wangjx.swallow.common.server.IServer;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.Channe.]]></description><category></category></item><item><title><![CDATA[【工具类】测试目标设备网络是否可达]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/114005064</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/114005064</guid><author>ColdFireMan</author><pubDate>Tue, 23 Feb 2021 23:03:30 +0800</pubDate><description><![CDATA[作用
有时候我们需要监控两台设备设备之间的网络是否可达，或者到目的设备的指定端口是否可达。这个工具类可以用于简单的测试。
import java.io.IOException;
import java.net.*;
import java.util.Enumeration;

/**
 * 工具类，检测到目标设备或者是目标设备的端口是否可达
 */
public class NetTestUtils {

    /**
     * 测试到指定IP设备的端口是否可达
     * @param ip 目标]]></description><category></category></item><item><title><![CDATA[【activemq】activemq小版本升级步骤]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/109512210</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/109512210</guid><author>ColdFireMan</author><pubDate>Thu, 05 Nov 2020 14:55:28 +0800</pubDate><description><![CDATA[1.上传activemq升级包到目标设备，放在原来的activemq的同级目录下，然后解压如：

tar -xzvf apache-activemq-5.15.13-bin.tar.gz



2.activemq5.15.13依赖jdk8，提前检查一下当前的环境是否是jdk8的环境：

java -version

如果不是jdk8的，检查设备上是否有jdk8的包，如果没有，上传一个jdk8的包上去，比如解压后路径在这个位置：/app/jdk1.8.0_181



3.进入activemq解压后的目..]]></description><category></category></item><item><title><![CDATA[【kafka】kafka集群的搭建、用户的设置和权限的控制]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/109484588</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/109484588</guid><author>ColdFireMan</author><pubDate>Wed, 04 Nov 2020 09:55:20 +0800</pubDate><description><![CDATA[准备
我们准备起码两个实例，你可以在一台设备上操作，但是起码要有两个实例。我这边准备了三台设备，分别为192.168.5.1,192.168.5.2,192.168.5.3。然后是kafka的包和zookeeper的包，kafka和zookeeper的版本要适配。我这里准备的是kafka_2.12-2.4.0.tgz和apache-zookeeper-3.5.8-bin.tar.gz。
zookeeper集群的搭建
kafka的运行依赖zookeeper，考虑到高可用的能力，所以需要搭建一个zookeepe]]></description><category></category></item><item><title><![CDATA[【exception】java.lang.NoClassDefFoundError Could not initialize class]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/108887717</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/108887717</guid><author>ColdFireMan</author><pubDate>Wed, 30 Sep 2020 16:45:55 +0800</pubDate><description><![CDATA[现网有一个程序，之前是正常的，替换包以后，发现出现这个异常，写一下排查过程

过程

这个类、这个程序在本地的IDEA中没有问题，编译是正常的，怀疑是正式环境和测试环境有区别。
仔细查看日志，查找问题点。结果发现在一堆报错的中间，有一个不同的报错，是找不到某个类。
在IDEA中查看找不到的这个类，发现这个类GSON，版本是2.8.5，查看现网。因为现网的依赖库都是放在jar包外的lib目录下，进入lib目录，发现GSON包版本是2.2.4。
将gson包替换后重启，问题解决。

反思
发生异常的类用到了g.]]></description><category></category></item><item><title><![CDATA[【exception】cxf  can‘t find request url for Observer]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/108770500</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/108770500</guid><author>ColdFireMan</author><pubDate>Thu, 24 Sep 2020 11:31:02 +0800</pubDate><description><![CDATA[框架是springboot+shiro，在登录页面输入账号密码后点击登录，登录没生效，后台日志发生报错

解决方法:
原来是/*，拦截了所有请求，需要修改成实际的路径
    @Bean("cxfServletRegistration")
    public ServletRegistrationBean dispatcherServlet() {
        //注册servlet 拦截/ws 开头的请求 不设置 默认为：/services/*
        return new Servlet.]]></description><category></category></item><item><title><![CDATA[elasticsearch开启集群用户名密码认证]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/108738341</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/108738341</guid><author>ColdFireMan</author><pubDate>Tue, 22 Sep 2020 18:45:09 +0800</pubDate><description><![CDATA[参考文章：Elasticsearch 7.1.1 集群 + 配置身份验证

下载elastics
elasticsearch官网下载链接：https://www.elastic.co/cn/downloads/elasticsearch
放到合适的目录后解压。
macos用户不推荐brew安装，有坑。
设置用户认证
前提
elasticsearch在6.3及以后的版本已经自带xpack，所以可以直接通过下文的方式进行设置。如果是6.2及之前的版本，需要自己下载安装xpack。
下载地址：
https://.]]></description><category></category></item><item><title><![CDATA[【charset】字符串和字符集的理解]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/107211448</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/107211448</guid><author>ColdFireMan</author><pubDate>Wed, 08 Jul 2020 17:44:59 +0800</pubDate><description><![CDATA[今天在写socket接口的时候，需要接受数据，对数据处理完以后需要发送到别的地址。因为接受和发送的数据字符集不同，所以中间需要处理字符集。以前对这个不是很清楚，今天在写的时候发现了两点，做一下总结。本人做Java开发，所以都是用Java举例。

字符串
首先明确一点，Java的String类型，是没有字符集的概念的，字符串就只是字符串。比如:
String str = "这是一个字符串ABC";

字符集
举常见的GBK和UTF-8，需要用到字符集的地方，一般是接收数据和发送数据的时候，你想要把字节数组按.]]></description><category></category></item><item><title><![CDATA[【spring cloud stream】spring cloud stream配置多个kafka地址]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/107157036</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/107157036</guid><author>ColdFireMan</author><pubDate>Mon, 06 Jul 2020 13:59:11 +0800</pubDate><description><![CDATA[网上查找了关于配置多个kafka地址的方法，可惜没有找到，在一个博客看到了这个方法，大致方法是对的，但是还是有小错误，导致失败。所以自己修改完亲测有效后，写了这个博客。
spring: 
  cloud:
    stream:
      binders:
        # 接下来的kafka1和kafka2就是两个kafka broker的环境配置，配置完成后可以应用kafka1、kafka2这个定义的名字
        # 在别的地方引用。功能和profile中的dev环境、test环境、prod]]></description><category></category></item><item><title><![CDATA[【exception】NoSuchMethodError kotlin.collections.ArraysKt.copyInto([B[BIII)[B]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/106833893</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/106833893</guid><author>ColdFireMan</author><pubDate>Thu, 18 Jun 2020 14:19:19 +0800</pubDate><description><![CDATA[现象
本地在IDEA上使用okhttp的时候没有问题，在给同事用的时候发现一直报这个错误，并且几个同事出现的可能性都不一样。怀疑跟IDEA的版本有问题，因为抛出的异常跟IDEA的包有关系。
解决
在pom.xml中加入
&lt;!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.jetbrains.kotlin&lt]]></description><category></category></item><item><title><![CDATA[【JS】JS中的小tip之==和===的区别]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/106209317</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/106209317</guid><author>ColdFireMan</author><pubDate>Tue, 19 May 2020 10:40:38 +0800</pubDate><description><![CDATA[在写JS的时候，发现框架中有用到 == 和 === ，在Java里面是没有===的用法的，所以查询了资料了解一下。

区别
因为JS是弱类型的语言，所以存在变量的类型是可以隐性转换的。在使用==进行比较的时候，JS会把两个变量改成同一个类型进行比较，例如：
var a = '1'
var b = 1
console.log(a == b)

可以看到a和b是不同类型的，JS会隐性的转成同一个类型，所以最后比较的结果就是true。
而使用===进行比较的时候，这个是强类型比较，JS不会进行隐性转换。所以最后.]]></description><category></category></item><item><title><![CDATA[【Java】关于对System.getProperty中user.dir的理解]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/105968160</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/105968160</guid><author>ColdFireMan</author><pubDate>Thu, 07 May 2020 11:02:54 +0800</pubDate><description><![CDATA[字面解释
System.getProperty(“user.dir”)方法返回的是执行运行Java程序命令的路径。这句话有一点歧义，还是通过举例说明最合适。
举例
用两个用户，一个是root，一个是普通用户userone，可运行jar包在/home/userone/下面，有一个运行该jar包的sh脚本也在/home/userone/下面。可运行jar包内就是打印System.getProperty...]]></description><category></category></item><item><title><![CDATA[【Linux】添加用户useradd出现异常useradd group userone exists]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/105946947</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/105946947</guid><author>ColdFireMan</author><pubDate>Wed, 06 May 2020 11:20:56 +0800</pubDate><description><![CDATA[现象
Linux创建用户userone的时候，用命令
useradd userone

出现异常：
useradd: group userone exists - if you want to add this user to that group, use -g.

原因
在创建用户时没有指定用户组，系统默认会创建一个同名的用户组，用户userone不存在，但是用户组userone已经存在，所以...]]></description><category></category></item><item><title><![CDATA[【BlockingQueue】BlockingQueue接口方法说明和区别]]></title><link>https://blog.youkuaiyun.com/ColdFireMan/article/details/105676435</link><guid>https://blog.youkuaiyun.com/ColdFireMan/article/details/105676435</guid><author>ColdFireMan</author><pubDate>Wed, 22 Apr 2020 10:48:07 +0800</pubDate><description><![CDATA[BlockingQueue在异步处理的时候经常用到它的存放和取出数据的操作，但是如存放也有add、offer等多个方法，这些方法有什么区别，这边用LinkedBlockingQueue作为实现测试一下。

存放
先上方法：
boolean add(E e);

boolean offer(E e);

void put(E e) throws InterruptedException;

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