<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[abc123maxiaolong的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/abc123maxiaolong</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; abc123maxiaolong]]></copyright><item><title><![CDATA[List -> Map<String, Map<String, Striing>> demo]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84923606</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84923606</guid><author>abc123maxiaolong</author><pubDate>Tue, 17 Jul 2018 10:27:26 +0800</pubDate><description><![CDATA[
package com.ctrip.framework.apollo.demo;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import java.util.List;
import java.util.Map;
import java.util.stream.C...]]></description><category></category></item><item><title><![CDATA[CompletableFuture源码赏析]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84915719</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84915719</guid><author>abc123maxiaolong</author><pubDate>Mon, 29 Jan 2018 17:26:52 +0800</pubDate><description><![CDATA[
文章原创，转载请注明出处：http://abc08010051.iteye.com/blog/2409693
后面会再修改一下，让文章读起来更好读，现在的版本还比较粗糙
 
 
CompletableFuture是java 1.8提供的一个新类，是对Future的增强，吸收了guava异步线程的特点，可以实现一系列的异步线程操作，很多常规的用法网上有很多博客，这里说说部分代码的实现：...]]></description><category></category></item><item><title><![CDATA[spring 事件机制 异步操作]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84914589</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84914589</guid><author>abc123maxiaolong</author><pubDate>Sun, 07 Jan 2018 09:50:43 +0800</pubDate><description><![CDATA[
1 spring 事件机制的好处：解耦合，对于一对多的操作，可以接触代码耦合
 
2 针对于要解耦的操作，很多都可以异步操作，主线程响应时间会变快，spring提供的事件机制默认是同步的，
 
	@Override
	public void multicastEvent(final ApplicationEvent event, ResolvableType eventType) {...]]></description><category></category></item><item><title><![CDATA[Function 对代码封装带来的改变]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84913659</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84913659</guid><author>abc123maxiaolong</author><pubDate>Mon, 18 Dec 2017 16:40:12 +0800</pubDate><description><![CDATA[
java 8 Function特性也出现了很久了，在项目用的越来越多，记录一下个人的感悟
 
1 函数式参数的编程思想，对callback功能的全面替代
    这个很容易理解，callback本身就是接近函数式参数的一个概念，代码封装中常会对同一个方法中相同的部分抽取，不同的部分定义成callback，调用者提供具体的实现，使用过的类HibernateDaoSupport是一个很好的体...]]></description><category></category></item><item><title><![CDATA[Curator zookeeper 分布式锁实现]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84913649</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84913649</guid><author>abc123maxiaolong</author><pubDate>Mon, 18 Dec 2017 14:53:23 +0800</pubDate><description><![CDATA[
curator版本：
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.curator&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;curator-recipes&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;2....]]></description><category></category></item><item><title><![CDATA[java 8 Stream list to Map  key 重复 value合并到Collection]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84906381</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84906381</guid><author>abc123maxiaolong</author><pubDate>Wed, 09 Aug 2017 10:38:34 +0800</pubDate><description><![CDATA[
关于把list转换成key value的map有很多博客上都有实现，这里是一个吧value放入到集合中去
 
      List&amp;lt;String&amp;gt; list = Lists.newArrayList(&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;1&quot;);
        Map&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt; map = list.str]]></description><category></category></item><item><title><![CDATA[LinkedHashMap理解]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84826940</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84826940</guid><author>abc123maxiaolong</author><pubDate>Wed, 16 Nov 2016 14:55:54 +0800</pubDate><description><![CDATA[
注： 下面的源码理解均基于jdk1.8的源码
 
   HashMap是常用的数据集合，但是是无序， LinkedHashMap就是在HashMap上进行的一种扩展，在HashMap特性的基础上增加了有序这个特性（还可以根据最新使用自动排序）设计十分巧妙
 
   1 LinkedHashMap继承自HashMap
    
public class LinkedHashMap&amp;lt...]]></description><category></category></item><item><title><![CDATA[spring boot 异常处理扩展（返回格式protofuf）]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84815924</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84815924</guid><author>abc123maxiaolong</author><pubDate>Mon, 05 Sep 2016 16:24:46 +0800</pubDate><description><![CDATA[
spring boot 提供了统一的异常处理机制，@ControllerAdvice, @ExceptionHandler两个注解，可以处理controller里抛出的异常，不要对每个controller方法进行try catch，如果你使用json或者返回固定的错误页面作为传输数据格式，普通的使用方法即可解决，由于我们服务端使用protobuf与客户端进行交互，每个controller方法的...]]></description><category></category></item><item><title><![CDATA[泛型的使用]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84807261</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84807261</guid><author>abc123maxiaolong</author><pubDate>Wed, 22 Jun 2016 15:08:17 +0800</pubDate><description><![CDATA[
public class ClassTest {
  public static void main(String[] args) throws Exception {
    ParameterizedType type = (ParameterizedType) 
       Bar.class.getGenericSuperclass();
    System.out.pri...]]></description><category></category></item><item><title><![CDATA[disruptor 异常封装小技巧]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84744139</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84744139</guid><author>abc123maxiaolong</author><pubDate>Fri, 09 Oct 2015 17:33:02 +0800</pubDate><description><![CDATA[
 
disruptor部分代码流程控制使用的是异常，抛出自定义的异常，外层捕捉，下面是它封装的异常
 
直接贴代码：
public final class AlertException extends Exception
{
    /**
     * Pre-allocated exception to avoid garbage generation
     */
 ...]]></description><category></category></item><item><title><![CDATA[disruptor(二) MultiProducerSequencer]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84744131</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84744131</guid><author>abc123maxiaolong</author><pubDate>Fri, 09 Oct 2015 17:09:39 +0800</pubDate><description><![CDATA[
 
 
在《disruptor(一) 单一生产者和WorkPool消费者源码阅读》介绍了单一生产者
 
当多个生产者向RingBuffer中写入数据时，创建Disruptor时要修改对应的参数：
 
Disruptor disruptor = new Disruptor(eventFactory, BUFFER_SIZE, executor, ProducerType.MULTI,...]]></description><category></category></item><item><title><![CDATA[disruptor(一) 单一生产者和WorkPool消费者源码阅读]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84744064</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84744064</guid><author>abc123maxiaolong</author><pubDate>Fri, 09 Oct 2015 11:45:56 +0800</pubDate><description><![CDATA[
 最近项目中有用到disruptor，提供一个类似队列或者数据容器的功能，并发能力很强
 
概念：
Sequence:就是一个增长序列，类似oracle的增长序列，生产和消费程序都有Sequence，记录生产和消费程序的序列
Sequencer： 多个概念的一个组合，持有Sequence，等待策略等一些引用，生产者引用
SequenceBarrier:直接翻译就是序列屏障，就是Seq...]]></description><category></category></item><item><title><![CDATA[java akka]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84730641</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84730641</guid><author>abc123maxiaolong</author><pubDate>Tue, 30 Jun 2015 17:48:37 +0800</pubDate><description><![CDATA[
1 需要的依赖
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;com.typesafe.akka&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;akka&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;2.1.4&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt]]></description><category></category></item><item><title><![CDATA[logback 多线程 死锁]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84717850</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84717850</guid><author>abc123maxiaolong</author><pubDate>Tue, 12 May 2015 11:07:41 +0800</pubDate><description><![CDATA[
logback 多线程下频繁的写日志会出现死锁，可以使用异步appender避免这个问题：
	&amp;lt;!-- 异步写日志，用户简介专用日志 --&amp;gt;
	&amp;lt;appender name=&quot;ASYNC_USER_PROFILE_MODEL&quot;
			  class=&quot;ch.qos.logback.classic.AsyncAppender&quot;&amp;gt;
		&amp;lt;File&amp;gt;${LO...]]></description><category></category></item><item><title><![CDATA[logback log4j 冲突]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84717263</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84717263</guid><author>abc123maxiaolong</author><pubDate>Fri, 08 May 2015 16:55:56 +0800</pubDate><description><![CDATA[logback的jar包和slf4j-log4j12.jar包在linux环境下冲突，windows下正常； hadoop的jar包会下载其依赖的jar包slf4j-log4j12.jar；同时使用logback和hadoop操作，要在pom中exclusion slf4j-log4j12.jar；否则在linux环境下打不出日志...]]></description><category></category></item><item><title><![CDATA[关于String的问题]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84704611</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84704611</guid><author>abc123maxiaolong</author><pubDate>Thu, 05 Mar 2015 14:07:08 +0800</pubDate><description><![CDATA[
关于String的经典问题很多，不过弄清楚jvm如果创建和存储String对象，一般的问题应该都能对付
1 String对象的存放
   (1) 直接使用双引号：String s = &quot;abc&quot;; &quot;abc&quot;字符串存在jvm的常量池中，常量池在方法区中
   (2) 使用new String：String s = new String(&quot;abc&quot;);在堆中分配内存区域
 
2 + 操作...]]></description><category></category></item><item><title><![CDATA[linux 防火墙 psftp 上传下载相关命令]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84689467</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84689467</guid><author>abc123maxiaolong</author><pubDate>Thu, 04 Dec 2014 15:04:29 +0800</pubDate><description><![CDATA[
1） 永久性生效，重启后不会复原
开启： chkconfig iptables on
关闭： chkconfig iptables off
2） 即时生效，重启后复原
开启： service iptables start
关闭： service iptables stop
需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时，做如下设置，开...]]></description><category></category></item><item><title><![CDATA[visualvm jmx 监控linux上的tomcat]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84689302</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84689302</guid><author>abc123maxiaolong</author><pubDate>Wed, 03 Dec 2014 17:51:16 +0800</pubDate><description><![CDATA[
1 在java home下的bin目录下面创建文件java.all.policy文件，并添加一下内容：
  
grant codebase &quot;file:${java.home}/../lib/tools.jar&quot; {

   permission java.security.AllPermission;

};

 2 执行命令
jstatd -J-Djava.securit...]]></description><category></category></item><item><title><![CDATA[java高并发下的唯一性验证]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84687178</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84687178</guid><author>abc123maxiaolong</author><pubDate>Fri, 21 Nov 2014 14:03:36 +0800</pubDate><description><![CDATA[
做java ee程序基本上都会遇到唯一性的问题，我们通常不考虑并发性的问题的情况下的做法是：先根据条件去数据中查询是否存在，如果存在则提示不唯一，否则插入
 
下面是一个简单的例子， 向表t_test_curr插入数据，t_test_curr表包含两个字段，一个id（主键，自增长），一个username，要求唯一
1 不考虑并发性的做法：
  
    public void tes...]]></description><category></category></item><item><title><![CDATA[java静态方法是否可以被重写]]></title><link>https://blog.csdn.net/abc123maxiaolong/article/details/84686482</link><guid>https://blog.csdn.net/abc123maxiaolong/article/details/84686482</guid><author>abc123maxiaolong</author><pubDate>Tue, 18 Nov 2014 17:40:43 +0800</pubDate><description><![CDATA[
首先来看一段代码：
public class ExtendDemo {
    public static void main (String[] args) {
        SuperClass superClass = new SuperClass();
        SuperClass subClass = new SubClass();
        superCl...]]></description><category></category></item></channel></rss>