项目开发过程中的管理规范

平台项目管理规范(Go语言版本) 1 编码规范 go版本 go1.13.4 开发环境 linux/mac/windows git版本 2.7.3+ 是否需要go fmt 需要 是否需要代码检查 需要 是否需要golint 需要 是否需要本地自测 需要 是否需要go mod tidy && go mod vendor 需要 平台目录结构: apis api接口文档(goSwagger) APP-META 前端页面入口 bin 项目编译生成的二进制文件存放目录 configs 平台支持的模板配置模板...阅读全文

2020-06-30 19:32:48 流雨生
阅读:511 评论:0

Golang 限流器的使用和实现

限流器是服务中非常重要的一个组件,在网关设计、微服务、以及普通的后台应用中都比较常见。它可以限制访问服务的频次和速率,防止服务过载,被刷爆。 限流器的算法比较多,常见的比如令牌桶算法、漏斗算法、信号量等。本文主要介绍基于漏斗算法的一个限流器的实现。文本也提供了其他几种开源的实现方法。 基于令牌桶的限流器实现 在golang 的官方扩展包 time 中(github/go/time),提供了一个基于令牌桶算法的限流器的实现。 原理 令牌桶限流器,有两个概念: 令牌:每次都需要拿到令牌后,才可以访问...阅读全文

阅读:1256 评论:0

Go 并发模型

今天我们来了解一下 Go 语言的协程并发机制,这也可能是 Go 语言最为吸引人的特性了,了解它的原理和底层机制对于掌握 Go 语言大有裨益,话不多说开始吧! 并发和并行 并发和并行都是为了充分利用 CPU 多核计算资源所提出来的概念,相信我们或多或少都对二者的概念有所了解: 并发指的是在同一时间段内,多条指令在 CPU 上同时执行; 并行指的是在同一时刻内,多条指令在 CPU 上同时执行。 并发程序并不要求 CPU 具备多核计算的能力。在同一时间段内,多个线程会被分配一定的执行时间片,在 CPU...阅读全文

2020-06-30 23:32:54 雪上霜
阅读:336 评论:0

GO面试--【长期更新】

Golang基础- 1.select是随机的还是顺序的? 答:select会随机选择一个可用通道做收发操作 2.Go语言局部变量分配在栈还是堆? 答:Go语言**编译器**会自动决定把一个变量放在栈还是放在堆,编译器会做逃逸分析,当发现变量的作用域没有跑出函数范围,就可以在栈上,反之则必须分配在堆。 3、struct可以比较吗? 答:可以比较也有不可以比较的(map func slice) 4.简述一下golang的协程调度原理? 答:M(machine): 代表着真正的执行计算资源,可以认为它...阅读全文

2020-07-04 15:32:39 特伦姝
阅读:700 评论:1

「译文」Go 语言内存管理与分配

内存管理与分配 原文:Memory Management and Allocation 本文基于Go1.13 当内存不被使用时,Go 标准库会自动执行 Go 内存管理,即将内存分配到内存收集器。因为开发人员不必处理它,所以 Go 对隐含的内存管理进行了很多的优化并且衍生了很多概念。 堆上的分配 内存管理旨在在并发环境中快速运行,并与垃圾回收器集成在一起。让我们从一个简单的示例开始: package main type smallStruct struct { a, b int64 c, d fl...阅读全文

阅读:506 评论:0

API网关的设计思考

作为技术,尤其是后端开发,从一开始工作就一直会和nginx打交道。它已经是现代互联网企业的事实网关标准了。即使各个公司都自研了各种不同的网关,但是大多数还是会在请求最前端部署一层nginx。它的稳定性、可靠性以及性能方面的口碑都是非常非常好的。在我刚开始工作那时,就特别崇拜nginx。在这个网络的时代,nginx作为网关,它涉及到了非常多有深度的后端技术。比如: 网络协议 事件驱动的异步编程 高度可扩展的架构设计 高可用设计(热加载热更新) 恰当的数据结构设计 极致的性能优化 在我看来,ngin...阅读全文

阅读:387 评论:0

golang-面霸-面试题-真题

仅供学习笔记,如有侵权,请联系作者删除Golang面试真题1、结构体类型的比较-结构体的比较问题(1-1)、只有相同的类型的结构体才可以比较(1 结构体的属性类型, 2 属性的顺序) (1-2)、即使两个结构体的属性类型和顺序相同,但是里面存在不可比较类型,依然是不可以直接==比较的。 比如 map,slice 可以参考用reflflect.DeepEqual方法来进行比较2、string与nil赋值问题2-1、nil空值的赋值 空值, 空指针,所有Golang中的引用类型都可以用nil进行赋值...阅读全文

2020-07-17 16:32:49 特伦姝
阅读:1041 评论:0

Golang学习笔记-Golang中的锁

同步原语和锁 Golang作为一个原生支持用户态的语言,当提到并发进程,多线程的时候,是离不开锁的,锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多个 Goroutine 在访问同一片内存时不会出现竞争条件(Race condition)等问题。 基于原语 go语言在sync包中提供了用于同步的一些基本原语,包括常见的sync.Mutex,sync.RWMutex,sync.WaitGroup, sync.Once,sync.Cond. 这些基本原...阅读全文

2020-07-18 21:32:47 LegendGo
阅读:1248 评论:1

排序算法

前言 golang实现排序算法 正文 选择排序 func selectSort(arr []int) { for i := 0; i < len(arr)-1; i++ { minIndex := i for j := i + 1; j < len(arr); j++ { if arr[j] < arr[minIndex] { minIndex = j } } swap(arr, i, minIndex) } } 冒泡排序 func bubbleSort(arr []int) { for i :...阅读全文

2020-07-21 12:32:45 k洛洛
阅读:193 评论:0

年度最佳【golang】sync.Pool详解

最近在工作中碰到了 GC 的问题:项目中大量重复地创建许多对象,造成 GC 的工作量巨大,CPU 频繁掉底。准备使用 sync.Pool 来缓存对象,减轻 GC 的消耗。为了用起来更顺畅,我特地研究了一番,形成此文。本文从使用到源码解析,循序渐进,一一道来。本文基于 Go 1.14是什么sync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的...阅读全文

2020-09-08 11:32:32 去去1002
阅读:328 评论:0

年度最佳【golang】map详解

这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。我要说明的是,这里对 map 的基本用法涉及比较少,我相信可以通过阅读其他入门书籍了解。本文的内容比较深入,但是由于我画了各种图,我相信很容易看懂。什么是 map维基百科里这样定义 map:In computer science, an associative array, map, symbol table, or dictionary is an abs...阅读全文

2020-09-09 09:32:35 去去1002
阅读:2672 评论:2

图解 Go 内存管理器的内存分配策略

关于Go的内存分配 在 Go 语言里,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由 Go 在底层完成的。虽然开发者在写代码时不必过度关心内存从分配到回收这个过程,但是 Go 的内存分配策略里有不少有意思的设计,通过了解他们有助于我们自身的提高,也让我们能写出更高效的 Go 程序。 Go内存管理的设计旨在在并发环境中快速运行,并与垃圾回收器集成在一起。让我们看一个简单的示例: package main type smallStruct struct { a, b int64 c, ...阅读全文

2020-09-10 19:32:42 小美人鱼失去的腿
阅读:367 评论:0

高并发优雅的做限流

技术分析如果你比较关注现在的技术形式,就会知道微服务现在火的一塌糊涂,当然,事物都有两面性,微服务也不是解决技术,架构等问题的万能钥匙。如果服务化带来的利大于弊,菜菜还是推荐将系统服务化。随着服务化的进程的不断演化,各种概念以及技术随之而来。任何一种方案都是为了解决问题而存在。比如:熔断设计,接口幂等性设计,重试机制设计,还有今天菜菜要说的限流设计,等等这些技术几乎都充斥在每个系统中。就今天来说的限流,书面意思和作用一致,就是为了限制,通过对并发访问或者请求进行限速或者一个时间窗口内的请求进行限...阅读全文

2020-09-27 20:32:33 菜菜
阅读:1134 评论:0

gin框架sentinel流量控制初体验

image.png 流量控制设计理念 流量控制有以下几个角度: 资源和资源之间的关系; 运行指标,例如 QPS、线程池、系统负载等; 控制的效果,例如直接限流、冷启动、匀速+排队等待等。 Sentinel提供了几个组件让用户去实现相关的流控方案: 基于QPS的流量控制:流量控制 基于协程数的隔离流控:并发隔离控制 基于热点参数的流量控制:热点参数限流 基于系统指标的自适应流控:系统自适应流控 Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。 https:...阅读全文

2020-10-08 21:32:43 SailSea
阅读:2411 评论:0

业务压力一大就宕机?一文带你搞懂限流熔断!

“在分布式应用中,最常见的问题是什么呢?”“一个分布式应用部署上去后,还要关注什么?”“这服务的远程调用依赖似乎有点多...”前言在 《微服务的战争:级联故障和雪崩》中有提到,在一个分布式应用中,最常见,最有危险性之一的点就是级联故障所造成的雪崩,而其对应的解决方案为根据特定的规则/规律进行流量控制和熔断降级,避免请求发生堆积,保护自身应用,也防止服务提供方进一步过载。简单来讲就是,要控制访问量的流量,要防各类调用的强/弱依赖,才能保护好应用程序的底线。诉求,期望诉求:作为一个业务,肯定是希望自...阅读全文

阅读:931 评论:0

关于GO语言,这篇文章讲的很明白

摘要:本文从Go的语法,类型系统,编码风格,语言工具,编码工具和使用案例等几方面对Go语言进行了学习和探讨。Go语言发布之后,很多公司特别是云厂商也开始用Go语言重构产品的基础架构,而且很多企业都是直接采用Go语言进行开发,最近热火朝天的Docker就是采用Go语言进行开发的。本文我们一起来探讨和学习一下Go语言的技术特点。先来看个例子:package main import ( "fmt" "time" ) // 要在goroutine中运行的函数。done通道将被用来通知工作已经完成。 fu...阅读全文

2020-10-16 23:32:33 华为云开发者社区
阅读:1198 评论:0

天道酬勤,T9晋级答辩通过

2020年9月4日答辩结束,9月26日答辩结果公布:成功晋级!回想这一路的历程,颇有收获,这里把简要的过程记录如下,希望更多同学看了能有所收获:第一轮过ppt项目主要突出两点:业务价值 + 技术挑战;第二轮过ppt答辩ppt不要求全,但求精,把能充分证明自己能力的部分充分提现出来即可;重视一些运营类的数据,继续记住的数据指标用表哥列出来!第三轮过ppt晚上按照“提出问题-分析问题-解决问题-效果展示”的思路,重新整理了一版思维导图,思路清晰了不少!第四轮过ppt重点关注指标的方面:指标是多少?为...阅读全文

阅读:1904 评论:0

golang基于redis和机器内存的多级缓存

matryoshka 支持分布式环境,基于redis和机器内存(memory)的多级缓存。 一级缓存使用 freecache作为本地缓存,当数据在本地缓存中不存在时,会向第二级缓存请求数据。 二级缓存默认使用redis作为分布式缓存,当数据在二级缓存中不存在时,会向资源层请求数据。 当资源层某条数据更新,可以将缓存中对应的数据删除,二级分布式缓存会直接删除,一级内存缓存会默认利用redis的 sub/pub 机制,将所有机器下的数据删除。 功能 支持每级缓存的请求qps、命中qps、请求资源层q...阅读全文

2020-11-07 20:32:47 smoke_zl
阅读:1198 评论:0

2021秋招总结

秋招总结 [TOC] 前言 2021届秋招基本结束,谨以此文做一下梳理与沉淀。 仅限技术栈为后台开发。 2020-11-27 By SeaSon 秋招结果 个人情况本科、硕士都是双非一本,坐标北京,论学校和学历的话并不占优势,实习的时候基本身边都是北邮、北交及以上的同届同学。但是也希望和我一样的学校并不出彩的同学不要放弃,付出总会得到回报的。 有过三家大厂实习:滴滴(Java)、字节(Golang)、阿里(大数据),技术栈不算窄。在实验室也是团队负责人,带过项目。 总的来说,有优势也有劣势,这次...阅读全文

2020-11-27 22:32:40 SkySeason
阅读:4091 评论:0