<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mjlfto的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mjlfto</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mjlfto]]></copyright><item><title><![CDATA[jdk动态代理的简单原理]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/105105353</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/105105353</guid><author>mjlfto</author><pubDate>Wed, 25 Mar 2020 21:41:21 +0800</pubDate><description><![CDATA[首先看看代理模式的基本类图：此图来源于：https://juejin.im/post/5c1ca8df6fb9a049b347f55c

我们最主要的目的是调用RealSubject的request方法，但是在实际过程中，我们可能需要在这个方法之前前后做一些别的逻辑处理，为了不做代码侵入或者有些时候我们根本没有办法修改RealSubject的源码，这个时候采用代理模式就非常有效，通过创建一个代理类...]]></description><category></category></item><item><title><![CDATA[tomcat处理请求的过程]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104931260</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104931260</guid><author>mjlfto</author><pubDate>Tue, 17 Mar 2020 21:14:15 +0800</pubDate><description><![CDATA[第一步：Acceptor接收NIO请求
//在Acceptor那种的run方法中，有这么一段代码用于接收客户端请求，endpoint.ServerSocketAccept()方法回在这里阻塞
//没错接到一个连接都创建一个新的Socket
U socket = null;
try {
// Accept the next incoming connection from the server
//...]]></description><category></category></item><item><title><![CDATA[Spring结合tomcat 404的三种原因]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104924952</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104924952</guid><author>mjlfto</author><pubDate>Tue, 17 Mar 2020 16:34:24 +0800</pubDate><description><![CDATA[前不久看SpringWeb源码的时候，做了一个简单的零xml的web项目，但是启动后就是提示404,网上找了很久还是没有找到原因，最后终于发现了与网上大多数说法不太一样的两个原因
下边看看一段代码, 看这段代码我们知道，如果不用springboot，那么这段代码是springweb项目的关键，当然前提是我们实现的零xml，如果你要提供web.xml配置文件，那就另说了
第一种
注意到addMapp...]]></description><category></category></item><item><title><![CDATA[屏控程序]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104719504</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104719504</guid><author>mjlfto</author><pubDate>Sat, 07 Mar 2020 18:45:48 +0800</pubDate><description><![CDATA[屏控程序
疫情期间对于没有工作的人而言，太难了，闲着吧，写一个屏幕控制程序，据我知道，之前的远程控制都是界面传输的，像qq的远程控制等，都是截图然后传输到自己的屏幕，但是我的需求是我自己有两台电脑，我想通过一个键盘鼠标控制他们，但是又不想在我的电脑上出现另一个电脑的画面
*远程过程调用使用thrift实现输出传输
*
* 使用Robot实现鼠标键盘事件的模拟
*
* 通过鼠标移除屏幕实现切屏功能
...]]></description><category></category></item><item><title><![CDATA[利用SpringBoot自定义一个MQ]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104441168</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104441168</guid><author>mjlfto</author><pubDate>Sat, 22 Feb 2020 11:49:26 +0800</pubDate><description><![CDATA[前几天面试，面试官说只用springBoot实现一个mq，同时提供生产和消费restful 风格接口，正好疫情期间，在家也没什么事，就简单的模拟kafka实现了一个，通过学者利用SpringBoot自定义了一个starter，作为模块间通信
项目连接

...]]></description><category></category></item><item><title><![CDATA[spring mybatis 零配置及原理]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104271163</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104271163</guid><author>mjlfto</author><pubDate>Tue, 11 Feb 2020 22:22:30 +0800</pubDate><description><![CDATA[首先我们看看依赖
    compile group: 'org.mybatis', name: 'mybatis', version: '3.5.4'
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.17'
    compile group: 'com.mchange', name: 'c3p0',...]]></description><category></category></item><item><title><![CDATA[Spring中Aware的原理]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104235634</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104235634</guid><author>mjlfto</author><pubDate>Sun, 09 Feb 2020 15:14:01 +0800</pubDate><description><![CDATA[之前一直不太知道Aware这个东西有什么用，看了看官网，别人的博客，今天算是有点眉目了，在此做一个笔记
在Spring中有一个接口，但是这个接口中没有一个方法，那么它有什么用呢，通过注释知道，这个接口起到的是一个标记作用，或者说的高大一些，做到面向接口编程，具体需要实现的工作还是需要子类来实现
/**
 * A marker superinterface indicating that a bea...]]></description><category></category></item><item><title><![CDATA[zookeeper实现分布式队列]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104069342</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104069342</guid><author>mjlfto</author><pubDate>Wed, 22 Jan 2020 13:20:12 +0800</pubDate><description><![CDATA[zookeeper实现分布式队列
利用zookeeper的有序节点和节点一旦被删除，其他连接就不能重复删除的特性实现一个非常简单的分布式队列，说实话，我觉得用zookeeper实习分布式队列并不合适，而且我这里实现的也是最简单的，效率也不高
实现细节，利用create -s /queue/q_创建有序节点，这样数据就放到队列了，当然这一步是使用zookeeper的客户端Curator实现的，然后取...]]></description><category></category></item><item><title><![CDATA[zookeeper实现分布式锁]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104065596</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104065596</guid><author>mjlfto</author><pubDate>Tue, 21 Jan 2020 20:40:41 +0800</pubDate><description><![CDATA[多线程下保证资源的安全性是一个很重要的事情，在单机上，我们可以通过synchronized, Lock等机制实现线程同步，但是在分布式情况下，又该怎么实现同步机制呢，我们可以利用redis单线程的机制实现分布式锁，但是这里我们利用zookeeper实现分布式锁。
其实原理和之前master节点选举大致相同, 每个服务向zookeeper获取锁，如果获得到锁就当当前节点数据保存到/lock节点中，其...]]></description><category></category></item><item><title><![CDATA[zookeeper实现负载均衡]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104063884</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104063884</guid><author>mjlfto</author><pubDate>Tue, 21 Jan 2020 17:10:22 +0800</pubDate><description><![CDATA[先看看这张图，业务服务在/web节点下注册临时节点，如server1服务对应/web/web1临时节点，然后监控/web节点的孩子节点事件，使用一个集合保存这些点数据，当新增和移除时，分别在记录这些节点数据,下边我们实现一个加权随机负载均衡的模拟实现
1.定义节点数据，保护节点路径，服务ip，服务端口，权重
/**
 * @ClassName NodeData
 * @Author mjlft
...]]></description><category></category></item><item><title><![CDATA[zookeeper实现消息订阅]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104060398</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104060398</guid><author>mjlfto</author><pubDate>Tue, 21 Jan 2020 11:45:17 +0800</pubDate><description><![CDATA[消息订阅应用非常广泛，像spring config中，当配置发生改变时其他需要第一时间发现并且更新自己的配置信息；其实像之前说到的master选举也是一样，在我看来也是消息订阅的一种特例，当主节点宕机时，其他节点需要立即感应，并且同时立马进行主节点竞选
其实这一篇与master竞选原理一致，都是监听一个节点的状态，master节点选举主要监听的是主节点的移除事件，而消息订阅需要更具不同的场景进行不...]]></description><category></category></item><item><title><![CDATA[zookeeper实现master选举]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104057392</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104057392</guid><author>mjlfto</author><pubDate>Mon, 20 Jan 2020 23:35:55 +0800</pubDate><description><![CDATA[zookeeper的使用创建非常多，在大数据中经常用来实现master选举，在分布式系统中实现分布式锁，也可以用来实现符在均衡，分布式队列，分布式命名服务，下边就来说说使用zookeeper实现master选举
1.定义一个节点数据类：
/**
 * @ClassName NodeData
 * @Author mjlft
 * @Date 2020/1/20 21:58
 * @Version ...]]></description><category></category></item><item><title><![CDATA[spring cloud zuul 与 sentinel 结合使用]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104034582</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104034582</guid><author>mjlfto</author><pubDate>Sat, 18 Jan 2020 22:33:41 +0800</pubDate><description><![CDATA[本来大型服务处理请求超时，限流，降级熔断工作用hystrix,但是这个这个项目不再更新了，虽说它现在提供的版本不会影响到大多数开发者的使用，但是长远考虑，被更换是一件必然的事，而且现在像resilience4j， Sentinel这样的替代品出现，今天我们就看看使用zuul 与 Sentinel整合，实现降级与超时处理，其实网上有很多这样的教程，这里我只是做一个自己的笔记而已
1.必须的依赖
  ...]]></description><category></category></item><item><title><![CDATA[spring cloud 注册服务状态UNKNOW(1)]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/104028691</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/104028691</guid><author>mjlfto</author><pubDate>Sat, 18 Jan 2020 11:44:48 +0800</pubDate><description><![CDATA[出现这个状态的原因是spring cloud在检测注册服务健康状态时出现了问题，网上提供的方法都是开启健康状态检测，或者是配置的位置不对，但这都只是针对配置而言的，下边是我的方法：


查看依赖，检测健康状态需要提供一个/health接口，这个是有spring boot的spring-boot-actuator提供的服务，但是在spring-boot中使用，我们引入平时使用的这个依赖就会出现问题，...]]></description><category></category></item><item><title><![CDATA[Springboot 自定义starter]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103981517</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103981517</guid><author>mjlfto</author><pubDate>Tue, 14 Jan 2020 23:16:16 +0800</pubDate><description><![CDATA[之前说了SpringBoot的自动配置原理，现在说说一个简单的自定义spring-boot-stater，这个starter的功能很简单，就是没200毫秒在控制台输出当前时间，要注意的是这个spring-boot-stater是一个独立的模块，与我们自己的spring-boot项目只需要用一个注解接口生效，取消这个注解，那么这个功能也就没了，功能描述完了，接下来我们看看代码实现：
首先定义一个配置...]]></description><category></category></item><item><title><![CDATA[spring 事件监听原理]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103977505</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103977505</guid><author>mjlfto</author><pubDate>Tue, 14 Jan 2020 17:59:39 +0800</pubDate><description><![CDATA[首先我们看看在Spring如何实现自定义事件监听，首先定义事件：

public class MyEvent extends ApplicationEvent {

	public MyEvent(Object source) {
		super(source);
	}
}



然后定义一个事件监听器,注意监听器需要交给容器管理，所以需要标注@Component注解

@Component
p...]]></description><category></category></item><item><title><![CDATA[SpringBoot自动配置]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103970864</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103970864</guid><author>mjlfto</author><pubDate>Tue, 14 Jan 2020 12:05:11 +0800</pubDate><description><![CDATA[SpringBoot提供了自动配置功能，这样可以让我们更加专注的做我们关注的业务逻辑，而不必过多的去考虑哪些在使用Spring的时候需要考虑的各种配置，例如我们在使用spring webmvc的时候，提供下边这样一段代码，然而，这段代码对于所有使用Spring webMvc而言，基本属于通用，也就是我们添加一个有关webmvc的模块就需要提供这样一段代码，所以springboot有一次做了封装，提...]]></description><category></category></item><item><title><![CDATA[Spring webmvc 请求处理流程]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103893347</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103893347</guid><author>mjlfto</author><pubDate>Wed, 08 Jan 2020 16:16:22 +0800</pubDate><description><![CDATA[Spring webmvc 请求处理流程

这是网上找的一张图片，现在大家也都认为这个流程是没有问题的，但是我这几天跟了一遍源码，发现这个图片并不完全，里边简化了很多东西，而且这个图只是其中一种情况，还有一种情况没有描述，下边是我的处理流程

其实大体流程是没有问题的， 下边我主要描述区别
1.我添加了filter部分，不过这部分可以说是servelt的，所以大家的图中没有画出来也没有什么问题
2...]]></description><category></category></item><item><title><![CDATA[java.lang.IllegalArgumentException: Content-Type cannot contain wildcard type '*']]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103888497</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103888497</guid><author>mjlfto</author><pubDate>Wed, 08 Jan 2020 11:38:50 +0800</pubDate><description><![CDATA[Spring webMVC 使用FastJsonHttpMessageConverter时出现如下异常该怎么处理？
 java.lang.IllegalArgumentException: Content-Type cannot contain wildcard type '*'
	at org.springframework.util.Assert.isTrue(Assert.java:118)...]]></description><category></category></item><item><title><![CDATA[Spring webMvc环境准备问题]]></title><link>https://blog.youkuaiyun.com/mjlfto/article/details/103862120</link><guid>https://blog.youkuaiyun.com/mjlfto/article/details/103862120</guid><author>mjlfto</author><pubDate>Mon, 06 Jan 2020 18:17:02 +0800</pubDate><description><![CDATA[网上找到spring webmvc的资料都是管理请求流程，没有整应用环境初始化流程，这几天正在看Spring webmvc的源码，所以就想知道使用spring webmvc的时候， 整个环境是怎么初始化的，下边我会采用问答的方式解决我在这个过程中关注的一些问题
先来看看请求处理流程：

1.其实这个流程大家基本都知道，可是我想知道的是既然是Spring webmvc,那么applicationCo...]]></description><category></category></item></channel></rss>