<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MichaelSuns的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/MichaelSuns</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MichaelSuns]]></copyright><item><title><![CDATA[类之间的关系]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/120068780</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/120068780</guid><author>MichaelSuns</author><pubDate>Fri, 03 Sep 2021 20:48:29 +0800</pubDate><description><![CDATA[这里写自定义目录标题关联成分符号分类代码实例：聚集成分符号分类代码实例泛化成分符号分类代码实例依赖和精化成分符号分类代码实例
关联
成分
1. 关联方向（可选）：用黑三角标注
2. 关联名（可选）
3. 重数（可选，未注明默认为1）：※或数字等标示
4. 关联角色：类名
5. 限定词（可选）：属性名
	在关联关系末端设置小方框调价限定词可以将普通关联变为限定关联，
	从而将一对多或多对多的关系简化为一对一或多对一。
	限定词一般选取的是能够唯一确定一个实例对象的属性，
	或者说是主键。在类图中放置的位置一般]]></description><category></category></item><item><title><![CDATA[状态模式理解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/120049938</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/120049938</guid><author>MichaelSuns</author><pubDate>Wed, 01 Sep 2021 22:01:26 +0800</pubDate><description><![CDATA[package mode.State;

public abstract class State {
	
	protected int x ; 
	public abstract State setX(int x);
	public abstract String status();
	public State(int x) {
		super();
		this.x = x;
	}
	
	
	
}


package mode.State;

class StateOK extends State {

]]></description><category></category></item><item><title><![CDATA[策略模式理解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/120049526</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/120049526</guid><author>MichaelSuns</author><pubDate>Wed, 01 Sep 2021 21:44:57 +0800</pubDate><description><![CDATA[个人感觉跟桥模式的实现特别类似，或者说他就是桥模式的一部分。
就是通过创建不同的接口实现类对象来选择具体调用哪一种接口方法的实现。
直接上代码吧：
package mode.Strategy;

public class Client {
	
		private Sort sort;

		public Client(Sort sort) {
			super();
			this.sort = sort;
		}
		
		public void name() {
				sort.sort();
		}]]></description><category></category></item><item><title><![CDATA[代理模式详解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/120047967</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/120047967</guid><author>MichaelSuns</author><pubDate>Wed, 01 Sep 2021 20:21:32 +0800</pubDate><description><![CDATA[关于代理模式，其最大的用途是通过客户类通过代理类简介调用委托类的方法实现，主要优点是能保证信息安全。比如数据库或日志访问等操作，我们就可以将所有申请访问数据的请求都交给代理类来处理。这样一来除了代理类其他任何类对象都没机会直接访问数据，极大保证了信息安全。
另外一点是可以在符合开闭原则的前提下对目标对象进行功能扩展，就是可以通过代理类添加一些附加功能（非主业务），比如清理缓存、打印日志等。这一点跟装饰模式有点类似（当然本质上是不一样的）但是缺陷在于每个代理类只能针对一项服务，如果有多个服务都需要通过中介调用]]></description><category></category></item><item><title><![CDATA[装饰模式详解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/120027986</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/120027986</guid><author>MichaelSuns</author><pubDate>Tue, 31 Aug 2021 22:06:40 +0800</pubDate><description><![CDATA[对于装饰模式而言，核心就是装饰类Decorator，假设接口为impl，提供一个原始抽象方法operation，其实现类为Con，提供operation的原始实现，最初的调用应该是创建一个Con的对象直接调用Con的方法。现在想在原始实现方法基础上新增功能，那么就可以借助Decorator实现。
public class Decorator implements Component {
//	关联原抽象业务
	private Component component;
	
	
	public Decorato]]></description><category></category></item><item><title><![CDATA[运行web项目提示异常：non-compatible bean definition of same name and class【com.xxx.xxx.XXX】]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/114932166</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/114932166</guid><author>MichaelSuns</author><pubDate>Wed, 17 Mar 2021 17:05:01 +0800</pubDate><description><![CDATA[情景描述：报错提示non-compatible bean definition of same name and class【com.xxx.xxx.XXX】但在代码中并未发现指定的bean有冲突
原因一：之前创建了一个接口的实现类，然后后面挪了个位置，但是重新打包的时候，并没有进行clean一下，导致打出来的war里面的class存在了两个。
原因二：本身框架中已封装好该指定的实体类，因此另外进行声明会造成冲突，但是直接查询却又查不到该实体类
解决一：
maven clean一下， project cle]]></description><category></category></item><item><title><![CDATA[postman的使用——一些常用的tests脚本]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/112306860</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/112306860</guid><author>MichaelSuns</author><pubDate>Thu, 07 Jan 2021 12:26:26 +0800</pubDate><description><![CDATA[测试response Headers中的某个元素是否存在 tests[“元素Content-Type是否存在”] = postman.getResponseHeader(“Content-Type”);
//getResponseHeader()方法会返回header的值；
定义一个xxx，获取headers值 var.xxx = postman.getResponseHeader(“key”);
将Headers中的值设置为一个环境变量 postman.setEnvironmentVariable(“ke]]></description><category></category></item><item><title><![CDATA[postman的使用——通过脚本获取Headers中的value作为变量]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/112306759</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/112306759</guid><author>MichaelSuns</author><pubDate>Thu, 07 Jan 2021 12:23:50 +0800</pubDate><description><![CDATA[在学习本文之前默认读者已经知道变量的作用。
之前在使用postman进行接口测试时需要用到登录token进行登录校验。一般操作是我们需要先调用一遍登录接口，拿到token后再将token放置到待测接口的headers里作为参数在请求时一并传入。但是这种方法相对来说操作比较麻烦，而且有时候如果某个接口对token进行了某种更严格的限定，那么每次传入相同的token可能就不太合理。于是我就考虑能不能使用脚本简化这个修改token的过程。但是在网上找了一通之后发现很少有类似的方法。唯一一个还是个付费。。。
于是就]]></description><category></category></item><item><title><![CDATA[Serializable 序列化相关概念和应用场景]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/111209752</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/111209752</guid><author>MichaelSuns</author><pubDate>Tue, 15 Dec 2020 14:14:39 +0800</pubDate><description><![CDATA[Serializable 序列化：将对象状态转换为可保持或传输的格式的过程。————与之相对的是反序列化：将流转换为对象的过程
序列化和反序列化的主要目的是进行存储和传输数据
序列化：对象——&gt;字节序列
反序列化：字节序列——&gt;对象
以上主要是用在下列场景中：
1、针对需要对数据进行网络传输的场景
2、针对需要将对象的状态信息进行持久化保存的场景

...]]></description><category></category></item><item><title><![CDATA[深入解析数据结构中的指针、*和&——只要点进来，你就能理解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/109244558</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/109244558</guid><author>MichaelSuns</author><pubDate>Mon, 14 Dec 2020 15:59:00 +0800</pubDate><description><![CDATA[定义
在讲解这三者区别之前，让我们先明确一下这三者的具体确切的定义：
指针：在C语言之父Dennis MacAlistair Ritchie写的《C程序设计语言》种是这样定义指针的——指针是一种保存变量地址的变量。用图的形式来表述可能更清晰：如下图所示，c是一个char类型的变量，p是指向c的指针。图中可见，p中的内容即为c的地址。举个例子，双十一马上又到了，各位观音菩萨们免不了又要一通剁手，当我们下完单之后，快递小哥是怎么把我们的宝贝送到我们手上的呢？换句话说是怎么找到我们的？通过地址，也就是指针（温馨提]]></description><category></category></item><item><title><![CDATA[浅谈try-catch——为什么要用try-catch&什么时候用try-catch？]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/111172331</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/111172331</guid><author>MichaelSuns</author><pubDate>Mon, 14 Dec 2020 15:50:21 +0800</pubDate><description><![CDATA[本文主要内容如题所述，下面给出解答：
首先第一个问题，我们为什么要使用try-catch捕获异常？
我们都知道当程序中出现诸如数值越界之类的异常是，系统会自动抛出特定异常，不加处理的话此时的异常是一堆程序员看着都头疼的错误日志，而如果说前端直接将异常信息打印给客户端，用户看到后必然更加头疼。这时就需要我们后端对这些容易出现的异常进行补货并处理，另其返回到终端的数据能狗尽可能直观一目了然。这样一来，如果是用户输入或操作的问题，也能及时察觉并进行修正。另外在日常调试中，使用trycatch也能帮助我们快速定位b]]></description><category></category></item><item><title><![CDATA[XMind8使用]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/109736332</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/109736332</guid><author>MichaelSuns</author><pubDate>Tue, 17 Nov 2020 09:53:49 +0800</pubDate><description><![CDATA[一、下载XMindCrack.jar文件 XMindCrack.jar
二、找到Xmind安装根目录：【图标右键打开文件位置】
1、将XMindCrack.jar文件复制到根目录下；
2、在Xmind.ini文件尾部追加“-javaagent:D:/Program Files (x86)/XMind/XMindCrack.jar”（Xmind安装目录）
注意红色框部分，每个人安装的路径不一样，所以需要修改。【注意 " / “,直接复制下的是” \ "】
三、找到文件hosts追加（文件在C:\Windows]]></description><category></category></item><item><title><![CDATA[记录一个项目交接时遇到的问题：‘tomcatEmbeddedServletContainerFactory’的bean无法创建]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/109673899</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/109673899</guid><author>MichaelSuns</author><pubDate>Fri, 13 Nov 2020 14:53:30 +0800</pubDate><description><![CDATA[这个问题是我在交接一个使用springboot框架开发的maven项目时遇到的，具体发生时间是一切一切外部资源（仓库、jdk）配置妥当后运行时出现的。具体报错信息如下：

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  ' ]]></description><category></category></item><item><title><![CDATA[数据结构中的.和-＞的辨析]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/109465008</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/109465008</guid><author>MichaelSuns</author><pubDate>Tue, 03 Nov 2020 11:11:04 +0800</pubDate><description><![CDATA[在数据结构中我们经常会用到p-&gt;data,p.data,p-&gt;lchild等，这里的.和-&gt;分别是什么意思？各自的用法是什么？详解如下：
-&gt; 左边是结构体指针，右边是结构体成员，因此p-&gt;next 的含义是p指针指向结构体zhi变量的next数据域（一般该数据域存放后继dao结点的地址）
. 左边是结构体变量名，右边是结构体成员，因此p.next的含义是p结构体变量的next数据域，如：
SqList &amp;L;//这里的L是一个变量
L.data[1]=1;

SqLi]]></description><category></category></item><item><title><![CDATA[equals方法与“==”区分整合]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/77170551</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/77170551</guid><author>MichaelSuns</author><pubDate>Mon, 26 Oct 2020 15:27:26 +0800</pubDate><description><![CDATA[equals 方法是 java.lang.Object 类的方法。


有两种用法说明：

（1）对于字符串变量来说，使用“==”和“equals()”方法比较字符串时，其比较方法不同。

“==”比较两个变量本身的值，即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

比如：

String s1,s2,s3 = "abc", s4]]></description><category></category></item><item><title><![CDATA[一个容易忽略的数组问题——数组的length该怎么求]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/108827037</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/108827037</guid><author>MichaelSuns</author><pubDate>Sun, 27 Sep 2020 15:32:58 +0800</pubDate><description><![CDATA[写这篇文章，主要是想提醒自己一下，在Java和C语言、C++中的数组长度求法是不一样的。希望诸位如果和我一样遇到三种其中两种语言时不要混淆了。
首先，在Java中要求一个数组的长度是可以直接用length属性来获取的int []A = {1,2,3}; int len = A.length;
在Java中这种方式就可以直接获取到数组的长度。值得注意的是，在Java中还有一个length()方法。这个方法是针对字符串而言的，只能用来求字符串长度。此外还有一个size()方法，是用来求泛型集合元素个数的。
C+]]></description><category></category></item><item><title><![CDATA[Java对象的对象头到底是什么？]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/108055895</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/108055895</guid><author>MichaelSuns</author><pubDate>Tue, 25 Aug 2020 15:46:26 +0800</pubDate><description><![CDATA[一：对象头

HotSpot虚拟机中，对象在内存中存储的布局可以分为三块区域：对象头（Header）、实例数据（Instance Data）和对齐填充（Padding）。

HotSpot虚拟机的对象头(Object Header)包括两部分信息，第一部分用于存储对象自身的运行时数据， 如哈希码（HashCode）、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等，这部分数据的长度在32位和64位的虚拟机（暂 不考虑开启压缩指针的场景）中分别为32个和64个Bits，官方称它为“Ma..]]></description><category></category></item><item><title><![CDATA[关于虚拟机中对象访问定位的两种方式的一些思考]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/108199260</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/108199260</guid><author>MichaelSuns</author><pubDate>Tue, 25 Aug 2020 15:19:54 +0800</pubDate><description><![CDATA[前言
本文是在周志明老师经典作品《深入理解Java虚拟机》第二章第三节的基础上对句柄和直接指针两种对象访问方式的深入思考，有不准确的地方希望读者不吝赐教。
JVM中访问对象的两种方式
1.句柄
在这里难免要讨论一下所谓的“句柄”究竟是什么？虽然知道大部分读者应该是很熟悉这个概念的，但是本人在此之前只是对这个词耳熟，具体概念却不是很清楚，在这里详细介绍一下，既是和读者探讨，也是给自己作个记录。
句柄，句子的柄，我们想一下什么是柄？类比一下勺子，勺子柄的作用是让使用者能很轻松的抓住勺子进行使用，与之类似，句柄也]]></description><category></category></item><item><title><![CDATA[pom.xml文件标签详解]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/107961300</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/107961300</guid><author>MichaelSuns</author><pubDate>Wed, 12 Aug 2020 16:50:05 +0800</pubDate><description><![CDATA[&lt;project xmlns="http://maven.apache.org/POM/4.0.0"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"&gt;   
    &lt;!--父项目的坐标。如果项目中没有规定某个元素的值，那么]]></description><category></category></item><item><title><![CDATA[记录idea中带入新的maven项目时出现的依赖爆红问题]]></title><link>https://blog.youkuaiyun.com/MichaelSuns/article/details/107941208</link><guid>https://blog.youkuaiyun.com/MichaelSuns/article/details/107941208</guid><author>MichaelSuns</author><pubDate>Tue, 11 Aug 2020 18:05:46 +0800</pubDate><description><![CDATA[在最近的项目中，频繁遇到这样一个问题，以project的形式导入一个新的微服务项目时，会出现所有的依赖全都报错的问题，是所有的依赖。没想明白这个原因，试过所能搜到的解决方式都无效，最后的解决方案是借助一个无关项目，打开一个新的idea窗口，在这个新的窗口中以module形式打开目标项目，在重新导入依赖即可。
迄今为止仍未找到具体原因，后续有待探究。
另外，在查找解决方案过程中发现阿里云的远程仓库镜像地址变了。这需要注意一下。

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