- 博客(363)
- 资源 (2)
- 收藏
- 关注
原创 提效IntelliJ IDEA插件
在工作过程中我发现对于这么重要的软件,有些开发同学竟然把它“打扮”的甚是简陋,能实现高级功能的插件,没有!感觉以后只需要定义好类、定义好方法,写好方法的注释,Aone Copilot就能自动给我写代码了。Material Theme UI可以将原始外观更改为Material Design的外观,预设了多种精美的配色方案,同时还开放了很多自定义的配置,可以让开发者按照想要的方式调整IDE。有些资深程序员还在用着各种老版本的IDEA,改升级啦,拥抱新版本IDEA,新UI更好看,更舒服。懂得都懂,超级好用。
2024-01-25 20:37:45
753
1
原创 JVM问题分析处理手册
各位开发和运维同学,在项目实施落地的过程中,尤其是使用EDAS、DRDS、MQ这些java中间件时,肯定会遇到不少JAVA程序运行和JVM的问题。我结合过去遇到的各种各样的问题和实际处理经验,总结了JAVA问题的处理方式,希望能帮助到大家。
2024-01-20 22:35:26
1090
转载 我们如何使用Go打造了Uber QPS最高的服务
原文:How We Built Uber Engineering’s Highest Query per Second Service Using Go译者:孙薇2015年初,我们建立了一个微服务来负责这项任务:地理围栏查找(geofence lookups),结果完成很出色。如今已过一年,这项技术在Uber数以百计的生产应用中脱颖而出,成为了每秒查询量最高(QPS)的服务。本文讲述了我们建立这个服务的原因,还有近来Go语言对构建和扩展该服务速度的贡献。背景在Uber,地理围栏指的是地面
2022-03-19 22:26:24
303
转载 c lib rdkafka接口说明
一、主要数据结构1、typedef struct rd_kafka_conf_s rd_kafka_conf_t;rd_kafka_conf_t是kafka的全局配置结构,通过rd_kafka_conf_new()创建,创建时即进行了默认配置,通过rd_kafka_conf_set()设置参数值,是rd_kafka_new()创建kafka处理句柄的第二个参数,是必须创建的结构。2、typedef struct rd_kafka_topic_conf_s rd_kafka_topic_conf_
2020-10-31 17:08:59
1300
原创 c++ lambda 使用
bool KafkaResourceManager::Register(std::string name, std::function<std::shared_ptr<rubik::KafkaResource>()> callback) { std::shared_ptr<rubik::KafkaResource> resource = callback(); if (resource) { return false; } kafka_resou.
2020-10-25 17:01:47
274
原创 C++11 懒汉式单例模式
Meyers' SingletonMeyer's的单例, 是著名的写出《Effective C++》系列书籍的作者 Meyers 提出的。所用到的特性是在C++11标准中的Magic Static特性。在C++11中是线程安全的,注意在C++11以前是非线程安全。If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall w
2020-08-05 20:48:55
638
原创 容错运行报错:iptables: No chain/target/match by that name
产生原因:docker服务启动时定义的自定义链DOCKER由于某种原因被清掉重启docker服务及可重新生成自定义链DOCKER 解决方法:iptables -t filter -Fiptables -t filter -Xsystemctl restart docker...
2019-02-15 19:11:59
3705
1
转载 presto、druid、sparkSQL、kylin的对比
这几个框架都是OLAP大数据分析比较常见的框架,各自特点如下: presto:facebook开源的一个java写的分布式数据查询框架,原生集成了Hive、Hbase和关系型数据库,Presto背后所使用的执行模式与Hive有根本的不同,它没有使用MapReduce,大部分场景下比hive快一个数量级,其中的关键是所有的处理都在内存中完成。 Druid:是一个实时处理时序数据的Olap数据库,...
2018-12-30 16:07:16
4220
转载 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
概述前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架。下面就简单介绍一下RPC框架技术选型的过程。RPC简述该系列文章将讲述以下RPC框架的helloword实例以及其实现原理简述,由于每一种RPC框架的原理实现不同且都比较复杂,如果想深入研究还请自行到官网或者其他技术博客学习。R...
2018-12-20 18:28:24
336
原创 Golang GCC分段栈技术
gcc中的splitstack技术原理http://gcc.gnu.org/wiki/SplitStacks分段栈的重要意义就在于,栈空间初始分配很小的大小,然后可以随便需要自动地增长栈空间.这样在多线程环境中就可以开千千万万个线程或协程而不至于耗尽内存.基本实现%gs寄存器存一个tcb结构的地址,go语言中是G这个结构体.这个结构中存了栈基址和stack_guard对于使用分...
2018-11-27 19:13:52
824
转载 How we redesigned the NSQ - NSQ重塑之详细设计
之前的 文章 讲述了我们重塑NSQ的目的和目标, 接下来我们将详细描述下每个功能的具体技术细节.重构后架构图首先, 看一下重构后的整体架构图:原来的几个NSQ组件大部分功能是复用的, 图中新增的就是元数据存储服务-etcd, 以及数据同步和HA处理逻辑.改造topic queue为了增加副本和其他特性, 首先需要改造的就是nsq的topic数据写入方式, 要保证数据最终...
2018-09-20 19:08:44
343
转载 golang RWMutex读写锁分析
RWMutex:是基于Mutex实现的读写互斥锁,一个goroutine可以持有多个读锁或者一个写锁,同一时刻只能持有读锁或者写锁数据结构设计: type RWMutex struct { w Mutex // 互斥锁 writerSem uint32 // 写锁信号量 readerSem uint32 // 读锁信号量 ...
2018-09-17 21:02:39
728
原创 golang的facebookgo grace优雅重启原理分析
从原理上来说是这样一个过程: 1)发布新的bin文件去覆盖老的bin文件 2)发送一个信号量,告诉正在运行的进程,进行重启 3)正在运行的进程收到信号后,会以子进程的方式启动新的bin文件 4)新进程接受新请求,并处理 5)老进程不再接受请求,但是要等正在处理的请求处理完成,所有在处理的请求处理完之后,便自动退出 6)新进程在老进程退出之后,由i...
2018-09-11 17:56:17
3774
原创 Golang捕获panic堆栈信息
func PanicTrace(kb int) []byte { s := []byte("/src/runtime/panic.go") e := []byte("\ngoroutine ") line := []byte("\n") stack := make([]byte, kb<<10) //4KB length := runtime....
2018-09-03 19:23:53
2811
原创 搭建以太坊私有网络,安装geth报错
安装geth报错build/env.sh go run build/ci.go install ./cmd/geth>>> /usr/lib/go-1.10/bin/go install -ldflags -X main.gitCommit=4e7dc34ff1a7469b95eb16f5b4084c26a0ab3662 -v ./cmd/gethgithub.com/e...
2018-08-19 15:35:30
3930
7
原创 go语言 调优工具 pprof
CPU ProfilingGolang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数据可以被 pprof 工具(或者 go tool pprof,其为 pprof 的变种)使用。通常我们这样来使用 pprof 包:// 定义 flag cpuprofilevar cpuprofile = flag.String("cpuprof...
2018-08-16 19:16:46
961
原创 Go语言 log日志包
Golang's log模块主要提供了3类接口。分别是 “Print 、Panic 、Fatal ”,对每一类接口其提供了3中调用方式,分别是 "Xxxx 、 Xxxxln 、Xxxxf",基本和fmt中的相关函数类似,下面是一个Print的示例:package mainimport ( "log")func main(){ arr := []int {2,3} ...
2018-08-16 18:48:37
1380
原创 golang for select 循环跳出
执行以下代码,发现无法跳出for循环:func SelectTest() { i := 0 for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5 { fmt.Println("跳出for循环") } } fmt.Println("for...
2018-08-14 21:10:30
16868
原创 go net/http Client使用——长连接客户端的使用
go net/http Client使用总结Client数据结构// A Client is an HTTP client. Its zero value (DefaultClient) is a// usable client that uses DefaultTransport.//// The Client's Transport typically has internal ...
2018-08-06 21:53:03
2109
原创 redigo 源码分析连接池部分
结构体分析type Pool struct { // 用来创建redis连接的方法 Dial func() (Conn, error) // 如果设置了给func,那么每次p.Get()的时候都会调用改方法来验证连接的可用性 TestOnBorrow func(c Conn, t time.Time) error // 定义连接池中最大连接数(超过这...
2018-08-06 18:42:09
880
转载 分享使用redigo连到redis proxy踩到的坑
最近在开发项目的时候,踩了一个redis相关的坑,现分享给大家。使用的第三方库是 redigo,连的redis地址是一个proxy,首先要说的是,redigo 和 redis proxy 都是好东西,redigo的源码看着很清晰,redis proxy也很棒。刀是好刀,但是用的姿势不对就会伤到自己。这个坑就是关于redigo连接池的:RedisPool = &redi...
2018-08-03 16:51:28
4215
转载 MongoDB自定义函数部分 定义及引用
//定义一个Sum的函数db.system.js.save({_id:"Sum", value:function(key,values) { var total = 0; for(var i =0;i <values.length;i++) ...
2018-07-23 18:11:59
7208
原创 并发调度原理
并发调度原理并发调度MPG(解释1)Processor(简称 P),其作用类似 CPU 核,用来控制可同时并发执行的任务数量。 每个工作线程都必须绑定一个有效 P 才被允许执行任务,否则只能休眠,直到有空闲 P 时 被唤醒。P 还为线程提供执行资源,比如对象分配内存、本地任务队列等。线程独享所绑 定的 P 资源,可在无锁状态下执行高效操作。 进程内的一切都在以 goroutine(...
2018-07-16 16:14:08
2360
原创 在golang中使用mgo多条件查询
简单查询collection := session.GetMdb().C("user")//获取操作对象//根据用户手机号 倒序查询前100个 存入slice中if err := collection.Find(&bson.M{"uphone": phonenum}).Sort("-initimesamp").Limit(100).All(&historys); err == ni...
2018-07-14 23:13:17
2604
转载 golang mgo的mongo连接池设置:必须手动加上maxPoolSize
熊猫TV的礼物系统使用了golang的 mongo库 mgo,中间踩了一些坑,总结下避免大家再踩坑golang的mgo库说明里是说明了开启连接复用的,但观察实验发现,这并没有根本实现连接的控制,连接复用其实仅在当前操作 (session.Close 之前 )生效,最终还是需要程序员自行去限制连接才行。废话不多说,开始上代码GlobalMgoSession, err := mgo.Dial(host...
2018-07-14 22:14:18
1740
原创 mgo 的 session 与连接池
简介 mgo是由Golang编写的开源mongodb驱动。由于mongodb官方并没有开发Golang驱动,因此这款驱动被广泛使用。mongodb官网也推荐了这款开源驱动,并且作者在github也表示受到了mongodb官方的赞助。但由于作者的个人安排原因,该驱动的更新、bug修复、issue维护略微受到诟病。 mgo在功能方面还是比较完善的,api使用也方便。由于mong...
2018-07-14 21:15:13
965
原创 Go语言mgo使用情况
本文重点介绍mgo使用,仅简单介绍mongodb。mongodb特性mongdb简单介绍注意: 上图已经告知我们mongo不支持事务,在开发项目应用时,想要保证数据的完整性请考虑关系型数据库(经典例子银行转账)。 mongo提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到mongodb,要么没有保存到mongodb,不会出现查询到的文档不完整的情况...
2018-07-14 20:41:58
3357
转载 使用govendor管理Golang项目依赖
1、安装govendorgo get -u -v github.com/kardianos/govendor12、init在项目根目录,比如我这里是tap项目,那就是进入tap目录,执行init命令govendor initlscd vendor/ls1234 这个 vendor.json 会类似 godep 工具中的描述文件版本的功能。 3、执行命令将当前应用必须的文件包含进来govend...
2018-07-13 13:53:49
2015
转载 go 依赖管理利器 -- govendor
长期以来,golang 对外部依赖都没有很好的管理方式,只能从 $GOPATH 下查找依赖。这就造成不同用户在安装同一个项目适合可能从外部获取到不同的依赖库版本,同时当无法联网时,无法编译依赖缺失的项目。自 1.5 版本开始引入 govendor 工具,该工具将项目依赖的外部包放到项目下的 vendor 目录下(对比 nodejs 的 node_modules 目录),并通过 vendor.jso...
2018-07-13 13:19:02
690
原创 使用 Go vendor
一、Go vendor 介绍Go 语言在发布 1.5 版本时,就说可以使用自身提供的 vendor 特性,但是需要设置如下环境变量:GO15VENDOREXPERIMENT=1在发布 1.6 版本时,该环境变量的值已经默认设置为 1 了,该值可以使用 go env 命令查看。根据官方的说法,在发布 1.7 版本时,将去掉该环境变量,默认开启 vendor 特性。现在也有很多包管理工具,比如 God...
2018-07-11 16:11:17
5201
原创 Go语言的传参和传引用
传参和传引用的问题很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解.而传参和传引用是编程语言的根本问题, 如果这个问题理解错误可能会导致很多问题.传slice不是传引用!首先, Go语言的函数调用参数全部是传值的, 包括 slice/map/chan 在内所有类型, 没有传引用的说法.具体请看Go语...
2018-07-02 13:48:55
982
转载 mysql优化之参数优化
1、优化方式硬件优化=》系统优化=》mysql配置优化=》SCHEMA优化=》sql优化=》其他解决方案(redis or MongoDB or Cassandra or HBase)2、mysql配置分析1)常见瓶颈90%系统瓶颈都在IO上,所以提高IOPS尤为总要,iowait过高,加内存,减小数据读取量如果CPU很高,或者查询时间很长,90%索引不当如果系统发生swap,必定是内存分配不当所...
2018-05-24 15:51:28
518
转载 GC内存回收深入研究
GO “非分代的、非紧缩、写屏障、并发标记清理”并发清理: 垃圾回收(清理过程)与用户逻辑并发执行 三色并发标记 : 标记与用户逻辑并发执行一般常用垃圾回收方法引用计数这是最简单的一种垃圾回收算法,和之前提到的智能指针异曲同工。对每个对象维护一个 引用计数 ,当引用该对象的对象被销毁或更新时被引用对象的引用计数自动减一,当被引用对象被创建或被赋值给其他对象时引用计数自动加一。当引用计数为0时则立即...
2018-05-15 17:45:32
3142
原创 Golang汇编层面代码分析-内置函数和过程调用
绍Golang中的内置函数和相关操作代码的汇编实现,可以作为上篇博客的补充和实践。汇编中过程调用的参数是通过栈来传递的,在栈上的布局如下:参数3参数2参数1 <-FP保存PC <-SP......内置函数: new, make, appendpackage mainimport ( "fmt")type new_int intvar ( go...
2018-05-09 16:51:50
1610
1
原创 Golang汇编层面代码分析
这篇文档是对于Go编译器套件(6g, 8g, etc.)中不常用的汇编语言的快速预览,涵盖面不是很广泛。Go的汇编语言基于Plan 9的汇编,Plan 9网站的页面上有详细描述。如果你想编写汇编语言,你应该读这篇文档,虽然它是Plan 9相关的。这边文档总结了汇编的语法,并且描述了使用汇编语言和Go程序交互时的特殊之处。有一点是很重要的是,Go的汇编中没有直接体现出底层的机器。有些汇编细节能直接对...
2018-05-09 15:59:12
3039
原创 GIT 解决fatal: HTTP request failed问题
安装需求:># yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc># yum install gcc perl-ExtUtils-MakeMaker 卸载Centos自带的git1.7.1:通过git –version查看系统带的版本,Cento6.5应该自带的是g...
2018-05-04 11:01:44
22322
3
原创 GitHub 解决不支持老版加密方式 SSL connect error
GITHUB遇到问题 go get -u github.com/revel/cmd/revel# cd .; git clone https://github.com/revel/cmd /home/bravezhe/go_pro/src/github.com/revel/cmdCloning into '/home/bravezhe/go_pro/src/github.com/revel/cmd...
2018-05-04 10:54:16
4603
原创 垃圾回收机制
垃圾回收机制基本概念Go语言垃圾回收是一种非分代,非紧缩,写屏障,三色并发标记清理机制。 1.1 分代算法将堆划分为两个或多个称为 代(generation) 的空间。新创建的对象存放在称为 新生代(young generation) 中(一般来说,新生代的大小会比 老年代 小很多),随着垃圾回收的重复执行,生命周期较长的对象会被 提升(promotion) 到老年代中。 ...
2018-04-20 15:17:34
523
原创 声明和初始化
当我们第一次看见变量和声明时,我们仅仅看见一些内置的类型,比如整型和字符串。现在我们将学习结构体,并且我们会深入学习包括指针的内容。通过一种最简单的方式去创建一个结构体值类型:goku := Saiyan{ Name: "Goku", Power: 9000,}注意:上面的结构体中,结尾的逗号,是不能省的。如果没有逗号,编译器会给出一个错误。你将
2018-04-10 21:20:36
538
转载 go语言的官方包sync.Pool的实现原理和适用场景
已经使用golang有一段时间,go的协程和gc垃圾回收特性的确会提高程序的开发效率。但是毕竟是一门新语言,如果对于它的机制不了解,用起来可能会蹦出各种潘多拉盒子。今天就讲讲我在项目中用到的sync包的Pool类的使用,以免大家混淆使用。众所周知,go是自动垃圾回收的(garbage collector),这大大减少了程序编程负担。但gc是一把双刃剑,带来了编程的方便但同时也增加了运行时开销,使用...
2018-04-10 20:44:41
2108
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人