关于Golang的那些事(八)-- 使用共享变量实现并发

在上一篇文章中,我用goroutine和通道来实现了一种直接和自然的并发方式。在串行程序中(也就是一个程序只有一个goroutine),程序中各个步骤的执行顺序由程序逻辑来决定,比如在一系列语句中,第一句在第二句之前执行,以此类推。如果没有先后顺序,那么这两件事就是并发的。在并发调用的时候如果没有额外的同步机制的情况下,从两个或多个goroutine同时调用这个函数,它们都能正常的运行,那么我们称之为这个函数是并发安全的。 我们经常会遇到并发调用不工作的情况,包括死锁、活锁以及资源耗尽,最重要的...阅读全文

简书 2021-04-12 00:32:34 llkevin13579

DevOps CI/CD 分析(三)之K8S yaml模版配置详解

前面我们讲解了Dockerfile基础命令、编写Dockerfile,因为整个DevOps CI/CD过程所涉及的知识面比较多,所以本节我们则开始总结Kubernetes(K8S) yaml模版配置,当我们比较熟悉Kubernetes(K8S) yaml模版内容时候,那最终在编写gitlab-ci.yml文件时候就游刃有余了! Kubernetes Service&Deployment # 版本号 apiVersion: v1 # Kubernetes资源类型,服务类型 kind: Servic...阅读全文

Go:每分钟处理百万请求

【译文】原文地址 问题 从事匿名遥测和分析系统,我们的目标是能够处理来自大量客户端的POST请求。我们的web服务将接收JSON文档内容包括很多的负载需要发送到亚马逊S3存储,为了后续使用map-reduce来处理这些数据。 传统方式我们将创建worker-tier架构,使用包含如下中间件: SideKiq Resque DelayedJob Elasticbeanstalk worker tier RabbitMQ 搭建两个集群,一个部署前端另一个用于workers,这样就可以通过扩展来应对大...阅读全文

简书 2021-04-12 00:32:34 汪明军_3145

手撸golang 仿spring ioc/aop 之3

手撸golang 仿spring ioc/aop 之3 缘起 最近阅读 [Offer来了:Java面试核心知识点精讲(框架篇)] (王磊 , 2020.6) 本系列笔记拟采用golang练习之 Talk is cheap, show me the code. Spring Spring基于J2EE技术实现了一套轻量级的 Java Web Service系统应用框架。 它有很多优秀的特性,很多公司都选择把 Spring作为产品或项目的基础开发架构。 Spring的主要特性包括: 1. 轻量 2. ...阅读全文

简书 2021-04-12 00:32:33 老罗话编程

2021-04-11:判断二叉树是否是完全二叉树?

2021-04-11:判断二叉树是否是完全二叉树? 福大大 答案2021-04-11: 按层遍历。 代码用golang编写。代码如下: package main import ( "container/list" "fmt" ) func main() { head := &TreeNode{Val: 1} head.Left = &TreeNode{Val: 2} head.Right = &TreeNode{Val: 3} head.Left.Left = &TreeNode{Val: 4}...阅读全文

简书 2021-04-12 00:32:32 福大大架构师每日一题

Golang垃圾回收机制

参考链接: Python中的屏障对象Barrier Objects什么是垃圾回收 曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法: 内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起...阅读全文

51CTO博客 2021-04-11 19:54:55 wx57f63dceec388

RabbitMQ 入门 (Go) - 5. 使用 Fanout Exchange 做服务发现(下)

到目前为止,我一直专注于如何让消息进出消息代理,也就是RabbitMQ。实际上,我们可以继续使用 RabbitMQ 和它的 Exchanges 来连接这个应用程序的其他部分,但是我想探索一个稍微不同的模型:我想使用协调器来跟踪哪些类型的消费者得到消息通知。这样的话,我断开了传感器数据生成器和数据使用者之间的连接。同时为了处理这些数据通信,我决定使用事件(event)来通知用户系统中正在发生的事情,并让他们决定是否要处理数据。 其原理大致如下:在协调器内部,我们有构建好的 QueueListene...阅读全文

51CTO博客 2021-04-11 21:32:51 mb607022e25a607

CentOS6.8配置GO语言开发环境

Go语言是谷歌2009发布的第二款开源编程语言,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 鉴于越来越多的开源项目都采用Go为开发语言,本文介绍Linux(CentOS 6.8)下GO开发环境的搭建与使用。一、Go安装使用1、下载Go源码包https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz上传到/usr/local/src目录下2、...阅读全文

51CTO博客 2021-04-11 17:10:43 mob604756eba0ee

Golang后端面试汇总-001

基础面试 go的调度 GPM是Go语言运行时(runtime)层面的实现,是go语言自己实现的一套调度系统。区别于操作系统调度OS线程。 G很好理解,就是个goroutine的,里面除了存放本goroutine信息外 还有与所在P的绑定等信息。 P管理着一组goroutine队列,P里面会存储当前goroutine运行的上下文环境(函数指针,堆栈地址及地址边界),P会对自己管理的goroutine队列做一些调度(比如把占用CPU时间较长的goroutine暂停、运行后续的goroutine等等)...阅读全文

简书 2021-04-11 14:32:32 流雨声

Golang后端面试汇总-002

micro服务发现 image 服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性。go-micro框架的服务发现有自己能用的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。 go-micro在客户端做的负载,典型的Balancing-aware Client模式。 参考链接: https://www.cnblogs.com/li-peng/p/9689786.html mysql底层有哪几种实现方式 1 MySQL 的常用引擎 a InnoDB...阅读全文

简书 2021-04-11 14:32:32 流雨声

Go jsonrpc

JSON-RPC是一个无状态且轻量级的远程过程调用传送协议,传输内容使用JSON编解码。 JSON-RPC Golang官方提供了net/rpc/jsonrpc库实现了JSON-RPC,net/rpc/jsonrpc包实现了JSON-RPC协议,实现了net/rpc包的ClientCodec和ServerCodec接口,增加了对JSON数据的序列化和反序列化。 jsonrpc采用JSON对数据编解码,因而支持跨语言调用。 jsonrpc库基于TCP实现,暂不支持HTTP进行数据传输。 impor...阅读全文

简书 2021-04-11 03:32:32 JunChow520

leetcode LCP 34. 二叉树染色 golang

LCP 34. 二叉树染色 这道题理解错题意了 改了n久 自己好菜 题目 小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值。小扣出于美观考虑,希望最后二叉树上每个蓝色相连部分的结点个数不能超过 k 个,求所有染成蓝色的结点价值总和最大是多少? 解题思路 设 dp[k] 表示在当前节点染色了k的最大值。 则 dp[0] = max(left,right),dp[k]=max(dp_left[n],dp_right[k...阅读全文

简书 2021-04-11 03:32:31 lucasgao

2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表...

2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。 福大大 答案2021-04-10: 1.获取head1和head2的第一个入环节点。 2.head1和head2环节点的3种情况。 2.1.如果head1和head2只有其中一个有环,直接返回false。 2.2.如果head1和h...阅读全文

简书 2021-04-11 03:32:31 福大大架构师每日一题

Golang数组与切片

Golang数组与切片 数组的声明 func main() { var arr1 [3]int fmt.Println(arr1) var arr2 = [3]int{1, 2, 3} var arr3 = [...]int{1, 2, 3} fmt.Println(arr2, arr3) } [0 0 0] [1 2 3] [1 2 3] Golang中的数组属于静态数组,不允许动态扩展 Golang中数组会默认初始化值 可以通过[...]int{1,2,3}的方式初始化数组 数组的传值 Go...阅读全文

简书 2021-04-11 03:32:31 突击手平头哥

golang 几种字符串的连接方式

参考链接: Go-字符串最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现。 实现方法 1. 直接使用运算符 func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world }}func Benchmark...阅读全文

51CTO博客 2021-04-10 14:19:26 wx57f63dceec388

想系统学习GO语言(Golang),能推荐几本靠谱的书吗?

参考链接: Go语言-决策以下内容来自知乎: 链接:https://www.zhihu.com/question/30461290 学习任何一门语言,都要学习好基础,把基础打牢,那些框架对你来说都是工具,你自己的基础好,懂得了他们的原理,自己就可以创造更优秀的框架。 基础推荐官方文档,没有什么比这个更清晰了。官方文档可以看这个中文的,比较快一些 https://go-zh.org/doc/ 其次参考这个Go指南,练习一遍 https://tour.go-zh.org/welcome/1 现在对G...阅读全文

51CTO博客 2021-04-10 14:14:59 wx57f63dceec388

Golang —— 数据类型转换

参考链接: Go-类型转换目录 一、强制类型转换 二、 strconv包:字符串和数值类型的相互转换 1. Itoa():整型转字符串 integer to alphanumeric 2. Atoi():字符串转整型 alphanumeric to integer 3. Parse 系列函数(str转其他): ParseBool()、ParseInt()、ParseUint()、ParseFloat() 4.Format 系列函数(其他转str): FormatBool()、FormatInt(...阅读全文

51CTO博客 2021-04-10 11:29:45 wx57f63dceec388

golang--算法--数组&链表

参考链接: Go-数组关于数组和链表的几个必知必会的代码实现 数组 实现一个支持动态扩容的数组实现一个大小固定的有序数组,支持动态增删改操作实现两个有序数组合并为一个有序数组链表 实现单链表、循环链表、双向链表,支持增删操作单链表反转链表中的环检测两个有序链表的合并为一个有序链表删除链表倒数第n个结点求链表的中间结点1. 实现两个有序数组合并为一个有序数组代码: package mainimport "fmt"//实现一个支持动态扩容的数组//实现一个大小固定的有序数组,支持动态增删改操作//实...阅读全文

51CTO博客 2021-04-10 11:27:16 wx57f63dceec388

docker 容器运行 golang程序_运行多容器的应用--使用docker-compose

参考链接: Go-程序结构使用docker-compose.yml来定义你的应用,并且使用up/down命令来运行,这样可以让你对多容器的应用进行编排。 Compose是一个定义和运行多容器应用的工具, 也就是容器编排工具。使用Compose时,你会使用到一个Compose配置文件去配置你的应用的各个服务。然后通过使用这个配置文件就可以一条命令启动所有的服务。 和docker命令的类似之处 Docker-compose命令大体上和docker命令类似,除了一些给多容器应用的使用的附加指令。尤其是...阅读全文

51CTO博客 2021-04-10 11:21:07 wx57f63dceec388