HyperLogLog 算法在监控场景中的运用

HyperLogLog 算法在监控场景中的运用 背景介绍 OpsMind 低代码开发平台监控模块,为了支撑B站众多监控数据的管理场景,研发人员在分布式层做了众多优化工作。为了更好的掌握每个 metric 自身的空间占用以及各个存储节点的时序分布情况,需要对每个指标的时序数目(基数)有一个大致的预估(允许存在误差),以便于 OpsMind 系统能更加合理的均衡各个存储节点的负载。 为何选用 HyperLogLog OpsMind 系统指标的形式与 prometheus 完全兼容(在此 promet...阅读全文

简书 2020-03-16 17:38:14 啊哟喂_

【Golang】Gin 框架之请求参数多语言验证

我们在web开发中,你的应用可能会在不同国家使用,所以需要将相关的错误提示根据本地语言进行相应的提示,也即是所谓的国际化。本文简单的介绍一下,在Gin中如何实现多语言的验证。我们借助validator.v10以及相应的语言包。 集成关键点 导入需要转换语言包 公共包: "github.com/go-playground/validator/v10" 需要转换的包,比如英文和中文 en2 "github.com/go-playground/locales/en" zh2 "github.com/g...阅读全文

简书 2020-03-16 17:32:56 云枫随笔

5.2.5Golang的运算符

目录:https://www.jianshu.com/p/e406a9bc93a9 运算符 golang的运算符有五种: 1.算术运算符 2.比较运算符 3.逻辑运算符 4.位运算符 5.赋值运算符 算术运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 例子: var ( a = 5 b = 2 ) // 算术运算符 fmt.Println("a + b:",a + b) fmt.Println("a - b:",a - b) fmt.Println("a * b:",a ...阅读全文

简书 2020-03-16 17:32:56 寒暄_HX

2019年5月份找工作面试知识点总结

面试知识点 算法和数据结构 常用算法 排序算法 各种排序算法的时间复杂度,是否稳定 内部排序 快速排序 nlgn 不稳定 冒泡排序 n2 稳定 堆排序 nlgn 不稳定 大小堆 归并排序 选择排序 n2 不稳定 5 3 5 2 4 插入排序 n2 稳定 希尔排序 不稳定 手写冒泡 手写快排 外部排序 查找算法 顺序查找 二分(手写) 递归 非递归 二叉搜索树 平衡搜索树 红黑树 多路搜索树 B tree B+tree 一致性hash 减少数据迁移 [0,2的32次方 - 1] 虚拟节点 客户端实...阅读全文

简书 2020-03-16 17:32:55 airect

go-值类型与引用类型

golang中分为值类型和引用类型 值类型分别有:int系列、float系列、bool、string、数组和结构体 引用类型有:指针、slice切片、管道channel、接口interface、map、函数等 值类型的特点是:变量直接存储值,内存通常在栈中分配 引用类型的特点是:变量存储的是一个地址,这个地址对应的空间里才是真正存储的值,内存通常在堆中分配阅读全文

简书 2020-03-16 17:32:54 Dongzdong

如何在JavaScript中重命名对象键?

JavaScript不提供内置函数来重命名对象键,那么如何重命名对象键?下面本篇文章就来给大家介绍一下在JavaScript中重命名对象键的方法,希望对大家有所帮助。 在JavaScript中,对象用于存储各种数据的集合,是属性的集合;属性是一个“key:value”对。其中key(键)称为“属性名”,用于标识值。下面介绍重命名对象键的方法。方法一:通过简单的变量赋值来重命名对象在分配了一个或多个变量之后,我们将删除旧的键值对并打印新的键值对。语法:obj['New key'] = obj['o...阅读全文

简书 2020-03-16 17:32:53 yanghs

Go 学习笔记4 - Go Module 模块及依赖管理

概述 在写代码过程中,总要引用其他的库而产生功能模块的依赖。Go 在 版本1.1 开始提供 Module 模块化的支持。在1.4 版本后 鼓励所有用户从其他依赖性管理系统迁移到模块 模块 概念 “模块”是多个Go包 (package)的集合,将这些包作为一个整体一起进行版本控制。 “模块”记录了正确的依赖关系和依赖需要,在构建时会很便利。 总结 项目工程仓库、模块和包之间的关系: 项目工程仓库 可以包含一个或多个Go模块。 每个模块 可以包含一个或多个Go包。 每个 包 由单个目录中的一个或多个...阅读全文

简书 2020-03-16 17:32:52 张云飞Vir

使用Go语言创建WebSocket服务

今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务。第三部分实践环节我们使用了gorilla/websocket库帮助我们快速构建WebSocket服务,它帮封装了使用Go标准库实现WebSocket服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,根据业务需求快速构建WebSocket服务。 Go Web 编程系列的每篇文章的源代码都打了对应版本的软件包,供大家参考。公众号中回复gohttp10获...阅读全文

Segmentfault 2020-03-22 08:32:34 Kevin

当查询的数据来自多个数据源,有哪些好的分页策略?

概述 在业务系统开发中,尤其是后台管理系统,列表页展示的数据来自多个数据源,列表页需要支持分页,怎么解决? 问题 如上图,数据源可能来自不同 DB 数据库,可能来自不同 API 接口,也可能来自 DB 和 API 的组合。 我这也没有太好的解决方案,接到这样的需求,肯定首先和需求方沟通,这样分页是否合理。 无非就两种方案: 数据定期同步,首先将查询的数据汇总到一个地方,然后再进行查询分页。 内存中分页,首先将查询的数据存放到内存,然后再进行查询分页。 如果以某一数据源进行分页,其他字段去其他数据...阅读全文

掘金 2020年03月16日 新亮笔记

当查询的数据来自多个数据源,有哪些好的分页策略?

概述 在业务系统开发中,尤其是后台管理系统,列表页展示的数据来自多个数据源,列表页需要支持分页,怎么解决? 问题 如上图,数据源可能来自不同 DB 数据库,可能来自不同 API 接口,也可能来自 DB 和 API 的组合。 我这也没有太好的解决方案,接到这样的需求,肯定首先和需求方沟通,这样分页是否合理。 无非就两种方案: 数据定期同步,首先将查询的数据汇总到一个地方,然后再进行查询分页。 内存中分页,首先将查询的数据存放到内存,然后再进行查询分页。 如果以某一数据源进行分页,其他字段去其他数据...阅读全文

Segmentfault 2020-03-21 17:32:33 新亮

图解Go的unsafe.Pointer

相信看过Go源码的同学已经对unsafe.Pointer非常的眼熟,因为这个类型可以说在源码中是随处可见:map、channel、interface、slice...但凡你能想到的内容,基本都会有unsafe.Pointer的影子。 看字面意思,unsafe.Pointer是“不安全的指针”,指针就指针吧,还安不安全的是个什么鬼? 接下来,我们就来了解一下Go的这个“不安全的指针”unsafe.Pointer。 什么叫变量 在了解指针之前,我们有必要先了解一下什么叫“变量”。 其实变量就是一个内...阅读全文

Golang三色标记、混合写屏障GC模式图文全分析

原创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次...阅读全文

Segmentfault 2020-03-21 16:32:37 aceld

Gin框架中使用JWT进行接口认证

背景: 在如今前后端分离开发的大环境中,我们需要解决一些登陆,后期身份认证以及鉴权相关的事情,通常的方案就是采用请求头携带token的方式进行实现。本篇文章主要分享下在Golang语言下使用jwt-go来实现后端的token认证逻辑。 JSON Web Token(JWT)是一个常用语HTTP的客户端和服务端间进行身份认证和鉴权的标准规范,使用JWT可以允许我们在用户和服务器之间传递安全可靠的信息。 在开始学习JWT之前,我们可以先了解下早期的几种方案。 token、cookie、session...阅读全文

掘金 2020年03月15日 BGBiao

GoLang-Scheduling In Go : Part I - OS Scheduler

Scheduling In Go系列文章 本文主要针对Go语言中的调度。 目录 Part I - OS Scheduler Part II - Go Scheduler Part III - Concurrency Part I - OS Scheduler 第一部分,将提供对Go中调度器背后的机制和语义的理解。 Introduction Go调度的设计与实现提供了高效率和高性能的多线程,然而如果你的Go程序多线程设计不支持Go调度的工作,那这也将无济于事。本文主要集中于调度程序的高级机制和语义...阅读全文

简书 2020-03-16 09:32:57 帘外五更风

Golang 字符串(string)系列函数功能与用法详解

常用函数 ContainsAny(str, chars) bool 如果str中包含chars中的任意一个字符,返回true,否则返回false 例子: str := "hello world" fmt.Println(strings.ContainsAny(str,"bcfa"),strings.ContainsAny(str,"dcfa")) 输出:false true ContainsRune(str,rune) bool str中是否包含单个unicode字符 例子: str := "h...阅读全文

简书 2020-03-16 09:32:48 Eric木子

go语言容器

数组 var arr [3]int // 数组的每个元素都会被初始化为改类型的零值 var a [3]int = [3]int{1,2} a[2] // 0 q := [...]int{1,2,3} // ...表示初始化时会根据初始值的个数确定数组的长度 // 数组的长度是数组的一部分,必须是常量表达式,举例来说就是长度确定后不能再给它赋值 比较两个数组是否相等,一定要长度、类型、所有元素都相等时才会相等 数组遍历 var team [3]int = [3]int{1,2} team[2] =...阅读全文

简书 2020-03-16 09:32:47 拉粑粑拉不出来

leetcode_23

Golang: 思路:晚上的效率很低,写代码的感觉也差到了极点。。。 代码如下: func mergeKLists(lists []*ListNode) *ListNode { length:=len(lists) if length==0{ return nil } for length!=1{ for i:=0;i<length/2;i++{ lists[i]=mergeTwoLists(lists[i],lists[length-i-1]) } if length%2==0 { lengt...阅读全文

简书 2020-03-16 09:32:47 淳属虚构

leetcode_16

Golang: 思路:这题能够从O(n3)优化到O(n2),确实让人感到不可思议。怎么说呢,还是自己太菜了。。。 代码如下: func threeSumClosest(nums []int, target int) int { sort.Ints(nums) max:=nums[0]+nums[1]+nums[2]-target for i:=0;i<len(nums)-2;i++{ if i!=0&&nums[i]==nums[i-1]{ continue } j,k:=i+1,len(num...阅读全文

简书 2020-03-16 09:32:47 淳属虚构