<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[empyan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/empyan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; empyan]]></copyright><item><title><![CDATA[重构·改善既有程序的设计总结（代码重构技巧）]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/103115373</link><guid>https://blog.youkuaiyun.com/empyan/article/details/103115373</guid><author>empyan</author><pubDate>Sat, 12 Sep 2020 22:00:16 +0800</pubDate><description><![CDATA[重构本来就不是一件应该特别拨出时间做的事情，重构应该随时随地的进行。

何时重构？

1、重复代码

同一个类中有相同的表达式：提炼出重复的代码，然后让两个地方都调用被提炼出来的那一段代码；
	两个互为兄弟的子类内含有相同的表达式：提炼出相同代码，将它推入超类内；
	两个毫不相干的类中出现：将重复的代码提炼到一个独立的类中。
	代码之间相似，并非完全相同：使用模板函数，用方法名统一差异推入超类，子...]]></description><category></category></item><item><title><![CDATA[多线程编程总结二（包含并发容器和线程池）]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/96109123</link><guid>https://blog.youkuaiyun.com/empyan/article/details/96109123</guid><author>empyan</author><pubDate>Thu, 25 Jul 2019 12:07:13 +0800</pubDate><description><![CDATA[关于多线程基础部分内容可以看多线程编程总结。

1.看看下面的代码


package com.yan.thread;

import java.util.concurrent.TimeUnit;

public class Account {
    private  String name;
    private double balance;

    public synchronize...]]></description><category></category></item><item><title><![CDATA[Netty基础简介]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/97110034</link><guid>https://blog.youkuaiyun.com/empyan/article/details/97110034</guid><author>empyan</author><pubDate>Wed, 24 Jul 2019 10:45:26 +0800</pubDate><description><![CDATA[作者：keep_trying_gogo
来源：https://blog.youkuaiyun.com/yjp198713/article/details/79309260#bytebuf

                                                &lt;link rel="stylesheet" href="https://csdnimg.cn/release/ph...]]></description><category></category></item><item><title><![CDATA[NIO编程]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/97044022</link><guid>https://blog.youkuaiyun.com/empyan/article/details/97044022</guid><author>empyan</author><pubDate>Tue, 23 Jul 2019 22:59:57 +0800</pubDate><description><![CDATA[传统的BIO(blocking I/O)是阻塞的，服务器端：ServerSocket负责绑定IP地址，启动监听端口，然后一直等待着客户端连接，是阻塞的状态；客户端：Socket负责发起连接操作。连接成功后，读和写的操作同样是等待阻塞的。经典模型是来一个客户端，起一个线程，因为主线程要负责监听，要重起一条线程处理客户端请求。

NIO(non-blocking I/O)是同步非阻塞。打个比方，客...]]></description><category></category></item><item><title><![CDATA[5分钟入门Zookeeper集群配置]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/96739300</link><guid>https://blog.youkuaiyun.com/empyan/article/details/96739300</guid><author>empyan</author><pubDate>Mon, 22 Jul 2019 13:56:28 +0800</pubDate><description><![CDATA[安装包解压，复制配置文件




# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass betwe...]]></description><category></category></item><item><title><![CDATA[一起走进动物园管理员——ZooKeeper]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/96850641</link><guid>https://blog.youkuaiyun.com/empyan/article/details/96850641</guid><author>empyan</author><pubDate>Mon, 22 Jul 2019 13:32:55 +0800</pubDate><description><![CDATA[作者：汤小洋
来源：http://blog.51cto.com/12402007/2331203

一、ZooKeeper简介
1. ZooKeeper是什么
​   Apache ZooKeeper是一个开源的分布式服务框架，为分布式应用提供协调服务，用来解决分布式应用中的数据管理问题，如：配置管理、域名服务、分布式同步、集群管理等官网  https://zookeeper.apache.o...]]></description><category></category></item><item><title><![CDATA[HBase原理]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/96611459</link><guid>https://blog.youkuaiyun.com/empyan/article/details/96611459</guid><author>empyan</author><pubDate>Sat, 20 Jul 2019 17:58:53 +0800</pubDate><description><![CDATA[讨论QQ：1586558083目录系统架构物理存储整体的物理结构StoreFile 和 HFile 结构MemStore 和 StoreFileHbase WAL HLog预写Region&nbsp;寻址机制老的 Region 寻址方式新的 Region 寻址方式&nbsp;读写过程&nbsp;读请求过程&nbsp;写请求过程RegionServer 工作机制Region 分配RegionServ...]]></description><category></category></item><item><title><![CDATA[redis持久化]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/96350556</link><guid>https://blog.youkuaiyun.com/empyan/article/details/96350556</guid><author>empyan</author><pubDate>Thu, 18 Jul 2019 14:16:34 +0800</pubDate><description><![CDATA[Redis provides a different range of persistence options:

The RDB persistence performs point-in-time snapshots of your dataset at specified intervals.
	the AOF persistence logs every write operation ...]]></description><category></category></item><item><title><![CDATA[干货安利]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/90340908</link><guid>https://blog.youkuaiyun.com/empyan/article/details/90340908</guid><author>empyan</author><pubDate>Sun, 19 May 2019 12:08:46 +0800</pubDate><description><![CDATA[今天给大家安利两门极客时间的课程，王争老师的《数据结构和算法之美》和丁奇老师的《mysql实战》。极客时间的课程我买了不少，但是这两本从课程刚上线我就买了，是前google和网易大佬的多年经验分享，真的是干货满满，作者大大很用心。数据结构不仅只是讲纯粹的数据结构，不同于大多的填鸭式，还结合和工程上的应用，学起来知其然知其所以然，学起来轻松，不仅加深记忆点，也真正感受到了数据结构算法的作用、魅力和重...]]></description><category></category></item><item><title><![CDATA[Hadoop入门·从零搭建hadoop集群]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/83246979</link><guid>https://blog.youkuaiyun.com/empyan/article/details/83246979</guid><author>empyan</author><pubDate>Sun, 10 Feb 2019 00:02:39 +0800</pubDate><description><![CDATA[ 

  首先先介绍下集群。就是现在是大数据时代嘛。生活中每天无时无刻都在产生着海量数据，这些数据都是很有价值的，比如分析用户数据可以掌握用户喜好，进行针对推荐之类，医学上分析病人数据可以训练机器人学会看病。那么庞大的数据量用一台机子去计算，无论你的配置有多好，都跟不上撑不住。所以一个任务要有多台机子一起完成，一个任务由多台机子进行计算。这些机子就组成一个集群。而Hadoop中的HDFS模块，也就...]]></description><category></category></item><item><title><![CDATA[struts2入门]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54973966</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54973966</guid><author>empyan</author><pubDate>Fri, 10 Feb 2017 20:53:03 +0800</pubDate><description><![CDATA[1.将struts2过滤器添加到web.xml中


   
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    

    
        struts2
        /*
    

2. 配置struts2的配置文件（在src目录中创建st]]></description><category></category></item><item><title><![CDATA[MVC演化、理解]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54933908</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54933908</guid><author>empyan</author><pubDate>Wed, 08 Feb 2017 22:24:03 +0800</pubDate><description><![CDATA[我们先不解释什么叫MVC，而是慢慢把项目改进发展成MVC项目来理解它。
无论是jsp中嵌入java代码，或者servlet内嵌html都会使代码混乱，不便分工合作和后期开发。我们现在让jsp只负责显示，而代码控制给servlet负责，就是处理请求交给servlet，这样我们就把项目的显示和控制分离开来。
以用户注册作为例子，首先要有页面register.jsp输入用户信息，因为jsp只负责显示]]></description><category></category></item><item><title><![CDATA[依赖注入]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54910815</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54910815</guid><author>empyan</author><pubDate>Tue, 07 Feb 2017 15:51:58 +0800</pubDate><description><![CDATA[控制反转与依赖注入思想


什么是控制反转？什么是依赖注入？有一个文章介绍得很好。说一家公司要选择自来水公司，老板先选择自来水公司A，后来又改成自来水B，这样改来改去浪费老板精力，所以就干脆让手下人全权负责，这样控制权就从老板手中转到手下人。这就是控制反转。依赖注入就是控制反转的另一种说法，意思就是现在老板只要伸手要水，水就注入到他手上，至于选择哪个公司的水由张三来确实，在Spring中其实]]></description><category></category></item><item><title><![CDATA[工厂模式及在项目中的应用]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54897088</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54897088</guid><author>empyan</author><pubDate>Mon, 06 Feb 2017 21:20:16 +0800</pubDate><description><![CDATA[工厂模式分为简单工厂、工厂方法模式和抽象工厂模式。简单工厂顾名思义是最简单的，从一个工厂获取所需的产品类似于factory.getProduct1();或factory.getProduct2()，最经典的运用switch语句。简单工厂要增加产品要修改源码，破坏ocp原则（对扩展开放，修改封闭）

工厂方法模式与简单工厂最不一样的是工厂方法模式有工厂接口

抽象工厂模式与工厂方法模式最大的]]></description><category></category></item><item><title><![CDATA[验证类]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54801580</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54801580</guid><author>empyan</author><pubDate>Tue, 31 Jan 2017 23:00:10 +0800</pubDate><description><![CDATA[为了防止页面刷新带来空参提交插入
package com.yan.shop.util;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

public class ValidateUtil {
	public static boolean validat]]></description><category></category></item><item><title><![CDATA[反射技术]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54380145</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54380145</guid><author>empyan</author><pubDate>Thu, 12 Jan 2017 17:37:00 +0800</pubDate><description><![CDATA[反射技术可以动态创建实例，即在不知道具体类的情况创建对象，要创建对象就要获取描述对象的字节码对象，而要获取字节码对象要先获取描述字节码对象的Class
获取Class对象方式：
public static void getClassDemo_1() {
	Person p=new Person();
	 Class clazz=p.getClass();
	 System.out.printl]]></description><category></category></item><item><title><![CDATA[正则表达式应用]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/54378100</link><guid>https://blog.youkuaiyun.com/empyan/article/details/54378100</guid><author>empyan</author><pubDate>Thu, 12 Jan 2017 15:04:35 +0800</pubDate><description><![CDATA[1.匹配
      public static void matchDemo(){
    	String tel="13812341234";
    	String regex="1[358][0-9]{9}";
    	boolean b=tel.matches(regex);
    	System.out.println(b);
    } 


 这是最常见的

2.切]]></description><category></category></item><item><title><![CDATA[设计模式：单例模式]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/53692630</link><guid>https://blog.youkuaiyun.com/empyan/article/details/53692630</guid><author>empyan</author><pubDate>Fri, 16 Dec 2016 14:22:29 +0800</pubDate><description><![CDATA[单例模式是什么？简单来说就是为了保证实例对象唯一。比如中国实行一夫一妻制度，每个人的妻子是唯一的。这个时候就要使用单例模式，只new一次妻子类，需要用的时候通过一个函数(唯一访问点)获取，而不是一直new，那样会有千千万万个妻子，不是原本那个了
class Single {
	private static final Single SINGLE_INSTANCE = new Single();]]></description><category></category></item><item><title><![CDATA[多线程编程总结]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/53558151</link><guid>https://blog.youkuaiyun.com/empyan/article/details/53558151</guid><author>empyan</author><pubDate>Sat, 10 Dec 2016 14:22:42 +0800</pubDate><description><![CDATA[实现多线程编程一：继承Thread类，复写父类的run方法，父类引用调用的是子类方法
1.继承Thread类
2.重写run方法（线程要执行的任务）
3.创建并启动（通过start方法）
下面以售票例子说明：
class SaleTicket extends Thread{//继承Thread方法
	private int ticket=100;
	public void run(){/]]></description><category></category></item><item><title><![CDATA[常见排序算法总结（二）]]></title><link>https://blog.youkuaiyun.com/empyan/article/details/53465623</link><guid>https://blog.youkuaiyun.com/empyan/article/details/53465623</guid><author>empyan</author><pubDate>Mon, 05 Dec 2016 15:15:02 +0800</pubDate><description><![CDATA[1.希尔排序
思想：希尔排序可以看成是对直接插入排序的一种改进，它不再是相邻的比较，而是隔着一定的增量。隔着一定的距离的数为一组，进行比较排序（使用直接插入排序），比较好了，即为一轮，然后增量减小，继续进行下一轮，当减小到一，则排序结束。]]></description><category></category></item></channel></rss>