<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[WALL.E]]></title><description><![CDATA[藏好自己,做好清理.]]></description><link>https://blog.youkuaiyun.com/MIMOCH</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MIMOCH]]></copyright><item><title><![CDATA[用300行代码剖析SpringMVC的核心原理]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102869183</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102869183</guid><author>MIMOCH</author><pubDate>Sat, 02 Nov 2019 15:30:02 +0800</pubDate><description><![CDATA[文章目录写在前面首先看这张流程图总体实现分析DispatcherServlet详细实现分析 :现在开始
写在前面

本文的目的是使用300行代码实现Spring MVC 核心原理,读取配置文件,实现自己的ioc容器,实现依赖注入,再根据注解和对应的方法实例化HandlerMapping,更重要的是为之后的源码的阅读提供一个大概的轮廓.

实现的最终结果图 :

首先看这张流程图

总体实现分析

...]]></description><category></category></item><item><title><![CDATA[面试装X之--代理模式]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102689846</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102689846</guid><author>MIMOCH</author><pubDate>Fri, 25 Oct 2019 14:32:11 +0800</pubDate><description><![CDATA[文章目录代理模式(Proxy pattern)静态代理动态代理JDK实现的方式1.示例 : 专业的事交给专业的人去做,所以我们请了媒婆来findlove2. JDK实现代理详细分析CJLIB实现的方式总结
代理模式(Proxy pattern)
是指为目标对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介作用.
主要目的 : 
1. 保护目标对象
2. 增强目标对象
...]]></description><category></category></item><item><title><![CDATA[面试装X之--工厂模式]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102638397</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102638397</guid><author>MIMOCH</author><pubDate>Sat, 19 Oct 2019 15:37:13 +0800</pubDate><description><![CDATA[文章目录工厂模式一.简单工厂模式(Simple Factory pattern)二. 工厂方法模式(Factory Method Pattern)三.抽象工厂方法(Abstract Factory Method)
工厂模式
是创建对象的最佳方式, 属于创建型方式,在工厂模式中,我们在创建对象的时候不是向客户端暴露创建逻辑,
并且是通过一个共同的接口指向创建的对象.

示例:
这里我们使用课程来做示...]]></description><category></category></item><item><title><![CDATA[面试装X之--单例模式深度探索(玩转面试官)]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102630666</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102630666</guid><author>MIMOCH</author><pubDate>Fri, 18 Oct 2019 21:40:23 +0800</pubDate><description><![CDATA[之前详细总写过(单例模式)的己种写法,今天对这几种方法进行更深层次的总结
单例模式(Singleton Pattern)

是指一个类确保在任何情况下都只有一个实例,并提供一个全局访问点.
属于创建型模式

单例模式重点总结
1. 私有化构造器
指无法从自身之外的类来创建对象
2. 保证线程安全和延迟加载
饿汉模式: 在类初始化的时候就创建出类的实例(线程安全),但是同时由于对象不是即用既得,会带...]]></description><category></category></item><item><title><![CDATA[二叉搜索树的后序遍历序列]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102575020</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102575020</guid><author>MIMOCH</author><pubDate>Tue, 15 Oct 2019 21:19:49 +0800</pubDate><description><![CDATA[二叉搜索树的后序遍历序列
题目描述
输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。
假设输入的数组的任意两个数字都互不相同。

解题思路
首先根据二叉树后序遍历的特点,左子树都小于根节点,而右子树均大于根节点

从第0位开始,找到第一位比根节点大的元素,记录元素位置i,在此之前的元素都属于左子树(已经判定左子树都小于根节点)
然后从i开始,判断右...]]></description><category></category></item><item><title><![CDATA[Redis-简单动态字符串(Simple Dynamic String )]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102563313</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102563313</guid><author>MIMOCH</author><pubDate>Tue, 15 Oct 2019 11:07:59 +0800</pubDate><description><![CDATA[Redis的设计与实现
&lt;一&gt; 简单动态字符串(Simple Dynamic String )

当Redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,Redis就会使用SDS表示字符串值.

一. SDS的定义
struct sdshdr{
	int free ; //记录buf数组中未使用的字节数
	int len  ; //记录buf数组已使用的字节数
	c...]]></description><category></category></item><item><title><![CDATA[Effective Java 读书笔记:(2) 遇到多个构造器参数时要考虑使用构建器]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102484829</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102484829</guid><author>MIMOCH</author><pubDate>Fri, 11 Oct 2019 10:38:38 +0800</pubDate><description><![CDATA[遇到多个构造器参数时要考虑使用构建器

静态工厂和构造器都有个局限性,它们都不能很好地扩展到大量的可选参数.

问题
当一个类中的参数数量变得很多时,如何方便且灵活地创建含有不同参数的实例成了一个复杂的问题.
解决方案
1.普通方法
重叠构造器模式(telescoping constructor),在这种模式下,提供的第一个构造器只包含必要的参数,第二个构造器包含一个可选参数,第三个构造器包含两个...]]></description><category></category></item><item><title><![CDATA[服务提供者框架(Service provider Framework)]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102476314</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102476314</guid><author>MIMOCH</author><pubDate>Thu, 10 Oct 2019 14:45:29 +0800</pubDate><description><![CDATA[服务提供者框架

是指这样一个系统,多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它它们从多个实现中解耦出来.

关系图

详解
1. 服务接口(Service Interface)
在服务接口里面定义一些提供具体服务的方法,假设我们需要实现登陆注册的服务UserService,这个服务接口中一定有login(),register()方法,我们之后再创建这个服务接口的具体的...]]></description><category></category></item><item><title><![CDATA[Effective Java 读书笔记:(1) 用静态方法代替构造器]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/102468025</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/102468025</guid><author>MIMOCH</author><pubDate>Thu, 10 Oct 2019 10:04:34 +0800</pubDate><description><![CDATA[用静态方法替代构造器

对于一个类而言,为了让客户端获取到它的一个实例.在通常情况下,是提供这个类的构造器.
类可以提供一个公有的静态工厂方法(static factory method),这是一个返回类的实例的静态方法.

实例 : 下面是一个来自Boolean(基本类型boolean的装箱类)的简单实例,这个方法将boolean类型装换为一个Boolean的引用
//JDK1.8
   pub...]]></description><category></category></item><item><title><![CDATA[常用排序算法(希尔,归并,快排)]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/100586445</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/100586445</guid><author>MIMOCH</author><pubDate>Sun, 08 Sep 2019 12:52:17 +0800</pubDate><description><![CDATA[4. 希尔排序

时间复杂度 :  O(n^1.3) ~ O(n^1.5)
空间复杂度 : O(1)
稳定性 : 不稳定(因为在交换的过程中,有跳跃交换,所以不稳定)
算法思想 :希尔排序是插入排序的优化版本,由于简单插入排序的只能交换相邻元素,所以每次只能将逆序对数减1,它通过交换不相邻的元素, 使得每次将逆序对数量减小大于1.
首先将数组元素按照h=4间距分为数对,然后在这些数对之间进行一次插...]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/98474734</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/98474734</guid><author>MIMOCH</author><pubDate>Sun, 04 Aug 2019 21:33:27 +0800</pubDate><description><![CDATA[单例模式
单例模式
多个线程操作同一对象,要保证对象的唯一性
解决方案
实例化过程只实例化一次
提供返回实例的方法
分类


饿汉式


public class HungrySingleton {
    //加载的时候就产生了实例对象
    private static HungrySingleton Instanse = new HungrySingleton();

    privat...]]></description><category></category></item><item><title><![CDATA[volatile关键字实现]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/98469651</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/98469651</guid><author>MIMOCH</author><pubDate>Sun, 04 Aug 2019 15:02:59 +0800</pubDate><description><![CDATA[Volatile 关键字实现原理
线程的工作空间是 CPU寄存器和cache的抽象描述

CPU修改数据 内存数据的步骤  :

把内存中的数据读到cache中
在cache中更新数据
把更新的数据刷新到缓存

数据的不一致问题
解决方案 :


总线加锁(粒度太大)


MESI()
​	a. 读操作: 不做任何操作,将cache中的数据读到寄存器中
​    b. 写操作 : 发出信号通知其...]]></description><category></category></item><item><title><![CDATA[synchronized底层原理分析]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/98324060</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/98324060</guid><author>MIMOCH</author><pubDate>Sat, 03 Aug 2019 12:37:13 +0800</pubDate><description><![CDATA[synchronized底层原理
并发叫号
static : 并发量大的时候会出现 : 跳号.重号.超过最大值
概念
互斥性 :即同一时间只允许一个线程持有某个对象锁
可见性 : 必须保证锁被释放之前,对共享变量所做的修改,对之后获得锁的对象是课件的
用法
修饰 :  静态方法 普通方法
修饰 : 代码块
monitor[监视器] : 每个对象都有一个monitor对象

某一线程占有这个对象的时...]]></description><category></category></item><item><title><![CDATA[Java内存模型]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/98322649</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/98322649</guid><author>MIMOCH</author><pubDate>Sat, 03 Aug 2019 12:18:37 +0800</pubDate><description><![CDATA[方法区[线程共享区域]
读取加载.class (字节码)
class文件分析
将源码转换为指令 new
堆

保存创建的的对象

对象头
数据体

根据垃圾回收的需要分代回收
划分区域
程序计数器[线程各自独享]
虚拟机栈[不同线程各自独享]
方法集合 告诉线程要去执行哪个方法
本地方法栈

JVM内存模型
基本概念
程序 : 完成某一任务的代码序列(静态的概念)
进程 : 程序在某些数据上的一次...]]></description><category></category></item><item><title><![CDATA[Java实现LRU]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/97681106</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/97681106</guid><author>MIMOCH</author><pubDate>Mon, 29 Jul 2019 21:00:37 +0800</pubDate><description><![CDATA[Java实现LRU
简介
LRU(Least Recent Used) 最近最少使用,是经常用在内存的调度算法,在内存不够的情况下,为了载入新内容,不断淘汰旧内容.
实现原理
使用HashMap 和 双向链表实现 LRU
HashMap的 put 和 get 都是接近O(1),用HashMap的vlaue指向双向链表的Node节点的Index.
双向链表在这里用来实现LRU存储,head代表头部,...]]></description><category></category></item><item><title><![CDATA[常用排序算法(冒泡,选择,插入)]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/97563015</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/97563015</guid><author>MIMOCH</author><pubDate>Sat, 27 Jul 2019 22:08:20 +0800</pubDate><description><![CDATA[排序算法及其优化
1.冒泡算法
原算法


时间复杂度: O(n^2)


空间复杂度: O(1)


稳定性 :稳定


排序思想 : 每趟排序将从头开始两两比较,按照大的在后小的在前的顺序进行交换,每趟可以确定最大的数在数组的末尾,需要遍历N趟,每次遍历(N-i)次.
​


   public static &lt;T extends Comparable&lt;T&gt;&gt; void...]]></description><category></category></item><item><title><![CDATA[Mysql索引]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/96905138</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/96905138</guid><author>MIMOCH</author><pubDate>Mon, 22 Jul 2019 21:53:53 +0800</pubDate><description><![CDATA[一.Mysql索引
1. 没有索引的情况下进行查找
select id from student where id = 1;  

对于上面的查询语句进行分析:


在一页中进行查找
假设数据量比较少,只有一页的数据


当查询条件为主键时
这个过程就是通过页结构中的 Page Directory中的槽[spot]进行二分查找


当条件为其他列时
由于数据页没有为非主键建立页目录[也就是进行分组...]]></description><category></category></item><item><title><![CDATA[事务和索引-InnoDb的页]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/96758968</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/96758968</guid><author>MIMOCH</author><pubDate>Sun, 21 Jul 2019 20:41:00 +0800</pubDate><description><![CDATA[一.  事务

指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败.

四大特性
原子性 : 指事务中的所有操作,要么全部完成,要么全部不完成.
一致性 : 在事务开始和完成时,数据都必须保持一致性的状态[中间状态的数据对外部不可见]
张三向李四转账100元,保证张三账户减少100元,而此时又没有向李四账户添加,一致性就是保证这种中间状态数据对外部不可见,只有最初状态和最终状态...]]></description><category></category></item><item><title><![CDATA[范式-键-存储引擎]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/96120120</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/96120120</guid><author>MIMOCH</author><pubDate>Tue, 16 Jul 2019 12:00:57 +0800</pubDate><description><![CDATA[1.前情提要
数据库的范式:

第一范式:  要求表中不能有重复属性,而且属性不能再被拆分
第二范式:  主键与普通属性之间的关系, 每个属性必须依赖于主属性
第三范式:  主键与普通属性之间的关系, 每个属性只能依赖于主属性
BC范式  :   候选键只有一个
第四范式:   消除一对多属性 (爱好)

超键,候选键,主键 : 属性集(身份证号,姓名,性别,年龄)


超键 : 在关系中能够唯一...]]></description><category></category></item><item><title><![CDATA[AVL 自平衡二叉搜索树 (Adelson-Velskii and Landis)[一]]]></title><link>https://blog.youkuaiyun.com/MIMOCH/article/details/95231462</link><guid>https://blog.youkuaiyun.com/MIMOCH/article/details/95231462</guid><author>MIMOCH</author><pubDate>Thu, 11 Jul 2019 16:05:10 +0800</pubDate><description><![CDATA[简介
BST退化: 在添加一组递增元素时,BST会退化成一个链表,查询效率降低为O(n).
AVL是为了解决BST 退化而造成的查询效率降低的问题,最主要对BST进行了结构性的改变(进行旋转).
平衡: 节点的左右子树高度之差不能超过1.
AVL树的最差.最好.平均的增删插的时间复杂度为 O(log&lt;2&gt; N).
AVL的最差情况下,增删查需要旋转树的高度次 O(log&lt;2&gt...]]></description><category></category></item></channel></rss>