<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[KD1996的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/KD1996</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; KD1996]]></copyright><item><title><![CDATA[【Java】Java使用回调函数的优雅方式]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/107062165</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/107062165</guid><author>KD1996</author><pubDate>Wed, 01 Jul 2020 13:57:05 +0800</pubDate><description><![CDATA[Java使用回调函数的优雅方式
Java8新增了函数式接口，函数式接口中只有一个接口方法，这个接口方法可以与一个静态方法或者某个实例对象的方法进行绑定。通过这种方式，我们可以将一个函数式接口做成一个回调。
例如有如下场景：
有多台服务器Server，对外提供服务；有一个控制中心Controller，Controller需要统计Server对外提供服务的次数，或者说Server提供了服务需要让Controller得到一个通知。
现在我们有如下的实现。
@FunctionalInterface
interfac]]></description><category></category></item><item><title><![CDATA[【LeetCode】多线程—H2O生成（Java）]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/106740273</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/106740273</guid><author>KD1996</author><pubDate>Sun, 14 Jun 2020 01:08:57 +0800</pubDate><description><![CDATA[LeetCode多线程——H2O生成（Java）
题目
1117. H2O 生成，两种线程分别氧 oxygen 和氢 hydrogen（分别打印O和H），目标是组织这两种线程来产生水分子，即最终打印出来的序列中每3个里有2和H和一个O。
核心思想就是等待+通知，率先完成工作的A类线程需要等待B类线程也要完成工作，继而B类通知A类线程继续。我们可以使用信号量、Synchronized+wait/notify、Lock+Condition、CyclicBarrier等方法进行实现。
解法一（信号量）
生产一个H]]></description><category></category></item><item><title><![CDATA[【MySQL】select查询结果为空与select一个空结果集的区别]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/106737470</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/106737470</guid><author>KD1996</author><pubDate>Sat, 13 Jun 2020 20:37:40 +0800</pubDate><description><![CDATA[select查询结果为空与select一个空结果集的区别



如图，select一个空表直接提示Empty set，如果直接select一个空结果集，会返回一行包含NULL的结果。

例如leetcode数据库中176. 第二高的薪水，查薪水表中第二高的薪水，要求返回第二高的薪水值或者NULL。

直接查询的话，如果原表中薪水值的数量少于2个，那么就会直接返回empty set。


select distinct Salary as SecondHighestSalary from Employee o]]></description><category></category></item><item><title><![CDATA[【JVM】实例化对象的流程]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/105109358</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/105109358</guid><author>KD1996</author><pubDate>Thu, 26 Mar 2020 02:20:22 +0800</pubDate><description><![CDATA[实例化一个对象的完整流程是怎样的呢？网上总结初始化顺序是怎么来的呢？


下面以一个未加载过的子类对象实例化为例：

需要实例化一个子类对象时，首先检查到其有继承于一个未加载过的父类， 则：
	先对父类进行类加载，并进行初始化，对父类执行初始化就是执行父类的类构造器&lt;clinit&gt;()方法，该方法将执行父类的静态变量赋值代码和静态代码块（按照书写顺序）；
	然后对子类进行加载，并进行...]]></description><category></category></item><item><title><![CDATA[【Java】Java打印时报StackOverflowError]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/91047071</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/91047071</guid><author>KD1996</author><pubDate>Thu, 06 Jun 2019 17:27:37 +0800</pubDate><description><![CDATA[打印时报StackOverflowError，排查时发现两个JavaBean在互相调用对方的toString方法，最终导致StackOverflowError，所以如果使用IDE自动生成toString方法时需要注意一下了，要避免相互调用

代码如下：

部门实体类：


public class Dept {

    private int deptId;
    private Str...]]></description><category></category></item><item><title><![CDATA[【Java】多层if-else逻辑判断优化——卫语句]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/90928443</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/90928443</guid><author>KD1996</author><pubDate>Wed, 05 Jun 2019 20:00:27 +0800</pubDate><description><![CDATA[读码出高效时，提到了使用卫语句实现超过3层的if-else的逻辑判断代码

简单来说就是将多层if-else逻辑拆分为多个if语句级联，拆分得到的if语句就是卫语句。

例如：


public void doWork() {
    if (isBusy()) {
        // Busy状态下的操作
        return;
    }
    
    if (isDown())...]]></description><category></category></item><item><title><![CDATA[【GitLab】华为弹性云服务器GitLab搭建]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/89321605</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/89321605</guid><author>KD1996</author><pubDate>Mon, 15 Apr 2019 21:44:08 +0800</pubDate><description><![CDATA[环境

Ubuntu 18.04 server 64bit

GitLab 11.9.8

基本步骤

1. 安装依赖


apt-get install curl openssh-server ca-certificates postfix -y


2. 安装 GitLab-ce，华为云服务器下载该资源速度很快，可以直接安装


apt-get update

apt-get install ...]]></description><category></category></item><item><title><![CDATA[【认知无线网络】认知无线网络基础知识学习]]></title><link>https://blog.youkuaiyun.com/KD1996/article/details/89098988</link><guid>https://blog.youkuaiyun.com/KD1996/article/details/89098988</guid><author>KD1996</author><pubDate>Mon, 08 Apr 2019 21:52:39 +0800</pubDate><description><![CDATA[源于《认知无线网络理论与关键技术》、《认知无线网络》摘抄与总结


认知无线网络是认知无线电和认知网络的结合产物，下面介绍认知无线电和认知网络。

认知无线电（Cognitive Radio）

为解决频谱资源匮乏，提高频谱利用率而提出。核心思想就是使无线通信设备具有发现“频谱空洞”并合理利用的能力。

认知无线电是建立在软件无线电平台上的一种内容认知型的智能无线电。认知无线电技术将连续不断的...]]></description><category></category></item></channel></rss>