<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Black&White的专栏]]></title><description><![CDATA[岁月留痕，只及肌肤]]></description><link>https://blog.youkuaiyun.com/xiaos76</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaos76]]></copyright><item><title><![CDATA[设计模式之建造者模式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/107146142</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/107146142</guid><author>xiaos76</author><pubDate>Sun, 05 Jul 2020 23:37:06 +0800</pubDate><description><![CDATA[什么是建造者模式
建造者模式，或者说是构建着模式，是一种创建型模式。建造者模式将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。
（建造者模式就是如何一步步构建包含多个组件的对象，相同的创建过程可以创建不同的产品，适用于流程固定但顺序不一定固定的对象，比如做一盘菜，有人喜欢先放盐，有人喜欢后放盐，都没关系，但放盐这个过程是一定要有的）
建造者模式使用场景
一般创建对象我们最常用的方式是直接使用new调用对象的构造函数。但是如果创建的是一个参数较多的复杂对象呢？如果通过构造函数直接ne]]></description><category></category></item><item><title><![CDATA[线程的创建]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/107008665</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/107008665</guid><author>xiaos76</author><pubDate>Sun, 28 Jun 2020 22:17:47 +0800</pubDate><description><![CDATA[创建线程的方式可以有以下几种：

继承Thread类
实现Runnable接口
匿名内部类的方式
带返回值的线程
定时器
线程池的实现
Spring的线程实现
Lambda表达式实现

继承Thread类（创建运行并中断）
//Demo1本身是一个Thread，可以直接new Demo1
public class Demo1 extends Thread{
    public Demo1(String name) {
        super(name);
    }
    @Override
   ]]></description><category></category></item><item><title><![CDATA[设计模式之抽象工厂方法模式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106889380</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106889380</guid><author>xiaos76</author><pubDate>Sun, 21 Jun 2020 20:12:40 +0800</pubDate><description><![CDATA[什么是抽象工厂方法模式
属于创建型模型，抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口
无须指定它们具体的类。
抽象工厂方法模式使用场景
抽象工厂方法模式强调一系列相关的产品对象（属于同一产品族）一起使用时创建对象需要大量重复的代码。抽象工厂方法模式的使用场景比较特殊，所以没有简单工厂方法和工厂方法模式常用。
工厂方法模式创建的对象由一个纬度决定，抽象工厂方法模式创建的对象不止由一个纬度决定。抽象工厂方法模式的纬度可以分为产品族和产品等级。

工厂方法针对的是产品等级结构，抽象工厂模式针对的是产品族]]></description><category></category></item><item><title><![CDATA[设计模式之工厂方法模式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106747705</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106747705</guid><author>xiaos76</author><pubDate>Sun, 14 Jun 2020 20:05:31 +0800</pubDate><description><![CDATA[什么是工厂方法模式
属于创建型模式，又称多态性工厂模式。在工厂方法模式中，核心的工厂类不再负责所有的实例创建，而是将具体的创建工作交给子类工厂去做，核心工厂类成为一个抽象工厂角色，仅定义接口。
工厂方法模式使用场景
创建对象需要大量重复的代码
客户端（应用层）不依赖于产品类实例如何被创建、被实现等细节
工厂方法模式示例
还是通过简单工厂方法模式示例场景说明一下工厂方法模式的写法。
要求：根据不同的请求类型（read、write、delete、execute）选择不同的helper帮助构建不同的请求对象。
工]]></description><category></category></item><item><title><![CDATA[设计模式之简单工厂模式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106558252</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106558252</guid><author>xiaos76</author><pubDate>Sun, 07 Jun 2020 22:49:58 +0800</pubDate><description><![CDATA[什么是简单工厂模式
工厂模式属于创建型模式，一般情况下，工厂模式可以分为简单工厂模式、工厂方法模式和抽象工厂模式，不过，在GoF 的《设计模式》中，简单工厂模式属于工厂方法模式的一种特例，不属于23种模式之内。但平时开始中，简单工厂模式用的场景还是挺多的。
简单工厂模式就是由一个工厂类根据参数创建指定对象，客户端不关心对象创建过程。
简单工厂模式使用场景
使用于工厂类创建的对象比较少的场景。
简单工厂模式中工厂类有多处if分支判断语句，虽然不太符合开闭原则，同时工厂类集中了所有实例对象的创建逻辑，违反单一职]]></description><category></category></item><item><title><![CDATA[设计模式之单例模式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106453263</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106453263</guid><author>xiaos76</author><pubDate>Sun, 31 May 2020 17:18:35 +0800</pubDate><description><![CDATA[为什么要学习设计模式
作为一个程序员，有了扎实的基础知识，才能探寻更深的技术深度，才能潜移默化提高对技术的理解。设计模式也是一种基础知识，而且是一种能够直接变现为编码生产力，提高开发能力的基础知识。
设计模式是对软件设计开发中普遍存在的各种问题，所提出的解决方案，可以帮助编写可扩展、可读、可维护的高质量代码，帮助提高复杂代码的设计和开发能力，也可以帮助我们更容易阅读容易理解源码，因为优秀的框架为了保证代码的可扩展性、可维护性等不可避免地会使用到很多设计模式。
设计模式分类
经典的设计模式有23种，主要分为创]]></description><category></category></item><item><title><![CDATA[记一次JVM时区引发的问题]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106323550</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106323550</guid><author>xiaos76</author><pubDate>Sun, 24 May 2020 23:52:29 +0800</pubDate><description><![CDATA[问题描述：
有个业务需求，统计某个时间点之前数据库中的数据，不传时间的话就统计所有，接口写完之后做了两个测试，分别是不传时间和传当天晚上23:00的时间，当天晚上23：00属于未来时间，两次统计的记录数应该是一样的才对，可事实是两者不一致。
传23:00的时间的统计数据每次统计的结果是一样的，比不传时间统计的数据要少，不传时间每次统计的数据都是不一样的，因为数据库的数据一直在变，所以23:00的时间统计的一直是某个历史时间的数据，因为统计结果每次都一样，当时下意识看了下时间，是17点多，而公司的业务除了国内]]></description><category></category></item><item><title><![CDATA[设计原则之迪米特原则]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106179694</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106179694</guid><author>xiaos76</author><pubDate>Sun, 17 May 2020 21:34:56 +0800</pubDate><description><![CDATA[迪米特原则	Law of Demeter, LOD
迪米特原则定义
迪米特原则也叫最小知识原则（The Least Knowledge Principle）。即，每个模块只应该了解那些与它关系密切的模块的有限知识，或者说，每个模块只和自己的朋友”说话“，不和陌生人”说话“。
这里的模块可以是微服务、框架、组件、类库、模块、类、甚至是函数，以下的描述主要以“类”作为迪米特原则的描述对象。
什么是朋友和陌生人
对类来说，出现在成员变量以及方法对输入输出参数中对类是朋友类，出现在方法体内部的类不是朋友类，是陌生人]]></description><category></category></item><item><title><![CDATA[代码质量管理平台SonarQube安装与使用]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/106022316</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/106022316</guid><author>xiaos76</author><pubDate>Sat, 09 May 2020 17:24:36 +0800</pubDate><description><![CDATA[环境
系统：

jdk:

mysql:

下载安装sonar
因为系统安装的jdk是1.8，所以选择一个支持1.8的sonar版本。
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.2.zip

下载后解压到指定文件夹。
unzip sonarqube-7.2.zip -d sonar

准备启动sonar
查看系统是32位还是64位：
root@node1:/home/shine/sonarqube/son]]></description><category></category></item><item><title><![CDATA[ES几种搜索方式]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105883617</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105883617</guid><author>xiaos76</author><pubDate>Fri, 01 May 2020 22:18:19 +0800</pubDate><description><![CDATA[1、query string search方式的条件查询：
搜索商品名称中包含yagao的商品，而且按照售价降序排序：
GET /ecommerce/product/_search?q=name:yagao&amp;sort=price:desc

2、query DSL的方式
DSL：Domain Specified Language，特定领域的语言
查询所有的商品
GET /ecommerce...]]></description><category></category></item><item><title><![CDATA[设计原则之依赖倒转原则]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105777412</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105777412</guid><author>xiaos76</author><pubDate>Sun, 26 Apr 2020 23:07:19 +0800</pubDate><description><![CDATA[之前已经总结过单一职责原则、开闭原则、里氏替换原则和接口隔离原则，这四个原则和这篇的依赖倒转原则合称SOLID原则。
依赖倒转原则 Dependency Inversion Principle，DIP
依赖倒转原则定义
High-level modules shouldn’t depend on low-level modules.Both modules should depend on abs...]]></description><category></category></item><item><title><![CDATA[Hive安装启动填坑]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105625397</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105625397</guid><author>xiaos76</author><pubDate>Mon, 20 Apr 2020 00:01:04 +0800</pubDate><description><![CDATA[Hive下载
hive下载地址：http://mirror.bit.edu.cn/apache/hive/
解压到/usr/local：tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local/
重命名：mv apache-hive-2.3.4-bin/ hive-2.3.4
修改环境变量并保存
/etc/profile：vim /etc/profi...]]></description><category></category></item><item><title><![CDATA[IDEA构建Kafka源码]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105622451</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105622451</guid><author>xiaos76</author><pubDate>Sun, 19 Apr 2020 23:46:19 +0800</pubDate><description><![CDATA[环境准备
在阅读 Kafka 源码之前，我们要先做一些必要的环境准备工作：至少要提前安装好 Java、Gradle、Scala、IDEA 和 Git 等软件。
这里编译的当前Kafka源码的trunk分支的最新代码。
Java
Java不用说了，一般的应该都安装了，这里需要Java8及以上。
Gradle
当前时间Kafka的源码编译需要Gradle5.2及以上，我这里安装的5.5版本。
官网下载...]]></description><category></category></item><item><title><![CDATA[hive beeline连接User: root is not allowed to impersonate anonymous]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105478903</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105478903</guid><author>xiaos76</author><pubDate>Sun, 12 Apr 2020 23:30:02 +0800</pubDate><description><![CDATA[分析 ： 访问权限问题
解决 ：在hadoop的conf目录下的配置文件core-site.xml中加入如下配置
&lt;property&gt;
  &lt;name&gt;hadoop.proxyuser.root.hosts&lt;/name&gt;
  &lt;value&gt;*&lt;/value&gt;
 &lt;/property&gt;
 &lt;property&gt;
  &...]]></description><category></category></item><item><title><![CDATA[设计原则之接口隔离原则]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105472043</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105472043</guid><author>xiaos76</author><pubDate>Sun, 12 Apr 2020 23:14:20 +0800</pubDate><description><![CDATA[接口隔离原则	Interface Segregation Principle , ISP
接口隔离原则定义
客户端不应该被迫依赖它不需要的接口。其中的“客户端”可以理解为接口的调用者或者使用者。
如何理解接口隔离原则
理解接口隔离原则的关键，就是理解其中的“接口”二字。在接口隔离原则中，“接口”可以理解为下面三种情况：


一组API接口集合
当把接口隔离原则的接口理解成一组API接口集合时，可以...]]></description><category></category></item><item><title><![CDATA[设计原则之里式替换原则]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105334416</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105334416</guid><author>xiaos76</author><pubDate>Sun, 05 Apr 2020 22:30:32 +0800</pubDate><description><![CDATA[这是一篇专栏学习总结
里式替换原则，Liskov Substitution Principle，LSP。最早是在1986年由Barbara Liskov 提出。
里式替换原则定义
子类对象能够替换程序中父类对象出现的任何地方，并且保证原来程序的逻辑行为不变，且正确性不被破坏。
里式替换原则还有一个更有指导意义的描述，“Design By Contract”，即按照协议设计。也就是说在设计子类的时候...]]></description><category></category></item><item><title><![CDATA[并发编程之同步工具]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105333349</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105333349</guid><author>xiaos76</author><pubDate>Sun, 05 Apr 2020 21:35:27 +0800</pubDate><description><![CDATA[同步工具类可以是任何一个对象,只要能够根据其自身的状态来协调线程的控制流就行,阻塞队列就可以作为同步工具类，java平台类库中还包含其他一些同步工具类,不过这里主要分享CountDownLatch、CyclicBarrier、Semaphore和 Exchanger。
CountDownLatch
CountDownLatch允许一个或多个线程等待其他线程完成操作。它维护了一个锁存器的计数,当计数...]]></description><category></category></item><item><title><![CDATA[并发编程之并发容器]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105189736</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105189736</guid><author>xiaos76</author><pubDate>Mon, 30 Mar 2020 00:10:48 +0800</pubDate><description><![CDATA[这篇文章来自《并发编程实战》的部分总结。
引言
这里分享的是并发编程常用的一些并发容器 以及并发容器对应的同步容器。
同步容器
java中的集合框架(一种容器工具类,存储具有共同属性的对象)



List、Set、Queue接口继承了Collection接口,分别代表数组、集合、队列三大容器 ,Map自身是一个接口。


ArrayList,LinkedList实现了List接口,同时Linke...]]></description><category></category></item><item><title><![CDATA[设计原则之开闭原则]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105184107</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105184107</guid><author>xiaos76</author><pubDate>Sun, 29 Mar 2020 23:35:59 +0800</pubDate><description><![CDATA[这是一篇专栏学习总结。
开闭原则，Open Closed Principle，OCP。
开闭原则定义

一个软件实体如类、模块和方法等，应该对扩展开放，对修改关闭。
强调用抽象构建框架，用实现扩展细节。
提高软件的可扩展性，可维护性。

开闭原则是设计原则中最有用的一条原则，因为扩展性是衡量代码质量的重要标准之一，在23种设计模式中，大部分设计模式都是为了解决代码的可扩展性问题而存在，主要遵从的原...]]></description><category></category></item><item><title><![CDATA[JMeter提取响应Token关联请求]]></title><link>https://blog.youkuaiyun.com/xiaos76/article/details/105037462</link><guid>https://blog.youkuaiyun.com/xiaos76/article/details/105037462</guid><author>xiaos76</author><pubDate>Sun, 22 Mar 2020 22:45:36 +0800</pubDate><description><![CDATA[关联
现在做性能测试的，有很多都是单纯的接口测试，不需要将上一次响应的数据保存下来再发出去，但如果需要，就需要关联，那什么样的数据需要关联呢？

数据由服务器产生
数据每次请求时都是动态变化的
数据在后续请求中需要再发送出去

可以把关联理解为取服务器端返回的值，然后在后续请求发送出去，比如登录请求返回的token信息就是一个典型的需要关联的数据，需要在后续请求中作为身份认证的凭证。
以下给出获取...]]></description><category></category></item></channel></rss>