<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xktxoo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xktxoo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xktxoo]]></copyright><item><title><![CDATA[幂等技术及实现方式]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/96765193</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/96765193</guid><author>xktxoo</author><pubDate>Sun, 21 Jul 2019 21:36:18 +0800</pubDate><description><![CDATA[一、什么是幂等
幂等（idempotent）是一个数学与计算机的概念，常见于抽象代数。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同，也不同担心重复执行会对系统造成改变，例如，setTrue()函数就是一个幂等函数，无论执行多少次，其结果都是一样的。
二、幂等的实现方案
幂等处理的是多次执行的问题，这并不仅仅出现在并发场景中，无论是顺序执行还是并发执行，都需要做好幂等...]]></description><category></category></item><item><title><![CDATA[乐观锁与悲观锁]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/96702823</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/96702823</guid><author>xktxoo</author><pubDate>Sun, 21 Jul 2019 11:05:56 +0800</pubDate><description><![CDATA[一、悲观锁
悲观锁(Pessimistic Lock)，每次拿到数据时都会担心被别人修改，所以每次在拿数据的时候都会上锁，确保自己使用的过程中不会被被人修改，使用完后再释放锁。悲观锁常见的实现场景：

a. 数据库：通过select … for update;上锁，直到事务commit或rollback
b. synchronized：操作前先上同步锁
c. 分布式锁：操作前先上分布式锁，操作完成...]]></description><category></category></item><item><title><![CDATA[Java8 CompletableFuture使用]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/95100563</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/95100563</guid><author>xktxoo</author><pubDate>Mon, 08 Jul 2019 21:19:04 +0800</pubDate><description><![CDATA[一、Future接口

1.1 Runnable与Callable

Runnable接口源自JDK1.1，它只有一个run()方法，该方法没有返回结果：
public interface Runnable {
    public abstract void run();
}

Callable接口是JDK1.5中添加，只有一个call()方法，该方法支持结果返回且可以抛出异常：
public ...]]></description><category></category></item><item><title><![CDATA[MySQL Workbench构建ER图(实体关系图)]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/94784045</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/94784045</guid><author>xktxoo</author><pubDate>Sat, 06 Jul 2019 00:16:50 +0800</pubDate><description><![CDATA[MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具，它是著名的数据库设计工具DBDesigne4的继任者，可以通过MySQL Workbench设计和创建新的数据库图示，管理数据库以及进行MySQL迁移。
一、安装MySQL Workbench

1.1 安装MySQL Workbench

点击进入MySQL Workbench下载页面，下载操作系统对应版本的客户端，安...]]></description><category></category></item><item><title><![CDATA[[linux工具] awk]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/94357306</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/94357306</guid><author>xktxoo</author><pubDate>Sun, 30 Jun 2019 21:02:19 +0800</pubDate><description><![CDATA[awk是一种模式匹配的编程语言，它的主要功能是匹配文本并对其进行处理，同时它有一些编程语言才有的语法，如函数、分之、循环、变量、数组等。awk的数据可以来自标准输入、文件或其他命令的输出。
一、awk基础

1.1 语法形式

awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)...]]></description><category></category></item><item><title><![CDATA[[linux工具] sed]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/93516445</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/93516445</guid><author>xktxoo</author><pubDate>Mon, 24 Jun 2019 19:45:09 +0800</pubDate><description><![CDATA[sed(Strem Editor)本质上是一个编辑器，但是它是非交互式的，这点与VIM不同；同时它有事面向字符流的，输入的字符流经过sed处理后输出。这两点特性使得sed成为命令行下非常有用的文本处理工具。
一、sed基础

1.1 使用gnu-sed替换macOS下sed

mac自带的sed工具与linux下的gnu-sed使用上有所区别，比如mac下通过sed -i xxx直接修改文件时候必...]]></description><category></category></item><item><title><![CDATA[Google Protocol Buffer(protobuf) 使用]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/93259486</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/93259486</guid><author>xktxoo</author><pubDate>Sat, 22 Jun 2019 01:21:10 +0800</pubDate><description><![CDATA[Protocol Buffer是google2008年推出的一种数据交换协议，可以使用proto文件将数据序列化或反序列化，google提供了多种语言的实现，每一种实现都包含了相应语言的编译器及库文件，由于Protocol Buffer协议使用二进制格式进行数据传输，所以它比xml和json等协议进行数据交换快。
一、安装protobuf
Mac下通过Homebrew安装protobuf
brew...]]></description><category></category></item><item><title><![CDATA[Java7 ForkJoinPool使用及源码解析]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/92798999</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/92798999</guid><author>xktxoo</author><pubDate>Tue, 18 Jun 2019 20:05:39 +0800</pubDate><description><![CDATA[Java7中引入了一种新的并发框架-Fork/Join，Fork/Join采用分治+work-stealing的思想，Fork/Join相教于其他并发框架有其适合的使用场景：如果一个任务能够被分为多个子任务，通过组合这些子任务的结果就能获得最终结果，那么这项任务就适合用Fork/Join模式解决。
一、ForkJoinPool使用示例
如上说述，递归问题比较适合用ForkJoin框架解决，如求Fi...]]></description><category></category></item><item><title><![CDATA[CountDownLatch使用、源码解析及与Thread.join()对比]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/91889556</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/91889556</guid><author>xktxoo</author><pubDate>Thu, 13 Jun 2019 19:51:00 +0800</pubDate><description><![CDATA[JDK从1.5版本开始提供CountDownLatch工具类，它能使一个县城等待其他线程各自完成工作后再执行，CountDownLatch内部是通过一个计数器实现的，计数器的初始值是批量任务初始线程的数量，每当一个线程完成任务后，计数器的值就会减1，当计数器的值为0时，唤醒所有被阻塞的线程。
一、CountDownLatch使用
首先，看下CountDownLatch的几个主要方法：
public...]]></description><category></category></item><item><title><![CDATA[时间表达式]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/91460504</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/91460504</guid><author>xktxoo</author><pubDate>Tue, 11 Jun 2019 19:55:34 +0800</pubDate><description><![CDATA[一、什么是时间表达式
cron(计划任务)，是任务在约定的时间执行已经计划好的工作。cron表达式是字符串，以5或6个空格隔开，分为6或7个域，每个域代表一个含义，cron表达式有如下两种：
秒 分 时 日 月 年 星期 年
秒 分 时 日 月 年 星期


1.1 各字段含义





字段
允许值
允许特殊字符




秒
0-59的整数
, - * /


分
0-59的整数
, - * /...]]></description><category></category></item><item><title><![CDATA[Java8日期/时间使用]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/91380332</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/91380332</guid><author>xktxoo</author><pubDate>Mon, 10 Jun 2019 15:44:25 +0800</pubDate><description><![CDATA[一、名词

时间戳（时刻）：时间戳是指格林尼治时间1970年01月01日00时00分00秒到现在的总秒数（毫秒数），可以理解成绝对时间，它与时区无关，不同时区对同一时间戳的解读不一样
时区：同一时刻（时间戳），世界上各地区的时间可能是不一样的，具体时间与时区相关，按经度一共分为24个时区，英国格林尼治是0时区，中国北京是东8区

二、Java8时间

2.1 Java8时间

Java1.0版本时...]]></description><category></category></item><item><title><![CDATA[Java SPI简介、示例及实现源码分析]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/91344545</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/91344545</guid><author>xktxoo</author><pubDate>Sat, 08 Jun 2019 14:24:47 +0800</pubDate><description><![CDATA[一、什么是SPI
SPI(Service Provider Interface)是JDK内置的一种服务发现机制，简单说它就是一种动态归还发现的机制，比如一个接口，想运行时动态给它添加实现，只需要添加一个实现，然后在jar包src/resources/META-INF/service目录下创建一个接口全限定名的文件，文件中存放实现类的全限定名，允许存多个实现类全限定名
二、SPI使用示例

2.1 ...]]></description><category></category></item><item><title><![CDATA[MacOS下oh-my-zsh安装与使用]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/91129485</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/91129485</guid><author>xktxoo</author><pubDate>Fri, 07 Jun 2019 18:18:47 +0800</pubDate><description><![CDATA[shell是linux/unix的外壳，它负责外界与linux内核的交互，接收用户或其他程序的命令，把这些命令转化成内核能理解的语言。shell类型有很多，常用的shell有sh、bash、csh等。查看系统中支持的shell
$ cat /etc/shells
---
# List of acceptable shells for chpass(1).
# Ftpd will not allow...]]></description><category></category></item><item><title><![CDATA[Java传值调用和传引用调用（参数引用为null的问题）]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/90244888</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/90244888</guid><author>xktxoo</author><pubDate>Wed, 15 May 2019 20:58:33 +0800</pubDate><description><![CDATA[一、问题
近期在项目中遇到一个场景，在多层级调用中需要传递上下文，调用过程中上线文对象可能为空，想通过一个公共方法处理上下文，当上下文为空时生成上下文对象，执行相关操作后将该上下文对象向后传递。大致逻辑如下：
public class Test {

    public static void handleContext(Context context) {
        if(context...]]></description><category></category></item><item><title><![CDATA[查看应用/系统线程数]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/90142380</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/90142380</guid><author>xktxoo</author><pubDate>Sun, 12 May 2019 17:03:52 +0800</pubDate><description><![CDATA[一、通过top命令查看
top命令实时显示进程状态，默认每5秒更新一次。top命令显示的每一列的含义为：




列名
含义




PID
进程ID


USER
进程拥有者


PRI
进程优先级


SIZE
进程拥有的内存


RSS
进程拥有的物理内存


SHARE
进程和其它进程共享的物理内存空间


STAT
进程的状态，S=sleeping;R=running;T=stopped...]]></description><category></category></item><item><title><![CDATA[[linux工具] autojump]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/90140766</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/90140766</guid><author>xktxoo</author><pubDate>Sun, 12 May 2019 15:08:51 +0800</pubDate><description><![CDATA[aotojump是一个文件系统快速定位的工具，它将命令行输入的工作目录维护在数据库中，并根据工作目录的使用频率排序，可以快速进入工作目录
一、mac下安装autojump

1.1 下载安装autojump

brew install autojump


1.2 修改bash配置

brew info autojump

---
Add the following line to your ~/...]]></description><category></category></item><item><title><![CDATA[[linux命令] jq - JSON处理]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/87909432</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/87909432</guid><author>xktxoo</author><pubDate>Sun, 24 Feb 2019 22:58:04 +0800</pubDate><description><![CDATA[jq可以对json数据进行分片、过滤、映射、转换，jq可以像sed、awk、grep等命令一样轻松的处理文本；jq使用c语言编写，没有运行时依赖，可以下载预编译的二进制文件复制到远程机器上运行；使用jq可轻松的将现有的数据格式转换为你想要的数据格式。
一、用户手册

mac下安装

brew install jq


用户操作手册

二、使用示例
jq使用方法
jq [options] &amp;lt;j...]]></description><category></category></item><item><title><![CDATA[[linux命令] telnet与ssh]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/87565039</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/87565039</guid><author>xktxoo</author><pubDate>Sun, 17 Feb 2019 23:05:58 +0800</pubDate><description><![CDATA[telnet和ssh是用于远程访问服务器的两大协议，利用它们可以完成对远程计算机的控制，它们都基于TCP/IP协议，因此连接时都需要知道目标机器的网址或域名。
一、telnet
telnet是Telecommunications和Networks的联合缩写，它是一种在UNIX平台上最为人所熟知的网络协议，telnet默认使用23端口，它采用明文传送报文，没有使用任何验证策略及数据加密方法，因此它的...]]></description><category></category></item><item><title><![CDATA[MacOS中Homebrew使用]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/86777441</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/86777441</guid><author>xktxoo</author><pubDate>Fri, 08 Feb 2019 23:03:04 +0800</pubDate><description><![CDATA[Homebrew是MacOS下的包管理工具，类似Ubuntu下的apt-get命令，通过这个工具可以进行软件的安装、卸载、更新、查看、搜索等功能。
一、官方介绍

Homebrew官网
Homwbrew git地址
Homebrew文档中心

交互式安装Homebrew（将命令粘贴至终端）
/usr/bin/ruby -e &quot;$(curl -fsSL https://raw.githubuserc...]]></description><category></category></item><item><title><![CDATA[[linux命令] seq]]></title><link>https://blog.youkuaiyun.com/xktxoo/article/details/86770036</link><guid>https://blog.youkuaiyun.com/xktxoo/article/details/86770036</guid><author>xktxoo</author><pubDate>Wed, 06 Feb 2019 23:35:00 +0800</pubDate><description><![CDATA[seq是linux中的一个预设外部命令，一般用作一堆数字的简化写法，可以用于以指定增量从首数开始打印数字到尾数，即产生从某个数到另外一个数之间的所有整数，并且可以对整数的格式、步长、分隔符等进行控制
一、常规用法
seq 语法
seq [-w] [-f format] [-s string] [-t string] [first [incr]] last

【常规用法】:

seq last，指定...]]></description><category></category></item></channel></rss>