手撸golang 学ectd 手写raft协议13 小结

手撸golang 学ectd 手写raft协议13 小结 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了四个子问题: 1. 领袖选举(leader election)、 2. 日志复制(log replication)、 3. 安全...阅读全文

简书 2021-04-08 21:32:35 老罗话编程

go特性总结(1.13~1.16)

go1.131.对数字字面量进行了改动在1.13版本之前的golang仅支持十进制和十六进制的字面量,而其他语言使用广泛的二进制和八进制却不能支持例如下面代码就无法编译: fmt.Println(0b101) fmt.Println(0o10)在go1.13中上述字面量语法已经被支持了你可以通过0b或0B前缀来表明一个二进制数字的字面量,以及用0o和0O来表明八进制字面量。值得注意的是虽然两种写法都可以,但是gofmt默认会全部转换为小写1.13以下版本运行则会出现以下错误信息: # comma...阅读全文

简书 2021-04-08 21:32:35 陈氏美

Go io

Golang中输入和输出操作使用原语实现,这些原语将数据模拟称为可读或可写的字节流。为此,Golang的io包提供了io.Reader和io.Writer接口,分别用于数据的输入和输出。 io Golang的io包提供了对I/O原语的基本接口,包装了原语的已有实现,使之成为共享的公共接口,抽象出泛用的函数并附加了相关的原语操作。这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应该假设它们是并发执行安全的。 io.EOF EOF是End-Of-File的缩写,...阅读全文

简书 2021-04-08 21:32:35 JunChow520

使用boost::thread_group和同步队列模拟Golang goroutine和channel

boost::thread_group前两天讲过了,比较简单,其实就是一个boost::list<boost::shared_ptr<boost::thread>> threads类型对象的一个包装,封装一组线程列表。 同步队列的实现也是比较简单的使用了C++11提供的std::mutex和std::unique_lock对象,如果要兼容C++11之前的版本,可以将相关对象的名称空间换成 boost就可以。 下面上代码, 工程结构如下, 图片.png utils/sync_queue.hpp #...阅读全文

简书 2021-04-08 21:32:34 FredricZhu

使用boost::asio::io_service和同步队列模拟Golang goroutine和channel

boost::asio::io_service有一个post方法,可以提交任务,异步执行。 C++11之后支持lambda表达式,可以捕获局部参数,支持值捕获和引用捕获。 本例主要基于这两点来模拟Goroutine和channel。 程序目录结构如下, 图片.png 程序代码如下, utils/sync_queue.hpp #ifndef _SYNC_QUEUE_HPP_ #define _SYNC_QUEUE_HPP_ #include <list> #include <mutex> #inc...阅读全文

简书 2021-04-08 21:32:32 FredricZhu

静态网站 介绍

什么是静态网站生成器 静态网站生成器是使用一系列配置、模板以及数据,生成静态 HTML 文件及相关资源的工具 由于它是提前生成静态网页,通常将这个功能也叫预渲染 生成的网站不需要类似 PHP 这样的服务器 只需要放到支持静态资源的 Web Server 或 CDN 上即可运行 静态网站好处 省钱:不需要专业的服务器,只要能托管静态文件的空间即可· 快速:不经过后端服务器的处理,只传输内容 安全:没有后端程序的执行,自然会更安全 常见静态网站生成器 Jekyll (Ruby) Hexo (Node...阅读全文

简书 2021-04-08 21:32:31 wangxiang2020

Go gob

为了让数据结构能够在网络中传输或保存到文件,它必须被编码后再解码。目前有多种可用的编码方式,比如JSON、XML、Google的Protocol Buffers等。 Gob(go binary)是Golang自己以二进制形式序列化和反序列化程序数据的格式,位于encoding/gob包中。类似于Python中的pickle和Java中Serialization。 gob可用于传递远端程序调用(RPC)的参数和结果。 encoding/gob包实现了高效地序列化,特别是数据结构负责的,比如结构体、...阅读全文

简书 2021-04-08 21:32:31 JunChow520

Go 函数选项模式

作为 Golang 开发者,遇到的许多问题之一就是尝试将函数的参数设置成可选项。这是一个十分常见的场景,您可以使用一些已经设置默认配置和开箱即用的对象,同时您也可以使用一些更为详细的配置。 对于许多编程语言来说,这很容易。在 C 语言家族中,您可以提供具有同一个函数但是不同参数的多个版本;在 PHP 之类的语言中,您可以为参数提供默认值,并在调用该方法时将其忽略。但是在 Golang 中,上述的做法都不可以使用。那么您如何创建具有一些其他配置的函数,用户可以根据他的需求(但是仅在需要时)指...阅读全文

Go语言中文网 2021-04-08 11:45:41 polaris

为什么选择 Golang?彻底解决争论

我们都经历过绿地(greenfield)项目初期的幸福感。对于每一个决定,你都有无限的选择余地,当你启动项目编码的时候,你首先要处理的问题是我应该选择哪种编程语言来开发我的项目? 我是应该使用一种新的有趣的语言还是应该坚持使用最流行的语言?幸运的是,在 baconce Technology,我们的专家对这些问题非常熟悉,因为我们处理过各种宽高比(shapes)和尺寸的客户端(屏幕),而且我们总是在考虑编程语言应该适合服务器端应用程序开发这一共同可能性的情况下做出选择。这就是为什么我们特别重...阅读全文

Go语言中文网 2021-04-08 11:18:31 lts8989

24 goroutine channel实现并发和并行(一)

进程和线程 进程就是一个正在执行的程序。一个进程至少有5种基本状态,它们是:初始态、执行态、等待状态、就绪状态、终止状态。 线程是进程的一个执行实例,是程序执行的最小单元。 一个进程可以创建多个线程,同一个进程中的多个线程可以并发执行,一个程序要运行至少有一个进程。 并发和并行 并发:多个线程同时竞争一个位置,竞争到的才可以执行,每个时间段只有一个线程在执行。 并行:多个线程可以通知执行,每个时间段,可以有多个线程执行。 通俗地说,多线程程序在单核CPU上运行就是并发,多线程程序在多核CPU上运...阅读全文

简书 2021-04-08 10:32:31 learninginto

25 goroutine channel实现并发和并行(二)

为什么要使用goroutine 打印1-100000之间的素数(为了延长程序的执行时间,不采用开方的算法) 传统方法,通过for循环遍历各个数 使用并发或并行,将统计素数的任务分配给多个goroutine去完成 goroutine结合channel func main() { fmt.Println("开始") start := time.Now().Unix() for num := 2; num < 100000; num ++ { var flag = true for i := 2; i...阅读全文

简书 2021-04-08 10:32:31 learninginto

Go语言实战流媒体视频网站

download:Go语言实战流媒体视频网站 本课程带着同学们使用Go语言实战一个流媒体视频网站。从后端Server到前端UI,全面掌握Go语言的开发关键技能和Go语言编码的架构风格。同时通过讲述SOA服务化解耦的设计理念,帮助同学们理解真实web服务背后的内容。最后通过架构调整实现Cloud native(云原生)部署。 适合人群有一定开发经验,对Go语言语法有基本了解想做Go项目实践的开发者技术储备要求HTTP协议,SOA相关,Web service相关知识go语言语法基础func Asyn...阅读全文

51CTO博客 2021-04-08 01:05:36 mb606da4dda44b2

leetcode 搜索旋转排序数组 golang

81. 搜索旋转排序数组 II 解题思路 二分的变形,我们之前二分查找基于这样的一个假设:我们定位到一个元素后,这个元素的前后分别都是单调的。 但是这边的数组是旋转的。 所以我们需要修改的是判定逻辑 如果我们可以判定出来 那边是旋转的,那边是自增的。则可以通过边界判断 如果不行,则进行递归。 代码实现 func search(nums []int, target int) bool { i,j := 0,len(nums)-1 A := nums for i<=j{ mid := (i+j)/2...阅读全文

简书 2021-04-08 08:32:31 lucasgao

一个消失了一年多的阿沐要回归了?都做了些什么?

多读书,爱读书 1、前言哈喽,大家好,我是阿沐!当大家看到这篇文章的时候,公众号已经正式更名为“我是阿沐”。清明节期间,在别的群里看到我的文章,很抱歉,我居然断更了两年之久。古人云:”不积跬步,无以至千里,不积小流,无以成江海。骐骥一跃,不能十步,驽马十驾,功在不舍“,我们终将败在了生活的细节,扰乱了我们的发丝。并不是我未坚持,且听我娓娓道来。2、备孕看到这个词,我自己也笑出声了,很不好意思,很害羞的赶脚。 不好意思的笑了 2018年结婚,一直到2019年考虑要孩子的问题。我本身当时在国内最大的...阅读全文

简书 2021-04-07 22:32:33 我是阿沐

Ngrok搭建笔记

环境准备 VPS 这里以阿里云ECS为例,操作系统为CentOS7(64位)。 域名 将一个域名或二级域名泛解析到VPS服务器上。 例如将*.ngrok.tanxin.link解析到VPS的IP。 要注意,此时还需要将ngrok.tanxin.link的A记录设置为VPS的IP。 软件下载地址: go的下载地址:http://www.golangtc.com/download git的下载地址:http://git-scm.com/downloads 绝对下载地址:https://www.ker...阅读全文

简书 2021-04-07 21:32:35 谈谈谈谈x

C++多线程并发基础

什么是C++多线程并发? 线程:线程是操作系统能够进行CPU调度的最小单位,它被包含在进程之中,一个进程可包含单个或者多个线程。可以用多个线程去完成一个任务,也可以用多个进程去完成一个任务,它们的本质都相当于多个人去合伙完成一件事。 多线程并发:多线程是实现并发(双核的真正并行或者单核机器的任务切换都叫并发)的一种手段,多线程并发即多个线程同时执行,一般而言,多线程并发就是把一个任务拆分为多个子任务,然后交由不同线程处理不同子任务,使得这多个子任务同时执行。 C++多线程并发: C++98标准中...阅读全文

简书 2021-04-07 21:32:35 诗人和酒

2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,...

2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,右部分累加和}的最大值是多少? 整个过程要求时间复杂度O(N)。 福大大 答案2021-04-07: 自然智慧即可。 1.算出总累加和。 2.依次遍历,算出左累加和、右累加和。假设最小值是min。 3.当min大于ans时,保存min到ans中。 4.当左累加和大于右累加和时,退出循环。 5.返回ans。...阅读全文

简书 2021-04-07 21:32:33 福大大架构师每日一题

双指针团灭删除有序数组中的重复项系列

26. 删除有序数组中的重复项 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。 image image 解题思路 由于题目已明确告知 不使用额外数组空间,必须在原地修改输入数组,因此不能采用诸如 哈希表 等通过开辟额外空间的方法去解决。又由于题目告知数组是 升序排列 的,因此可以通过 设置两个均指向数组第一个元素(从第零个元素开始算)的...阅读全文

简书 2021-04-07 19:32:38 公众号TanLiuYi00

Golang二维切片初始化

Golang二维切片初始化 引言 之前,刷Leetcode的时候,有些题需要初始化二维数组,而一维数组的初始化,比如: var a = [5]int{1, 2, 3, 4, 5} // 用var b := [5]int{1, 2, 3, 4, 5} // 用类型推断 var c = [...]int{1, 2, 3, 4, 5} // 不确定长度 d := [...]int{1, 2, 3, 4, 5} 如果不知道数组元素的话,可以这样: var a [5]int b := [5]int{} c...阅读全文

简书 2021-04-07 19:32:35 Dreamcats