<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Tomshidi的博客]]></title><description><![CDATA[没实力请虚心]]></description><link>https://blog.youkuaiyun.com/Tomsidi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Tomsidi]]></copyright><item><title><![CDATA[线上真实死锁分析]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/127027661</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/127027661</guid><author>Tomsidi</author><pubDate>Sat, 24 Sep 2022 17:07:51 +0800</pubDate><description><![CDATA[线上真实死锁场景，原理分析，这次彻底搞懂死锁。]]></description><category></category></item><item><title><![CDATA[基于springboot实现自定义配置文件外部挂载]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/123489899</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/123489899</guid><author>Tomsidi</author><pubDate>Mon, 14 Mar 2022 22:23:23 +0800</pubDate><description><![CDATA[基于springboot实现自定义配置文件外部挂载
背景
spring支持载入jar包外的配置，但是仅仅只对application.properties主配置文件支持。这问题就大了，正式开发肯定不会把所有配置都写在主配置文件中。

理论
@PropertySource注解有一个factory参数，默认值是PropertySourceFactory.class，默认实现是DefaultPropertySourceFactory.class，这个参数就是用来指定配置文件加载工厂类的。
默认的实现是从jar包内查]]></description><category></category></item><item><title><![CDATA[基于注解实现springboot支持自定义yaml配置载入]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/122136371</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/122136371</guid><author>Tomsidi</author><pubDate>Fri, 24 Dec 2021 22:37:59 +0800</pubDate><description><![CDATA[基于注解实现springboot支持自定义yaml配置载入
一、前置知识
阅读本篇文章时，具备以下知识会更便于理解：

java中注解类的定义以及使用
java反射的使用
spring中bean的初始化流程

二、背景
@PropertySource注解支持引入自己创建的配置文件，但是在spring新版本中仅支持.properties格式的配置文件。
总所周知，properties配置文件在遇到自定义的复杂对象属性时，阅读性差的跟个鬼一样。而yaml格式的配置文件就很好的解决了这一问题。
国内技术博客现状，]]></description><category></category></item><item><title><![CDATA[Object中equals方法的机制研究]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/121432551</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/121432551</guid><author>Tomsidi</author><pubDate>Fri, 19 Nov 2021 22:52:00 +0800</pubDate><description><![CDATA[前置知识
阅读本文章你至少需要具备以下知识：

HashSet特性。
equals与==的区别。
jvm字符串常量池知识。

代码演示
通过三种方案实现：根据Person对象的name属性去重
public class HashSetMain {
    public static void main(String[] args) {
        // 创建HashSet对象
        HashSet&lt;Person&gt; hs = new HashSet&lt;&gt;();
      ]]></description><category></category></item><item><title><![CDATA[JUC并发编程笔记]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/120932303</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/120932303</guid><author>Tomsidi</author><pubDate>Sun, 24 Oct 2021 12:26:43 +0800</pubDate><description><![CDATA[JUC并发编程笔记
Object.wait()方法

释放锁，重新获得锁后会接着往下执行，例如：

public class WaitLockMain {
    
    public static void main(String[] args) throws InterruptedException {
        TomClass tomClass = new TomClass();
        new Thread(() -&gt; {
            try {
        ]]></description><category></category></item><item><title><![CDATA[MySQL优化笔记其三]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108984946</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108984946</guid><author>Tomsidi</author><pubDate>Fri, 09 Oct 2020 19:49:36 +0800</pubDate><description><![CDATA[锁机制 MyISAM引擎
表锁

查看加锁情况

show open tables;


手动增加表锁

lock table 表名1 read(write),表名2 read(write),其他;


手动释放锁

unlock tables;


read锁举例: session_1对dept表加read锁,seesion_1和session_2(泛指其他session)均可读dept，但是session_1无法对dept表写数据，也无法读取其他未锁定的表。session_2可以读取其他表，但是写数据进]]></description><category></category></item><item><title><![CDATA[MySQL优化笔记其二]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108818282</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108818282</guid><author>Tomsidi</author><pubDate>Sat, 26 Sep 2020 22:18:47 +0800</pubDate><description><![CDATA[order by 优化


慢查询

查询配置

show variables like '%slow_query_log%'


开启

set global slow_query_log=1


阀值配置

show variables like '%long_query_time%'

set global long_query_time=3


睡眠语句

select sleep(seconds);


慢查询条数

show global variables like '%Slow_querie]]></description><category></category></item><item><title><![CDATA[MySQL 5.7中select列不在索引列出现的选择性走索引的问题]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108611268</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108611268</guid><author>Tomsidi</author><pubDate>Tue, 15 Sep 2020 22:21:58 +0800</pubDate><description><![CDATA[MySQL 5.7中select列不在索引列出现的选择性走索引的问题
不要在重复值很多的列上建立索引

建表语句

CREATE TABLE `violation_record` (
  `record_id` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `event_description` varchar(255) NOT NULL,
  `punishment` varchar(128) NOT NULL,
 ]]></description><category></category></item><item><title><![CDATA[docker invalid reference format: repository name must be lowercase]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108556068</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108556068</guid><author>Tomsidi</author><pubDate>Sat, 12 Sep 2020 22:13:00 +0800</pubDate><description><![CDATA[docker run 命令参数中带有空格名路径

引发问题的命令

docker run --name mysqlserver -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 33060:3306 mysql:latest


产生的问题

invalid reference format: repository name ]]></description><category></category></item><item><title><![CDATA[springboot中使用mybatis出现invalid bound问题]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108555996</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108555996</guid><author>Tomsidi</author><pubDate>Sat, 12 Sep 2020 22:10:00 +0800</pubDate><description><![CDATA[在springboot中使用mybatis出现invalid bound问题
排除因素

调试中发现xxxxxMapper对象的值是已经经过mybatis框架代理过的，说明@Mapper注解扫描到了

问题根源

application.yml文件中未配置mybatis.mapper-location参数，导致找不到xxxxMapper.xml映射文件
拓展一下，如果.xml文件没有被编译器识别为资源文件，即:没有被编译输出到build output目录，也会出现上面的问题。


...]]></description><category></category></item><item><title><![CDATA[MySQL优化笔记 其一]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108457834</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108457834</guid><author>Tomsidi</author><pubDate>Mon, 07 Sep 2020 22:31:03 +0800</pubDate><description><![CDATA[MySQL优化笔记
explain参数篇

type类型性能好坏

ALL, index,  range, ref, eq_ref, const, system（从左到右，性能从差到好）


Extra 可能的值

Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的，这发生在对表的全部的请求列都是同一个索引的部分的时候，表示mysql服务器将在存储引擎检索行后再进行过滤

Using temporary：表示MySQL需要使用临时表来存储结果集，常见于排序和分组查询

U]]></description><category></category></item><item><title><![CDATA[MySQL explain使用日志一]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/108309818</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/108309818</guid><author>Tomsidi</author><pubDate>Sun, 30 Aug 2020 19:30:26 +0800</pubDate><description><![CDATA[MySQL explain使用日志一
以下结果由本篇中的测试语句推测得出，可能有误差，发出来算是抛砖引玉吧
建表DDL
CREATE TABLE `barrage_info` (
  `barrage_id` int(11) NOT NULL AUTO_INCREMENT,
  `barrage_sender_id` int(11) NOT NULL,
  `content` varchar(512) NOT NULL,
  `speed` int(11) NOT NULL,
  `color` varch]]></description><category></category></item><item><title><![CDATA[mysql 查日期在在5.13-5.18时，订单量1-2，2-3，3-5的客户数]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/107905621</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/107905621</guid><author>Tomsidi</author><pubDate>Mon, 10 Aug 2020 09:53:29 +0800</pubDate><description><![CDATA[查日期在在5.13-5.18时，订单量1-2，2-3，3-5的客户数
一个在接单时看到的题目
下面是数据库脚本
create table flash(S varchar(10),id varchar(10),day date NOT NULL);
insert into flash values('PN0011' ,  'cc001' , '2020-05-12');
insert into flash values('PN0012' ,  'cc001' , '2020-05-13');
insert i]]></description><category></category></item><item><title><![CDATA[nacos ubuntu16.04集群部署]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/107335567</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/107335567</guid><author>Tomsidi</author><pubDate>Tue, 14 Jul 2020 12:26:59 +0800</pubDate><description><![CDATA[请先安装好jdk1.8


安装mysql5.7
安装方法




安装nginx


程序安装 sudo apt-get install nginx
安装后可执行文件路径/usr/sbin/nginx  此时在任意路径下输入nginx都可以启动
查看nginx是否在执行 ps -ef|grep nginx
nginx命令

nginx -s stop 停止运行
nginx -s reload 重新加载配置文件,慎用，有概率不生效，建议老老实实重启


配置文件更改，ubuntu下的配置文件有两个路径
/e]]></description><category></category></item><item><title><![CDATA[动态配置中心@RefreshScope 标记的类中属性注入值为null]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/107208459</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/107208459</guid><author>Tomsidi</author><pubDate>Wed, 08 Jul 2020 16:19:30 +0800</pubDate><description><![CDATA[@RefreshScope 标记的类中属性注入值为null
说一句，国内写文章的解答的，ctrl cv好用不
我这个问题百度了一个小时没解决，外网几秒钟，真尼玛服了，抄抄抄，抄尼玛呢
下面是我出问题的代码
/**
 * @Author TomShiDi
 * @Since 2020/7/8
 * @Version 1.0
 */
@RestController
@RequestMapping("/config")
@RefreshScope
@Slf4j
public class ConfigClientC]]></description><category></category></item><item><title><![CDATA[Java实现排序树以及四种遍历]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/101424148</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/101424148</guid><author>Tomsidi</author><pubDate>Thu, 26 Sep 2019 10:15:51 +0800</pubDate><description><![CDATA[Java实现排序树以及四种遍历
首先需要定义一棵排序树，废话，重点在添加节点这个函数。
上代码:

/**
 * 一棵二叉排序树
 *
 * @Author TomShiDi
 * @Since 2019/9/2
 * @Version 1.0
 */
public class TomTree {

    /**
     * 根节点
     */
    private Node rootN...]]></description><category></category></item><item><title><![CDATA[基于SpringBoot的代码跟踪框架demo]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/99295636</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/99295636</guid><author>Tomsidi</author><pubDate>Tue, 13 Aug 2019 18:30:16 +0800</pubDate><description><![CDATA[本篇博客将介绍如何写一个@EnableXXXX注解 实现方法简单的方法跟踪
需要准备的基础知识

如何编写一个注解接口，以及注解参数设置
反射类的原理以及常用api的使用方法
springboot bean初始化以及创建的过程~~（这个的内容有点多，可以大概了解一下)~~
cglib动态代理的使用方法

以上内容本篇文章不做过多的解释，如遇不懂之处请自行百度，google。
设计思路

开始设计
...]]></description><category></category></item><item><title><![CDATA[java中整型数据转换深入解析]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/98749352</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/98749352</guid><author>Tomsidi</author><pubDate>Wed, 07 Aug 2019 15:10:08 +0800</pubDate><description><![CDATA[java中整型数据转换深入解析
下面我会用几个例子讲解转换的原理
int型强转short
这种强转是不推荐的，会导致高位数据丢失，浮点型会导致精度丢失。但是既然有这种方法，说明它是有存在的必要的。
首先看下面的情况:

先手算一下结果看看。
/
/
/
/
/
/
/
/
/
/
/
/
/
/
/
正确结果是-1


/
下面解释原理
0x7fffffff 的二进制形式为
0111 1111 1...]]></description><category></category></item><item><title><![CDATA[从Springboot源码分析启动过程]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/90274473</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/90274473</guid><author>Tomsidi</author><pubDate>Thu, 16 May 2019 23:36:19 +0800</pubDate><description><![CDATA[从Springboot源码分析启动过程
这篇博客主要是通过Springboot的源码，分析Springboot项目的启动过程，深入理解spring的工作原理。其次，我对部分源码加上了注解，新手可以稍微看一下，同时我也希望大佬们能指出我理解有误的地方。
一、springboot启动源码解析
public ConfigurableApplicationContext run(String... arg...]]></description><category></category></item><item><title><![CDATA[nginx 反向代理 http转https wss转ws 服务端不变]]></title><link>https://blog.youkuaiyun.com/Tomsidi/article/details/90274412</link><guid>https://blog.youkuaiyun.com/Tomsidi/article/details/90274412</guid><author>Tomsidi</author><pubDate>Thu, 16 May 2019 23:29:50 +0800</pubDate><description><![CDATA[nginx 反向代理 http转https wss转ws 服务端不变
本篇博客主要解决nginx http转https的配置问题，以及wss转ws的配置,本配置的好处就是后台原http代码不需要做任何修改
主要配置介绍
http配置介绍
http {
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
...]]></description><category></category></item></channel></rss>