<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hatlonely的专栏]]></title><description><![CDATA[孤独的帽子]]></description><link>https://blog.csdn.net/hatlonely</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; hatlonely]]></copyright><item><title><![CDATA[java 线程池]]></title><link>https://blog.csdn.net/hatlonely/article/details/103811836</link><guid>https://blog.csdn.net/hatlonely/article/details/103811836</guid><author>hatlonely</author><pubDate>Thu, 02 Jan 2020 21:46:28 +0800</pubDate><description><![CDATA[java 线程池
Java 的 concurrent 包下提供了多种线程池的实现，使用起来非常方便
ExecutorService
ExecutorService 是线程池的抽象接口，concurrent 包提供了如下如下几个线程池的实现

Executors.newSingleThreadExecutor: 仅由一个线程组成的线程池
Executors.newFixedThreadPool(nu...]]></description><category></category></item><item><title><![CDATA[java atomic]]></title><link>https://blog.csdn.net/hatlonely/article/details/103811803</link><guid>https://blog.csdn.net/hatlonely/article/details/103811803</guid><author>hatlonely</author><pubDate>Thu, 02 Jan 2020 21:44:25 +0800</pubDate><description><![CDATA[java atomic
原子变量提供各种原子操作，多线程场景下操作不需要加锁，性能非常好
简例
AtomicInteger ai = new AtomicInteger(10);
ExecutorService es = Executors.newCachedThreadPool();

long endTime = System.currentTimeMillis() + 100;
for (i...]]></description><category></category></item><item><title><![CDATA[java io 流]]></title><link>https://blog.csdn.net/hatlonely/article/details/103798313</link><guid>https://blog.csdn.net/hatlonely/article/details/103798313</guid><author>hatlonely</author><pubDate>Thu, 02 Jan 2020 03:45:21 +0800</pubDate><description><![CDATA[java io 流
io 流总览

io 流主要提供四个接口

InputStream: 输入字节流
OutputStream: 输出字节流
Reader: 输入字符流
Writer: 输出字符流

InputStream
InputStream 输入字节流，关注字节的读取，io 包提供如下 InputStream 的实现

ByteArrayInputStream: 字节数组输入流
FileIn...]]></description><category></category></item><item><title><![CDATA[java stream]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794748</link><guid>https://blog.csdn.net/hatlonely/article/details/103794748</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 18:18:21 +0800</pubDate><description><![CDATA[java stream
stream 是 java 8 的一大亮点，专注于了集合的处理，包括抽取，过滤，转化，聚合，化简等，借助新的 lambda 表达式，极大地简化了流式处理的流程，提高了代码的可读性，同时支持并发和串行两种模式，可以很容易地写出高性能的代码
基本概念
stream 相当于一个高级版本的 iterator，iterator 只有简单的遍历功能，而 stream 在这个基础上提供了...]]></description><category></category></item><item><title><![CDATA[java 正则表达式]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794701</link><guid>https://blog.csdn.net/hatlonely/article/details/103794701</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 18:12:18 +0800</pubDate><description><![CDATA[java 正则表达式
正则表达式是一个非常强大的字符串处理工具，通过一种特殊的语法来描述一种模式，再通过模式可以完成字符串的匹配，萃取，替换等操作
简例
要判断一个字符串是否是一个邮箱，可能需要很多的判断逻辑，使用则表达式，只需要下面代码即可
Pattern pattern = Pattern.compile("^([a-z0-9._%+-]+)@([a-z0-9.-]+)\\.[a-z]{2,4...]]></description><category></category></item><item><title><![CDATA[java lambda 表达式]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794686</link><guid>https://blog.csdn.net/hatlonely/article/details/103794686</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 18:10:04 +0800</pubDate><description><![CDATA[java lambda 表达式
lambda 是 java 8 引入的新特性，lambda 能替换简单的函数和类，简化了代码，提高了代码可读性
语法
(Type1 param1, Type2 param2, ...) -&gt; {
    statement1;
    statement2;
    ...
    return statementX;
}


如果参数类型可以自动推导，可以省...]]></description><category></category></item><item><title><![CDATA[java 数学计算]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794668</link><guid>https://blog.csdn.net/hatlonely/article/details/103794668</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 18:06:22 +0800</pubDate><description><![CDATA[java 数学计算
java.lang.Math 库提供了常用的数学计算工具
常量
final double E = 2.7182818284590452354;                 // 自然对数底数
final double PI = 3.14159265358979323846;               // 圆周率
final double DEGREES_TO_RADIA...]]></description><category></category></item><item><title><![CDATA[java 字符串]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794652</link><guid>https://blog.csdn.net/hatlonely/article/details/103794652</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 18:03:38 +0800</pubDate><description><![CDATA[java 字符串
断言

startsWith(x): 前缀判断
endsWith(x): 后缀判断
contains(x): 包含判断
equalsIgnoreCase(x): 忽略大小写的判断相等

assertTrue("stay hungry, stay foolish".startsWith("stay"));
assertTrue("stay hungry, stay foolish"...]]></description><category></category></item><item><title><![CDATA[java 字典]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794606</link><guid>https://blog.csdn.net/hatlonely/article/details/103794606</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 17:58:25 +0800</pubDate><description><![CDATA[java 字典
数据结构总览

Map
Map 描述的是一种映射关系，一个 key 对应一个 value，可以添加，删除，修改和获取 key/value，util 提供了多种 Map

HashMap: hash 表实现的 map，插入删除查找性能都是 O(1)，key 没有顺序
TreeMap: 红黑树实现的 map，插入删除查找都是 O(lgn)，key 按从大到小顺序排列
Hashtable...]]></description><category></category></item><item><title><![CDATA[java 集合]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794563</link><guid>https://blog.csdn.net/hatlonely/article/details/103794563</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 17:50:55 +0800</pubDate><description><![CDATA[java 集合
数据结构总览

Collection
Collection 接口主要关注集合的添加，删除，包含

isEmpty: 判断是否没有元素
size: 获取元素个数
add: 添加元素
addAll: 添加给定集合中的所有元素，相当于并集
remove: 删除元素
removeAll: 删除给定集合中的所有元素，相当于差集
removeIf: 删除满足谓词的元素
retainAll: 保...]]></description><category></category></item><item><title><![CDATA[java 基本类型]]></title><link>https://blog.csdn.net/hatlonely/article/details/103794501</link><guid>https://blog.csdn.net/hatlonely/article/details/103794501</guid><author>hatlonely</author><pubDate>Wed, 01 Jan 2020 17:43:53 +0800</pubDate><description><![CDATA[java 基本类型
基本类型
java 基本的基本类型包括 boolean, byte, char, short, int, long, float, double
每个类型都有一个封装类，封装类继承自 Object 对象，可以用作存放在容器中，另外还提供了一些辅助函数




基本类型
封装类
内存空间
取值范围
描述




boolean
Boolean
1
true 或 false
布尔类...]]></description><category></category></item><item><title><![CDATA[表达式求值相关算法]]></title><link>https://blog.csdn.net/hatlonely/article/details/103464790</link><guid>https://blog.csdn.net/hatlonely/article/details/103464790</guid><author>hatlonely</author><pubDate>Mon, 09 Dec 2019 20:36:27 +0800</pubDate><description><![CDATA[实现对一个数学表达式的求值，例如：1+2*(3+4) 这个表达式的值为 15
这个问题主要要分为如下几个步骤:

语法分析: 将字符串表达式转化为数字和操作符的 token 数组，['1', '+', '2', '*', '(', '3', '+', '4', ')']
转逆波兰表达式: 将中缀表达式转后缀表达式，['1', '2', '3', '4', '+', '*', '+']
逆波兰表达式...]]></description><category></category></item><item><title><![CDATA[系统监控设计与实现]]></title><link>https://blog.csdn.net/hatlonely/article/details/103298428</link><guid>https://blog.csdn.net/hatlonely/article/details/103298428</guid><author>hatlonely</author><pubDate>Thu, 28 Nov 2019 18:02:03 +0800</pubDate><description><![CDATA[监控宿主机器的一些基础指标，并写入到 influxdb 用于之后的可视化以及报警服务
监控的指标包括：cpu利用率，cpu负载，内存使用，网络负载，iops，磁盘等
总体设计

主要分为两大模块，reporter，collector 和 scheduler

collector: 负责具体的某些监控指标的采集
reporter: 负责将采集到的指标写入到数据库
scheduler: 负责整个流程的...]]></description><category></category></item><item><title><![CDATA[golang 命令行参数解析 hflag]]></title><link>https://blog.csdn.net/hatlonely/article/details/103298277</link><guid>https://blog.csdn.net/hatlonely/article/details/103298277</guid><author>hatlonely</author><pubDate>Thu, 28 Nov 2019 17:56:44 +0800</pubDate><description><![CDATA[简介
hflag 是被设计用来替代标准的 flag 库，提供更强大更灵活的命令行解析功能，相比标准库，hflag 有如下特点

支持可选参数和必选参数
支持参数缩写
支持位置参数，位置参数可以出现在任意位置
支持 bool 参数简写 (-aux 和 -a -u -x 等效)
支持值参数缩写 (-p123456 和 -p 123456 等效)
更多类型的支持，支持 net.IP，time.Time，...]]></description><category></category></item><item><title><![CDATA[golang 标准命令行解析库 flag]]></title><link>https://blog.csdn.net/hatlonely/article/details/103298180</link><guid>https://blog.csdn.net/hatlonely/article/details/103298180</guid><author>hatlonely</author><pubDate>Thu, 28 Nov 2019 17:49:11 +0800</pubDate><description><![CDATA[flag 库实现了对命令行参数的解析
基本用法
package main

import (
    "fmt"
    "flag"
)

func main() {
    b := flag.Bool("b", false, "bool flag")
	s := flag.String("s", "hello golang", "string flag")
	flag.Parse()
   ...]]></description><category></category></item><item><title><![CDATA[docker consul 环境搭建]]></title><link>https://blog.csdn.net/hatlonely/article/details/103298081</link><guid>https://blog.csdn.net/hatlonely/article/details/103298081</guid><author>hatlonely</author><pubDate>Thu, 28 Nov 2019 17:44:32 +0800</pubDate><description><![CDATA[和 etcd 类似，consul 也是一个高可用的分布式 kv 系统，并且提供了比 etcd 更丰富的功能，自带 ui 界面
consul 有客服端模式（client）和服务端模式（server），在实际的部署中会在每个客户端机器上部署一个本地 client, server 的数据会同步到 client，服务直接和本地 client 交互，有效地减少了网络通信
搭建 consul 服务
versi...]]></description><category></category></item><item><title><![CDATA[docker etcd 环境搭建]]></title><link>https://blog.csdn.net/hatlonely/article/details/103283585</link><guid>https://blog.csdn.net/hatlonely/article/details/103283585</guid><author>hatlonely</author><pubDate>Thu, 28 Nov 2019 17:42:13 +0800</pubDate><description><![CDATA[etcd 是用 golang 编写，raft 协议实现的分布式高可靠的 kv 存储系统，常用来作为配置共享和服务注册发现，Kubernetes 就使用 etcd 来保存整个集群的状态
etcd 主要关注以下四点:

简单: 定义良好，面向用户的 api (使用 grpc)
安全: 可选的 tls 用户认证方式
快速: 支持每秒 10000 次的写入
可靠: raft 协议实现分布式

搭建 etc...]]></description><category></category></item><item><title><![CDATA[mysql 事务]]></title><link>https://blog.csdn.net/hatlonely/article/details/103283529</link><guid>https://blog.csdn.net/hatlonely/article/details/103283529</guid><author>hatlonely</author><pubDate>Wed, 27 Nov 2019 21:08:04 +0800</pubDate><description><![CDATA[事务 ACID 特性

原子性（Atomicity）: 事务中的所有操作，要么全部成功，要么全部失败回滚到最初状态，不会结束在中间的某个环节
一致性（Consistency）: 事务开始之前和结束之后，数据库的完整性没有被破坏，写入的数据必须完全符合所有的预设约束，触发器，级联回滚等等
隔离性（Isolation）: 数据库并发事务同时对其数据进行读写和修改，隔离性可以防止并发事务交叉执行而导致数...]]></description><category></category></item><item><title><![CDATA[c++ 实现 blocking queue]]></title><link>https://blog.csdn.net/hatlonely/article/details/103283491</link><guid>https://blog.csdn.net/hatlonely/article/details/103283491</guid><author>hatlonely</author><pubDate>Wed, 27 Nov 2019 21:05:17 +0800</pubDate><description><![CDATA[阻塞队列就是多线程线程安全的队列，在多线程场景下经常用到，c++ 标准库里面没有提供阻塞队列，boost 中有提供，生成环境下可以使用
blocking queue 实现
主要设计思路：

使用 std::vector 实现一个环形队列，使用两个指针 start 和 end 来标识起止位置，push 的时候在 end 处插入，pop 的时候直接 start 指针往后移即可
使用 std::cond...]]></description><category></category></item><item><title><![CDATA[golang 反射]]></title><link>https://blog.csdn.net/hatlonely/article/details/103283427</link><guid>https://blog.csdn.net/hatlonely/article/details/103283427</guid><author>hatlonely</author><pubDate>Wed, 27 Nov 2019 21:01:33 +0800</pubDate><description><![CDATA[反射机制是指在程序运行的时候动态地获取对象的属性后者调用对象方法的功能。golang 支持反射，原生的 json 库就是用反射机制实现。
golang 的反射有两个主要的概念: reflect.Type 和 reflect.Value 从字面上理解就是类型和值
reflect.Type
reflect.Type 指的就是一个类型，可以是基本类型 int，string，也可以是自定义的结构体类型，可...]]></description><category></category></item></channel></rss>