<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hinbo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/batter_hwb</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; batter_hwb]]></copyright><item><title><![CDATA[Java 线程池的分析和使用]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/85052816</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/85052816</guid><author>batter_hwb</author><pubDate>Mon, 17 Dec 2018 17:32:19 +0800</pubDate><description><![CDATA[线程池为线程的生命周期开销问题和资源不足问题提供了解决方案，通过对多个任务重用线程，线程创建的开销被分摊到了多个任务上。合理的利用线程池能带来很大的好处:

降低资源消耗。过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。当任务到达时，任务可以不需要的等到线程创建就能立即执行。
提高线程的可管理性。线程是稀缺资源，如果无限制的创建，不仅会消耗系统资源，还会降低系统的稳定性，使用线...]]></description><category></category></item><item><title><![CDATA[设计模式--代理模式（Proxy Pattern）]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84974649</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84974649</guid><author>batter_hwb</author><pubDate>Wed, 12 Dec 2018 16:08:07 +0800</pubDate><description><![CDATA[1、定义
代理模式就是为其他对象提供一种代理以控制对这个对象的访问。主要分为两种代理模式：静态代理和动态代理。

静态代理：利用组合关系实现静态代理，组合关系注入源对象，然后可以在外层对象进行其它逻辑的注入。静态代理的问题是不同的逻辑注入需要不同的代理对象，一直增加代理对象显然不实际。
动态代理：在java中，可以直接利用java.lang.refect.Proxy类直接创建代理类或者代理对象。
...]]></description><category></category></item><item><title><![CDATA[Java8 ArrayList 详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84955485</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84955485</guid><author>batter_hwb</author><pubDate>Tue, 11 Dec 2018 15:13:20 +0800</pubDate><description><![CDATA[ArrayList 是 Java 集合框架中比较常用的数据结构，底层基于数组实现容量大小的动态变化，所以会占用一块连续的内存空间。ArrayList 是线程不安全的，允许元素为 null。它继承了 AbstractList，实现了 List，RandomAccess，Cloneable，java.io.Serializable 接口，所以ArrayList 是支持快速访问、复制、序列化的。
一、数...]]></description><category></category></item><item><title><![CDATA[LinkedHashMap 详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84941404</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84941404</guid><author>batter_hwb</author><pubDate>Mon, 10 Dec 2018 15:58:15 +0800</pubDate><description><![CDATA[一、概述
概括的说，LinkedHashMap 是一个关联数组、哈希表，它是线程不安全的，允许key为null,value为null。 它继承自HashMap，实现了Map&amp;amp;lt;K,V&amp;amp;gt;接口。其内部还维护了一个双向链表，在每次插入数据，或者访问、修改数据时，会增加节点、或调整链表的节点顺序。以决定迭代时输出的顺序。
默认情况，遍历时的顺序是按照插入节点的顺序。这也是其与 HashMap 最...]]></description><category></category></item><item><title><![CDATA[HashMap 和 HashTable 的区别]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84882183</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84882183</guid><author>batter_hwb</author><pubDate>Fri, 07 Dec 2018 17:37:55 +0800</pubDate><description><![CDATA[HashTable 和 HashMap 是 Java 面试中比较常见的问题，这里主要总结一下 HashMap 和 HashTable 的几个重要的区别。


基类不同：HashTable 基于 Dictionary 类，而 HashMap 是基于 AbstractMap。Dictionary是什么？它是任何可将键映射到相应值的类的抽象父类，而AbstractMap是基于Map接口的骨干实现，它以最...]]></description><category></category></item><item><title><![CDATA[HashTable详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84879274</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84879274</guid><author>batter_hwb</author><pubDate>Fri, 07 Dec 2018 16:54:27 +0800</pubDate><description><![CDATA[我们都知道 HashTable 与 HashMap 一样，也是以 数组+链表 的形式存储数据的，而最主要的区别是 HashTable 是绝对线程安全的。以下主要是对 HashTable 的底层原理做解析。
一、定义
1、HashTable 在 Java8 中的定义如下：
public class Hashtable&amp;amp;lt;K,V&amp;amp;gt;
    extends Dictionary&amp;amp;lt;K,V&amp;amp;...]]></description><category></category></item><item><title><![CDATA[HashMap 详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84799242</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84799242</guid><author>batter_hwb</author><pubDate>Wed, 05 Dec 2018 10:25:02 +0800</pubDate><description><![CDATA[总所周知，HashMap 底层是基于 数组 + 链表 的方式组成的，不过在 jdk1.7 和 jdk1.8 的两个版本中实现稍有不同。以下基于这两个版本做 HashMap 的底层原理解析。
一、基于JDK1.7
1、数据结构

HashMap 底层中有两个比较重要的参数，即：容量和负载因子。容量的默认大小是 16，负载因子的默认是0.75，当 HashMap 的 size &amp;amp;amp;gt; 16*0.75...]]></description><category></category></item><item><title><![CDATA[volatile关键字总结]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/84746900</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/84746900</guid><author>batter_hwb</author><pubDate>Mon, 03 Dec 2018 09:28:44 +0800</pubDate><description><![CDATA[一、volatile语义
1、保证线程间变量的可见性

线程对volatile变量进行修改之后，要立刻回写到主内存。
线程对volatile变量读取的时候，要从主内存中读，而不是从工作内存。（关于主内存和工作内存的概念是在Java内存模型[JMM, Java Memory Model]中定义的）

我们知道CPU的处理速度和主存的读写速度不是一个量级的，为了平衡这种巨大的差距，每个CPU都会有缓存...]]></description><category></category></item><item><title><![CDATA[基于 SpringBoot+Shiro+Redis 实现动态权限管理]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/83792775</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/83792775</guid><author>batter_hwb</author><pubDate>Wed, 07 Nov 2018 10:44:01 +0800</pubDate><description><![CDATA[一、背景
最近学了 Apache Shiro，刚好有个新项目需要完成，所以整理一下如何通过整合 SpringBoot + Shiro + Redis 实现登录认证和动态的权限管理的知识点。
实现过程中主要有两个问题待解决：

如何实现登录认证？
如何实现动态的权限管理？

本文主要是对下面这两个问题进行解决。
二、登录认证
1、导包
SpringBoot 相关的包不再赘述，Shiro 所需要的包为...]]></description><category></category></item><item><title><![CDATA[Log4j2配置详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/83416522</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/83416522</guid><author>batter_hwb</author><pubDate>Tue, 30 Oct 2018 10:15:12 +0800</pubDate><description><![CDATA[一、背景
最近由于项目的需要，需要将日志全部迁移成log4j2版本，之前对于项目日志的配置总是似懂非懂，最近详细整理了下知识点，本文就作为一个记录来详细记录一下log4j2配置的相关知识点。
二、配置详解

...]]></description><category></category></item><item><title><![CDATA[Linux 下 Zookeeper 的安装启动]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/83304689</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/83304689</guid><author>batter_hwb</author><pubDate>Tue, 23 Oct 2018 11:46:51 +0800</pubDate><description><![CDATA[Linux 下 Zookeeper 的安装启动1、下载并解压相应的 Zookeeper2、启动 Zookeeper
1、下载并解压相应的 Zookeeper

下载命令：

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz


解压：

tar -zxvf zookeepe...]]></description><category></category></item><item><title><![CDATA[设计模式--工厂方法模式（Factory Method）]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/82690104</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/82690104</guid><author>batter_hwb</author><pubDate>Thu, 13 Sep 2018 16:23:24 +0800</pubDate><description><![CDATA[1、定义 
定义一个用于创建对象的接口，让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。核心结构有四个角色：抽象工厂、具体工厂、抽象产品、具体产品。

工厂方法模式的通用类图如下： 


在工厂方法模式中， 抽象产品类Product负责定义产品的共性， 实现对事物最抽象的定 
义； Creator为抽象创建类， 也就是抽象工厂， 具体如何创建产品类是由具体的实现工厂 
Concre...]]></description><category></category></item><item><title><![CDATA[设计模式--单例模式（Singleton Pattern）]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/82687873</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/82687873</guid><author>batter_hwb</author><pubDate>Thu, 13 Sep 2018 14:42:39 +0800</pubDate><description><![CDATA[1、定义：确保某一个类只有一个实例，并且自行实例化并向整个系统提供这个实例。有两种实现方式：饱汉模式和饿汉模式。

懒汉模式：加载类时不创建对象，在第一次获取对象时再创建（线程不安全、延迟加载）。 
饿汉模式：程序加载时就创建对象（线程安全）。



2、单例模式优点


减少内存开支，特别是一个对象需要频繁的创建、销毁时。
减少系统的性能开销。
单例模式可以避免对资源的多重占用。
单例模式可以在...]]></description><category></category></item><item><title><![CDATA[WebSocket的生命周期详解]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/82379692</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/82379692</guid><author>batter_hwb</author><pubDate>Tue, 04 Sep 2018 11:01:11 +0800</pubDate><description><![CDATA[1、WebSocket端点的4个生命周期事件


打开事件： 此事件发生在端点建立新连接时并且在任何其他事件发生之前。
消息事件： 此事件接收 WebSocket 对话中另一端发送的消息。它可以发生在 WebSocket 端点接收了打开事件之后并且在接收关闭事件关闭连接之前的任意时刻。
错误事件： 此事件在 WebSocket 连接或者端点发生错误时产生。
关闭事件： 此事件表示 WebSocke...]]></description><category></category></item><item><title><![CDATA[使用Git将本地代码仓库和Coding关联]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/82019255</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/82019255</guid><author>batter_hwb</author><pubDate>Fri, 24 Aug 2018 15:12:33 +0800</pubDate><description><![CDATA[原因

很早之前使用过用git将本地代码托管到coding.net远程仓库，但是过程都没有记录下来，每次需要使用coding时又需要重新踩一遍坑。下面是基本操作记录

git 初始化 
    进到需要提交的项目目录下，执行git init 
     
写上coding账号和email

git config --global user.name &quot;codingID&quot; 
git config -...]]></description><category></category></item><item><title><![CDATA[跨域请求和Cookie的跨域传递]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/82018204</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/82018204</guid><author>batter_hwb</author><pubDate>Fri, 24 Aug 2018 14:53:31 +0800</pubDate><description><![CDATA[问题描述

前后端完全分离的项目，前端使用Vue + axios，后端使用SpringMVC，容器为Tomcat。使用CORS协议解决跨域访问数据限制的问题，但是发现客户端的Ajax请求不会自动带上服务器返回的Cookie：JSESSIONID。 导致每一个Ajax请求在服务端看来都是一个新的请求，都会在服务端创建新的Session（在响应消息头中设置Set-Cookie：JSESSIONID=x...]]></description><category></category></item><item><title><![CDATA[Spring Boot拦截器 WebMvcConfigurerAdapter 高版本替换方案]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/80769658</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/80769658</guid><author>batter_hwb</author><pubDate>Fri, 22 Jun 2018 10:02:25 +0800</pubDate><description><![CDATA[Spring Boot拦截器 WebMvcConfigurerAdapter 高版本替换方案



高版本的替换方案目前有两种：


方案1 直接继承WebMvcConfigurationSupport




@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {

    @Override
    ...]]></description><category></category></item><item><title><![CDATA[Spring 的 AOP]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/52486571</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/52486571</guid><author>batter_hwb</author><pubDate>Fri, 09 Sep 2016 14:12:17 +0800</pubDate><description><![CDATA[AOP：面向切面编程，常常被用于处理系统中分布于各个模块（不同方法）中的交叉关注点的问题，在 JavaEE 应用中，常常通过 AOP 来处理一些具有横切性质的系统级服务，如：事务管理、安全检查、缓存、对象池管理等。AOP 从程序的角度考虑程序的流程，提取业务处理过程的切面，AOP 框架并不与特定的代码耦合，它能处理程序执行中的特定的切入点，而并不与某个具体类耦合。1、AOP 的基本概念AOP 框架的]]></description><category></category></item><item><title><![CDATA[Spring 的常用注释]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/52473619</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/52473619</guid><author>batter_hwb</author><pubDate>Thu, 08 Sep 2016 17:32:46 +0800</pubDate><description><![CDATA[为了减少开发中配置的工作，增强程序的内聚性，提高开发的效率，Spring 支持使用 Annotation 来代替 XML 配置文件。1、搜索 Bean 类Spring 通过使用一些特殊的 Annotation 来标注 Bean 类，然后通过简单的配置驱动 Spring 自动搜索某些路径下的 Java 类，并将这些 Java 类注册成 Bean 实例。
Spring 提供的几个 Annotation]]></description><category></category></item><item><title><![CDATA[Spring 的高级依赖关系配置]]></title><link>https://blog.youkuaiyun.com/batter_hwb/article/details/52461695</link><guid>https://blog.youkuaiyun.com/batter_hwb/article/details/52461695</guid><author>batter_hwb</author><pubDate>Wed, 07 Sep 2016 17:43:06 +0800</pubDate><description><![CDATA[Spring 中，建议将组件和组件之间的耦合采用依赖注入管理，但基本类型的成员变量值应直接在代码中设置。对于组件之间的耦合关系，通过使用控制反转，代码变得非常清晰。Spring IoC 将原来使用 Java 代码管理的耦合关系提取到 XML 中进行管理，从而降低了各组件之间的耦合，提高了软件系统的可维护性。1、获取其他 Bean 的属性值（属性值注入）实际应用中，某个实例的属性可能是另一个对象的一个]]></description><category></category></item></channel></rss>