<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nano-dhh]]></title><description><![CDATA[~~~]]></description><link>https://blog.youkuaiyun.com/curiouslearnerdhh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; curiouslearnerdhh]]></copyright><item><title><![CDATA[多线程异步执行]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53674358</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53674358</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:22:45 +0800</pubDate><description><![CDATA[有时候，我们程序中需要执行一些对返回结果无影响的操作，或者耗时比较长的操作，如果这时我们直接将这些操作放在接口中执行，将会对返回结果的及时性产生较大的影响，或者我们有时需要过一定的时间间隔再执行这项任务，这时我们可以考虑在程序中专门运行几个线程去异步执行这些方法。如果常用的，保存用户登录记录、用户登录、注册时进行的奖励操作（eg.加积分)、注册延迟多少秒发奖励、写金币积分的转移记录等这种需求可能存...]]></description><category></category></item><item><title><![CDATA[树结构==>查询实现屏蔽字功能]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53765395</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53765395</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:19:50 +0800</pubDate><description><![CDATA[我最熟悉的是二叉树，最经典的是存的数字，一个节点Node,里面有个存储值的字段valuepublic class Node{
	private String value;
	private Node left;
	private Node right;
}一个左节点Node，一个右节点Node.1、在构建二叉树的时候，在添加一个节点的时候，先比较这个节点的value值和根节点value值的大小，小...]]></description><category></category></item><item><title><![CDATA[返回多个值的两个bean结构定义]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53455533</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53455533</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:18:12 +0800</pubDate><description><![CDATA[有时候方法要返回两个值，后者多个值，用下面定义的bean结构可以很快的构建出来：package com.clou.douliu.server.bean;

import java.io.Serializable;

/**
 * 值对
 * 方法需要返回两个值时，可使用Pair减少代码量
 * @author rabbit
 *
 * @param &amp;lt;F&amp;gt;
 * @param &amp;lt;...]]></description><category></category></item><item><title><![CDATA[图片存储--Linux创建快捷方式]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54313751</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54313751</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:17:34 +0800</pubDate><description><![CDATA[项目没有采用阿里云的OSS，直接将图片存储在ECS中，挂载到专门一个网盘中。项目应用服务器采用的是tomcat， 这就需要将图片的路径放到tomcat webapps ，或者放在项目的根目录，这时就需要在项目目录中创建图片的快捷方式。创建代码：ln -s 源目录 目标快捷方式[root@iZ94mvb4k9rZ dreamrunner]# ln -s /home/douliuicons/share...]]></description><category></category></item><item><title><![CDATA[数据库MySql隧道连接]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54021303</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54021303</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:15:07 +0800</pubDate><description><![CDATA[数据库安全配置：默认情况下Mysql只允许本地进入设置，在外网想通过命令行访问mysql，那是没门的，如果需要外部IP连接到mysql，需要向mysql数据库里的“user”表里添加相关授权。1、grant语法：grant 权限名（所有的权限用all） on 库名（*全部）.表名（*全部） to  '要授权的用户名'  @ '%' (%表示所有的IP，可以只写一个IP） identified by...]]></description><category></category></item><item><title><![CDATA[Linux常用命令]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53423875</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53423875</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:08:50 +0800</pubDate><description><![CDATA[vim命令G跳到最后一行， g跳到第一行  
查询：用/和？的区别：  
/后跟查找的字符串。vim会显示文本中第一个出现的字符串。  
?后跟查找的字符串。vim会显示文本中最后一个出现的字符串。  
二、注意事项：  
不管用/还是？查找到第一个字符串后，按回车，vim会高亮所有的匹配文  查看内存值  
[shengx@iZ945fbqwpnZ logs]$ free -m  
      ...]]></description><category></category></item><item><title><![CDATA[简单工厂模式 ~ 抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/38047585</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/38047585</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:07:25 +0800</pubDate><description><![CDATA[简单工厂模式1. 目的         工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口，由子类决定实例化哪一个类。2 . 简单工厂模式的结构  3. 一个简单例子// 产品接口         
public interface Product {   
  
    public void getName();   
 ...]]></description><category></category></item><item><title><![CDATA[MySQL中进行树状所有子节点的查询]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/48622743</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/48622743</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:06:46 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/ACMAIN_CHM/article/details/4142971在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾，在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次，比如我们事先如果可以确定这个树的最大深度是4, 那...]]></description><category></category></item><item><title><![CDATA[tomcat访问记录日志]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53843109</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/53843109</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:06:04 +0800</pubDate><description><![CDATA[每一次请求（包括静态文件请求）都会在打印到日志文件中去&amp;lt;Host name=&quot;localhost&quot;  appBase=&quot;webapps&quot; unpackWARs=&quot;true&quot; autoDeploy=&quot;true&quot;
    xmlValidation=&quot;false&quot; xmlNamespaceAware=&quot;false&quot;&amp;gt;
    &amp;lt;Alias&amp;gt]]></description><category></category></item><item><title><![CDATA[我的粘贴板(一)-前端]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54427924</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54427924</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:04:10 +0800</pubDate><description><![CDATA[1、xml防止数据出现关键字符：&amp;lt;id&amp;gt;&quot; + u.getId() + &quot;&amp;lt;/id&amp;gt;&amp;lt;name&amp;gt;&amp;lt;![CDATA[&quot; + u.getName() + &quot;]]&amp;gt;&amp;lt;/name&amp;gt;2、get提交乱码处理思路：function verify() {
    //解决中文乱麻问题的方法1，页面端发出的数据作一次encodeURI，服务器段使用]]></description><category></category></item><item><title><![CDATA[操作系统一些玩法/去空行]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54428167</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/54428167</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 15:00:09 +0800</pubDate><description><![CDATA[1、MyEclipse中去除空行Find : ^\s*\nReplace With: 2、windows 8 关机命令：cmd -- &amp;gt;  Shutdown.exe -s -t 3600   一个小时关机3、dos调出服务：cmd -- &amp;gt; services.msc4、端口排查思路：C:\Windows\system32&amp;gt;netstat -aon|findstr &quot;3306&quot;  ...]]></description><category></category></item><item><title><![CDATA[线程之间通讯--wait和notify]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60479029</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60479029</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:59:16 +0800</pubDate><description><![CDATA[使用wait / notify方法实现线程间的通信。（注意这两个方法都是object的类的方法，换句话说java为所有的对象都提供了这两个方法）1 wait 和 notify 必须配合synchronized 关键字使用2wait方法释放锁，notify方法不释放锁。package com.bjsxt.base.conn008;

import java.util.ArrayList;
impor...]]></description><category></category></item><item><title><![CDATA[ThreadLocal]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60604739</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60604739</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:59:01 +0800</pubDate><description><![CDATA[threadLocal的作用：ThreadLocal概念：线程局部变量，是一种多线程间并发访问变量的解决方案。与其synchronized等加锁的方式不同，ThreadLocal完全不提供锁，而使用以空间换时间的手段，为每个线程提供变量的独立副本，以保障线程安全。从性能上说，ThreadLocal不具有绝对的优势，在并发不是很高的时候，加锁的性能会更好，但作为一套与锁完全无关的线程安全解决方案，在...]]></description><category></category></item><item><title><![CDATA[单例模式--两种最优设计]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60607155</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60607155</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:58:47 +0800</pubDate><description><![CDATA[单例模式，最常见的就是饥饿模式，和懒汉模式，一个直接实例化对象，一个在调用方法时进行实例化对象。饥饿模式：很饿，立即实例化对象懒汉模式：很懒，用的时候才实例化对象考虑到性能和线程安全问题，我们一般选择下面两种比较经典的单例模式，在性能提高的同时，又保证了线程安全dubble check instance static inner class双重检查：package com.bjsxt.base.c...]]></description><category></category></item><item><title><![CDATA[并发类容器]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60769916</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60769916</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:58:28 +0800</pubDate><description><![CDATA[一、传统同步容器的缺陷：同步类容器：如古老的Vector、HashTable。这些容器的同步功能其实都是有JDK的Collections.synchronized***等工厂方法去创建实现的。其底层的机制无非就是用传统的synchronized关键字对每个公用的方法都进行同步，使得每次只能有一个线程访问容器的状态。因而状态都是串行化的。他们虽然实现了线程安全，但是严重降低了并发性，在多线程环境时，...]]></description><category></category></item><item><title><![CDATA[经典多线程设计模式（重要）]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60876241</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60876241</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:57:53 +0800</pubDate><description><![CDATA[一、Future模式思想：当service（Main方法模拟）请求一个数据的时候，可以先给他返回一个包装类（空壳，代理对象，未来data,FutureData）然后开一个线程去异步加载真实数据，这样当service收到FutrueData，就可以做其他业务逻辑，当要用的时候，再从FutureData中的方法去加载真实数据。（类似ajax的思想）启动程序：模拟一个请求/**
 * 模拟一个servi...]]></description><category></category></item><item><title><![CDATA[Executor框架]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60885050</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60885050</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:57:21 +0800</pubDate><description><![CDATA[Executor框架：为了更好的控制多线程，JDK提供了一套线程框架Executor，帮助开发人员有效地进行线程控制。它们都在java.util.concurrent包中，是JDK并发包的核心。其中有一个比较重要的类：Executors，他扮演这线程工厂的角色，我们通过Executors可以创建特定功能的线程池。Executors创建线程池方法：newFixedThreadPool(count)方...]]></description><category></category></item><item><title><![CDATA[CountDownLatch、CyclicBarrier、Semaphore]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60963102</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60963102</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:57:09 +0800</pubDate><description><![CDATA[CountDownLacth（倒计时闩）：个人理解：使用同一个CountDownLacth的多个线程，可以使用CountDownLacth提供的await方法，实现阻塞等待，需要其他线程调用CountDownLacth提供的countDown方法来唤醒它，CountDownLacth有构造函数，如果传入2，那么就要两个其他线程调用countDown方法来唤醒它。场景：经常用于监听某些初始化操作，等...]]></description><category></category></item><item><title><![CDATA[锁机制]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60965869</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/60965869</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:56:58 +0800</pubDate><description><![CDATA[概述：在java多线程中，有synchronized关键字来实现线程间的同步互斥工作，那么其实还有一个更优秀的机制去完成这个“同步互斥”工作，他就是Lock对象，用得最多的是重入锁ReentrantLock和读写锁ReentrantReadWriteLock。他们具有比synchronized更为强大的功能，并且有嗅探锁定、多路分支等功能。重入锁ReentrantLock:在需要进行同步的代码部分...]]></description><category></category></item><item><title><![CDATA[Mysql优化]]></title><link>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/63755527</link><guid>https://blog.youkuaiyun.com/curiouslearnerdhh/article/details/63755527</guid><author>curiouslearnerdhh</author><pubDate>Fri, 02 Mar 2018 14:56:38 +0800</pubDate><description><![CDATA[Mysql variables和status:mysql提供variables参数配置变量和status参数状态变量：所有的mysql配置信息都在variables中，这些值可以修改所有的mysql状态值都在status表中，这些值不能修改，只能查看通过show status命令了解各种sql的执行频率。mysql &amp;gt; show [session|global] status;其中：sess...]]></description><category></category></item></channel></rss>