<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codeHaoHao的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/codeHaoHao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codeHaoHao]]></copyright><item><title><![CDATA[Mac安装配置Mysql]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/122481448</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/122481448</guid><author>codeHaoHao</author><pubDate>Thu, 13 Jan 2022 20:18:31 +0800</pubDate><description><![CDATA[mac装置配置mysql]]></description><category></category></item><item><title><![CDATA[通过反射机制实现一个完美的策略模式]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/104250127</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/104250127</guid><author>codeHaoHao</author><pubDate>Tue, 11 Feb 2020 17:22:24 +0800</pubDate><description><![CDATA[一、前言

最近打算在自己的项目中加上一个加密算法工具类，用来调用不同的加密算法，并且希望能够符合开闭原则，本来打算用《大话设计模式》中讲解的策略模式，但是对书中的实例不太满意，但是书中介绍了想要实现一个更好的策略模式需要用到java的反射机制，所以开始学习如何用策略模式实现一种好用的加密算法工具类。

二、解决思路与实现

先来看一下策略模式的模型图：



在上图的策略模式原型中，可以看出来，...]]></description><category></category></item><item><title><![CDATA[java找到指定接口的实现类]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/104216253</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/104216253</guid><author>codeHaoHao</author><pubDate>Mon, 10 Feb 2020 13:30:20 +0800</pubDate><description><![CDATA[一、背景

想在自己开发的项目上加一个算法工具类用来整合不同的算法，并且要求低耦合符合开闭原则，于是想到了《大话设计模式》里的策略模式，但是书中的策略模式还没有达到完全符合开闭原则，同时我在文章结尾看见说可以运用反射机制来大幅降低代码的耦合度，因此开始在学习如何实现，在学习过程中发现需要写一个方法用来找到指定接口的实现类，因此开启了这趟学习之旅。

二、寻求答案的路途

刚开始看到根据指定接...]]></description><category></category></item><item><title><![CDATA[Git分支命名规范]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/104195784</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/104195784</guid><author>codeHaoHao</author><pubDate>Thu, 06 Feb 2020 14:29:16 +0800</pubDate><description><![CDATA[分支
			命名
			说明
		主分支
			master
			主分支，所有提供给用户使用的正式版本，都在这个主分支上发布
		开发主分支
			dev
			开发分支，永远是功能最新最全的分支
		功能分支
			feature-*
			新功能分支，某个功能点正在开发阶段
		发布版本
			release-*
			发布定期要上线的功能
		修复发布版本分支
			bugfix-rel...]]></description><category></category></item><item><title><![CDATA[redis深入学习笔记（一） --- String]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/103836314</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/103836314</guid><author>codeHaoHao</author><pubDate>Sun, 05 Jan 2020 15:28:24 +0800</pubDate><description><![CDATA[redis的五种数据类型string、list、hash、set、zset用起来很好用，用法也很简单，但是对底层的具体原理并没有了解过，不懂底层的程序员不是一个好程序员，所以我打算以博客的形式做成笔记来学习redis的底层和进阶知识。

一、用法

字符串string是redis最简单的数据结构。以key/value的形式在redis中存在，redis所有的数据结构都是以唯一的key字符串作为名称...]]></description><category></category></item><item><title><![CDATA[rabbitMq实战指南笔记---第二章 理解消息通信]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/99171846</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/99171846</guid><author>codeHaoHao</author><pubDate>Sun, 11 Aug 2019 16:00:32 +0800</pubDate><description><![CDATA[1.RabbitMq的消息是如何到达队列的？

 当你想要将消息投递到队列时，你通过把消息发送给交换器来完成。然后，根据确定的规则，RabbitMQ将会决定消息该投递到哪个队列。这些规则被称作路由键（routing key）。队列通过路由键绑定到指定交换器。当你把消息发送到代理服务器时，消息将拥有一个路由键---即便是空的---RabbitMQ也会将其和绑定使用的路由键进行匹配。如果相匹配的话...]]></description><category></category></item><item><title><![CDATA[HashMap多线程操作不安全]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/97906004</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/97906004</guid><author>codeHaoHao</author><pubDate>Wed, 31 Jul 2019 13:49:24 +0800</pubDate><description><![CDATA[JDK1.8之前HashMap在多线程操作的时候会造成环形结构，导致死循环。具体成环原因和怎么成环，参考这篇写得很好的博客：为什么HashMap线程不安全

JDK1.8开始，HashMap由链表的头插法改变成了尾插法，因此不再会造成死循环，改成尾插法也是为了能够更好的维护jdk1.8中HashMap的红黑树结构。

JDK1.8和之前版本多线程操作HashMap都会在put的时候导致数据不一致或...]]></description><category></category></item><item><title><![CDATA[枚举根节点流程]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/94355833</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/94355833</guid><author>codeHaoHao</author><pubDate>Sun, 30 Jun 2019 21:08:49 +0800</pubDate><description><![CDATA[stop the world：垃圾回收器在进行GC时会停止其他用户线程，避免在进行垃圾回收时再产生垃圾。

安全点：用户线程并不是刻意随时停下来的，而是在特定的位置停下来，即安全点。

安全区域（safe Region）：部分用户线程处于阻塞状态（即Sleep或Blocked），在这个区域中的任意地方开始GC都是安全的。可以把Safe Region看做是被扩展了的Safepoint。


因为“...]]></description><category></category></item><item><title><![CDATA[小心踩雷，一次Java内存泄漏排查实战]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/91387978</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/91387978</guid><author>codeHaoHao</author><pubDate>Mon, 10 Jun 2019 17:44:44 +0800</pubDate><description><![CDATA[“前些日子小组内安排值班，轮流看顾我们的服务，主要做一些报警邮件处理、Bug 排查、运营 issue 处理的事。工作日还好，无论干什么都要上班的，若是轮到周末，那这一天算是毁了。



不知道是公司网络广了就这样还是网络运维组不给力，网络总有问题，不是这边交换机脱网了，就是那边路由器坏了，还偶发地各种超时，而我们灵敏的服务探测服务总能准确地抓住偶现的小问题，给美好的工作加点料。

好几次值班组的小...]]></description><category></category></item><item><title><![CDATA[动态代理]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/91357002</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/91357002</guid><author>codeHaoHao</author><pubDate>Mon, 10 Jun 2019 17:29:10 +0800</pubDate><description><![CDATA[本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》


在看本文动态代理前建议看前一篇代理模式的讲解。

动态代理

动态代理是一种较为高级的代理模式，它的典型应用就是Spring AOP。

在传统的代理模式中，客户端通过ProxySubject调用RealSubject类的request（）方法，同时还在代理类中封装了其他方法（如preRequest（）和postRequest（...]]></description><category></category></item><item><title><![CDATA[代理模式]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/91128865</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/91128865</guid><author>codeHaoHao</author><pubDate>Fri, 07 Jun 2019 18:57:47 +0800</pubDate><description><![CDATA[本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》


1.定义

代理模式：给某一个对象提供一个代理，并由代理对象控制对原对象的访问引用。代理模式英文叫做Proxy或Surrogate，它是一种对象结构模型。

2.为什么需要代理模式

某人要找对象，但是由于某些原因（如工作太忙）不能直接去找，于是委托一个中介机构去完成这一过程，如婚姻介绍所，在这里婚姻介绍所就是一个代理，与此相类...]]></description><category></category></item><item><title><![CDATA[啥是单点登陆？淘宝和天猫是如何实现同时登陆的？]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90763038</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90763038</guid><author>codeHaoHao</author><pubDate>Tue, 04 Jun 2019 09:29:44 +0800</pubDate><description><![CDATA[一、什么是单点登录？

单点登录的英文名叫做：Single Sign On（简称SSO）。

在初学/以前的时候，一般我们就单系统，所有的功能都在同一个系统上。





所有的功能都在同一个系统上

后来，我们为了合理利用资源和降低耦合性，于是把单系统拆分成多个子系统。

回顾：分布式基础知识




拆分成多个子系统

比如阿里系的淘宝和天猫，很明显地我们可以知道这是两个系统，但是你在使用...]]></description><category></category></item><item><title><![CDATA[组合模式]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90728707</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90728707</guid><author>codeHaoHao</author><pubDate>Sat, 01 Jun 2019 15:06:06 +0800</pubDate><description><![CDATA[本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》


1.定义

组合模式，将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式又可以称为“整体-部分”模式，属于对象的结构模式，它将对象组织到树结构中，可以用来描述整体与部分的关系。

2.模式动机

组合模式描述了如何将容器对象和叶子对象进行递归组合，使得用户在使...]]></description><category></category></item><item><title><![CDATA[桥接模式]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90573148</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90573148</guid><author>codeHaoHao</author><pubDate>Sun, 26 May 2019 14:26:14 +0800</pubDate><description><![CDATA[本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》


1.定义

桥接模式：将抽象部分与它的实现部分分离，使它们都可以独立地变化。（桥接模式用关联关系来降低类与类之间的耦合）。

另一种定义理解：实现系统可能有多角度分类，每一种分类都有可能变化，那么就把这种多角度分离出来让他们独立变化，减少它们之间的耦合。

2.为什么需要桥接模式

桥接模式将继承关系转换为关联关系，从而降低了类...]]></description><category></category></item><item><title><![CDATA[适配器模式]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90345984</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90345984</guid><author>codeHaoHao</author><pubDate>Sun, 19 May 2019 20:47:20 +0800</pubDate><description><![CDATA[本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》


1.定义

适配器模式定义：将一个接口转化成客户希望的另一个接口，适配器模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2.为什么需要适配器模式

通常情况下，客户端可以通过目标类的接口访问它所提供的服务。有时，现有的类可以满足客户类的功能需要，但是它所提供的接口不一定是客户类所期望的，这可能是因为现有类中方法名...]]></description><category></category></item><item><title><![CDATA[有关并行的两个重要定律]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90286873</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90286873</guid><author>codeHaoHao</author><pubDate>Fri, 17 May 2019 10:44:53 +0800</pubDate><description><![CDATA[本文摘自葛一鸣 老师的《实战java高并发程序设计》一书。因为觉得写得好就摘下来了


将串行程序改造成并发程序，一般来说可以提高程序的整体性能，但是究竟能提升多少，甚至说究竟是否真的可以提高，还是一个需要研究的问题。目前，主要有两个定律对这个问题进行解答，一个是Amdahl定律，另一个是Gustafson定律。

1.Amdahl定律

Amdahl定律是计算机科学中非常重要的定律。它定义了...]]></description><category></category></item><item><title><![CDATA[github上roadmap项目学习后台开发推荐]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/90145456</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/90145456</guid><author>codeHaoHao</author><pubDate>Sun, 12 May 2019 21:13:06 +0800</pubDate><description><![CDATA[https://github.com/kamranahmedse/developer-roadmap


]]></description><category></category></item><item><title><![CDATA[为什么map不继承collection接口]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/85395920</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/85395920</guid><author>codeHaoHao</author><pubDate>Sun, 30 Dec 2018 17:04:13 +0800</pubDate><description><![CDATA[1.首先Map提供的是键值对映射（即Key和value的映射），而collection提供的是一组数据（并不是键值对映射）。如果map继承了collection接口，那么所有实现了map接口的类到底是用map的键值对映射数据还是用collection的一组数据呢（就我们平常所用的hashMap、hashTable、treeMap等都是键值对，所以它继承collection完全没意义），而且map如...]]></description><category></category></item><item><title><![CDATA[为什么HashMap的key允许空值，而HashTable却不允许]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/85392932</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/85392932</guid><author>codeHaoHao</author><pubDate>Sun, 30 Dec 2018 16:16:56 +0800</pubDate><description><![CDATA[1.从源码分析

HashMap从源码分析：





HashMap在put的时候会调用hash()方法来计算key的hashcode值，可以从hash算法中看出当key==null时返回的值为0。因此key为null时，hash算法返回值为0，不会调用key的hashcode方法。

HashTable从源码分析：



上面可以看出当HashTable存入的value为null时，抛出Nul...]]></description><category></category></item><item><title><![CDATA[centos安装redis]]></title><link>https://blog.youkuaiyun.com/codeHaoHao/article/details/83656449</link><guid>https://blog.youkuaiyun.com/codeHaoHao/article/details/83656449</guid><author>codeHaoHao</author><pubDate>Fri, 02 Nov 2018 16:31:01 +0800</pubDate><description><![CDATA[一.前言

最近自己在自己写的开源项目里加了redis做缓存，期间遇到很多的问题，这里把自己遇到的问题和操作流程总结一下。

二.安装redis

1.环境

系统：centos 6.4

redis：redis-5.0.0

2.下载

从redis官网下载：https://redis.io/download

或者在centos命令行执行下面的命令：


wget http://down...]]></description><category></category></item></channel></rss>