<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[iewyh的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iewyh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iewyh]]></copyright><item><title><![CDATA[面试常见基础问题总结]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/120256011</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/120256011</guid><author>iewyh</author><pubDate>Wed, 15 Sep 2021 18:02:07 +0800</pubDate><description><![CDATA[1.为什么重写equals方法，还必须要重写hashcode方法？

equals()和hashCode()都是Object类中自带的方法，原生的equals()是利用==比较俩对象的内存地址，hashCode是native方法，不同对象得到的hashCode不同。

Object的一个子类，如String。重写了equals()方法，目的是将内容相同的对象都看做是一样的东西。那为什么要重写hashcode()呢？因为当我们在使用HashMap或HashSet的时候，调用的是该对象的hashcode()方法]]></description><category></category></item><item><title><![CDATA[Socket理解]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/119902285</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/119902285</guid><author>iewyh</author><pubDate>Wed, 25 Aug 2021 02:32:20 +0800</pubDate><description><![CDATA[Socket是应用层与下层（传输层以及更下层）通信的中间软件抽象层，是一组接口。它把复杂的TCP/IP协议族隐藏在Socket接口后面，对于用户来说，一组简单的接口就是全部，让Socket去组织数据，以符合指定的协议。







上图为Socket的通信流程。

参照上图，从服务器端说。服务器端先初始化Socket，接着与端口进行绑定（bind），对端口进行监听（listen），调用accept阻塞等待客户端的连接，建立连接之后，服务器端接收到请求并处理请求，然后将回应数据发送给客户端，等待客户端的..]]></description><category></category></item><item><title><![CDATA[事务四种隔离级别如何加锁]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/119120280</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/119120280</guid><author>iewyh</author><pubDate>Mon, 26 Jul 2021 23:16:22 +0800</pubDate><description><![CDATA[数据库中事务的四种隔离级别（从低到高）：READ-UNCOMMITTED（读取未提交）、READ-COMMITTED（读取已提交）、REPEATABLE-READ（可重复读）、SERIALIZABLE（可串行化）。

隔离级别
			脏读
			不可重复读
			幻读
		READ-UNCOMMITTED
			√
			√
			√
		READ-COMMITTED
			×
			√
			√
		REPEATABLE-READ
			×
			×
			√
		SERIALIZABLE
			×
		]]></description><category></category></item><item><title><![CDATA[JVM的类加载机制]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/118676965</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/118676965</guid><author>iewyh</author><pubDate>Mon, 12 Jul 2021 16:56:26 +0800</pubDate><description><![CDATA[JVM将我们写的代码文本文件编译成了class字节码文件，而将字节码文件加载到内存当中的这个过程叫做类加载。

下图表现了一个类的生命周期



其中类加载到内存中有加载、连接、初始化这三步；而连接部分又包含了验证、准备、解析这三步，其中解析阶段有可能在初始化阶段之后再执行（后期绑定）。类加载的步骤除了解析阶段可能在初始化之后完成，其他的步骤都是按顺序完成的。

加载

加载要和类加载区分开，类加载是指加载、连接、初始化三个阶段，加载只是其中的第一阶段。

加载要做的事情是，将class字节码转化为运行时数]]></description><category></category></item><item><title><![CDATA[单例模式理解]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/118671457</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/118671457</guid><author>iewyh</author><pubDate>Mon, 12 Jul 2021 12:01:24 +0800</pubDate><description><![CDATA[单例模式是一种重要的设计模式，每次使用某一个类的对象时都不会对该对象进行改动，只是调用该对象的一些方法，我们就会采用单例模式。

单例模式的特点

1.单例类只能有一个实例；

2.单例类必须自己创建自己的唯一实例；

3.单例类可以为其他对象提供这一个实例。

单例模式的好处是堆中只会存在一个单例类的对象，会节省大量内存。

实现单例模式要注意几个点

1.是否是线程安全的（重要）

2.是否懒加载

3.能否通过反射机制来破坏单例模式

实现单例模式有以下几种常见的方式：

饿汉式

这个饿汉，他可怕饿]]></description><category></category></item><item><title><![CDATA[b-树 b+树]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/118566602</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/118566602</guid><author>iewyh</author><pubDate>Thu, 08 Jul 2021 11:18:57 +0800</pubDate><description><![CDATA[b-树

举例，下图为一个5阶b-树（最下面的白色三岔符号表示叶子节点，该树的高度为4）

这里提一点，b-树的阶数是认为规定的，他不因树结点中的最大关键字数而改变，也不因结点的最大子树数而改变。



b-树的属性

1.一颗m阶的b-树，每个结点最多有m个子树；根节点切不为结点节点至少有两个子树，非根非叶结点至少有ceiling（m/2）个子树。

2.有n个子树的结点有n-1个关键字，他们按序排列（图中的树是递增的，递减也是允许的）。

3.叶子结点处于同一层（图中为第4层），可以用空指针表示，是查找]]></description><category></category></item><item><title><![CDATA[动态代理（通用模板）]]></title><link>https://blog.youkuaiyun.com/iewyh/article/details/118154781</link><guid>https://blog.youkuaiyun.com/iewyh/article/details/118154781</guid><author>iewyh</author><pubDate>Wed, 23 Jun 2021 15:59:16 +0800</pubDate><description><![CDATA[首先需要了解两个类java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler



我们需要一个接口UserService和一个被代理的实现类UserServiceImpl


public interface UserService {
    public void add();
    public void delete();
    public void update();
    public void query();
}


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