<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ty0903csdn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ty0903csdn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ty0903csdn]]></copyright><item><title><![CDATA[log4j配置过程踩坑记录]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/116355265</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/116355265</guid><author>ty0903csdn</author><pubDate>Sun, 02 May 2021 17:33:37 +0800</pubDate><description><![CDATA[文章目录一、开发过程复盘二、解决过程1、创建log4j.properties文件2、将resources文件夹设置为source目录
一、开发过程复盘
在使用Logger类的时候需要导入相关类，代码如下
import org.apache.log4j.Logger;
logger.info(user.getId());

之后跑动代码时出现以下错误信息。

出现上面错误原因是因为IDEA找不到log4j的properties文件，因为没有将其加入到项目的classpath中。
二、解决过程
1、创建log4]]></description><category></category></item><item><title><![CDATA[ReentrantLock加锁、解锁源码解读]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/107267016</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/107267016</guid><author>ty0903csdn</author><pubDate>Fri, 10 Jul 2020 20:40:36 +0800</pubDate><description><![CDATA[一、ReentrantLock类继承关系

二、方法
1、加锁：lock()
首先看一下方法调用线路图，RenntrantLock默认是非公平锁。

1、公平锁
final void lock() {
    // 调用AQS的acquire()
    acquire(1);
}

// 排它模式下，尝试获得锁
public final void acquire(int arg) {
    // tryAcquire 方法是需要实现类去实现的，实现思路一般都是 cas 给 state 赋值来决定是否能获]]></description><category></category></item><item><title><![CDATA[Java内存区域与“String”对象比较问题]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/107238449</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/107238449</guid><author>ty0903csdn</author><pubDate>Thu, 09 Jul 2020 21:43:31 +0800</pubDate><description><![CDATA[一、Java运行时数据区域

方法区与堆是所有线程共享的部分，虚拟机栈、本地方法栈、程序计数器为每个线程私有的部分。
1、方法区
​		方法区是各个线程共享的内存区域，它用于保存被虚拟机加载的类信息、静态变量、常量、即时编译器编译后的代码缓存等数据；运行时常量池是方法区的一部分。
字符串常量池保存在永久代中，而永久代
1、运行时常量池

JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代
JDK1.7字符串常量池被从方法区拿到了堆中, 这里没有提到]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收算法与常见面试题]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/107139731</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/107139731</guid><author>ty0903csdn</author><pubDate>Sun, 05 Jul 2020 15:38:08 +0800</pubDate><description><![CDATA[常见面试题
问题答案在文中都有提到

如何判断对象是否死亡（两种方法）。
简单的介绍一下强引用、软引用、弱引用、虚引用（虚引用与软引用和弱引用的区别、使用软引用能带来的好处）。
如何判断一个常量是废弃常量
如何判断一个类是无用的类
垃圾收集有哪些算法，各自的特点？
HotSpot 为什么要分为新生代和老年代？
常见的垃圾回收器有哪些？
介绍一下 CMS,G1 收集器。
Minor Gc 和 Full GC 有什么不同呢？


一、对象已死？
1、引用计数法
在对象中设置一个引用计数器，当有别的对象引用它时，]]></description><category></category></item><item><title><![CDATA[ubuntu16.04安装keepalived+Mysql主从切换]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/102667361</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/102667361</guid><author>ty0903csdn</author><pubDate>Mon, 21 Oct 2019 16:54:57 +0800</pubDate><description><![CDATA[文章目录一、keepalived安装与配置1、安装组件2、压缩包方式安装3、检测脚本4、配置文件转移到系统下5、配置文件修改6、启动7、华为云虚拟ip1、申请虚拟ip8、ip漂移测试二、MySql5.7.27 互为主从配置1、双主互备注意事项2、A主B从1、主数据库修改mysql配置2、从数据库修改**1.修改mysql配置****2.重启mysql，打开mysql会话，执行同步SQL语句**(需...]]></description><category></category></item><item><title><![CDATA[java多态-向上转型]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/102366652</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/102366652</guid><author>ty0903csdn</author><pubDate>Tue, 08 Oct 2019 09:53:12 +0800</pubDate><description><![CDATA[这篇文章是我看了这个参考博客的解题分析过程，查看下面结果前请将它看懂，有需要再与我讨论。
class A {
    public String show(D obj) {
        return ("A and D");
    }

    public String show(A obj) {
        return ("A and A");
    }

}

class B ...]]></description><category></category></item><item><title><![CDATA[centos7安装Mysql5.7]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/100776486</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/100776486</guid><author>ty0903csdn</author><pubDate>Thu, 12 Sep 2019 16:39:46 +0800</pubDate><description><![CDATA[文章目录1、检查是否装有MySQL2、下载mysql的repo源3、安装上面下载的repo包4、安装mysql5、无密码登录6、重启7、查看初始密码8、有密码登陆mysql9、修改root密码10、创建新用户11、給新用户授予mysql相关权限12、刷新授权13、服务器重启13、服务器重启
1、检查是否装有MySQL
rpm -qa | grep mysql

2、下载mysql的repo源
wg...]]></description><category></category></item><item><title><![CDATA[spring boot + 策略模式消除代码中过多的ifelse结构]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/100652140</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/100652140</guid><author>ty0903csdn</author><pubDate>Mon, 09 Sep 2019 09:21:21 +0800</pubDate><description><![CDATA[利用spring boot + 策略模式消除代码中过多的if~else结构
 // 结构示例：
		if (warnType == A) {
			System.out.println("A");

		} else if (warnType == B) {
			System.out.println("B");
			
		} else if (warnType == C) {
			Syste...]]></description><category></category></item><item><title><![CDATA[mysql 关联查询连接条件选择注意事项]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/89032034</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/89032034</guid><author>ty0903csdn</author><pubDate>Thu, 04 Apr 2019 18:16:25 +0800</pubDate><description><![CDATA[一、内连接
关键字：inner join on
语句：select * from a_table a inner join b_table b on a.a_id = b.b_id;
说明：组合两个表中的记录，返回关联字段相符的记录，也就是返回两个表的交集（阴影）部分。

二、左连接（左外连接）
关键字：left join on / left outer join on
语句：select * f...]]></description><category></category></item><item><title><![CDATA[理解Java中的抽象]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/88635403</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/88635403</guid><author>ty0903csdn</author><pubDate>Mon, 18 Mar 2019 12:23:23 +0800</pubDate><description><![CDATA[在计算机科学中，抽象是一种过程，在这个过程中，数据和程序定义的形式与代表的内涵语言相似，同时隐藏了实现细节。

抽象：一个概念或者想法不和任何特定的具体实例绑死。

什么是抽象

简单地说：“抽象只从正确的角度，透露对象的某些相关细节。”

在面向对象编程理论中，抽象涉及到定义抽象对象的语言基础，它到底如何工作、如何获取和改变状态，并与系统中的其他对象进行“交流”。

抽象在任何编程语言...]]></description><category></category></item><item><title><![CDATA[Java 构造器重写]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/88636362</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/88636362</guid><author>ty0903csdn</author><pubDate>Mon, 18 Mar 2019 12:23:16 +0800</pubDate><description><![CDATA[public class SomeTrying{
    
    
    public static void main(String[] args){
        new Son();
        new Son().Father();        
    }
}
 
 class Father{  
         //父类Father的无参构造函数
        pub...]]></description><category></category></item><item><title><![CDATA[Java 接口使用]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/88381592</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/88381592</guid><author>ty0903csdn</author><pubDate>Sun, 10 Mar 2019 18:14:32 +0800</pubDate><description><![CDATA[Java 接口

接口（英文：Interface），在JAVA编程语言中是一个抽象类型，是抽象方法的集合，接口通常以interface来声明。一个类通过继承接口的方式，从而来继承接口的抽象方法。

接口并不是类，编写接口的方式和类很相似，但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类，否则该类要定义接口中的所有方法。

接口无法被实例化，但是...]]></description><category></category></item><item><title><![CDATA[HashMap使用]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/88380101</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/88380101</guid><author>ty0903csdn</author><pubDate>Sun, 10 Mar 2019 16:28:15 +0800</pubDate><description><![CDATA[前期准备：首先给hashMap里面put一些键值对，代码如下：


HashMap&amp;lt;Integer, Integer&amp;gt; hashMap = new HashMap&amp;lt;&amp;gt;();
  
  hashMap.put(5, 2);
  hashMap.put(9, 2);
  hashMap.put(8, 1);
  has...]]></description><category></category></item><item><title><![CDATA[Java的String中的subString()方法]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/86562515</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/86562515</guid><author>ty0903csdn</author><pubDate>Sun, 20 Jan 2019 15:28:49 +0800</pubDate><description><![CDATA[方法：public String substring(int beginIndex, int endIndex)

第一个int为开始的索引，对应String数字中的开始位置，

第二个是截止的索引位置，对应String中的结束位置

1、取得的字符串长度为：endIndex - beginIndex;

2、从beginIndex开始取，到endIndex结束，从0开始数，其中不包括endInd...]]></description><category></category></item><item><title><![CDATA[@Deprecated 注解]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/86562273</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/86562273</guid><author>ty0903csdn</author><pubDate>Sun, 20 Jan 2019 15:05:57 +0800</pubDate><description><![CDATA[当外部正在调用或者二方库依赖的接口，不允许修改方法签名，避免对接口调用方产生影响。接口过时必须加 @Deprecated 注解，并清晰地说明采用的新接口或新服务是什么。

    这其中提到了 @Deprecated 注解，在之前的开发过程中没遇到过这个注解，于是查了下他的功能：

    简单来讲就是，若某类或某方法加上该注解之后，表示此方法或类不再建议使用，调用时也会出现删除线，但并不代表不能...]]></description><category></category></item><item><title><![CDATA[“apt-get -f install” 错误与解决方法]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/85948307</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/85948307</guid><author>ty0903csdn</author><pubDate>Sun, 06 Jan 2019 20:32:55 +0800</pubDate><description><![CDATA[​        apt-get -f install = apt-get install -f ，是修复依赖关系（depends）的命令，就是假如你的系统上有某个package不满足依赖条件，这个命令就会自动修复，安装那个package依赖的package。
​     1、sudo命令：sudo命令用来以其他身份来执行命令，预设的身份为root，简单来说就是提升权限，因为apt-get ins...]]></description><category></category></item><item><title><![CDATA[ubuntu下将nginx配置成开机启动]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/85946824</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/85946824</guid><author>ty0903csdn</author><pubDate>Sun, 06 Jan 2019 20:08:11 +0800</pubDate><description><![CDATA[​       在安装完nginx后，开启nginx需要执行sudo /usr/local/nginx/sbin/nginx命令，这显然十分不方便。如果能像apache一样，直接通过脚本进行管理就方便多了。执行以下方法将nginx配置成service服务，则会简化操作指令。

执行：vim /etc/init.d/nginx

​       将下面的脚本文件复制进去
#! /bin/bash
#...]]></description><category></category></item><item><title><![CDATA[rabbitMq的TopicExchange方式推送配置]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/85167265</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/85167265</guid><author>ty0903csdn</author><pubDate>Fri, 21 Dec 2018 18:15:29 +0800</pubDate><description><![CDATA[//application.yml 文件配置

rabbitmq:
      host: 116.62.155.356
      port: 5672
      username: asdad
      password: 1232456


//接受者配置
@Configuration
public class RabbitConfig {

	@Bean
	public Queue ...]]></description><category></category></item><item><title><![CDATA[mybatis-plus 中mapUnderscoreToCamelCase配置]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/85166962</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/85166962</guid><author>ty0903csdn</author><pubDate>Fri, 21 Dec 2018 18:06:33 +0800</pubDate><description><![CDATA[mapUnderscoreToCamelCase

类型：boolean
	默认值：true
是否开启自动驼峰命名规则（camel case）映射，即从经典数据库列名 A_COLUMN（下划线命名） 到经典 Java 属性名 aColumn（驼峰命名） 的类似映射。

注意：

1.此属性在 MyBatis 中原默认值为 false，在 MyBatis-Plus 中，此属性也将用于生成最终的 SQ...]]></description><category></category></item><item><title><![CDATA[rabbitMQ简介]]></title><link>https://blog.youkuaiyun.com/ty0903csdn/article/details/85041329</link><guid>https://blog.youkuaiyun.com/ty0903csdn/article/details/85041329</guid><author>ty0903csdn</author><pubDate>Sun, 16 Dec 2018 21:39:33 +0800</pubDate><description><![CDATA[什么是MQ？

       MQ全称为Message Queue, 消息队列（MQ）是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表，一端往消息队列中不断写入消息，而另一端则可以读取队列中的消息。

      RabbitMQ是MQ的一种。下面详细介绍一下RabbitMQ的基本概念。

1、队列、生产者、消费者

      队列是RabbitMQ的内部对象，用于存储...]]></description><category></category></item></channel></rss>