<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Mooneal的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Mooneal</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Mooneal]]></copyright><item><title><![CDATA[GC相关问题]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/81120631</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/81120631</guid><author>Mooneal</author><pubDate>Thu, 19 Jul 2018 18:32:06 +0800</pubDate><description><![CDATA[
  ps：以前看的好多书，都忘了，决定好好写博客，写总结了


GC的问题大致分为三大类：


1.要gc哪些对象？
2.通过什么方法来gc？
3.什么时候触发gc？怎样gc的？


下面通过对这三个问题的思考来捋一捋gc相关的知识点： 
一.要GC哪些对象？

通常来说，不使用的对象，就应该被回收，怎么找到不使用的对象呢？有两种算法：引用计数法，可达性分析法。对于java语言来说，由于循环引用...]]></description><category></category></item><item><title><![CDATA[矩阵覆盖的解题思路]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/81101960</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/81101960</guid><author>Mooneal</author><pubDate>Wed, 18 Jul 2018 17:25:20 +0800</pubDate><description><![CDATA[题目描述 
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形，总共有多少种方法？

思路：


错误的思路：在看到这个题的时候，想的是按照第一种方式，第一个采用2*1的形式那结果有 f(n-1),第二种开头分为 2*1 2*1 或者 1*2 1*2 所以有两种结果2f(n-2);           f(n) = f(n-1)+2f(n-...]]></description><category></category></item><item><title><![CDATA[java.util源码解析(五)CyclicBarrier]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/81016087</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/81016087</guid><author>Mooneal</author><pubDate>Thu, 12 Jul 2018 15:05:55 +0800</pubDate><description><![CDATA[一.CyclicBarrier的基本使用

在所有子线程运行过程中，设置屏障 cyclicBarrier.await(); 突破屏障后，调用CyclicBarrier中带的一个barrierCommand方法。



public class CyclicBarrierDemo {
    public static class Soldier implements Runnable {
    ...]]></description><category></category></item><item><title><![CDATA[java.util源码解析(四)共享锁之CountDownLatch]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/81012153</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/81012153</guid><author>Mooneal</author><pubDate>Thu, 12 Jul 2018 10:54:15 +0800</pubDate><description><![CDATA[一.CountDownLatch的基本使用

CountDownLatch的应用：


使得主线程要等待所有子线程完成工作之后，再继续执行后面的代码


具体使用也很简单


所有子线程run方法的finally中调用 countDownLatch.countDown();
在开启所有子线程后，主线程中调用 countDownLatch.await();




public class Test...]]></description><category></category></item><item><title><![CDATA[java.util源码解析(一)AQS介绍]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/81004503</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/81004503</guid><author>Mooneal</author><pubDate>Wed, 11 Jul 2018 17:45:05 +0800</pubDate><description><![CDATA[一.AQS介绍

AbstractQueuedSynchronizer 它是java.util包实现的基础，甚至可以说它就是锁，相比于Synchronzied关键字实现的内置锁，只实现了排他锁。AQS通过一个类变量 private int state 来表示锁状态,通过继承类实现了多种锁模式，如排它锁，共享锁，以及可重入锁等。 
在AQS中通过一个内部类Node 来包装线程，代码如下

stati...]]></description><category></category></item><item><title><![CDATA[Spring初始化Ioc源码分析以及Aop原理分析(四)]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80953988</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80953988</guid><author>Mooneal</author><pubDate>Sat, 07 Jul 2018 19:29:22 +0800</pubDate><description><![CDATA[Spring AOP原理

经过前面的分析，大致已经了解了Spring的原理，其中在使用的时候，有一个很重要的点就是AOP编程，什么是AOP，就不多做概述了，一句话：面向切面编程，在原有业务逻辑上，通过动态代理进行功能增强。 
在Spring中主要是利用了BeanPostProcessor可以在Bean生命周期进行拦截的特性。因此主要有两步：


解析xml的时候，注册aop相关的BeanPost...]]></description><category></category></item><item><title><![CDATA[Spring初始化Ioc源码分析以及Aop原理分析(一)]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80942564</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80942564</guid><author>Mooneal</author><pubDate>Fri, 06 Jul 2018 21:30:22 +0800</pubDate><description><![CDATA[一. 什么是Spring Ioc思想?

Spring Ioc的目的就是通过一个容器来控制对象的生命周期以及对象之间的关系。所有的类都会在Spring容器中进行注册登记，由Spring Ioc容器来创建、控制运行和销毁。

1.1 Spring Ioc容器的基本构成

通过上面这段话，首先可以确立两个角色，一个是容器，一个是存在容器中的类。那么首先来分析Spring源码中这两个角色的代表对象是什么...]]></description><category></category></item><item><title><![CDATA[Mybatis源码解析以及和Spring整合后的变化]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80929188</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80929188</guid><author>Mooneal</author><pubDate>Thu, 05 Jul 2018 16:47:50 +0800</pubDate><description><![CDATA[MyBatis源码解析

先看看不整合Spring，mybatis原生的基本用法：



        //1.第一步获取SqlSessionFactory工厂
        String resource = &quot;conf.xml&quot;;
        //使用类加载器加载mybatis的配置文件（它也加载关联的映射文件）
        InputStream is = Test1.class...]]></description><category></category></item><item><title><![CDATA[最大奇约数]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80738198</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80738198</guid><author>Mooneal</author><pubDate>Tue, 19 Jun 2018 19:44:17 +0800</pubDate><description><![CDATA[小易是一个数论爱好者，并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题： 定义函数f(x)为x最大的奇数约数，x为正整数。 例如:f(44) = 11. 
现在给出一个N，需要求出 f(1) + f(2) + f(3)…….f(N) 
例如： N = 7 
f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + ...]]></description><category></category></item><item><title><![CDATA[暗黑字符串]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80737735</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80737735</guid><author>Mooneal</author><pubDate>Tue, 19 Jun 2018 18:52:43 +0800</pubDate><description><![CDATA[题目：

一个只包含’A’、’B’、’C’的字符串，如果存在一段长度为3的连续子串中，恰好有’A’、’B’、’C’各有一个，那么这个字符串就是纯净字符串，否则这个字符串是暗黑的。 
例如：BAACAACCBAAA这个字符串就是暗黑的。例如： 
BAACAACCBAAA这个字符串就是纯净的，因为其连续子串中包含了’C’、’B’、’A’各一个。

你的任务就是计算出长度为n的字符串（包含’A’、’B’...]]></description><category></category></item><item><title><![CDATA[跳石板之动态规划]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80725660</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80725660</guid><author>Mooneal</author><pubDate>Mon, 18 Jun 2018 18:39:58 +0800</pubDate><description><![CDATA[题目描述

小易来到了一条石板路前，每块石板上从1挨着编号为：1、2、3……. 
这条石板路要根据特殊的规则才能前进：对于小易当前所在的编号为K的 石板，小易单次只能往前跳K的一个约数(不含1和K)步，即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板，他想跳到编号恰好为M的石板去，小易想知道最少需要跳跃几次可以到达。 
例如： 
N = 4，M = 24： 
4-&amp;...]]></description><category></category></item><item><title><![CDATA[动态规划之合唱团]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/80566800</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/80566800</guid><author>Mooneal</author><pubDate>Mon, 04 Jun 2018 14:25:56 +0800</pubDate><description><![CDATA[问题:有n个学生站成一排，每个学生有一个能力值，从这n个学生中按照顺序选取k名学生，要求相邻两个学生的位置编号的差不超过d，使得这k个学生的能力值的乘积最大，求返回的最大乘积。

输入描述：


  每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 &amp;lt;= n &amp;lt;= 50)，表示学生的个数，接下来的一行，包含 n 个整数，按顺序表示每个学生的能力值 ai（-50 ...]]></description><category></category></item><item><title><![CDATA[docker 的学习(一)]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/79993743</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/79993743</guid><author>Mooneal</author><pubDate>Thu, 19 Apr 2018 22:02:59 +0800</pubDate><description><![CDATA[一.docker的win10安装

对于win10专业版，docker官方提供了可以直接使用的docker for windows。 
下载地址 
下载完成后， 
 
点击运行，如果win10 没有开启 hyper-v ，会提示你开启。 
开启之后，docker不一定可以安装成功，因为电脑的cpu虚拟化可能没开通过。查看是否开通，通过任务管理器查看： 
 
上面的虚拟化：已启用 
如果没有启用，就...]]></description><category></category></item><item><title><![CDATA[Spring初始化Ioc源码分析以及Aop原理分析(三)]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/79716806</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/79716806</guid><author>Mooneal</author><pubDate>Tue, 27 Mar 2018 21:40:01 +0800</pubDate><description><![CDATA[1.分析这行代码：

ApplicationContext beanFactory = new ClassPathXmlApplicationContext(“spring/springmvc.xml”);

public ClassPathXmlApplicationContext(String configLocation) throws BeansException {
    // 直接调...]]></description><category></category></item><item><title><![CDATA[Spring初始化Ioc源码分析以及Aop原理分析(二)]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/79705247</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/79705247</guid><author>Mooneal</author><pubDate>Mon, 26 Mar 2018 22:54:10 +0800</pubDate><description><![CDATA[xmlBeanFactory初始化加载资源
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
        super(parentBeanFactory);
        this.reader = new XmlBeanDefinitionReade...]]></description><category></category></item><item><title><![CDATA[Servlet和Servlet容器概念]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/79702538</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/79702538</guid><author>Mooneal</author><pubDate>Mon, 26 Mar 2018 19:51:42 +0800</pubDate><description><![CDATA[1.什么是Servlet？

在查看javax包下的Servlet，可以看到，servlet仅仅是一个普通的java接口。

package javax.servlet;

import java.io.IOException;

public interface Servlet {
    // 初始化方法
    void init(ServletConfig var1) throws Ser...]]></description><category></category></item><item><title><![CDATA[java8 中Lambda表达式]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/78471351</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/78471351</guid><author>Mooneal</author><pubDate>Tue, 07 Nov 2017 19:24:06 +0800</pubDate><description><![CDATA[一. lambda表达式的使用：

在 c/c++ 中可以使用函数指针的形式，把一个函数（一段代码块）传给另一个函数。而在 c# 中可以使用委托的形式也可以实现



delegate int methodName (int a);
public int sum(int a){
    return a + 4;
}
// 只要返回值 和 参数类型一致那么就能把方法委托给methodName
me...]]></description><category></category></item><item><title><![CDATA[HashMap 的源码分析]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/78461692</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/78461692</guid><author>Mooneal</author><pubDate>Mon, 06 Nov 2017 20:44:58 +0800</pubDate><description><![CDATA[一.java中的位运算符在具体分析之前，先补充点基础知识1.1 算术位运算符<< :代表左移   << 3 左移三位，即本来数值 乘于 2^3;  左移低位补0public void test(){
   int x = 4;
   System.out.println(Integer.toBinaryString(x)); //100
   int y = 4<<2;
   System.out.]]></description><category></category></item><item><title><![CDATA[java8中的String]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/78424374</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/78424374</guid><author>Mooneal</author><pubDate>Thu, 02 Nov 2017 14:11:21 +0800</pubDate><description><![CDATA[ps: 这篇博客是乱写的，笔记的形式，后面有空再整理。1.加载：生成Class对象，不放在堆中，存放在方法区中的元空间。 
2.准备：正式为类变量（static）,分配内存，并设置默认初始值（数据类型的0值，比如，int 为 0）； 
3.至此，类加载结束。但初始化还是要看时机的。
实例化的时候 new 
调用其中的静态字段或者静态方法。
反射调用的时候。
4.什么时候被动引用，不引发初始化呢？]]></description><category></category></item><item><title><![CDATA[java类加载模式与web容器的类加载模式]]></title><link>https://blog.youkuaiyun.com/Mooneal/article/details/78397751</link><guid>https://blog.youkuaiyun.com/Mooneal/article/details/78397751</guid><author>Mooneal</author><pubDate>Mon, 30 Oct 2017 21:42:46 +0800</pubDate><description><![CDATA[一.概述在初学java的时候，很多书和资料都会说java是一个跨平台的语言，是一个动态语言，可以在运行期间加载类。首先说，java是一个跨平台的语言，是因为它的两个关键点：
java虚拟机   jvm
.class 字节码文件
任何一个java文件都是先编译成 .class文件，然后再经过jvm解释成机器码。只要拥有.class文件和jvm，那么任何一个平台都可以运行。然后再看，java是一个动态语]]></description><category></category></item></channel></rss>