自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hatlonely的专栏

孤独的帽子

原创 java 线程池

java 线程池 Java 的 concurrent 包下提供了多种线程池的实现,使用起来非常方便 ExecutorService ExecutorService 是线程池的抽象接口,concurrent 包提供了如下如下几个线程池的实现 Executors.newSingleThreadExe...

2020-01-02 21:46:28

阅读数 15

评论数 0

原创 java atomic

java atomic 原子变量提供各种原子操作,多线程场景下操作不需要加锁,性能非常好 简例 AtomicInteger ai = new AtomicInteger(10); ExecutorService es = Executors.newCachedThreadPool(); long...

2020-01-02 21:44:25

阅读数 14

评论数 0

原创 java io 流

java io 流 io 流总览 io 流主要提供四个接口 InputStream: 输入字节流 OutputStream: 输出字节流 Reader: 输入字符流 Writer: 输出字符流 InputStream InputStream 输入字节流,关注字节的读取,io 包提供如下 In...

2020-01-02 03:45:21

阅读数 18

评论数 1

原创 java stream

java stream stream 是 java 8 的一大亮点,专注于了集合的处理,包括抽取,过滤,转化,聚合,化简等,借助新的 lambda 表达式,极大地简化了流式处理的流程,提高了代码的可读性,同时支持并发和串行两种模式,可以很容易地写出高性能的代码 基本概念 stream 相当于一个高...

2020-01-01 18:18:21

阅读数 157

评论数 0

原创 java 正则表达式

java 正则表达式 正则表达式是一个非常强大的字符串处理工具,通过一种特殊的语法来描述一种模式,再通过模式可以完成字符串的匹配,萃取,替换等操作 简例 要判断一个字符串是否是一个邮箱,可能需要很多的判断逻辑,使用则表达式,只需要下面代码即可 Pattern pattern = Pattern.c...

2020-01-01 18:12:18

阅读数 17

评论数 0

原创 java lambda 表达式

java lambda 表达式 lambda 是 java 8 引入的新特性,lambda 能替换简单的函数和类,简化了代码,提高了代码可读性 语法 (Type1 param1, Type2 param2, ...) -> { statement1; statement2; ...

2020-01-01 18:10:04

阅读数 7

评论数 0

原创 java 数学计算

java 数学计算 java.lang.Math 库提供了常用的数学计算工具 常量 final double E = 2.7182818284590452354; // 自然对数底数 final double PI = 3.14159265358979323846;...

2020-01-01 18:06:22

阅读数 26

评论数 0

原创 java 字符串

java 字符串 断言 startsWith(x): 前缀判断 endsWith(x): 后缀判断 contains(x): 包含判断 equalsIgnoreCase(x): 忽略大小写的判断相等 assertTrue("stay hungry, stay foolish"...

2020-01-01 18:03:38

阅读数 9

评论数 0

原创 java 字典

java 字典 数据结构总览 Map Map 描述的是一种映射关系,一个 key 对应一个 value,可以添加,删除,修改和获取 key/value,util 提供了多种 Map HashMap: hash 表实现的 map,插入删除查找性能都是 O(1),key 没有顺序 TreeMap:...

2020-01-01 17:58:25

阅读数 19

评论数 0

原创 java 集合

java 集合 数据结构总览 Collection Collection 接口主要关注集合的添加,删除,包含 isEmpty: 判断是否没有元素 size: 获取元素个数 add: 添加元素 addAll: 添加给定集合中的所有元素,相当于并集 remove: 删除元素 removeAll: ...

2020-01-01 17:50:55

阅读数 11

评论数 0

原创 java 基本类型

java 基本类型 基本类型 java 基本的基本类型包括 boolean, byte, char, short, int, long, float, double 每个类型都有一个封装类,封装类继承自 Object 对象,可以用作存放在容器中,另外还提供了一些辅助函数 基本类型 封装类 ...

2020-01-01 17:43:53

阅读数 9

评论数 0

原创 表达式求值相关算法

实现对一个数学表达式的求值,例如:1+2*(3+4) 这个表达式的值为 15 这个问题主要要分为如下几个步骤: 语法分析: 将字符串表达式转化为数字和操作符的 token 数组,['1', '+', '2', '*'...

2019-12-09 20:36:27

阅读数 13

评论数 0

原创 系统监控设计与实现

监控宿主机器的一些基础指标,并写入到 influxdb 用于之后的可视化以及报警服务 监控的指标包括:cpu利用率,cpu负载,内存使用,网络负载,iops,磁盘等 总体设计 主要分为两大模块,reporter,collector 和 scheduler collector: 负责具体的某些监...

2019-11-28 18:02:03

阅读数 16

评论数 0

原创 golang 命令行参数解析 hflag

简介 hflag 是被设计用来替代标准的 flag 库,提供更强大更灵活的命令行解析功能,相比标准库,hflag 有如下特点 支持可选参数和必选参数 支持参数缩写 支持位置参数,位置参数可以出现在任意位置 支持 bool 参数简写 (-aux 和 -a -u -x 等效) 支持值参数缩写 (-p...

2019-11-28 17:56:44

阅读数 11

评论数 0

原创 golang 标准命令行解析库 flag

flag 库实现了对命令行参数的解析 基本用法 package main import ( "fmt" "flag" ) func main() { b := flag.Bool("b", false, &qu...

2019-11-28 17:49:11

阅读数 12

评论数 0

原创 docker consul 环境搭建

和 etcd 类似,consul 也是一个高可用的分布式 kv 系统,并且提供了比 etcd 更丰富的功能,自带 ui 界面 consul 有客服端模式(client)和服务端模式(server),在实际的部署中会在每个客户端机器上部署一个本地 client, server 的数据会同步到 cli...

2019-11-28 17:44:32

阅读数 12

评论数 0

原创 docker etcd 环境搭建

etcd 是用 golang 编写,raft 协议实现的分布式高可靠的 kv 存储系统,常用来作为配置共享和服务注册发现,Kubernetes 就使用 etcd 来保存整个集群的状态 etcd 主要关注以下四点: 简单: 定义良好,面向用户的 api (使用 grpc) 安全: 可选的 tls ...

2019-11-28 17:42:13

阅读数 27

评论数 0

原创 mysql 事务

事务 ACID 特性 原子性(Atomicity): 事务中的所有操作,要么全部成功,要么全部失败回滚到最初状态,不会结束在中间的某个环节 一致性(Consistency): 事务开始之前和结束之后,数据库的完整性没有被破坏,写入的数据必须完全符合所有的预设约束,触发器,级联回滚等等 隔离性(I...

2019-11-27 21:08:04

阅读数 10

评论数 0

原创 c++ 实现 blocking queue

阻塞队列就是多线程线程安全的队列,在多线程场景下经常用到,c++ 标准库里面没有提供阻塞队列,boost 中有提供,生成环境下可以使用 blocking queue 实现 主要设计思路: 使用 std::vector 实现一个环形队列,使用两个指针 start 和 end 来标识起止位置,pus...

2019-11-27 21:05:17

阅读数 8

评论数 0

原创 golang 反射

反射机制是指在程序运行的时候动态地获取对象的属性后者调用对象方法的功能。golang 支持反射,原生的 json 库就是用反射机制实现。 golang 的反射有两个主要的概念: reflect.Type 和 reflect.Value 从字面上理解就是类型和值 reflect.Type refle...

2019-11-27 21:01:33

阅读数 7

评论数 0

原创 空类的大小

空类就是没有任何数据成员的类,这种类占用的内存大小在不同的语言里面有不同的实现 c struct A {}; printf("sizeof(A): %lu\n", sizeof(struct A)); // sizeof(A): 0 这个结果输出是0,也就是说 c 语言中的...

2019-11-27 20:54:34

阅读数 11

评论数 0

原创 docker jenkins ci/cd

Jenkins 是一个很老的 ci/cd 服务了,但是至今并未过时,几乎是各种公司的首选,足见其功能强大 最近用 docker 搭建了一个 Jenkins 服务,实现了代码提交后自动触发测试和部署,再也不用手动发布了,节省了大量的时间 制作 docker 镜像 FROM jenkins/jenki...

2019-11-27 20:51:55

阅读数 15

评论数 0

原创 golang 依赖管理之 mod

go 很早就考虑了依赖管理的问题,内置 go get 命令,可以直接获取对应的依赖,非常方便,但是有一个巨大的缺陷,没有版本的维护和管理,而版本不一致可能会导致各种兼容性问题,因此出现了很多第三方依赖管理工具,dep 和 glide 就是其中的佼佼者,到了 go 1.11 官方终于推出了自己的依赖...

2019-11-27 20:47:48

阅读数 17

评论数 0

原创 golang 网络框架之 gin

golang 原生 http 库已经可以很方便地实现一个 http server 了,但对于复杂的 web 服务来说,路由解析,请求参数解析,对象返回等等,原生 api 就显得有些不太够用了,而 gin 是一个功能完备,性能很高的 web 网络框架,特别适合 web api 的开发 hello w...

2019-11-27 20:44:21

阅读数 17

评论数 0

原创 docker golang 开发环境

go 版本的不一致,依赖库不一致,导致编译失败;代码生成工具不一致,导致生成代码有问题;依赖工具缺失,导致测试不通过等等,开发环境和生产环境之间的差异会导致各种各样奇怪的问题,而 docker 特别擅长解决这种一致性问题 总体方案 最简单粗暴的一种方式就是每次都将代码拷贝到一个新的容器内,执行编译...

2019-11-27 20:34:12

阅读数 11

评论数 0

原创 nginx 入门教程

nginx 是一个开源的高性能 web 服务器(可能是性能最好的),使用非常广泛,既可以用来部署静态资源,也可以用来作为反向代理,甚至可以作为负载均衡服务器。 安装和启动 # 安装 yum install nginx # 启动 service start nginx # 重新加载配置 ngin...

2019-11-27 20:30:31

阅读数 9

评论数 0

原创 golang grpc keepalive

最近遇到 grpc 客户端报错 rpc error: code = Unavailable desc = transport is closing,原因是连接长时间没有使用,被服务端断开,这种情况通过简单粗暴的重试策略可以解决,更加优雅的解决方案是增加保持连接策略 服务端 var kaep = k...

2019-11-27 20:21:00

阅读数 42

评论数 0

原创 shell 编程基础

变量 变量定义:name=Tom 变量使用:echo $name 自定义环境变量:export name 常见环境变量:$HOME $PATH 查看环境变量:env 声明只读变量:readonly name 特殊变量: $0 shell执行程序名 $n 位置参数,n = 1...9 $* 所...

2018-11-04 02:21:16

阅读数 107

评论数 0

原创 admob 广告开发者报表 api

广告是移动应用非常好的变现模式,作为开发者经常会接很多家的广告平台,每个广告平台都有自己的报表系统,就会有一个各个平台数据汇总分析的需求,首先第一步就需要从各个广告平台获取数据,除了在web页面提供基本的数据导出功能,基本上各个平台都会提供 api 来方便数据拉取的自动化。 admob 是 goo...

2018-11-04 01:12:09

阅读数 920

评论数 0

原创 c++ map 查找性能测试

最近在为推荐服务作性能调优,这个服务的主要逻辑是用离线计算的模型数据给请求中的每个广告打分,再返回这些广告的排序结果,这里面打分的过程其实就用请求中的数据拼成各种key,去查一个大的 map,这种计算非常多,成为了主要的性能瓶颈,代码比较老,使用的是 boost::unordered_map,为了...

2018-08-01 23:13:52

阅读数 1884

评论数 1

原创 golang grpc 负载均衡

微服务架构里面,每个服务都会有很多节点,如果流量分配不均匀,会造成资源的浪费,甚至将一些机器压垮,这个时候就需要负载均衡,最简单的一种策略就是轮询,顺序依次选择不同的节点访问 grpc 在客户端提供了负载均衡的实现,并提供了服务地址解析和更新的接口(默认提供了 DNS 域名解析的支持),方便不同...

2018-06-24 02:40:08

阅读数 1446

评论数 1

原创 golang consul-grpc 服务注册与发现

在微服务架构里面,每个小服务都是由很多节点组成,节点的添加删除故障希望能对下游透明,因此有必要引入一种服务的自动注册和发现机制,而 consul 提供了完整的解决方案,并且内置了对 GRPC 以及 HTTP 服务的支持 总体架构 服务调用: client 直连 server 调用服务...

2018-06-23 23:29:58

阅读数 3489

评论数 0

原创 微服务组件之限流器与熔断器

在微服务架构里面一个很常见的问题就是服务之间的延迟和通信失败问题,极端的情况下,甚至会因为某个服务的性能下降或者故障宕机,导致访问超时,层层传递,引发雪崩,最终导致整个系统崩溃,而限流器和熔断器(这两个组件都是客户端的)能很好的解决这个问题,提高系统的可靠性和稳定性 限流器 限流器,从字面...

2018-06-21 16:06:44

阅读数 737

评论数 0

原创 golang 面向对象特性

和其他高级语言一样,golang 也支持面向对象编程,支持得比较简单,有些特性并不支持,但是够用了 接口 接口使用 interface 关键字声明,任何实现接口定义方法的类都可以实例化该接口,接口和实现类之间没有任何依赖,你可以实现一个新的类当做 Sayer 来使用,而不需要依赖 Saye...

2018-06-19 19:11:30

阅读数 133

评论数 0

原创 aerospike 集群搭建

aerospike 是一个分布式的 kv 存储服务,与 redis,memcached 等相比,最大的特点是支持内存和磁盘的混合存储,并且对 ssd 的支 持非常好,将索引存在内存中,数据存在 ssd 中,保持极高性能的同时,能有效的节约成本 单机安装 安装 wget -O aer...

2018-06-02 19:51:12

阅读数 1632

评论数 0

原创 cmake 的正确打开方式

用了那么多年 c++,今天才搞明白 cmake 该怎么用…… cmake 是一个跨平台的 c++ 构建工具,与 makefile 类似,但是 makefile 更关注依赖,cmake 更关注构建本身,所以语法上要比makefile 要简洁清晰一些,而最近发现 cmake 原来还自带了依赖管理的功...

2018-05-31 12:01:15

阅读数 747

评论数 0

原创 linux 日志管理服务 logrotate

logrotate 是操作系统用来管理日志的工具,支持日志的切割、压缩、清理以及邮件报警等,通过 crontab 服务定时运行,也可以用这个工具来管理我们自己的服务日志,只需要简单配置下配置文件即可 logrotate 配置 helloworld.conf,多份日志可以直接写在一个配置文件...

2018-04-16 15:45:33

阅读数 445

评论数 0

原创 logstash mysql 准实时同步到 elasticsearch

mysql 作为成熟稳定的数据持久化解决方案,广泛地应用在各种领域,但是在数据分析方面稍有不足,而 elasticsearch 作为数据分析领域的佼佼者,刚好可以弥补这项不足,而我们要做的只需要将 mysql 中的数据同步到 elasticsearch 中即可,而 logstash 刚好就可以支持...

2018-04-14 23:17:41

阅读数 5881

评论数 2

原创 elasticsearch + kibana 集群环境搭建

mysql 作为成熟稳定的数据持久化解决方案,广泛地应用在各种领域,但是在数据分析方面稍有不足,而 elasticsearch 作为数据分析领域的佼佼者,刚好可以弥补这项不足,而我们要做的只需要将 mysql 中的数据同步到 elasticsearch 中即可,而 logstash 刚好就可以支持...

2018-04-13 00:44:39

阅读数 816

评论数 0

原创 golang 性能优化之累加哈希

很多时候性能问题总是发生在一些不起眼的地方。最近做一个性能问题分析的时候发现,一个函数里面使用由于字符串拼接产生的临时字符串导致内存上涨了40%(120G 内存的机器),而这些临时字符串给 GC 也带来了非常大的负担,成为主要的性能瓶颈,而这些字符串作为 map 的 key,又必须要拼接,所以想到...

2018-04-12 18:36:47

阅读数 537

评论数 0

提示
确定要删除当前文章?
取消 删除