自定义博客皮肤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的专栏

孤独的帽子

  • 博客(73)
  • 问答 (1)
  • 收藏
  • 关注

原创 java 线程池

java 线程池Java 的 concurrent 包下提供了多种线程池的实现,使用起来非常方便ExecutorServiceExecutorService 是线程池的抽象接口,concurrent 包提供了如下如下几个线程池的实现Executors.newSingleThreadExecutor: 仅由一个线程组成的线程池Executors.newFixedThreadPool(nu...

2020-01-02 21:46:28 209

原创 java atomic

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

2020-01-02 21:44:25 258

原创 java io 流

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

2020-01-02 03:45:21 230 1

原创 java stream

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

2020-01-01 18:18:21 385

原创 java 正则表达式

java 正则表达式正则表达式是一个非常强大的字符串处理工具,通过一种特殊的语法来描述一种模式,再通过模式可以完成字符串的匹配,萃取,替换等操作简例要判断一个字符串是否是一个邮箱,可能需要很多的判断逻辑,使用则表达式,只需要下面代码即可Pattern pattern = Pattern.compile("^([a-z0-9._%+-]+)@([a-z0-9.-]+)\\.[a-z]{2,4...

2020-01-01 18:12:18 191

原创 java lambda 表达式

java lambda 表达式lambda 是 java 8 引入的新特性,lambda 能替换简单的函数和类,简化了代码,提高了代码可读性语法(Type1 param1, Type2 param2, ...) -> { statement1; statement2; ... return statementX;}如果参数类型可以自动推导,可以省...

2020-01-01 18:10:04 109

原创 java 数学计算

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

2020-01-01 18:06:22 392

原创 java 字符串

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

2020-01-01 18:03:38 99

原创 java 字典

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

2020-01-01 17:58:25 242

原创 java 集合

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

2020-01-01 17:50:55 93

原创 java 基本类型

java 基本类型基本类型java 基本的基本类型包括 boolean, byte, char, short, int, long, float, double每个类型都有一个封装类,封装类继承自 Object 对象,可以用作存放在容器中,另外还提供了一些辅助函数基本类型封装类内存空间取值范围描述booleanBoolean1true 或 false布尔类...

2020-01-01 17:43:53 111

原创 表达式求值相关算法

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

2019-12-09 20:36:27 251

原创 系统监控设计与实现

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

2019-11-28 18:02:03 477

原创 golang 命令行参数解析 hflag

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

2019-11-28 17:56:44 360

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

flag 库实现了对命令行参数的解析基本用法package mainimport ( "fmt" "flag")func main() { b := flag.Bool("b", false, "bool flag") s := flag.String("s", "hello golang", "string flag") flag.Parse() ...

2019-11-28 17:49:11 431

原创 docker consul 环境搭建

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

2019-11-28 17:44:32 204

原创 docker etcd 环境搭建

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

2019-11-28 17:42:13 1031

原创 mysql 事务

事务 ACID 特性原子性(Atomicity): 事务中的所有操作,要么全部成功,要么全部失败回滚到最初状态,不会结束在中间的某个环节一致性(Consistency): 事务开始之前和结束之后,数据库的完整性没有被破坏,写入的数据必须完全符合所有的预设约束,触发器,级联回滚等等隔离性(Isolation): 数据库并发事务同时对其数据进行读写和修改,隔离性可以防止并发事务交叉执行而导致数...

2019-11-27 21:08:04 78

原创 c++ 实现 blocking queue

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

2019-11-27 21:05:17 709

原创 golang 反射

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

2019-11-27 21:01:33 166

原创 空类的大小

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

2019-11-27 20:54:34 661

原创 docker jenkins ci/cd

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

2019-11-27 20:51:55 154

原创 golang 依赖管理之 mod

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

2019-11-27 20:47:48 587

原创 golang 网络框架之 gin

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

2019-11-27 20:44:21 284

原创 docker golang 开发环境

go 版本的不一致,依赖库不一致,导致编译失败;代码生成工具不一致,导致生成代码有问题;依赖工具缺失,导致测试不通过等等,开发环境和生产环境之间的差异会导致各种各样奇怪的问题,而 docker 特别擅长解决这种一致性问题总体方案最简单粗暴的一种方式就是每次都将代码拷贝到一个新的容器内,执行编译,编译完成后直接将容器制作成镜像,但这种方式每次编译都需要重新拉取依赖,比较耗时我们采用在这个基础上...

2019-11-27 20:34:12 382 1

原创 nginx 入门教程

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

2019-11-27 20:30:31 56

原创 golang grpc keepalive

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

2019-11-27 20:21:00 1731

原创 shell 编程基础

变量变量定义:name=Tom变量使用:echo $name自定义环境变量:export name常见环境变量:$HOME $PATH查看环境变量:env声明只读变量:readonly name特殊变量:$0 shell执行程序名$n 位置参数,n = 1...9$* 所有位置参数组成的字符串$# 位置参数的个数$$ 程序执行后的pid,常用来生产临时文件$! ...

2018-11-04 02:21:16 181

原创 admob 广告开发者报表 api

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

2018-11-04 01:12:09 2928

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

最近在为推荐服务作性能调优,这个服务的主要逻辑是用离线计算的模型数据给请求中的每个广告打分,再返回这些广告的排序结果,这里面打分的过程其实就用请求中的数据拼成各种key,去查一个大的 map,这种计算非常多,成为了主要的性能瓶颈,代码比较老,使用的是 boost::unordered_map,为了解决这个问题,找了一些第三方库和标准库对比了一下下面是在一台 aws r4.xlarge 机器上的...

2018-08-01 23:13:52 5449 1

原创 golang grpc 负载均衡

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

2018-06-24 02:40:08 2567 1

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

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

2018-06-23 23:29:58 6099

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

在微服务架构里面一个很常见的问题就是服务之间的延迟和通信失败问题,极端的情况下,甚至会因为某个服务的性能下降或者故障宕机,导致访问超时,层层传递,引发雪崩,最终导致整个系统崩溃,而限流器和熔断器(这两个组件都是客户端的)能很好的解决这个问题,提高系统的可靠性和稳定性限流器限流器,从字面上理解就是用来限制流量,有时候流量突增(可预期的比如“双11”,不可预期的微博的热门话题等),会将后端...

2018-06-21 16:06:44 1430

原创 golang 面向对象特性

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

2018-06-19 19:11:30 222

原创 aerospike 集群搭建

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

2018-06-02 19:51:12 3043

原创 cmake 的正确打开方式

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

2018-05-31 12:01:15 4715

原创 linux 日志管理服务 logrotate

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

2018-04-16 15:45:33 695

原创 logstash mysql 准实时同步到 elasticsearch

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

2018-04-14 23:17:41 8233 2

原创 elasticsearch + kibana 集群环境搭建

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

2018-04-13 00:44:39 1044

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

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

2018-04-12 18:36:47 879

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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