Go语言中文网 为您找到相关结果 70

golang 服务大量 CLOSE_WAIT 故障排查

事故经过 排查 总结 事故经过 【2019-12-27 18:00 周五】业务方突然找来说调用我们程序大量提示“触发限流”,但是我们没有收到任何监控报警。紧急查看了下 ServiceMesh sidecar 代理监控发现流量持续在减少,但是监控中没有任何触发限流的 http code 429 占比,如果有触发限流我们会收到报警。 后来通过排查是程序中有一个历史限流逻辑触发了,但是程序中触发限流返回的 http code 是 200,这就完全避开了 sidecar http code 非200 异常指标监控报警。把代码中的限流阈值调了非常大的一个值,统一走 sidecar 限流为准。 猜测本次触发限流可能跟网路抖动有关系,网络抖动导致连接持续被占用,最终 qps 超过限流阈值。因为这个程序最近...阅读全文

博文 2020-01-26 23:33:41 王清培

用Golang写一个搜索引擎(0x06)--- 索引构建

不知不觉写到第七篇了,按这个节奏,估计得写到15到20篇左右才能写完,希望自己能坚持下去,之前写代码的时候很多东西并没有想得那么细致,现在每写一篇文章还要查一些资料,确保文章的准确性,也相当于自己复习了一下吧,呵呵。 先说一下,关于倒排文件,其实还有很多东西没有讲,到后面再统一补充一下吧,主要是倒排文件的压缩技术,这一部分因为目前的存储空间不管是硬盘还是内存都是很大的,所以压缩技术用得不是很多了。 今天我们来讲讲倒排索引的构建。 之前,我们了解到了,倒排索引在系统中是存成下图这个样子 上面的B+树是一个文件,下面的倒排链是一个文件,那么,如何来构建这两个文件呢,本章我会说说一般的常规构建方法,然后说一下我是怎么构建的。 一般情况下,搜索引擎默认会认为索引是不会有太大的变化的,所以把索引分为全...阅读全文

博文 2017-02-09 08:18:10 吴yh坚

Golang 实现访问Easyswoole的rpc服务

package main import ( "encoding/binary" "net" ) func main() { var tcpAddr *net.TCPAddr tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9600") conn,_ := net.DialTCP("tcp",nil,tcpAddr) defer conn.Close() sendEasyswooleMsg(conn) } func sendEasyswooleMsg(conn *net.TCPConn) { var sendData []byte data := `{"command":1,"request":{"serviceName":"UserServic...阅读全文

博文 2019-10-08 11:33:39 aside section ._1OhGeD

1>Golang字符串常用操作

字符,字节 // 字符串 s := "hello 皇甫村" // 单独的字母,汉字,符号表示一个字符 c1 := 'h' c2 := '皇' // 字节。一个字节=8bit(8个二进制位) // 一个'A' =1一个字节 // 一个utf8编码的汉字 '砂' = 一般占用3个字节 1kb = 1024字节 字符串 package main import ( "fmt" "strings" ) // 字符串相关操作 var s3 = "C:\\Windows\\SoftwareDistribution\\Download" func main() { // 字符串长度 fmt.Println(len(s3)) // 字符串拼接 name := "理想" world := "dsb" fmt.P...阅读全文

博文 2020-01-28 21:32:42 三人行大道

[用Golang刷LeetCode之 1] 461. Hamming Distance

题目描述 https://leetcode.com/problems/hamming-distance/description/ The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given two integers x and y, calculate the Hamming distance. Note: 0 ≤ x, y< 2^31. Example: Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ The abo...阅读全文

博文 2017-08-14 09:05:02 miltonsun

leetcode 回溯题目 golang语言

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 “回溯” 返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 链接:https://leetcode-cn.com/tag/backtracking/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 本文主要总...阅读全文

博文 2019-09-19 00:33:15 努力的C

Golang 之 WaitGroup 源码解析

前言 如果我们有一个大的任务要做,我们会尝试将这个任务分解,分解完成之后并发交由 goroutine 去做,并且我需要当全部的任务完成之后再进行下面的步骤,在 sync 包下,就有这样一个东西适合上述情况,WaitGroup,今天我们来看看具体它是怎么实现的。 PS:在下面我统一用 wg 来简称 WaitGroup 使用 它的使用非常简单,如下: func main () { wg := sync.WaitGroup {} for i := 0; i < 10; i++ { wg.Add (1) go func (job int) { defer wg.Done () //do something fmt.Printf ("job % d done\n", job) }(i) } wg.Wa...阅读全文

博文 2020-05-26 09:32:46 LinkinStar

用Golang写一个搜索引擎(0x08)--- 索引的段

我觉得这个标题应该改改了,我写下来其实是告诉大家怎么写一个搜索引擎,并没有涉及太多的Golang的东西,我觉得这样也挺好,熟悉了原理,用什么实现其实并不重要了,而且说说原理比说代码更实在。 之前已经说了底层的数据结构了,包括倒排和正排索引。今天我们上一层,来说说索引的字段和段。 字段这个上一篇已经介绍过了,字段的概念实际上是搜索引擎索引中我们能看到的最底层的东西,也是对外暴露的最底层的概念,在字段之下是倒排和正排索引,这两项其实对用户是封装起来了,我们可以认为每个字段对应一个正排和一个倒排,而实际上也确实是这样的。 在字段之上就是我们这一篇主要说的段了,段这个概念并不是搜索引擎特有的,也不是必须的,是我这个项目新增出来的,当然,也不是我原创,很多搜索引擎的引擎系统都有这个概念。 所谓段,就是...阅读全文

博文 2017-02-09 08:19:58 吴yh坚

【go源码分析】strings.go 里的那些骚操作

go version go1.11 darwin/amd64/src/strings/strings.go strings.go 文件中定义了近40个常用的字符串操作函数(公共函数)。以下是主要的几个函数。 函数 简介 Index(s, substr string) int 返回 substr 在 s 中第一次出现的位置,不存在返回 -1;采用RabinKarp算法 Split(s, sep string) []string 根据 sep 把字符串 s 进行切分,返回切分后的数组 Join(a []string, sep string) string 跟 Split 功能刚好相反 Repeat(s string, count int) string 返回字符串 s 重复 count 次得到的...阅读全文

leetcode_1331

Golang: 思路:这题需要对数组进行排序,然后将数组内的元素的实际排位存进map里,然后对数组进行依次赋值 代码如下: func arrayRankTransform(arr []int) []int { if len(arr)==0{ return []int{} } if len(arr)==1 { return []int{1} } arr2:=make([]int,len(arr)) copy(arr2,arr) sort.Ints(arr2) mp:=make(map[int]int) temp:=1 for i:=1;i阅读全文

博文 2020-03-08 17:32:43 淳属虚构

GoLang基础语法

变量定义 从hello world入手 package main import "fmt" func main() { fmt.Println("Hello World") } 控制台输出: Hello World 变量默认值 package main import "fmt" func main() { var a int var s string fmt.Println(a, s) } 控制台输出: 0 注:s为"",故打印出来没有效果 如果想让""字符串显示,则代码如下: package main import "fmt" func main() { var a int var s string fmt.Println(a, s) fmt.Printf("%d %q\n", a, s)...阅读全文

博文 2018-09-25 11:34:56 等她下班

golang 全排列 leetcode dfs

func _permutation(arr []int) [][]int{ var results = make([][]int,0) var used = make([]int, len(arr)) helper(&results,arr,make([]int,0), used) return results } func helper(results *[][]int ,arr, tmparr, used []int) *[][]int { if len(tmparr) == len(arr) { *results = append(*results, tmparr) } else { for i:=0;i阅读全文

博文 2019-12-29 19:32:39 adsfasdf_

MapReduce:在大型集群上简化数据处理(1)

特别说明 这是一个由simviso团队所组织进行的基于mit分布式系统课程翻译的系列,由知秋带领和其他成员一起翻译的课程以及课程当中涉及的论文翻译。本文章参与人员 参与人员 参与范围 知秋 审校 虚生花 翻译 概要 MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用来合并所有的具有相同中间key的中间value 。现实生活中有许多任务可以通过该模型进行表达,具体案例会在论文中展现出来。 以这种函数式风格编写的程序能够在一个大型商用机器集群上自动并行执行。这个系统在运行时只关心:如何分割输入数据,在大量计算机所组成的集群上的调度问题,集群中计...阅读全文

博文 2020-03-06 10:32:48 知秋o

golang 快速排序

golang 快速排序 package main import ( "fmt" "strconv" ) func quickSort(arr []int, low, high int) { if low < high { var pivot = partition(arr, low, high) quickSort(arr, low, pivot) quickSort(arr, pivot + 1, high) } } func partition(arr []int,low,high int) int { var pivot = arr[low] var i = low var j= high // 6 5 4 3 2 1 // 6 1 2 3 4 7 for i< j{ for arr[...阅读全文

博文 2020-03-03 22:33:49 moakia

golang程序问题处理经验

1.在做内存问题相关的 profiling 时: 若 gc 相关函数占用异常,可重点排查对象数量 解决速度问题(CPU占用)时,关注对象数量( --inuse/alloc_objects )指标 解决内存占用问题时,关注分配空间( --inuse/alloc_space )指标 inuse 代表当前时刻的内存情况,alloc 代表从从程序启动到当前时刻累计的内存情况,一般情况下看 inuse 指标更重要一些,但某些时候两张图对比着看也能有些意外发现。 2.在日常 golang 编码时: 参数类型要检查,尤其是 sql 参数要检查(低级错误) 传递struct尽量使用指针,减少复制和内存占用消耗(尤其对于赋值给interface,会分配到堆上,额外增加gc消耗) 尽量不使用循环引用,除非逻辑真...阅读全文

博文 2019-08-03 22:32:39 凯文不上班

Influxdb中基于磁盘的倒排索引文件TSI结构解析

TSI文件结构概览 一个TSI文件的定义和操作在 tsdb/index/tsi1/index_file.go里实现的 一个TSI文件的结尾存储了这个文件相关的meta信息,主要是其他section在文件中的offset和size,这个meta信息被称为tsi文件的IndexFileTrailer,我们看一下它的Size的定义: IndexFileTrailerSize = IndexFileVersionSize + 8 + 8 + // measurement block offset + size 8 + 8 + // series id set offset + size 8 + 8 + // tombstone series id set offset + size 8 + 8 + ...阅读全文

博文 2018-12-23 11:34:44 扫帚的影子

小结

在计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是字节。一个存储单元(一个地址),可以存储一个字节,也就是8个二进制位。计算机的存储器容量是以字节为最小单位来计算的,对于一个有128个存储单元的存储器,可以说它的容量为128字节。 地址总线,是用来传输数据所在地址的,而32位系统一般有32根地址总线,那么所能传输的最大数据地址就是2^32,这里所指的地址是真实的数据地址,即物理地址。用户在使用计算机时能够访问的最大内存不单是由CPU地址总线的位数决定的,还需要考虑操作系统的实现。实际上用户在使用计算机时,进程访问到的地址都是逻辑地址,并不是真实的物理地址,逻辑地址是由操作系统提供的,并维护了逻辑地址和物理地址的映射。对于32位的windows操作系统,提...阅读全文

博文 2018-12-05 21:34:45 越塔打哭你

Golang筑基 ——运算符

golang的运算符同C/C++一样,共有如下几种 算术运算符 下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。 图片.png 注意: 自增(++)和自减(--)不同于C/C++,a++和++a在golang中是没有区别的,同理,a--和--a也是如此。我觉得这也是golang方便之处,去除一些没必要功能设计,让语言本身更便捷。 关系运算符 下表列出了所有Go语言的关系运算符。假定 A 值为 10,B 值为 20。 图片.png 逻辑运算符 下表列出了所有Go语言的逻辑运算符。假定 A 值为 True,B 值为 False。 图片.png 位运算符 位运算符对整数在内存中的二进制位进行操作。 下表列出了位运算符 &, |, 和 ^ 的计算: 图片.png 赋值运算符...阅读全文

博文 2020-04-13 21:32:49 技术修仙

一个TCP长连接设备管理后台工程(五)

前篇 一个TCP长连接设备管理后台工程(一) 一个TCP长连接设备管理后台工程(二) 一个TCP长连接设备管理后台工程(三)一个TCP长连接设备管理后台工程(四) Github仓库地址 帧过滤器 帧过滤器的作用就是,从接收到的buff中,过滤出有效的完整jtt808数据包。由于是tcp通讯,那么这其中不可避免的会涉及到数据包的两个常规处理:拆包和粘包。 拆包和粘包的简要说明: 假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。 (1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包; (2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包; (3)服务端分两次读取到了两个数据包,第一次读...阅读全文

博文 2019-12-30 18:32:39 qiuzhiqian

Go字符串初探

这篇博文的知识,主要是阅读了Go的官方博客在2013年发表的一篇,名为《Strings, bytes, runes and characters in Go》的文章,里面解释了Go语言中的string、byte以及rune类型以及Go中的编码方式等内容。 相关概念的辨析 字符串、字符、字节、位: 位bit:bit是计算机中最小的存储单位,一个bit表示一个二进制位,存储0或1。 字节byte:一个byte由8个bit组成。在Go中,byte也是一种类型,其底层实际上是一种uint8类型的别名,主要是为了区分字节类型和uint8类型,可以指代一个ASCII的字符。 字符:字符表示一个可以正常显示的一个符号,譬如一个字符串abc,其中a、b、c都是字符,在Go中,一个字符对应一个rune类型值。...阅读全文

博文 2020-05-02 23:34:50 周小路