<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dms2017的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dms2017</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dms2017]]></copyright><item><title><![CDATA[windows aseprite编译指南（白嫖）]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/134379068</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/134379068</guid><author>dms2017</author><pubDate>Mon, 13 Nov 2023 16:09:41 +0800</pubDate><description><![CDATA[aseprite编译指南]]></description><category></category></item><item><title><![CDATA[NIO总结]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/131430961</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/131430961</guid><author>dms2017</author><pubDate>Wed, 28 Jun 2023 10:11:51 +0800</pubDate><description><![CDATA[NIO（Non-blocking IO）是Java 1.4版本开始引入的一个新的IO API，旨在代替传统IO，它引入了缓冲区和通道的概念，通过选择器实现多路复用。传统IO会区分字节流InputStream和OutputStream以及字符流Reader和Writer，可以发现他们都是单向的，而NIO的通道可以是双向的。]]></description><category></category></item><item><title><![CDATA[从简入繁详解代理模式（手写JDK动态代理）]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/109802302</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/109802302</guid><author>dms2017</author><pubDate>Thu, 19 Nov 2020 16:10:58 +0800</pubDate><description><![CDATA[1简单概要


代理模式：指为其他对象提供一种代理来控制对这个对象的访问。


代理模式主要有两个目的：


①保护目标对象；

②增强目标对象。


它的类图如下：



2分类与详解

2.1 静态代理

举个栗子：儿子正在找对象，而父母希望儿女早点找到另一半，于是在儿子找对象的同时帮他物色：


interface Person{
    void findLove();
}

public class Son implements Person {
    public void findLo...]]></description><category></category></item><item><title><![CDATA[由简入繁详解单例模式]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/109504369</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/109504369</guid><author>dms2017</author><pubDate>Thu, 05 Nov 2020 11:08:56 +0800</pubDate><description><![CDATA[1. 概念


单例模式（SingletonPattern）是指确保一个类在任何情况下都绝对只有一个实例，并提供一个全局访问点。


2. 分类

2.1 饿汉式单例模式


饿汉式单例模式在类加载的时候就初始化并创建单例对象，它是绝对的线程安全，没有加任何锁、执行效率也比较高，但不管用或不用都必须占用一定空间，Spring的IOC容器ApplicationContext就是饿汉式的。


它的代码如下，很好看懂：


/**
 * 写法一：静态代码块初始化
 */
public class Single.]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/106258937</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/106258937</guid><author>dms2017</author><pubDate>Mon, 05 Oct 2020 18:45:28 +0800</pubDate><description><![CDATA[1.概念

垃圾回收（Garbage Collection，GC）是JAVA特有功能，垃圾收集意味着程序不再需要的对象是"无用信息"，这些信息将被丢弃回收。

2.垃圾的判断

如何判断程序中哪些是垃圾，哪些是有用的对象？

2.1 引用计数法

当一个对象被引用，给它设置一个初值为0的引用计数器，被引用一次，计数器加1，当引用失效，计数器减1，当计数器为0时该对象可被当做垃圾回收。

存在问题：对象循环引用。



对象间的相互循环引用导致计数器不为0。

2.2 可达性分析算法

根对象（gcro...]]></description><category></category></item><item><title><![CDATA[Java对象解密]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/108929432</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/108929432</guid><author>dms2017</author><pubDate>Mon, 05 Oct 2020 16:02:08 +0800</pubDate><description><![CDATA[1. 对象的创建

检查类是否加载：虚拟机遇到一条new指令时，先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用，并且检查这个符号引用代表的类是否已经被加载、解析和初始化过，如果没有必须先执行相应的类加载过程；

分配内存：类加载检查通过后，接下来虚拟机将为新对象分配内存，对象所需的内存大小在类加载后可以确定，为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。这个操作有两种方法：指针碰撞（内存规整）、空闲列表（内存不规整）。

为对象分配内存时的指针修改并不是线程安全的，解决]]></description><category></category></item><item><title><![CDATA[排序算法优劣势总结]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/108817843</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/108817843</guid><author>dms2017</author><pubDate>Sat, 26 Sep 2020 23:09:04 +0800</pubDate><description><![CDATA[插入类

直接插入排序

思想：将数组分为有序区和无序区，有序区开始只有一个元素，从第二个元素（无序区的第一个元素）arr[i]开始，由于arr[1]-arr[i-1]已经有序，所以从后面往前判断，若大于当前值r[j]，则将r[j]-r[i-1]向后挪一位，随后插入。

空间复杂度：O(1)

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

优势：小规模输入、有序

劣势：刚好反序的、大规模输入

稳定性：稳定

折半插入排序

思想：在直接插入的基础上，在r[1]-r[i-1]中确定r[i]的插入顺序使用二分查找。

空间复]]></description><category></category></item><item><title><![CDATA[操作系统知识梳理]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/108415136</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/108415136</guid><author>dms2017</author><pubDate>Sat, 05 Sep 2020 15:56:04 +0800</pubDate><description><![CDATA[1 引论

1.1 操作系统的概念

操作系统是控制和管理计算机硬件和软件资源、合理地组织计算机的工作流程，以及方便用户使用的程序和数据的集合。

1.2 操作系统的作用

①OS是用户和计算机硬件系统之间的接口；

②OS是计算机系统资源的管理者；

③OS实现了计算机资源的抽象。

1.3 操作系统的发展

1.3.1 未配置操作系统的计算机系统

①人工操作系统（装带/卸带）；

②脱机输入/输出方式（为了解决CPU和IO速度不匹配）。

1.3.2 批处理系统

①单批道处理系统（一个作业紧接着一个]]></description><category></category></item><item><title><![CDATA[浅析finally关键字如何一定执行]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/106054530</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/106054530</guid><author>dms2017</author><pubDate>Mon, 11 May 2020 16:53:30 +0800</pubDate><description><![CDATA[finally关键字通常和try/catch搭配使用，当程序执行到try中时，finally中的代码一定会执行。


finally为什么会一定实现？



    public static void main(String[] args) {
        try {
            System.out.println("try");
        } catch (Exception e){
            System.out.println("catch");
       ]]></description><category></category></item><item><title><![CDATA[JVM内存结构]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105892570</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105892570</guid><author>dms2017</author><pubDate>Tue, 05 May 2020 19:03:32 +0800</pubDate><description><![CDATA[1. JVM的内存结构

JVM的内存结构主要包括五个部分：程序计数器、虚拟机栈、本地方法栈、堆和方法区，其中程序计数器、虚拟机栈、本地方法栈是线程独有的，而堆和方法区是线程共享的。

1.1 程序计数器（Program Counter Register）

程序计数器是存放下一条指令所在单元的地址的地方，和汇编中的CS:IP寄存器差不多，都是记录下一条指令的地址。每一个线程有一个独立的程序计数器...]]></description><category></category></item><item><title><![CDATA[分别使用BIO和NIO来实现文件的拷贝并比较两者的效率]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105838206</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105838206</guid><author>dms2017</author><pubDate>Wed, 29 Apr 2020 14:11:54 +0800</pubDate><description><![CDATA[1. 本期竞争者有四位，分别是：


第一位：FileInputStream+FileOutputStream（BIO）；

第二位：BufferedFileInputStream+BufferedFileOutputStream（BIO）；

第三位：ByteBuffer+Channel（NIO）；

第四位：MappedByteBuffer+Channel（NIO）；


2. 分别实现文件拷...]]></description><category></category></item><item><title><![CDATA[基于javafx、socket的联机五子棋：实现原理以及遇到的相关问题]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105507559</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105507559</guid><author>dms2017</author><pubDate>Tue, 14 Apr 2020 12:57:53 +0800</pubDate><description><![CDATA[1. 实现原理：

（1）客户端：


①：Client类：表示客户端的主线程，在这个类中定义了客户端的UI界面，所以javafx的按钮事件写在其中；

②：Lisener类：客户端最重要的类，它是一个线程，作为内部类可以使用Client类里面的UI，Lisener主要的工作是负责和服务端通信，当收到服务端传来的信息时将信息反馈在UI界面上，也可以将UI界面上的信息发送给服务端，Lisener类在...]]></description><category></category></item><item><title><![CDATA[SpringMVC学习【2】]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105231991</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105231991</guid><author>dms2017</author><pubDate>Tue, 31 Mar 2020 21:14:43 +0800</pubDate><description><![CDATA[1. 响应：

（1）：返回值为String：

①：使用方法：


    /**
     * 在request中存值
     * @param model
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        User user...]]></description><category></category></item><item><title><![CDATA[SpringMVC学习【1】]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105118501</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105118501</guid><author>dms2017</author><pubDate>Thu, 26 Mar 2020 15:21:01 +0800</pubDate><description><![CDATA[1. SpringMVC介绍：


概述：通过策略接口，Spring 框架是高度可配置的，而且包含多种视图技术，例如JavaServer Pages（JSP）技术、Velocity、Tiles、iText和POI。Spring MVC 框架并不知道使用的视图，所以不会强迫开发者只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色，这种分离让它们更容易进...]]></description><category></category></item><item><title><![CDATA[Spring学习【4】]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/105047798</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/105047798</guid><author>dms2017</author><pubDate>Mon, 23 Mar 2020 14:22:37 +0800</pubDate><description><![CDATA[1. JdbcTemplate使用：

（1）：jar包导入：


        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework&lt;/groupId&gt;
            &lt;artifactId&gt;spring-context&lt;/artifactId&gt;
            ...]]></description><category></category></item><item><title><![CDATA[归并排序以及基于ForkJoin框架实现的并行归并排序（使用RecursiveAction）]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/104834194</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/104834194</guid><author>dms2017</author><pubDate>Fri, 13 Mar 2020 12:40:52 +0800</pubDate><description><![CDATA[1. 首先理解归并排序的实现过程：

我想大家肯定都了解过归并排序，那些文字描述包括分治法我就不复制粘贴了，我这里以图的方式给出它的原理：



重要点：

（1）：假设a数组存储待排序数组，在合并数组时避免不了改变数组内的值，所以需要一个t数组暂时保存中间结果，举个例子：在合并数组为【5,4】时，合并的结果应该是【4,5】，先将结果保存在t里面（因为中间不是简单的交换，可能还包含多个步骤），最后...]]></description><category></category></item><item><title><![CDATA[Spring学习【3】]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/104745394</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/104745394</guid><author>dms2017</author><pubDate>Mon, 09 Mar 2020 15:10:10 +0800</pubDate><description><![CDATA[1. AOP面向切面编程：

（1）：相关术语：

①：JoinPoint：连接点：被拦截（代理）的方法；

②：JoinCut：切入点：真正被拦截后增强的方法；

③：Advice：通知：拦截到JoinPoint后所要做的事情：

——分为前置通知、后置通知、异常通知、最终通知和环绕通知。

④：Introduction：引介：可在运行期间为类动态添加一些方法；

⑤：Target：目标：被代理...]]></description><category></category></item><item><title><![CDATA[回调机制：父亲与儿子]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/104552488</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/104552488</guid><author>dms2017</author><pubDate>Fri, 28 Feb 2020 12:14:29 +0800</pubDate><description><![CDATA[问题描述：父亲让儿子写作业，然后父亲去工作，当儿子写完作业后父亲需要检查儿子写的作业。

①：请用Java回调机制模拟这个场景；

②：当父亲和儿子都是一个线程时，模拟这个场景。

问题①分析：



分析结束，那么可以给出代码了：

Father类：


public class Father {

    private Son son = new Son(this);;

    publi...]]></description><category></category></item><item><title><![CDATA[并行任务求解：数豆子求PI（3.1415926...）]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/104533721</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/104533721</guid><author>dms2017</author><pubDate>Thu, 27 Feb 2020 13:32:50 +0800</pubDate><description><![CDATA[问题描述：给定一个边长2r的正方形，有这样一个圆：以正方形对角线为圆点，以r为半径。现在在正方形区域内随机撒豆子，落在圆内的豆子数为k个，落在正方形内的豆子数为n个，根据以上给定的信息编程求PI，要求用并发（多线程）提高解题效率。

解：初步分析：

由已知信息可以得出：

  （Sc表示圆的面积、Ss表示正方形的面积）

所以：

 

得到：

 ...]]></description><category></category></item><item><title><![CDATA[Spring学习【2】]]></title><link>https://blog.youkuaiyun.com/dms2017/article/details/104496454</link><guid>https://blog.youkuaiyun.com/dms2017/article/details/104496454</guid><author>dms2017</author><pubDate>Tue, 25 Feb 2020 14:07:38 +0800</pubDate><description><![CDATA[一. ioc的注解配置：

1. 注解分类：

（1）：用于创建对象的注解：

①：Component:

——作用：用于把当前类对象存入spring容器中；

——属性value：用于指定bean的id。当我们不写时，它的默认值是当前类名，且首字母改小写。

②：Controller：一般用在表现层

③：Service：一般用在业务层

④：Repository：一般用在持久层

⑤：说明：C...]]></description><category></category></item></channel></rss>