自定义博客皮肤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)
  • 收藏
  • 关注

原创 golang 性能优化之 bitset 代替 hashset

hashset 是一种非常高效的数据结构,插入和查询的复杂度都是 O(1),基本上能满足大部分场景的性能需求,但在一些特殊的场景下,频次非常高的调用依然会成为性能瓶颈(用 pprof 分析),比如广告里面的定向逻辑,在一次请求中过滤逻辑可能会执行上千次,而其中有些过滤刚好都是一些枚举值,比如性别定向,年龄定向等等,对于这种可以用枚举表示的值可以用 bitset 优化,能有20多倍的性能提升bi...

2018-04-12 16:44:49 485

原创 golang 构建工具之 Makefile

可能是因为编译太简单了,golang 并没有一个官方的构建工具(类似于 java 的 maven 和 gradle之类的),但是除了编译,我们可能还需要下载依赖,运行测试,甚至像 easyjson,protobuf,thrift 这样的工具下载和代码生成,如果没有构建工具,这些工作就会非常麻烦为了解决这个问题,之前写过一个 everything.sh 的脚本,把所有的操作都封装在这个脚本里面,...

2018-04-12 00:37:13 1919 1

原创 java json 库之 jackson

jackson 是一个 java json 库,提供了完备的 json 解析,序列化以及反序列化功能依赖配置在 build.gradle 里面添加依赖配置compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.4'compile group: 'com.fasterxml...

2018-03-18 17:54:29 454

原创 java 多线程

java 的多线程有好几种,可以继承 Thread,也可以实现 Runnable 接口,还可以实现 Callable 接口Threadclass MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; }...

2018-03-18 01:51:42 139

原创 golang slice 和 string 重用

相比于 c/c++,golang 的一个很大的改进就是引入了 gc 机制,不再需要用户自己管理内存,大大减少了程序由于内存泄露而引入的 bug,但是同时 gc 也带来了额外的性能开销,有时甚至会因为使用不当,导致 gc 成为性能瓶颈,所以 golang 程序设计的时候,应特别注意对象的重用,以减少 gc 的压力。而 slice 和 string 是 golang 的基本类型,了解这些基本类型的内部...

2018-03-17 17:16:39 2957

原创 golang 字节对齐

最近在做一些性能优化的工作,其中有个结构体占用的空间比较大,而且在内存中的数量又特别多,就在想有没有优化的空间,想起了 c 语言里面的字节对齐,通过简单地调整一下字段的顺序,就能省出不少内存,这个思路在 golang 里面同样适用基本数据大小在这之前先来看下 golang 里面基本的类型所占数据的大小So(unsafe.Sizeof(true), ShouldEqual, 1)...

2018-03-17 01:49:18 2120

原创 golang 并发编程之生产者消费者

golang 最吸引人的地方可能就是并发了,无论代码的编写上,还是性能上面,golang 都有绝对的优势学习一个语言的并发特性,我喜欢实现一个生产者消费者模型,这个模型非常经典,适用于很多的并发场景,下面我通过这个模型,来简单介绍一下 golang 的并发编程go 并发语法协程 go协程是 golang 并发的最小单元,类似于其他语言的线程,只不过线程的实现借助了操作系统的...

2018-03-11 19:26:21 2518

原创 golang 设计模式之选项模式

有时候一个函数会有很多参数,为了方便函数的使用,我们会给希望给一些参数设定默认值,调用时只需要传与默认值不同的参数即可,类似于 python 里面的默认参数和字典参数,虽然 golang 里面既没有默认参数也没有字典参数,但是我们有选项模式可变长参数列表在这之前,首先需要介绍一下可变长参数列表,顾名思义,就是参数的个数不固定,可以是一个也可以是多个,最典型的用法就是标准库里面的 fmt...

2018-03-11 13:06:02 838

原创 golang aws-sdk-go 之 s3 服务

s3 是 aws 提供的分布式文件服务,价格比较优惠,经常被用来作为日志的持久化存储,大数据处理结果的输入输出等s3 服务提供命令行工具,可以很方便地上传、下载、删除文件,普通 golang 程序如果需要访问 s3 上文件,一种简单方式可以先将 s3 上文件下载到本地,然后直接访问本地文件即可,但是这种方式需要一个额外的步骤,下载到本地,有额外的运维成本,需要额外的磁盘空间,使用上面不是很灵活...

2018-03-04 19:55:45 8868

原创 markdown 一个优雅的写作工具

说到写作工具,不得不提的就是 word 了吧,现在有哪个公司能不用这个软件吗?作为最流行的写作软件,word 确实有很多优点,操作比较直观,所见即所得等等,但是大家也一定遇到过样式调整起来比较繁琐的问题,不同的内容可能需要频繁地调整字体、大小、行距等等,而且还很容易出现不一致,整体都显得很不协调,当然你是 word 的高级用户的话,可能知道有模板这个东西,帮你定义了统一的样式,但是首先你要成为一个...

2018-02-22 00:04:01 1339

原创 Mac 必备工具之 brew

brew 是 Mac 下的一个包管理工具,类似于 centos 下的 yum,可以很方便地进行安装/卸载/更新各种软件包,例如:nodejs, elasticsearch, kibana, mysql, mongodb 等等,可以用来快速搭建各种本地环境,程序员必备工具安装 brew首先要通过如下命令安装 brew/usr/bin/ruby -e "$(curl -fsSL h...

2018-02-21 23:58:35 73841 2

原创 golang restful 框架之 go-swagger

restful 是这些年的高频词汇了,各大互联网公司也都纷纷推出了自己的 restful api,其实 restful 和 thrift,grpc 类似,就是一种协议,但是这种协议有点特殊的就是使用 http 接口,返回的对象一般是 json 格式,这样有个好处,就是可以供前端的 js 直接调用,使用非常方便,但 http 本身并不是一个高效的协议,后端的内部通信还是使用 grpc 或者 thri...

2018-02-09 02:50:07 7120

原创 golang orm 框架之 gorm

最近在想给这个小站增加点赞和评论功能,第三方系统又有各种限制,就想自己弄个后端,实现类似的功能,对于个人来说,数据量不是很大,单机的 mysql 足够存下所有数据,mysql 作为底层存储是个不错的选择之前在公司是直接用的 github.com/go-sql-driver/mysql 访问数据库都是直接用写 sql,取出结果然后自己拼成对象,使用上面不是很方便,可读性也不好。想起之前研究 ph...

2018-02-08 16:31:44 8116

原创 几种实用的 pythonic 语法

python 是一门简单而优雅的语言,可能是过于简单了,不用花太多时间学习就能使用,其实 python 里面还有一些很好的特性,能大大简化你代码的逻辑,提高代码的可读性关于 pythonic,你可以在终端打开 python,然后输入 import this,看看输出什么,这就是 Tim Peters 的 《The Zen of Python》,这首充满诗意的诗篇里概况了 python 的设计哲

2018-02-04 22:30:30 226

原创 golang 网络框架之 thrift

thrift 最初是 facebook 开发使用的 rpc 通信框架,后来贡献给了 apache 基金会,出来得比较早,几乎支持所有的后端语言,使用非常广泛,是不可不知的一个网络框架和 grpc 一样,需要先定义通信协议,然后实现自己业务逻辑,下面还是通过一个简单示例(之前的echo程序)说明 thrift 的用法,下面示例使用的完整代码在下列地址: 实现文件:https://github.

2018-02-04 16:44:12 1996

原创 golang 网络框架之 grpc

grpc 是 google 开源的一款网络框架,具有极好的性能,可能是目前性能最好的网络框架,支持流式 rpc,可以很方便地构建消息订阅发布系统,支持几乎所有主流的语言,使用上面也很简单,公司很多服务基于 grpc 框架构建,运行非常稳定开始之前首先你要知道网络框架为你做了哪些事情: 网络协议序列化与反序列化 网络底层通信 并发管理 以及需要你做哪些事情:

2018-02-03 21:56:05 796

原创 golang 单元测试

单元测试是质量保证十分重要的一环,好的单元测试不仅能及时地发现问题,更能够方便地调试,提高生产效率,所以很多人认为写单元测试是需要额外的时间,会降低生产效率,是对单元测试最大的偏见和误解go 语言原生支持了单元测试,使用上非常简单,测试代码只需要放到以 _test.go 结尾的文件中即可。golang的测试分为单元测试和性能测试,单元测试的测试用例以 Test 开头,性能测试以 Benchma

2018-01-31 22:31:04 2311

原创 golang pprof 性能分析工具

性能优化是个永恒的话题,而很多时候我们在作性能优化的时候,往往基于代码上面的直觉,把所有能想到的优化都优化了一遍,不错过任何小的优化点,结果整个代码的逻辑变得极其复杂,而性能上面并没有太大的提升。事实上,性能问题往往集中在某些小点,有时候很小的改动就能有巨大的提升,所以问题的关键是是怎么去找出这些优化点,幸运的是 golang 在设计的时候就考虑了这个问题,原生提供了性能分析的工具,可以很方便地帮

2018-01-30 22:45:29 596

原创 golang json 性能分析

Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go 语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖 json 解析的应用里,往往会成为性能瓶颈,好在已有很多第三方库帮我们解决了这个问题,但是这么多库,对于像我这种有选择困难症的人来说,到底要怎么选择呢,下面就给大家来一一分析一下ffjson

2018-01-28 16:41:57 3160

原创 golang 依赖管理

依赖管理是一个语言非常重要的特性,很大程度上决定着一个语言的流行程度,流行的语言大多都有非常成熟的依赖管理工具,java 的 maven 和 gradle,javascript 的 npm,python 的 pip,这些工具极大地降低了我们使用第三方库的成本,提高了生产效率,而 c++ 比较奇葩,并没有这样统一的依赖管理工具,大公司好一点,有专门的团队去做这样的工具解决依赖的问题,小公司就只能自己

2018-01-27 18:13:05 861

原创 蓄水池算法

最近有个需求,需要从不固定大小的数据集中取固定数量的数据作为样本,有个同学提到了蓄水池算法,于是了解了一下。蓄水池算法,本身是为了解决海量数据的随机抽样问题,在算法领域应用还是挺广泛的,由于数据本身是有权重,又出现了加权蓄水池算法。蓄水池算法问题描述: 给定一个不固定长度的数据集合 sequence,从中等概率地抽取 k 个元素作为样本返回问题思路: 先把样本填满,然后不断往样本里

2018-01-26 22:24:07 389

原创 golang 几种字符串的连接方式

最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现。实现方法1. 直接使用运算符func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i :=...

2018-01-24 22:20:14 8810

原创 golang开发目录结构

在实际的项目中发现大家的目录结构都比较凌乱,基本每个人都有每个人的风格,一个项目在不断地变大,一些新的文件或目录又不断地被添加进来,从这里面去找到自己需要的信息的成本越来越高,一个统一的通用的目录结构非常有必要。以下内容来自于github上的这个项目(https://github.com/golang-standards/project-layout)/cmdmain函数文件(比如

2018-01-22 22:58:20 548

原创 golang slice性能分析

golang在gc这块的做得比较弱,频繁地申请和释放内存会消耗很多的资源。另外slice使用数组实现,有一个容量和长度的问题,当slice的容量用完再继续添加元素时需要扩容,而这个扩容会把申请新的空间,把老的内容复制到新的空间,这是一个非常耗时的操作。有两种方式可以减少这个问题带来的性能开销:在slice初始化的时候设置capacity(但更多的时候我们可能并不知道capacity的大小)

2018-01-22 22:56:53 1100

原创 与vim的一段往事

这就要从大学里面学c语言说起了,那个时候我们还在用古老的 visual c++ 6.0(满满的回忆有木有……),不过我唯一的印象只剩下了,嗯,这个东西真的很丑很难用,不过还好,不久就有了 visual studio 2010,好看是好看了,但是好像卡得不行,也不知道是 windows 的锅呢,还是 vs 的锅呢,还是我电脑配置太低,anyway,这些都不太重要,反正那个时候对 IDE 没有什么好感

2018-01-22 22:54:18 146

原创 谈谈注释

大家肯定都有写过注释,注释这个东西不同于代码,与程序逻辑的正确性没有直接的关系,所以每个人可能都有自己的风格,每个人对哪里应该写注释,注释应该写成什么样子可能都有自己的理解。我个人对注释的理解经历了四个阶段。第一个阶段,完全不写注释,这个阶段还处在代码逻辑的实现上面,花大量的时间去调试,修改代码,根本就无暇顾及到注释这个事情。过了一段时间后,发现之前写的又臭又长的代码完全看不明白了,才意识

2018-01-22 22:52:10 154

原创 第一次写JD

有个同学(同事+同学+室友+基友)要离职了(离职的原因,因为爱情,让我们一起祝福他们吧),缺一个人,老大说,你要找个什么样的人,你自己来写JD吧。JD(job description)翻译过来工作岗位描述,先来看下我写的JD吧。 职位诱惑 双倍于BAT的成长速度 职位职责 后端工程架构的设计与实现

2018-01-22 22:47:48 413 1

原创 《microservice & serverless》by蔡超的一点感想

超哥是来自Amazon的顶级的架构师,经历了Amazon整个向微服务架构迁移的过程,以及向serverless的演化过程,有着极其丰富的经验,年过40,一直站在技术的最前沿,始终保持对技术的执着追求和热情,是名副其实的技术大牛,能与之一起工作,荣幸之至!今天超哥给我们分享的主题《microservice & serverless》,是超哥实际工作经验的一些分享,也为公司架构的演化提供了新的思路和指

2018-01-22 22:41:36 520

转载 __attribute__机制介绍

__attribute__机制介绍分类: C/C++/C#2011-06-24 23:10 15356人阅读 评论(9) 收藏 举报profiling编译器structfunctiondeprecated1. __attribute__GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function

2013-12-17 14:18:22 499

转载 作为一个合格程序员每天该做的事

作为一个合格程序员每天该做的事1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错

2013-11-19 11:25:41 637

原创 C++编程风格

头文件    1.用#define防止头文件被包含多次        #ifndef _MY_HEADER_        #define _MY_HEADER_        ...        #endif缩进风格    1.大括号独占一行,永远不省略大括号        int func(void)        {            ...

2013-03-27 20:50:12 450

原创 C标准库

C标准库/** * @file ctype_note.c * @brief ctye.h笔记 * @author hatlonely * @e-mail hatlonely@foxmail.com * @date 2013-01-07 *//*****************************************************

2013-03-27 20:33:32 1120 1

原创 VIM总结

<!--@font-face {font-family:宋体}@font-face {font-family:"Cambria Math"}@font-face {font-family:Cambria}@font-face {font-family:Calibri}@font-face {font-family:Consolas}@font-face

2013-03-20 16:25:15 1445 3

空空如也

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

TA关注的人

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