<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hxm_Code的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hxm_Code</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hxm_Code]]></copyright><item><title><![CDATA[Java NIO 底层原理]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/107162554</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/107162554</guid><author>hxm_Code</author><pubDate>Mon, 06 Jul 2020 16:51:52 +0800</pubDate><description><![CDATA[Java NIO 底层原理

]]></description><category></category></item><item><title><![CDATA[equals方法的姐妹篇——如何实现高效的hashCode方法]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/105614138</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/105614138</guid><author>hxm_Code</author><pubDate>Sun, 19 Apr 2020 13:36:55 +0800</pubDate><description><![CDATA[1、何时实现hashCode方法
hashCode跟equals一样，都是基类Object中的一个方法。而什么时候该重写hashCode方法呢？其实这个问题的答案我们也许都知道，就是我们的类需要使用到集合框架时，绝大多数情况都要实现equals和hashCode方法，而不能只实现这两个方法其中一个。为什么呢？我们可以看一个例子：
public class Goods {

	public int ...]]></description><category></category></item><item><title><![CDATA[契约测试 No stubs or contracts were found for [XXX]问题解决]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/105610729</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/105610729</guid><author>hxm_Code</author><pubDate>Sun, 19 Apr 2020 10:38:56 +0800</pubDate><description><![CDATA[1、问题
最近在学习契约测试，用到的是spring-cloud-contract，网上有很多教程，便试着照葫芦画瓢的方式，来实现一遍。由提供者建立契约、生成存根，然后把存根交给消费方测试时，抛出了一个异常No stubs or contracts were found for [XXX]，详细异常如下：
Caused by: org.eclipse.aether.resolution.Artifa...]]></description><category></category></item><item><title><![CDATA[听说你还不会实现equals方法？收藏这篇文章就够了！]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/105469719</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/105469719</guid><author>hxm_Code</author><pubDate>Sun, 12 Apr 2020 14:58:48 +0800</pubDate><description><![CDATA[1、何时需要重写equals
相信javaer们应该都知道equals方法，它是基类大佬Object中的一个方法，所以java下面所有的类都“自带”这个方法。看方法名就知道，意图就是对比传入的目标对象， 跟自己是否“相等”。我们先看看这个方法在Object类中的实现：
    public boolean equals(Object obj) {
        return (this == o...]]></description><category></category></item><item><title><![CDATA[带你用广度优先搜索实现地铁计费功能]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/105335075</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/105335075</guid><author>hxm_Code</author><pubDate>Sun, 05 Apr 2020 22:59:19 +0800</pubDate><description><![CDATA[文章目录1、地铁是如何实现收费的？1.1 数组实现方式1.2 无向图实现方式2、广度优先搜索找到两个站点最短路径2.1 构建站点对象2.2 用邻接表构造地铁无向图2.3 建立搜索类2.4 测试站点距离计算2.5 为什么广度优先搜索的路径是最短路径3、广度优先搜索的性能3.1 时间复杂度3.2 空间复杂度4、实现更好的地铁计费系统5、本文源码地址
1、地铁是如何实现收费的？
我们平时坐地铁去上班的时...]]></description><category></category></item><item><title><![CDATA[Spring Data Redis事务的正确使用姿势]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/105119273</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/105119273</guid><author>hxm_Code</author><pubDate>Thu, 26 Mar 2020 15:08:55 +0800</pubDate><description><![CDATA[之前使用Spring Data Redis的时候，由于使用不当，导致redis连接不释放的血案。现在来总结下Spring Data Redis事务的两种使用方式。
1、execute(SessionCallback session)方法
我们都知道Redis的事务的命令主要有multi、exec、discard和watch，在RedisTemplate中也是对应的有这几种方法
  public i...]]></description><category></category></item><item><title><![CDATA[为什么HotspotJVM垃圾回收中的“标记-复制”算法需要两个survivor空间？]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/104698638</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/104698638</guid><author>hxm_Code</author><pubDate>Sun, 08 Mar 2020 17:14:54 +0800</pubDate><description><![CDATA[一、提出问题
如题，为什么HotspotJVM垃圾回收中的“标记-复制”算法需要两个survivor空间？为什么要强调Hotspot JVM呢，因为JVM有很多种，每种JVM的实现方式都不一样。本文提到的JVM，一律是代表Hotspot JVM。
二、背景
熟悉jvm的童鞋，都应该了解到，一些经典的新生代垃圾收集器运用了“标记-复制算法”，并且，为了较好的实现复制算法，通常把新生代分为两种逻辑分区...]]></description><category></category></item><item><title><![CDATA[记一次filebeat与logstash配合使用遇到的坑]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/104620882</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/104620882</guid><author>hxm_Code</author><pubDate>Mon, 02 Mar 2020 22:28:41 +0800</pubDate><description><![CDATA[背景
初学filebeat和logstash，于是根据官方文档，做了个最简单的filebeat采集日志，然后输出到logstash的最简配置。本以为可以愉快的输出“helloworld”的…
问题
启动配置好的filebeat和logstash，正想见证奇迹的时刻，没想到logstash启动完之后，紧接着给我来个当头棒喝，抛了下面一个很长的异常：
io.netty.handler.codec.De...]]></description><category></category></item><item><title><![CDATA[volatile关键字的作用及使用场景]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/104343386</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/104343386</guid><author>hxm_Code</author><pubDate>Sun, 16 Feb 2020 22:29:19 +0800</pubDate><description><![CDATA[volatile关键字是java虚拟机提供的最轻量级的同步机制。在并发的场景下，我们都习惯于使用synchronized锁进行同步，其实，有些简单的场景下，我们也可以使用volatile来代替，但volatile有它本身的使用规则，不能滥用，要结合它自身的特性把它应用于适合的场景下。下面就来简单叙述一下volatile关键字的作用，及其适用场景。
一、volatile的特性
被volatile修饰...]]></description><category></category></item><item><title><![CDATA[windows修改了my.ini后无法启动mysql]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/102589506</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/102589506</guid><author>hxm_Code</author><pubDate>Wed, 16 Oct 2019 17:27:13 +0800</pubDate><description><![CDATA[最近试过修改了mysql的配置文件my.ini之后，发现无法重启mysql了。后来网上查了很多资料，终于找到了解决方法。
原来在修改my.ini之后，文件保存的时候保存为了utf-8，重新另存为ANSI编码，再重启mysql服务即可。

...]]></description><category></category></item><item><title><![CDATA[释放sqlite文件占用的多余空间]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/102499437</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/102499437</guid><author>hxm_Code</author><pubDate>Fri, 11 Oct 2019 13:37:47 +0800</pubDate><description><![CDATA[当删除sqlite文件里的数据之后，会发现sqlite文件占的磁盘空间并不会缩小，那是因为：
当你从Sqlite删除数据后，未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。
sqlite这种处理方式自有它的道理之处，但有些场景，我们还是希望删除了数据之后，被删除数据所占用的空间也得以释放。这要怎么做呢？其实很简单。
方法...]]></description><category></category></item><item><title><![CDATA[Happens-Before原则]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/102481204</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/102481204</guid><author>hxm_Code</author><pubDate>Thu, 10 Oct 2019 17:53:14 +0800</pubDate><description><![CDATA[一、让人又爱又恨的指令重排
了解过Java并发编程知识的童鞋都知道，Java内存模型是围绕着并发过程中如何处理原子性、可见性和有序性3个特征来建立的，其中有序性最为复杂。
我们习惯性的认为代码总是从先到后、依次执行的，这在单线程的时候确实是没错的(至少程序是正确的运行的)。但在并发时，有时候给人感觉写在后面的代码，比写在前面的代码先执行，如同出现了幻觉。这就是鼎鼎大名的指令重排，指令重排是很有必要...]]></description><category></category></item><item><title><![CDATA[@Transactional注解实现事务管理的原理]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/100941563</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/100941563</guid><author>hxm_Code</author><pubDate>Thu, 26 Sep 2019 12:05:13 +0800</pubDate><description><![CDATA[在实际项目中，用Spring进行事务控制，我们通常都用@Transactional注解。这个注解用法很简单，把原来jdbc繁琐的事务控制都浓缩在这个注解的使用上了。秉着“知其然，知其所以然”的心态，我们可以思考，这个注解那么牛掰，spring是如何实现的呢？这一切都得益于Spring那套强大的生态系统。

...]]></description><category></category></item><item><title><![CDATA[码农的书法窝]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/100902343</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/100902343</guid><author>hxm_Code</author><pubDate>Mon, 16 Sep 2019 22:24:57 +0800</pubDate><description><![CDATA[本人除了是个低调不奢华的码农，还是个平时喜欢乱写乱画的书法爱好者。小时候崇拜爷爷苍劲有力的字体，因而模仿起来，从此一发不可收拾，走上了习字之路。硬笔方面，我的启蒙老师是我爷爷，后来有临摹庞中华、司马彦等大家字体；毛笔方面，我首先是从隶书(曹全碑)练起，后楷书习王羲之、欧阳询、颜真卿，行书受兰亭序和祭侄文稿的影响较深远......
   想起以前，帖子还是临摹得不少的，但后来因为工作原因，键盘...]]></description><category></category></item><item><title><![CDATA[连接池中的maxidle和maxactive]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/99422211</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/99422211</guid><author>hxm_Code</author><pubDate>Tue, 13 Aug 2019 13:36:40 +0800</pubDate><description><![CDATA[目前项目中使用了redis连接池。最近的一次压测中发现如下问题：
org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisException: Could n...]]></description><category></category></item><item><title><![CDATA[maven项目用eclipse打包发布的问题(No compiler is provided in this environment！)]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/80557803</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/80557803</guid><author>hxm_Code</author><pubDate>Sun, 03 Jun 2018 16:39:35 +0800</pubDate><description><![CDATA[一、问题 
       如果用到maven来管理项目，eclipse的‘maven install’就可以自动编译并打包一个可执行的jar，然后可以直接发布一个版本。 
       但初次用这个方法打包的时候发现，会出现一个错误：

No compiler is provided in this environment. Perhaps you are running on a JRE rat...]]></description><category></category></item><item><title><![CDATA[CentOS开放端口]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/80137648</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/80137648</guid><author>hxm_Code</author><pubDate>Sat, 28 Apr 2018 17:31:18 +0800</pubDate><description><![CDATA[在服务器上跑一个服务，如果不对这个服务对外开放，外部系统是无法访问的。就比如在服务器上部署一个在8080端口监听的http服务，如果8080端口没对外开放，外部的浏览器是访问不到的。



一、系统版本

查看redhat系的系统版本：

$ cat /etc/redhat-release
   CentOS Linux release 7.1.1503 (Core)

centos7之后，防火墙...]]></description><category></category></item><item><title><![CDATA[JVM学习笔记（一）之内存分区]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/79580903</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/79580903</guid><author>hxm_Code</author><pubDate>Fri, 16 Mar 2018 14:59:26 +0800</pubDate><description><![CDATA[JVM中内存区可以根据受访问权限的不同定义为线程共享和线程私有两大类。以下是我学习的一些笔记，这些知识是基于java7的，java7以后的版本会有点不同，但是大同小异，核心是不会变的。

一、线程私有内存区

1、PC寄存器（PC计数器）


如果线程执行的方法是个java方法，那么pc寄存器就会存储正在执行的字节码指令的地址 ，如果是native方法，这时候pc寄存器就是空（undefined）...]]></description><category></category></item><item><title><![CDATA[排序(二)：插入排序]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/79405099</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/79405099</guid><author>hxm_Code</author><pubDate>Wed, 28 Feb 2018 20:28:21 +0800</pubDate><description><![CDATA[一、概念 
通常在整理桥牌的方法是一张一张的来，将每一张牌插入到其他已经有序的牌中的适当位置。在计算机实现中，为了要给插入的元素腾出空间，我们需要将其余所有元素再插入之前都向右移一位。这种算法叫做插入排序

二、特点 
1、插入排序所需的时间取决于输入元素的初始顺序。 
2、对一个很大且其中元素已经有序（或接近有序）的数组进行排序将会比随机顺序的数组或是逆序数组进行排序要快得多。

三、算法实现
...]]></description><category></category></item><item><title><![CDATA[排序（一）：选择排序]]></title><link>https://blog.youkuaiyun.com/hxm_Code/article/details/79348736</link><guid>https://blog.youkuaiyun.com/hxm_Code/article/details/79348736</guid><author>hxm_Code</author><pubDate>Thu, 22 Feb 2018 19:47:04 +0800</pubDate><description><![CDATA[一、步骤 
1、找到数组中的最小元素； 
2、将第一步找到的最小元素与数组第一个元素交换位置（如果第一个元素就是最小元素则和自己交换）； 
3、在剩下的元素中找到最小元素，将它与第二个元素交换位置。如此反复，直到将整个数组排序。

二、优缺点 
1、运行时间和输入无关。为了找出最小的元素而扫描一遍数组并不能为下一次扫描提供什么信息。这种性质在某些情况下是缺点，因为一个有序的数组或是主键全部相等的数...]]></description><category></category></item></channel></rss>