<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[不更新了]]></title><description><![CDATA[重新整理到 https://github.com/pzxwhc]]></description><link>https://blog.youkuaiyun.com/Allen215902</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Allen215902]]></copyright><item><title><![CDATA[Java 集合：Collection，List，ArrayList，Vector，LinkedList（实现方式，对比）]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50912342</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50912342</guid><author>Allen215902</author><pubDate>Thu, 17 Mar 2016 11:40:02 +0800</pubDate><description><![CDATA[Collection ListCollection 是 Java 集合的一个根接口，JDK 没有它的实现类。 内部仅仅做 add()，remove()，contains()，size() 等方法的声明。List 接口是Collection 接口的一个子类，在Collection 基础上扩充了方法。同时可以对每个元素插入的位置进行精确的控制，它的主要实现类有 ArrayList，Vector，Link]]></description><category></category></item><item><title><![CDATA[Java 多线程：Lock 关键字]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50890274</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50890274</guid><author>Allen215902</author><pubDate>Mon, 14 Mar 2016 21:53:27 +0800</pubDate><description><![CDATA[sleep() & interrupt()线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt();令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt]]></description><category></category></item><item><title><![CDATA[Java 多线程：分析线程池的实现原理]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50810277</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50810277</guid><author>Allen215902</author><pubDate>Sat, 05 Mar 2016 19:27:05 +0800</pubDate><description><![CDATA[前言我们都知道，所谓线程池，那么就是相当于有一个池子，线程就放在这个池子中进行重复利用，能够减去了线程的创建和销毁所带来的代价。但是这样并不能很好的解释线程池的原理，下面从代码的角度分析一下线程池的实现。线程池的相关类在 Java 中，有几个接口，类 值得我们关注：
Executor
ExecutorService
AbstractExecutorService
ThreadPoolExecutor]]></description><category></category></item><item><title><![CDATA[Java 多线程：生产者消费者模型]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50787544</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50787544</guid><author>Allen215902</author><pubDate>Thu, 03 Mar 2016 12:15:33 +0800</pubDate><description><![CDATA[概念生产者消费者问题描述了两个线程（即生产者线程和消费者线程），共享固定大小的缓冲区，在实际运行中可能出现的问题。 
- 生成者：生成一定量的数据放到缓冲区中，然后重复此过程。 
- 消费者：在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据，消费者也不会在缓冲区中空时消耗数据。要解决该问题，就必须让生产者在缓冲区满时休眠（要么干脆就放弃数据），等到下次消费者消耗缓冲区中的数]]></description><category></category></item><item><title><![CDATA[Java 多线程：synchronized 多线程同步关键字]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50778383</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50778383</guid><author>Allen215902</author><pubDate>Wed, 02 Mar 2016 11:11:39 +0800</pubDate><description><![CDATA[前言在 多线程生成的原因（Java内存模型与i++操作解析） 中，介绍了Java的内存模型，从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchronized 的方式，还有 lock，condition，volatile，threadlocal，atomicInteger，cas等方式。synchronized 用法它的修饰对象有几种： 
1. 修饰一个]]></description><category></category></item><item><title><![CDATA[做 LeetCode 有感]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50756228</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50756228</guid><author>Allen215902</author><pubDate>Sat, 27 Feb 2016 17:55:46 +0800</pubDate><description><![CDATA[今天周六，公司一个人也没有，下午花了5个半小时，安安静静的再看，再做了4道 LeetCode 的题目。看完之后，现在仔细回想，获得了什么，好像什么也没有。但是，就是觉得这个过程是很舒服的，就像看了一场电影，和女朋友逛了一次街，去吃了一次火锅一样。做这些题目的时候是有一些想法，但是具体到编码，倒不是想象的那么轻松，1分钟的想法，可能要花一个小时的实现。另外，在看 Discuss 别人的实现中，你会发现]]></description><category></category></item><item><title><![CDATA[设计模式：观察者模式（有利于代码解耦）]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50747438</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50747438</guid><author>Allen215902</author><pubDate>Fri, 26 Feb 2016 09:43:31 +0800</pubDate><description><![CDATA[概念首先，什么是观察者模式：多个观察者去监听主题，当主题发生变化的时候，主题会通知所有的观察者。 
盗用网上的一个图：从上图的结构可以看出，主题维护了一个观察者类型的链表，每当主题变化的时候，就会循环调用各个观察者的对应方法（这就是通知）。 
在观察者模式中，又分为 推模型 和 拉模型。
推模型：主题向观察者推送详细信息。
拉模型：主题把自身作为一个参数发送给观察者，观察者需要什么信息，那么就 主题]]></description><category></category></item><item><title><![CDATA[设计模式：策略模式（对象的某个行为，在不同的场景中，有不同的实现算法）]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50743731</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50743731</guid><author>Allen215902</author><pubDate>Fri, 26 Feb 2016 00:35:00 +0800</pubDate><description><![CDATA[前言工作遇到的需求在工作中，遇到这样的需求：需要对一些操作进行记账，比如说，客户购买了一笔资产A之后，那么
客户的钱少了
客户的资产多了
商家的钱多了
商家的资产少了
等等
其实还有一些利息方面的变动，有 M 种变动，总之比较多。而且这个只是考虑客户购买资产A，那么客户购买资产B ，资产C，这个变动还不一样，假设有 N 种 购买方式，那么就是 M * N 的可能变动。思考的问题如何重用
客户的购买行]]></description><category></category></item><item><title><![CDATA[设计模式：装饰器模式（为对象动态的添加功能）]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50739479</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50739479</guid><author>Allen215902</author><pubDate>Thu, 25 Feb 2016 17:45:10 +0800</pubDate><description><![CDATA[前言在学习 Java IO 的时候，记得头几回看到下面的代码，总是有点纳闷： 
InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath)); 
这个代码，首先创建一个 FileInputStream 的对象，然后再传入到 BufferedInputStream 中，这是要干什么，为什么要这么做。现在]]></description><category></category></item><item><title><![CDATA[设计模式：Builder模式（多个构造器参数时可显著改善可读性）]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50734277</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50734277</guid><author>Allen215902</author><pubDate>Wed, 24 Feb 2016 23:40:39 +0800</pubDate><description><![CDATA[前言看到《Effective Java》第2条：遇到多个构造器参数时要考虑用构建器。马上想起之前自己写的一段代码：return InvestorPurchaseCurrentParamPackage.create(
                      investorSum.getReference_id(),
                      entityCode,]]></description><category></category></item><item><title><![CDATA[iTerm 常用命令]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50732778</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50732778</guid><author>Allen215902</author><pubDate>Wed, 24 Feb 2016 18:32:02 +0800</pubDate><description><![CDATA[标签command + t : 打开新的标签页 
command + w : 关闭当前标签页 
command + 数字 / command + 左右方向键 : 切换标签页分屏command + d : 水平分屏 
command + shift + d : 垂直分屏 
command + option + 方向键上下左右：切换标签内的不同区域行内操作ctrl + u : 直接清除本行 
ctrl]]></description><category></category></item><item><title><![CDATA[网络：contentType,dataType,Accept区别]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50720218</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50720218</guid><author>Allen215902</author><pubDate>Tue, 23 Feb 2016 01:42:39 +0800</pubDate><description><![CDATA[ContentTypeWhen sending data to the server, use this content type.  
Default is “application/x-www-form-urlencoded;DataTypeThe type of data that you’re expecting back from the server. 
 If none is spec]]></description><category></category></item><item><title><![CDATA[Springmvc：前后端传参方式总结]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50720102</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50720102</guid><author>Allen215902</author><pubDate>Tue, 23 Feb 2016 01:02:18 +0800</pubDate><description><![CDATA[包括：@PathVarible，@PathParam，@RequestParam，@RequestBody，@RequestHeader 以及 Spring自动封装@PathVarible用法后端@RequestMapping(value="/findarticlesbyclassify/{classifyId}",method=RequestMethod.GET)public String  fi]]></description><category></category></item><item><title><![CDATA[NodeJs module 的初步理解]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50718750</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50718750</guid><author>Allen215902</author><pubDate>Mon, 22 Feb 2016 19:45:53 +0800</pubDate><description><![CDATA[一个node js文件就相当于一个模块。在客户端，通过script 标签引入 Js 文件，那么就可以访问其内容。但是这样会带来弊端很多，最大的就是作用域相同，产生冲突问题。nodejs 使用了 exports 对象和 require 对象来解决对外提供接口和引用模块问题。Node 对外提供接口可以把模块中希望被外界访问的内容定义到exports对象中。例如：var name='';
function]]></description><category></category></item><item><title><![CDATA[Springmvc：基本流程]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50692002</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50692002</guid><author>Allen215902</author><pubDate>Fri, 19 Feb 2016 00:37:13 +0800</pubDate><description><![CDATA[下图1很好的说明了SpringMVC的流程：



图1







用户向服务器发送请求，请求被Spring 前端控制Servelt DispatcherServlet捕获；DispatcherServlet对请求URL进行解析，得到请求资源标识符（URI）。然后根据该URI，调用 HandlerMapping获得该Handler配置的所有相关的对象（包括Handler]]></description><category></category></item><item><title><![CDATA[Java排序算法：希尔排序]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50688355</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50688355</guid><author>Allen215902</author><pubDate>Thu, 18 Feb 2016 20:35:41 +0800</pubDate><description><![CDATA[一.思想：

是插入排序法的一种改进。先取一个小于n的整数d1作为第一个增量，所有距离为d1倍数的整数作为一个组，然后对组内 进行插入排序，然后再取第二个增量d2




二.例子：

比如2,5,3,1,4,6.



当d=3的时候，所有距离为3的整数作为一个分组，那么2,1作为一个分组，5,4作为一个分组，3,6作为一个分组，然后对分组进行排序。2,1交换为1,2。]]></description><category></category></item><item><title><![CDATA[Java排序算法：插入排序]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50688260</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50688260</guid><author>Allen215902</author><pubDate>Thu, 18 Feb 2016 20:07:38 +0800</pubDate><description><![CDATA[一.思想：

需访问数列n-1遍，每次处理就是将无序序列的第一个元素与有序序列的元素从后往前逐个进行比较，找到插入的位置，有序序列从该位置起后面的元素依次向后挪动一个位置，新元素则插入该新位置中。




二.例子：

比如5,4,2,3



第一趟排序过程为：把5当做有序序列，无序序列为4,2,3，第一个元素为4,4第二趟排序为：有序序列为4,5无序序列为2,3，第一]]></description><category></category></item><item><title><![CDATA[Java排序算法：快速排序]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50688179</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50688179</guid><author>Allen215902</author><pubDate>Thu, 18 Feb 2016 19:45:58 +0800</pubDate><description><![CDATA[一.思想：

对冒泡排序算法的一种改进。通过一趟排序将排序的数据分割成两个部分，其中一部分的所有数据都比另一部分的所有数据都要小，然后再按此方法对这两部分分别再进行快速排序，依次类推。实现为：



开始时先设两个变量i=Start,j=End;以第一个元素作为中间点，pivot=num[i];以j--的形式从后向前搜索，找到第一个比pivot小的，则将num[i] = num[j]以]]></description><category></category></item><item><title><![CDATA[Java IO：网络IO模型]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50686243</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50686243</guid><author>Allen215902</author><pubDate>Thu, 18 Feb 2016 17:25:13 +0800</pubDate><description><![CDATA[网络IO模型有5种，分别为：阻塞式IO，非阻塞式IO，IO复用，信号驱动式IO 和 异步IO。


一.  操作系统如何处理IO
    Linux 会把所有的外部设备都看成一个文件来操作，对外部设备的操作可以看成是对文件的操作。我们对一个文件的读写，都会通过内核提供的系统调用，内核会给我们返回一个 File Descriptor，这个描述符是一个数字，指向内核的一个结构体，我们应用程序对]]></description><category></category></item><item><title><![CDATA[Java IO：基于字节的IO操作]]></title><link>https://blog.youkuaiyun.com/Allen215902/article/details/50682686</link><guid>https://blog.youkuaiyun.com/Allen215902/article/details/50682686</guid><author>Allen215902</author><pubDate>Thu, 18 Feb 2016 14:47:33 +0800</pubDate><description><![CDATA[包括：


FileInputStreamByteArrayInputStreamObjectInputStreamBufferedInputStreamDataInputStream


上面 5 个为常用的基于字节操作的 IO 操作类，其中前三个 相当于 装饰器模式的 ConcreteComponent，后两个是具体的装饰者类。传送门：装饰器模式




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