<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[u014046563的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u014046563</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u014046563]]></copyright><item><title><![CDATA[打开Redis分布式锁的正确方式]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/110374681</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/110374681</guid><author>u014046563</author><pubDate>Mon, 30 Nov 2020 11:10:17 +0800</pubDate><description><![CDATA[使用redis实现分布式锁的目的是防止多台机器共享同一资源，保证该资源只在某一台机器处理，且只处理一次，但是使用redis实现分布式锁时需要保证以下两点，
（1）设置key和过期时间需要在同一个事务内完成
（2）设置key和删除key的属于同一个客户端
根据以上分析，我们使用spring-data-redis实现分布式锁的加锁和删除功能，talk is cheap，show your code.
1、引用的包,核心包是：
  		&lt;!-- spring data redis --&gt;
      ]]></description><category></category></item><item><title><![CDATA[基于maven的项目结构搭建]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/108831917</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/108831917</guid><author>u014046563</author><pubDate>Sun, 27 Sep 2020 17:46:18 +0800</pubDate><description><![CDATA[1、项目分层
在进行项目开发的时候，需要项目结构搭建，本文主要讲解基本maven管理的项目结构搭建，在阿里规约中规定一般分为：
（1）web层：主要是对访问控制进行转发，各类基本参数校验、异常处理等。
（2）开放接口层：可直接封装 Service 方法暴露成 RPC 接口;通过 Web封装成 http 接口;进行 网关安全控制、流量控制等。
（3）Service层：相对具体的业务逻辑服务层。
（4）Manager 层：通用业务处理层，它有如下特征:
（4.1）对第三方平台封装的层，预处理返回结果及转化异常信]]></description><category></category></item><item><title><![CDATA[JSON字符串转泛型类型]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/107213791</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/107213791</guid><author>u014046563</author><pubDate>Wed, 08 Jul 2020 19:52:44 +0800</pubDate><description><![CDATA[1、定义一个泛型对象HttpResult
2、将返回的JSON字符串解析成该类型，然后进行后续业务处理
/**
* 泛型转型
* @param json JSON字符串
* @param clazz 类型
* @param   泛型
* @return 转换之后的泛型
*/
private static  HttpResult parseHttpResult(String json, Class clazz) {
return JSONObject.parseObject(json, new TypeRef]]></description><category></category></item><item><title><![CDATA[骚年，Java值传递你会吗]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105862854</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105862854</guid><author>u014046563</author><pubDate>Thu, 30 Apr 2020 17:29:20 +0800</pubDate><description><![CDATA[骚年，Java值传递你会吗值传递和引用传递Java中的值传递总结
值传递和引用传递
1、值传递是通过方法对传入值操作后，并不会改变传入的值
2、引用传递是通过方法对传入的值操作后，会改变传入的引用指向数据
Java中的值传递
Talk is cheap， show your code。
/**
 * @author : cuantianhou 2020/4/30
 */

public class...]]></description><category></category></item><item><title><![CDATA[Https的安全通信机制保证]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105582368</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105582368</guid><author>u014046563</author><pubDate>Fri, 17 Apr 2020 16:01:53 +0800</pubDate><description><![CDATA[1、加密方式





2、Https安全通信机制



参考文章：https://blog.youkuaiyun.com/guolin_blog/article/details/104546558?depth_1-utm_source=distribute.pc_feed.none-task-blog-alirecmd-12&amp;request_id=&amp;utm_source=distribu...]]></description><category></category></item><item><title><![CDATA[SimpleDateFormat线程安全测试用例]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105392229</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105392229</guid><author>u014046563</author><pubDate>Wed, 08 Apr 2020 17:35:11 +0800</pubDate><description><![CDATA[众所周知 SimpleDateFormat在多线程环境下是不安全的，具体可以参考https://blog.youkuaiyun.com/csdn_ds/article/details/72984646，其本质原因是多线程存在共享变量，导致数据处理结果不一致甚至错误，具体的解决方案：

（1）将共享变量设置为局部变量，每个线程私有化；

（2）在使用共享变量的时候进行加锁处理，虽然可以解决问题，但是效率低下；
...]]></description><category></category></item><item><title><![CDATA[基于SpringBoot的Dubbo泛化调用的实现]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105263729</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105263729</guid><author>u014046563</author><pubDate>Thu, 02 Apr 2020 10:48:59 +0800</pubDate><description><![CDATA[Dubbo的泛化调用不需要引入调用方的接口，只需要指定接口的全类名，就可以调用服务，一般用于框架集成。接下来就基于SpringBoot实现了Dubbo的泛化调用。

1、服务端定义

1.1 服务定义及实现


package com.smart.springboot.api;

public interface HelloServiceFacade {
    void ...]]></description><category></category></item><item><title><![CDATA[Springboot与dubbo的整合]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105135530</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105135530</guid><author>u014046563</author><pubDate>Fri, 27 Mar 2020 11:13:06 +0800</pubDate><description><![CDATA[SpringBoot与Dubbo的整合定义API定义服务提供者API的实现类SpringBoot的启动类配置文件Dubbo相关配置pom文件的配置定义服务消费者服务的引用（便于服务的管理）消费者的定义SpringBoot启动类配置总结
定义API
/**
 * @author : cuantianhou 2020/1/14
 */

public interface HelloServiceFac...]]></description><category></category></item><item><title><![CDATA[Spring注解开发之HelloWorld]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/105010606</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/105010606</guid><author>u014046563</author><pubDate>Sat, 21 Mar 2020 16:10:56 +0800</pubDate><description><![CDATA[通过文章，读者可以了解到注解的概念，以及Spring中如何使用注解进行开发。]]></description><category></category></item><item><title><![CDATA[Spring Bean的生命周期]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/104611538</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/104611538</guid><author>u014046563</author><pubDate>Mon, 02 Mar 2020 14:46:38 +0800</pubDate><description><![CDATA[1、spring生命周期的示意图



2、实例

2.1 创建 Car.class类


package spring.annotation.day1.ioc.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import...]]></description><category></category></item><item><title><![CDATA[第三方支付]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103868706</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103868706</guid><author>u014046563</author><pubDate>Tue, 07 Jan 2020 10:20:49 +0800</pubDate><description><![CDATA[第三方支付第三方支付概览第三方支付收单第三方支付代付
第三方支付概览
第三方支付为用户提供了快捷的支付能力一种服务。

1、统一入口是给用户方便快捷的使用平台
2、风控：主要是用于风险控制
3、网关层的主要交易：充值、提现、退款
4、账务：提供开户，账户余额管理功
5、清算：将交易金额明细记录清楚，通知账务加减钱
6、清分：提供对账能力服务，分为渠道对账和商户对账
7、渠道：收单渠道和代付渠道，和...]]></description><category></category></item><item><title><![CDATA[你写了个Bug之集合判断包含元素]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103809641</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103809641</guid><author>u014046563</author><pubDate>Thu, 02 Jan 2020 19:37:51 +0800</pubDate><description><![CDATA[有时你会发现，Bug测试没测出来，结果生产跑出来了，只能一句mmp，无情啊。

通常，我们会使用HashSet作为集合判断是否包含某一元素，show code




public class Test{


public static void main(String []args){
        
       HashSet&lt;String&gt; setString = new ...]]></description><category></category></item><item><title><![CDATA[HashMap的put操作]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103778578</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103778578</guid><author>u014046563</author><pubDate>Tue, 31 Dec 2019 10:31:13 +0800</pubDate><description><![CDATA[1、HashMap的put操作（基于JDK1.7）



问题1：初始化主要包括哪些操作？

问题2：计算key的hash值？

问题3：计算桶的位置？

问题4：插入当前key和value？扩容？扩容安全吗，原因是什么？

问题5：对比JDK1.7和JDK1.8 HashMap？

问题6：HashMap 的最佳实践？
...]]></description><category></category></item><item><title><![CDATA[linux常用命令记录]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103660822</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103660822</guid><author>u014046563</author><pubDate>Mon, 23 Dec 2019 10:37:47 +0800</pubDate><description><![CDATA[1、本地和linux传输文件（推荐工具winscp）

rz：将远程文件传输的linux系统

sz：将本地文件传输到远程（比如windows系统）

2、查看日志的命令

（1）tail -行数f 文件名

（2）tail -f -n 行数 文件名

（3）grep 关键字 文件名

（4）less

（7）more

3、查看关键关键字的应用

（1）查看某一应用进程ps -ef | gre...]]></description><category></category></item><item><title><![CDATA[二叉搜索树之红黑树]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103654443</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103654443</guid><author>u014046563</author><pubDate>Sun, 22 Dec 2019 16:37:03 +0800</pubDate><description><![CDATA[红黑树红黑树红黑树的性质红黑树的插入按照二叉搜索树的插入方法插入当前节点的父节点为空，将颜色置为黑色，结束。当前节点的父节点颜色是黑色，结束当前节点的父节点颜色是红色，看叔叔节点的颜色叔叔节点的颜色是红色叔叔节点的颜色是黑色三角型直线型红黑树的删除搜索删除节点查找替换节点删除节点操作删除节点有两个后代删除节点无后代删除节点有一个后代修改双黑问题
红黑树
只有红色和黑色节点、弱平衡的二叉查找树
红黑...]]></description><category></category></item><item><title><![CDATA[数据结构之线性表（Java版本）]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103618023</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103618023</guid><author>u014046563</author><pubDate>Thu, 19 Dec 2019 17:18:13 +0800</pubDate><description><![CDATA[线性表的存储分为：顺序存储和链式存储

顺序存储的一种实现：ArrayList，数据量大的情况下，查找的效率高，删除和新增的效率低

链式存储的实现：LinkedList，数据量大的情况下，查找的效率低，删除和新增的效率低

下面给出简单的实现：

ArrayList：


package ds.list;

/**
 * @author : cuantianhou 2019/12/19
 */
...]]></description><category></category></item><item><title><![CDATA[Spring-Quartz添加定时任务失败]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103617200</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103617200</guid><author>u014046563</author><pubDate>Thu, 19 Dec 2019 16:45:04 +0800</pubDate><description><![CDATA[项目启动添加定时任务失败



失败原因：case1：定时任务的cron表达式设置的时间早于当前时间

         case2： 设置的定时任务额cron表达式不合法

解决方案：solution1：保证任务设置的执行时间晚于当前时间

         solution2：保证corn表达式的正确性


...]]></description><category></category></item><item><title><![CDATA[二叉树的代码实现 JAVA 版本]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103600142</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103600142</guid><author>u014046563</author><pubDate>Wed, 18 Dec 2019 17:32:41 +0800</pubDate><description><![CDATA[本文主要实现二叉树的简单功能：

（1）二叉树的生成

（2）二叉树的遍历：前序遍历，中序遍历，后序遍历，层次遍历

（3）二叉树的删除

（3）判断节点是否存在的功能


package ds.tree;


import ds.link.Node;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author : c...]]></description><category></category></item><item><title><![CDATA[排序算法之快排与归并排序]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103563211</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103563211</guid><author>u014046563</author><pubDate>Mon, 16 Dec 2019 15:13:03 +0800</pubDate><description><![CDATA[1、快速排序

适合数据量大，排序时间短，具体代码如下：


package ds.sort;


/**
 * @author : cuantianhou 2019/12/16
 */
public class QuickSort {


    /**
     * 主要思路：取基准数据，从数据高位寻找小于基准数据的值，然后用目标值替换低位置的值，
     * 然后从低位置寻找大于基准数据的...]]></description><category></category></item><item><title><![CDATA[建索引的几大原则]]></title><link>https://blog.youkuaiyun.com/u014046563/article/details/103548689</link><guid>https://blog.youkuaiyun.com/u014046563/article/details/103548689</guid><author>u014046563</author><pubDate>Sun, 15 Dec 2019 14:52:27 +0800</pubDate><description><![CDATA[1、最左前缀匹配原则，非常重要的原则，mysql会一直向右匹配直到遇到范围查询(&gt;、&lt;、between、like)就停止匹配，比如a=1andb=2andc&gt;3andd=4如果建立(a,b,c,d)顺序的索引，d是用不到索引的，如果建立(a,b,d,c)的索引则都可以用到，a,b,d的顺序可以任意调整。
2、=和in可以乱序，比如a=1and...]]></description><category></category></item></channel></rss>