数据结构 - hashtable

@本文首发于 https://yeqown.github.io 背景 最近一直在看《redis设计与实现》,其中讲了redis中使用到的数据结构如:sds, ziplist, skiplist, hashtable, intset, linkedlist等。读完第一部分之后,再结合github上的源码redis,本着好记性不如烂笔头的理念,便准备动手撸一遍。 redis中hashtable的特点 链地址法解决hash冲突(除此以外,常见的冲突解决办法还有:再散列法/再哈希法/建立公共溢出区) 使...阅读全文

Segmentfault 2019-12-13 16:32:41 yeqown

[Golang] Go实现Google在RTB中价格加密方法

RTB RTB 广告是一种实时竞价广告,针对每个广告在有广告位置的时候,会实时多方竞争,价格最有优势的广告主会竞得这次展示机会,在媒体测在拿到素材的时候,需将本次成交的价格,上报给指定的监控服务器,这时就需要将实时价格按照指定的加密方案加密后,替换GET链接中的请求参数中的价格宏来上报。 官网 官方给出的源代码有Java和C++版本,地址如下:https://code.google.com/archive/p/privatedatacommunicationprotocol/source/def...阅读全文

简书 2019-12-13 11:32:46 Jeremy波

Go 实用小技巧

本文持续产出、收录一些笔者觉得好用的 Go 语法小技巧,还有一些初学 Go 遇到的“坑”,帮助节约日常开发时间,更多的时间可以做自己喜欢做的事情。 记录函数耗时 由于 Go 函数支持 defer 和闭包两大强大的特性,所以我们可以使用一行语句即可实现统计函数耗时的功能 // 函数主体 func TimeConsuming(tag string) func() { now := time.Now().UnixNano() / 1000000 return func() { after := tim...阅读全文

Segmentfault 2019-12-13 16:32:40 shadows

linux运维之K8S(一)

1.什么是Kubernetes?Kubernetes(通常简称为K8S,即是将8个字母“ubernete”替换成“8”的缩写)是一个以容器为中心的基础架构。可以实现在物理集群或者虚拟集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台。2.什么是k8s,k8s有什么功能?k8s是一个docker集群的管理工具。k8s是容器的编排工具。k8s是容器的管理平台。3.k8s的核心功能 自愈(Self-healing):重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的...阅读全文

简书 2019-12-13 08:32:49 你好树洞先生

Centrifugo(一)简介

Centrifugo 是一个用 Golang 实现的基于 Websocket 或者 SockJS 的实时通信平台。 提供基于频道的发布/订阅(PUB/SUB)模式。 容易和现有系统集成– 不改变已有后端情况下为系统提供实时通信能力。 HTTP API 和已有后端通信 . API clients for Python, Ruby, PHP, Go, NodeJS。 浏览器可以通过SockJS或者纯粹Websocket协议和centrifugal通信。 提供 iOS和Android平台SDK。 采用...阅读全文

简书 2019-12-13 08:32:48 关文

Centrifugo(二)基本使用

Centrifugo 是一个用 Golang 实现的基于 Websocket 或者 SockJS 的实时通信平台。 基本运行框架: 基本运行框架 Centrifugo 的使用场景一般涉及三个部分:客户端(前端)、应用程序(后端)和 Centrifugo。当然,也可以只有客户端和 Centrifugo。基本使用流程如下: 下载并安装Centrifugo,推荐使用 docker 方式。 创建基础配置文件,设置 secret 和 api_key。配置文件(config.json)可以通过命令自动创建:...阅读全文

168Pool-- Filecoin-Lotus测试网挖矿教程

Filecoi-lotus测试网上线啦!第一个吃螃蟹的人你做好准备了吗?拿好你的高配置矿机168pool带你去挖矿一.根据官方文档,参与测试网需要的配置要求为1.8核16线程的cpu2.16G内存,512G SSD3.2T机械硬盘4.GPU显卡N卡1060,6G二.安装ubuntu操作系统(目前暂不支持windows)可以到ubuntu官方去下载安装,下载链接:https://ubuntu.com/download/desktopUbuntu 三.安装好系统后配置环境(本教程以ubuntu系统为...阅读全文

简书 2019-12-13 08:32:47 168pool

Filecoin主网上线时间确认!附:测试网安装教程

今日Filecoin官方正式发文称,Filecoin测试网现已正式启动,同时公布主网上线时间。Filecoin测试网是一个实时测试网络,测试网的目的是在启动主网之前以有意义的规模评估Filecoin,并解决可能出现的任何问题。该网络始终是开放的,任何人都可以不受限制地访问和加入,并且Filecoin Project代码库是免费的和开源的。任何人都可以安装软件,连接到网络并浏览Filecoin。测试网是迄今为止Filecoin主网最真实的模拟。由于使用了接近最终的证明结构和参数,预期的矿工可以体验...阅读全文

简书 2019-12-13 08:32:45 星系云科技

通过项目学习Go语言之项目介绍

目前,go语言已然成为各大厂的标配开发语言,各大厂都在使用go语言构建一些重要的支撑系统。当今最流行的容器Docker及容器编排和管理工具k8s都是使用go来构建的,并且是开源的,这给go开发者提供了很好的学习资料。但是,这些项目对初学者来说过于复杂,很难通读其源码。国内大厂也开源了一些go开发的项目,比如baidu的应用负载均衡产品bfe、bilibili开源的go微服务框架kratos、didi最近开源的gatekeeper都是开发者值得学习的好项目。 接下来,通过didi开源的gateke...阅读全文

简书 2019-12-13 08:32:44 whatiscoding

Golang解LeetCode 804. 唯一摩尔斯密码词

804. 唯一摩尔斯密码词 题目描述 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。 为了方便,所有26个英文字母对应摩尔斯密码表如下: [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-."...阅读全文

简书 2019-12-13 08:32:43 肥肥的大肥鹅

使用opentracing,jaeger实现golang链路追踪

Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。我们可以使用opentracing在关键代码中进行埋点记录,线上可以快速直观查看调用执行情况。 要点说明 config设定 cfg := &config.Configuration{ Sampler: &config.SamplerConfig{ Type: samplerType, Param: samplerParam, }, Reporter: &config.ReporterConfig{ LogS...阅读全文

Segmentfault 2019-12-13 16:32:40 麦穗儿

Ubuntu 16.04安装GoLand后不能切换到搜狗输入法

现象: 1、通过命令行命令./golang.sh启动时,不能使用搜狗输入法; 2、通过命令行命令sudo ./golang.sh启动时则可以,但添加到launch后,通过点击图标则还是不行。 解决办法: 1、在命令行中以"sudo ./golang.sh"启动GoLand; 2、新建或打开一个项目,然后点击Tools->Create Desktop Entry 3、cd /usr/share/applicatons,打开jetbrains-goland.desktop,在"Exec="后增加"g...阅读全文

简书 2019-12-12 19:32:45 wxb2dyj

并发编程挑战:死锁与上下文切换

引言 上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。上下文切换会影响多线程执行速度。死锁是指多个进程或线程循环等待它方占有的资源而无限期地僵持下去的局面。 1、上下文切换 上下文定义 cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。 引发问题 对于CPU密集型任务,多线程处理会发生上下文切换,会影响到执行速度,如果时IO密集型,多线程技术优点尽显。 如何减少上下文切...阅读全文

简书 2019-12-12 19:32:44 老男孩_Misaya

DevOps专题|Lua引擎打造超轻量级客户端

Lua 作为一门轻量级脚本语言,源码使用标准C语言发布,语法简洁,非常适合嵌入式、客户端、游戏等场景。 Lua引擎语言特点 轻量级 源码简单,以lua最新版5.3.5为例,加上lua自身提供的lib库,仅30多个.c文件,编译后仅200多k,strip后经upx压缩,可控制在100k以下。 语法简洁 小巧灵活,支持闭包,有GC机制,通过语法糖可实现面向对象编程,提供了通用类型table,可实现数组、map和对象。 支持多平台 lua语言本身和lib库由标准C语言编写,可在windows、*nix...阅读全文

简书 2019-12-12 19:32:43 京东云技术新知

Go语言之装饰器

转自本人公众号:灰子学技术原文链接:https://mp.weixin.qq.com/s/33VmMYOCQjptIyALABXfuQGo的装饰器本质上允许您包装现有功能,并添加你自己的自定义功能,它操作的对象是函数,返回的对象也是函数。1.简单的一个装饰器例子:​结果分析:从输出的结果能够看出,调用了装饰器之后,函数testFunc已经实现了,“自己的代码 + 原来代码”的效果。2.如果我们希望装饰器装饰的函数类型不是固定的呢,也就是说我们希望装饰器装饰的函数可以是任何函数,这样我们该怎么办?...阅读全文

Go语言中文网 2019-12-12 18:54:14 ZhDavis

蚂蚁金服开源 MOSN 核心概念解析

前言 MOSN 是一款使用 Go 语言开发的 Service Mesh 数据平面代理,2018 年 7 月由蚂蚁金服开源,开源地址 https://github.com/sofastack/sofa-mosn,MOSN 旨在为服务提供分布式、模块化、可观察和智能化的代理能力。MOSN 是 Modular Observable Smart Network 的简称。MOSN 可以与任何支持 xDS API 的 Service Mesh 集成,亦可以作为独立的四、七层负载均衡使用。未来 MOSN 将支...阅读全文

简书 2019-12-12 17:32:47 ServiceMesher

golang govendor windos下的使用

为何使用govendor? 解决项目部署到各个平台的包依赖问题。 govendor提供一个包管理的能力,方便在任意环境下编译部署。 首先下载govendor包到本地 go get -u github.com/kardianos/govendor 到govendor目录下执行 go build go instanll 此时在GOPATH路径下的bin目录中应该生成了govendor.exe文件 执行 govendor 会发现没有这个指令的话,是windos环境变量没有配置。 image.png i...阅读全文

简书 2019-12-12 15:32:46 青果山圣斗士

golang基础学习-AES加密

高级加密标准(AES全称Advanced Encryption Standard),AES加密数据块分组长度必须为128bit(byte[16]),密钥长度可以是128bit、192bit、256bit中的任意一个。 ps:本文中PKCS7填充函数是从别的地方找的,具体地方不记得了。后续找到链接会补上参考地址。 AES实现的方式: 1.电码本模式(Electronic Codebook Book (ECB)) 2.密码分组链接模式(Cipher Block Chaining (CBC)) 3.计...阅读全文

Segmentfault 2019-12-13 16:32:40 wmm369