<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[_heng_的博客]]></title><description><![CDATA[小小程序猿]]></description><link>https://blog.csdn.net/android_heng</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; android_heng]]></copyright><item><title><![CDATA[LinkedList学习]]></title><link>https://blog.csdn.net/android_heng/article/details/103155670</link><guid>https://blog.csdn.net/android_heng/article/details/103155670</guid><author>android_heng</author><pubDate>Wed, 20 Nov 2019 09:00:16 +0800</pubDate><description><![CDATA[主要成员变量

//链表的大小

transient int size = 0;

//头节点

transient Node&lt;E&gt; first;

//尾结点

transient Node&lt;E&gt; last;

//Node结点

private static class Node&lt;E&gt; {

E item; //元素

Node&lt;E&gt; next;...]]></description><category></category></item><item><title><![CDATA[ArrayList的学习]]></title><link>https://blog.csdn.net/android_heng/article/details/103061107</link><guid>https://blog.csdn.net/android_heng/article/details/103061107</guid><author>android_heng</author><pubDate>Thu, 14 Nov 2019 09:04:02 +0800</pubDate><description><![CDATA[主要的成员变量

//构造函数使用 ArrayList array=new ArrayList(0)的时候将数组赋值为EMPTY_ELEMENTDATA

private static final Object[] EMPTY_ELEMENTDATA = {};

//构造函数使用 ArrayList array=new ArrayList()的时候将数组赋值

//为DEFAULTCAPACIT...]]></description><category></category></item><item><title><![CDATA[java HashMap的原理]]></title><link>https://blog.csdn.net/android_heng/article/details/80529576</link><guid>https://blog.csdn.net/android_heng/article/details/80529576</guid><author>android_heng</author><pubDate>Thu, 31 May 2018 20:24:12 +0800</pubDate><description><![CDATA[摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK（Java Developmet Kit）版本的更新，JDK1.8对HashMap底层的实现进行了优化，例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别，深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map，此接口...]]></description><category></category></item><item><title><![CDATA[ReentrantLock简单图解学习]]></title><link>https://blog.csdn.net/android_heng/article/details/80113877</link><guid>https://blog.csdn.net/android_heng/article/details/80113877</guid><author>android_heng</author><pubDate>Sun, 29 Apr 2018 09:42:05 +0800</pubDate><description><![CDATA[写这篇文章是让自己对AQS和ReentrantLock加深理解,需要配合之前的文章一起学习。AQS(AbstractQueuedSynchronizer)初学java ReentrantLock(可重入锁)初学假设有3个线程A、B、C都调用lock.lock()方法获取锁，ReentrantLock 默认的构造方法调用的是非公平锁public ReentrantLock() {        sy...]]></description><category></category></item><item><title><![CDATA[AQS的ConditionObject]]></title><link>https://blog.csdn.net/android_heng/article/details/79999752</link><guid>https://blog.csdn.net/android_heng/article/details/79999752</guid><author>android_heng</author><pubDate>Thu, 19 Apr 2018 09:02:41 +0800</pubDate><description><![CDATA[Condition接口主要方法:void await() throws InterruptedException;//相当于 Object.wait();void signal();//相当于Object.notify();void signalAll();//相当于Object.notifyAll();public class ConditionObject implements Conditi...]]></description><category></category></item><item><title><![CDATA[SQL优化]]></title><link>https://blog.csdn.net/android_heng/article/details/79845571</link><guid>https://blog.csdn.net/android_heng/article/details/79845571</guid><author>android_heng</author><pubDate>Mon, 09 Apr 2018 09:16:34 +0800</pubDate><description><![CDATA[网上关于SQL优化的教程很多，但是比较杂乱。近日有空整理了一下，写出来跟大家分享一下，其中有错误和不足的地方，还请大家纠正补充。这篇文章我花费了大量的时间查找资料、修改、排版，希望大家阅读之后，感觉好的话推荐给更多的人，让更多的人看到、纠正以及补充。 1.对查询进行优化，要尽量避免全表扫描，首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字...]]></description><category></category></item><item><title><![CDATA[java ReentrantLock(可重入锁)初学]]></title><link>https://blog.csdn.net/android_heng/article/details/79191394</link><guid>https://blog.csdn.net/android_heng/article/details/79191394</guid><author>android_heng</author><pubDate>Mon, 29 Jan 2018 09:08:08 +0800</pubDate><description><![CDATA[学习ReentrantLock,需要先学习AQS同步器的知识
非公平锁:不一定是完全按照先来先得的顺序来获取资源
公平锁:绝对按照先来先得的顺序获取资源
public class ReentrantLock implements Lock, java.io.Serializable {
private static final long serialVersionUID = 7373984]]></description><category></category></item><item><title><![CDATA[AQS(AbstractQueuedSynchronizer)初学]]></title><link>https://blog.csdn.net/android_heng/article/details/79031690</link><guid>https://blog.csdn.net/android_heng/article/details/79031690</guid><author>android_heng</author><pubDate>Thu, 11 Jan 2018 10:56:54 +0800</pubDate><description><![CDATA[ReentrantLock(可重入锁),CountDownLatch(闭包),ReentrantReadWriteLock等内部都是基于AQS实现的,所以有必要学习一下AQS的实现原理：多线程通过volatile int state(共享资源)的状态来判断是否获取到资源,没获取的线程进入队列,等待被释放资源的线程唤醒。主要分为独占锁(一个线程获取到资源以后其它线程无法获取资源)和共享锁两种方式(一...]]></description><category></category></item><item><title><![CDATA[rbac权限管理初学]]></title><link>https://blog.csdn.net/android_heng/article/details/78118344</link><guid>https://blog.csdn.net/android_heng/article/details/78118344</guid><author>android_heng</author><pubDate>Wed, 27 Sep 2017 22:50:05 +0800</pubDate><description><![CDATA[RBAC（Role-Based Access Control，基于角色的访问控制），就是用户通过角色与权限进行关联。简单地说，一个用户拥有若干角色，每一个角色拥有若干权限。这样，就构造成“用户-角色-权限”的授权模型。在这种模型中，用户与角色之间，角色与权限之间，一般者是多对多的关系。（如下图）



角色是什么？可以理解为一定数量的权限的集合，权限的载体。例如：一个论坛系统，“超级管理员]]></description><category></category></item><item><title><![CDATA[java反射学习]]></title><link>https://blog.csdn.net/android_heng/article/details/77887121</link><guid>https://blog.csdn.net/android_heng/article/details/77887121</guid><author>android_heng</author><pubDate>Thu, 07 Sep 2017 21:22:38 +0800</pubDate><description><![CDATA[1.反射是什么？
       JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意方法和属性；这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制

2.为什么需要反射?
        当我们使用反射动态的获取到类对象,就可以对它进行实例化,属性进行赋值和调用对象的方法。流行的框架Spring,MyBat]]></description><category></category></item><item><title><![CDATA[MQ的使用场景]]></title><link>https://blog.csdn.net/android_heng/article/details/77482118</link><guid>https://blog.csdn.net/android_heng/article/details/77482118</guid><author>android_heng</author><pubDate>Tue, 22 Aug 2017 16:37:54 +0800</pubDate><description><![CDATA[一、消息队列概述
消息队列中间件是分布式系统中重要的组件，主要解决应用解耦，异步消息，流量削锋等问题，实现高性能，高可用，可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ，RabbitMQ，ZeroMQ，Kafka，MetaMQ，RocketMQ

二、消息队列应用场景
以下介绍消息队列在实际应用中常用的使用场景。异步处理，应用解耦，流量削锋和消息通讯四个场景。

2.]]></description><category></category></item><item><title><![CDATA[String和StringBuffer的区别]]></title><link>https://blog.csdn.net/android_heng/article/details/77284982</link><guid>https://blog.csdn.net/android_heng/article/details/77284982</guid><author>android_heng</author><pubDate>Thu, 17 Aug 2017 08:21:01 +0800</pubDate><description><![CDATA[String是不可变的,StringBuffer是可变的。
String s = "123";
System.out.println("s = " + s);
s="456";
System.out.println("s = " + s);
运行结果:
s = 123
s = 456
初学者看到这段代码,都觉得 String 明明是可变的嘛,下面放一张图解释一下:
s="123"]]></description><category></category></item><item><title><![CDATA[java实现简单的二叉排序树]]></title><link>https://blog.csdn.net/android_heng/article/details/76956690</link><guid>https://blog.csdn.net/android_heng/article/details/76956690</guid><author>android_heng</author><pubDate>Wed, 09 Aug 2017 09:37:52 +0800</pubDate><description><![CDATA[二叉排序树的定义：
二叉排序树(Binary Sort Tree)或者是一颗空树,或者是具有下列性质的二叉树：
1):若左子树不为空,则左子树上所有节点的值均小于根节点的值；若右子树不为空,则右子树上所有节点的值均大于根节点的值。
2):左右子树也都是二叉排序树。



一颗完整的二叉排序树
对二叉排序树进行中序遍历得到从小到大的序列
63,90,70,55,67,42,98,8]]></description><category></category></item><item><title><![CDATA[java实现简单的二叉树]]></title><link>https://blog.csdn.net/android_heng/article/details/76599302</link><guid>https://blog.csdn.net/android_heng/article/details/76599302</guid><author>android_heng</author><pubDate>Wed, 02 Aug 2017 22:18:46 +0800</pubDate><description><![CDATA[二叉排序树,平衡二叉树,红黑树都是在普通二叉树的基础上构建的,所以很有必要学习一下二叉树。
二叉树的遍历:
1:先序遍历(DLR)
  1):访问根节点;
  2):按先序遍历访问左子树
  3):按先序遍历访问右子树
2:中序遍历(LRD)
 1):按中序遍历左子树
 2):访问根节点
 3):按中序遍历访问右子树
3:后序遍历
 1):按后序遍历访问左子树
 2):按后]]></description><category></category></item><item><title><![CDATA[springmvc入门笔记一:运行流程以及简单Hello World]]></title><link>https://blog.csdn.net/android_heng/article/details/54924414</link><guid>https://blog.csdn.net/android_heng/article/details/54924414</guid><author>android_heng</author><pubDate>Wed, 08 Feb 2017 11:05:56 +0800</pubDate><description><![CDATA[做个笔记,留着自己以后复习,
一:springmvc运行流程:





二：简单的Hello World
 1)基于配置文件的
    第一步：导入所需要的jar包
    第二步：在web.xml中配置DispatcherServlet


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x]]></description><category></category></item><item><title><![CDATA[thymeleaf学习笔记]]></title><link>https://blog.csdn.net/android_heng/article/details/54408812</link><guid>https://blog.csdn.net/android_heng/article/details/54408812</guid><author>android_heng</author><pubDate>Fri, 13 Jan 2017 15:10:16 +0800</pubDate><description><![CDATA[公司的项目使用的是thymeleaf进行数据的绑定,在网上搜索了一些资料,进行一些简单的记录,以备复习之用。

1.简单表达式
变量表达式:${...} 例如:${my.name}
选择性/星号表达式:*{...} 一般是 th:object 后 取的 object中的属性,当没有选取对象时,功能等同于${...},*{firstName}也等同于${#object.firstName}]]></description><category></category></item><item><title><![CDATA[Failed to read candidate component class]]></title><link>https://blog.csdn.net/android_heng/article/details/52724497</link><guid>https://blog.csdn.net/android_heng/article/details/52724497</guid><author>android_heng</author><pubDate>Sun, 02 Oct 2016 18:07:15 +0800</pubDate><description><![CDATA[Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\ecjspworkspace\.metadata\.plugins\org.eclipse.wst.serv]]></description><category></category></item><item><title><![CDATA[<Android>监听软键盘打开收起事件（软键盘自带收起按钮）]]></title><link>https://blog.csdn.net/android_heng/article/details/52316942</link><guid>https://blog.csdn.net/android_heng/article/details/52316942</guid><author>android_heng</author><pubDate>Thu, 25 Aug 2016 18:02:58 +0800</pubDate><description><![CDATA[最近在公司开发cocos2dx上的android输入框控件，遇到软键盘的事件监听，通常软键盘的收起方式大致3种：

1.点击软键盘右下角的Return按钮（系统收起）

2.输入框焦点时按返回按钮（系统收起）

3.点击软键盘和输入框的外部（自发收起）

4.点击软键盘自带的收起按钮（软键盘收起）




前三种事件可以监听，方式都比较简单

1.点击软键盘右下角的R]]></description><category></category></item><item><title><![CDATA[如何搞定SVN目录的cleanup问题和lock问题]]></title><link>https://blog.csdn.net/android_heng/article/details/52247263</link><guid>https://blog.csdn.net/android_heng/article/details/52247263</guid><author>android_heng</author><pubDate>Fri, 19 Aug 2016 08:24:03 +0800</pubDate><description><![CDATA[最近在使用SVN的时候碰到一个问题，就是操作时由于粗心大意，在更新的过程中点击取消，使得该目录出现cleanup的操作提示。




OK，按照cleanup提示操作后，又提示目录被lock...




网上有解决方案称，在SVN目录下找到 .svn 隐藏目录，一般是在项目的根目录下，在 .svn 目录下有一个 wc.db 数据库文件。




我们使用 sqlit]]></description><category></category></item><item><title><![CDATA[两种方法解析Json数组]]></title><link>https://blog.csdn.net/android_heng/article/details/52214959</link><guid>https://blog.csdn.net/android_heng/article/details/52214959</guid><author>android_heng</author><pubDate>Mon, 15 Aug 2016 21:31:34 +0800</pubDate><description><![CDATA[解析的Json数组如下:


第一种 使用自带的JsonArray 解析，代码如下:
//通过自带的JsonArray
	public List getListPersonByArray(String jsonString){
		List personList=new ArrayList();
		
		try {
			JSONArray jsonArray=new JSONArray]]></description><category></category></item></channel></rss>