<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nbdclw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nbdclw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nbdclw]]></copyright><item><title><![CDATA[git 基础命令集合]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/116697390</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/116697390</guid><author>nbdclw</author><pubDate>Wed, 12 May 2021 10:24:58 +0800</pubDate><description><![CDATA[git 命令
1、从远程仓库更新到本地

git status（查看本地分支文件信息，确保更新时不产生冲突)
git checkout – [file name] （若文件有修改，可以还原到最初状态; 若文件需要更新到服务器上，应该先merge到服务器，再更新到本地）
git checkout – [file name] （若文件有修改，可以还原到最初状态; 若文件需要更新到服务器上，应该先merge到服务器，再更新到本地）
git checkout remote branch (若分支为本地分支，则需切换]]></description><category></category></item><item><title><![CDATA[redis分布锁的一些问题解析]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/110950067</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/110950067</guid><author>nbdclw</author><pubDate>Thu, 10 Dec 2020 15:34:48 +0800</pubDate><description><![CDATA[我在使用redis分布式锁的时候，遇到过的一些问题，如下：
加锁
解锁实现方式一：
/**
 * @param key   锁的key，全局唯一的key
 * @param value 锁的value，开始value和key值一样
 * @return 加锁成功或失败
 **/
public boolean tryLock(String key, String value) {
	// 第一步设置key，如果存在就设置失败，加锁失败
    Long set = jedisCluster.setnx(key]]></description><category></category></item><item><title><![CDATA[java面向对象编程的三大特性]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/110822216</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/110822216</guid><author>nbdclw</author><pubDate>Mon, 07 Dec 2020 17:19:43 +0800</pubDate><description><![CDATA[前言
java面向对象的特性包括继承、多态、封装。
一、继承
继承可以这样理解，比如孩子继承父母的财产一样，子类可以继承父类的所有属性和方法，同时子类也可以拥有自己独有的属性或者方法。需要注意的是java的继承是单继承的，也就是说一个类只能继承一个类，一个子类只有能一个父类。
继承的好处：

代码新的是实现很容易，代码简洁；比如A继承B，那么A就可以直接使用B类的非私有方法了；
方便扩展

继承的坏处：

打破了封装，因为父类向子类暴露了实现细节
增加了耦合度，如果父类做了一些修改，对应的子类可能也会面临着]]></description><category></category></item><item><title><![CDATA[2020年12月PMP考试心得]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/110729952</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/110729952</guid><author>nbdclw</author><pubDate>Sun, 06 Dec 2020 00:35:15 +0800</pubDate><description><![CDATA[昨天考完了PMP，说实话，心里是没有底的，跟自己平时做测试的时候状态完全不一样。这次考试都没有做完，有20道题来不及做就蒙了。深夜分享下考试的体会吧！
1、 首先，很重要考试的前一天一定要休息好，我这次考试前就因为没有休息好，导致考试的时候精力不集中审题很慢，状态不佳；
2、 心态很重要，考试前也不要过多纠结，当做是小考；
3、做题的时候看关键词也是很重要的，有的题目很长，有点费时间，但是能快速抓住关键词就能快速定位答案解题；
4、考试当天的早餐很重要，一定要吃好；要不然考试的时候，饥饿影响发挥，大脑供能不]]></description><category></category></item><item><title><![CDATA[浅谈spring注解之Autowired的required属性]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/109380818</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/109380818</guid><author>nbdclw</author><pubDate>Fri, 30 Oct 2020 11:34:07 +0800</pubDate><description><![CDATA[我在使用spring框架进行开发过程中，会使用@Autowired注解进行对已有的bean进行注入。那么我们来简单分析下@Autowired的属性以及具体的使用。
1、Autowired注解
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME]]></description><category></category></item><item><title><![CDATA[AggregationBuilders.terms分词问题]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/109313849</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/109313849</guid><author>nbdclw</author><pubDate>Tue, 27 Oct 2020 16:32:50 +0800</pubDate><description><![CDATA[使用elasticSearch想对一个字段进行聚合的时候，但是又不想对该字段进行分词，那么应该怎么处理呢？

首先我们在创建mapping的时候将fields的type设置为keyword

"your_field_name": {
   "type": "text",
   "fields": {
       "keyword": {
           "type": "keyword"
       }
   },
   "fielddata": true
}


在聚合查询的时候使用：

Agg]]></description><category></category></item><item><title><![CDATA[SpringBoot和Elasticsearch整合启动报错]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/109242077</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/109242077</guid><author>nbdclw</author><pubDate>Fri, 23 Oct 2020 14:41:13 +0800</pubDate><description><![CDATA[报错：
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{2PVl0_lVSuaqdH-I3wMeoQ}{127.0.0.1}{127.0.0.1:9300}]
]

原因可能分析：

配置的cluster.name不正确；
端口不正确，tcp访问端口是9300；
SpringBoot和Elasticsearch版本对应不上

SpringBoot和Elasticsearch版本对应关系]]></description><category></category></item><item><title><![CDATA[HashMap之tableSizeFor方法算法详解]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108770486</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108770486</guid><author>nbdclw</author><pubDate>Thu, 24 Sep 2020 15:30:55 +0800</pubDate><description><![CDATA[最近在看HashMap的源码的时候，发现有参构造方法会调用tableSizeFor方法来确认容量的大小，tableSizeFor方法里面的算法挺巧妙的，所以专门研究了下，下面跟大家分享下我对tableSizeFor方法的一个理解。
我们先看看方法源码：
/**
 * Returns a power of two size for the given target capacity.
 */
static final int tableSizeFor(int cap) {
    int n = cap - ]]></description><category></category></item><item><title><![CDATA[Java设计模式之单例模式的7种写法]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108753395</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108753395</guid><author>nbdclw</author><pubDate>Wed, 23 Sep 2020 16:24:38 +0800</pubDate><description><![CDATA[简介
单例模式是23种设计模式中比较基础的设计模式了。什么是单例呢，就是全局唯一的一个实例，一个类只有一个实例，只能通过唯一的入口来获取实例。
下面就跟大家分享下7种实现方式
饿汉式
顾名思义，取名叫饿汉式，就是一开始创建实例。
public class Hungry {
    private int age;
    private static final Hungry instance = new Hungry();

    private Hungry() {}

    public Hung]]></description><category></category></item><item><title><![CDATA[Java位运算符＞＞和＞＞＞的区别]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108746403</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108746403</guid><author>nbdclw</author><pubDate>Wed, 23 Sep 2020 10:56:09 +0800</pubDate><description><![CDATA[今天给大家分享运算符&gt;&gt;和&gt;&gt;&gt;的区别
首先我们先看下例子：
public class ShiftOperatorTest {
    public static void main(String[] args) {
        int a = 8;
        System.out.println("a &gt;&gt; 1 = " + (a &gt;&gt; 1));
        System.out.println("a &gt;&gt;&gt; 1 = " ]]></description><category></category></item><item><title><![CDATA[教你快速理解雪花算法的原理和java实现]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108736512</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108736512</guid><author>nbdclw</author><pubDate>Tue, 22 Sep 2020 19:11:24 +0800</pubDate><description><![CDATA[一、简介
雪花算法是Twitter开源的分布式ID生成算法。生成的ID是一个64位的Long类型的数字，是一个全局唯一的ID；当然这64位的全局唯一ID是由时间戳、机器ID、序列号组成的，如果涉及到不同的机房，可以改进下由由时间戳、机房ID、机器ID、序列号组成。具体是如何分配的，如下图所示：

组成部分详解
1、最高位
是符号位，始终为0，因为需要正数；
2、时间戳
第二部分是41位的时间戳，自增的时间戳（毫秒级），最大可以存（2^41 - 1）的毫秒数，差不多可以存69年
3、机房ID
第三部分是5位的]]></description><category></category></item><item><title><![CDATA[java动态代理使用举例]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108662577</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108662577</guid><author>nbdclw</author><pubDate>Fri, 18 Sep 2020 14:17:27 +0800</pubDate><description><![CDATA[一、什么是代理
举个例子，比如小明想要买房子，但是他自己由于上班没有时间，不能打乱上班的节奏，这个时候就想到了中介，小明就找到中介代替小明看房子，看好过后，小明再自己去确认并付钱，然后中介再代理小明办好手续。这就是代理，这里的中介就是代理对象，小明就是被代理对象。
代理的好处：通过代理对象间接操作被代理的目标对象，防止直接修改目标对象，通过代理对原有业务进行增强。
一、静态代理
在使用动态代理之前，我们先看看静态代理的实现。
接口：
public interface Peopleable {
    voi]]></description><category></category></item><item><title><![CDATA[JVM内存模型之运行时数据区简介（初级篇）]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108512736</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108512736</guid><author>nbdclw</author><pubDate>Thu, 10 Sep 2020 14:40:20 +0800</pubDate><description><![CDATA[JVM内存模型
一、JVM 1.8内存区域划分

1、程序计数器（线程私有）
每个线程都有自己的程序计数器，用于记录当前线程虚拟机字节码的指令地址，如果CPU切换，切换回来可以继续执行；如果当前线程是native方法，则为空。
2、虚拟机栈（线程私有）
java每启动一个线程，就会有自己的一个虚拟机栈，每个方法会创建一个栈帧，用于存放：

局部变量表
操作数栈
动态链接
方法返回地址

如果线程请求的虚拟机栈深度大于虚拟机所允许的最大深度则会抛出StackOverflowError异常；如果虚拟机栈可以动态]]></description><category></category></item><item><title><![CDATA[redis常用命令手册大全 - 笔记]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108382626</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108382626</guid><author>nbdclw</author><pubDate>Thu, 03 Sep 2020 16:13:09 +0800</pubDate><description><![CDATA[一、redis key 命令
1、EXISTS
redis的 EXISTS 命令用于检查指定的key是否存在。




返回值
说明




0
key不存在


1
key存在


基本语法：
127.0.0.1(127.0.0.1:6379)&gt;EXISTS test_key
"0"
127.0.0.1(127.0.0.1:6379)&gt;EXISTS yes_key
"1"

2、PEXPIRE
redis PEXPIRE 这个命令和 EXPIRE 命令的作用类似，但是它以毫秒为单位设置 key]]></description><category></category></item><item><title><![CDATA[阻塞队列之LinkedBlockingQueue - 源码解析（一）]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108256283</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108256283</guid><author>nbdclw</author><pubDate>Thu, 27 Aug 2020 20:04:12 +0800</pubDate><description><![CDATA[一、概述
LinkedBlockingQueue是一个单向链表的阻塞队列，FIFO队列，是无界队列，当前如果初始化的时候指定大小，也可以是有界队列。
二、思想
LinkedBlockingQueue思想：

数据结构是单项链表
生产者和消费者使用同一个队列
生产者和消费者分别使用自己的锁，读写分离，生产者使用putLock，消费者使用takeLock
生产者只有在队列未满时生产，队列满时生产者线程就进行阻塞
消费者只有在队列有数据时消费，队列没有数据消费者线程就进行阻塞

三、源码解析
撤销：Ctrl/Co]]></description><category></category></item><item><title><![CDATA[SpringCloud Alibaba nacos源码解析(一)-客户端发送服务注册]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/108238817</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/108238817</guid><author>nbdclw</author><pubDate>Wed, 26 Aug 2020 17:38:44 +0800</pubDate><description><![CDATA[概述
nacos作为服务注册中心，关键特性包括服务发现和服务健康监测、动态配置服务、动态DNS服务、服务及其元数据管理等，详细的介绍可以去nacos官网：https://nacos.io 查看。本文只针对客服端服务注册的主要流程讲解和源码解析，其他功能后续会持续更新。如果有不对的地方，还望指出。
nacos版本
我用的nacos服务端版本1.1.4，github地址：https://github.com/alibaba/nacos
客户端：spring-cloud-alibaba-nacos-discove]]></description><category></category></item><item><title><![CDATA[win10 RabbitMQ延时队列插件的安装与配置]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/107441772</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/107441772</guid><author>nbdclw</author><pubDate>Sun, 19 Jul 2020 10:58:43 +0800</pubDate><description><![CDATA[RabbitMQ延时队列插件的安装与配置
延时队列的应用场景
在实际应用中可能会用到延时队列。比如：

商城的订单管理，如果提交订单后在规定的时间内未支付，自动取消订单；
定时处理指定的消息；
消息重试，业务削峰…等等

rabbitmq_delayed_message_exchange插件的安装
一、下载插件
我当前的rabbitmq版本是3.8.5，到rabbitmq网站下载，链接链接: https://www.rabbitmq.com/community-plugins.html，然后找到rabbit]]></description><category></category></item><item><title><![CDATA[linux上安装rabbitmq及遇到的问题解决]]></title><link>https://blog.youkuaiyun.com/nbdclw/article/details/81133454</link><guid>https://blog.youkuaiyun.com/nbdclw/article/details/81133454</guid><author>nbdclw</author><pubDate>Fri, 20 Jul 2018 16:36:50 +0800</pubDate><description><![CDATA[一、安装Erlang

RabbitMQ是流行的开源消息队列系统，是AMQP（Advanced Message Queuing Protocol高级消息队列协议）的标准实现，用erlang语言开发，所以RabbitMQ依赖Erlang，需要先安装Erlang。

安装过程如下：


[root@vmware rabbitmq]# wget https://packages.erlang-solut...]]></description><category></category></item></channel></rss>