原标题:Golang后端开发学习之路
12月17日
Go语言学习
1、【一文Go起来】快速上手篇
2、 IDE:GoLand的安装,破解版
3、 golang安装
4、运行第一个go程序
5、 彻底搞懂golang的GOROOT和GOPATH
6、 Go语言中 Print,Println 和 Printf 的区别
7、 Go 语言切片(Slice)
8、 Golang 内置函数:make()
9、 golang make的使用
10、 Go语言的格式化输出中%d%T%v%b等的含义
11、 Go中的格式化打印:“%+v”和“%v”的区别
12、 %v %+v %#v的区别
13、 Golang之nil的妙用
14、Golang中的nil,没有人比我更懂nil!
15、 go语言,ok和_,ok模式
16、 关于逗号ok模式
17、 go语言中fallthrough用法
18、 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
笔记
Go是一种静态、强类型、编译型、并发型的编程语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性,是开发者平常常用的语言之一,也是云原生开发的通用语言。
感悟
其实,还真不是学习语法就好了呢,其中包含了很多 Go 的设计理念。
正所调好记性不如敲烂键盘,学过的东西,还是要沉淀沉淀,也可以分享出来一起探讨,更有助于成长,于是我就简单记录了一下我的 Go 语吉学习笔记。
12月18日
asyncflow项目
1、开会,听项目的报告分析
笔记:
整个项目是为了解决什么问题?
考虑到在多场景的情况下会有很多相同的操作,我们可以把**“ 任务的调度、异常的处理、数据的存储、流量控制”**等这部分共性的东西抽象出来,做成通用化组件化的框架,也就是做一个通用的任务异步处理框架,节省开发时间,提高开发效率。
12月19日
asyncflow项目
1、 姜睿的方案设计
2、 生产者消费者模型
3、 并发、并行、异步、同步(可以看看评论区)
4、 并发和异步从概念上理解有什么区别?
5、 多线程和并发
6、 Kafka 百度百科
7、 小朋友也可以懂的Kafka入门教程
8、 认识gin
笔记:
1、什么是broker?broker是指一个独立的Kafka服务器。
2、客户端发送出来任务可以看成是生产者生成出来任务,框架就相当于消费者,去处理这些任务。生产者和消费者通过内存缓冲区去通讯。
3、go语言设计的时候没有一定的设计标准,没有规定一定是面向对象或者一定是面向过程,它有自己的一套规则,代码既可以写成面向对象的,也可以写成面向过程的,甚至可以是go风格的代码,所以比较灵活,因此就诞生了众多不同类型的框架,各具特色,满足不同开发人员的喜好。
www.yii666.com4、go的框架其实是可以理解为库,并不是说用了某一个框架就不能用别的框架,go允许可以选择性的使用各个库中的优秀组件,进行组合。因为每个框架都不可能是十全十美的,都会有各自的优点特色,而go语言拥有的这种集成的特性对于我们解决问题是非常有帮助的。
5、broker是由服务(用gin得到的web服务)+ 存储组成。存储做成通用接口性的,而要想访问这个接口,就需要gin起一个web服务来作为入口,对外是透明的。
6、Worker的作用是拿任务来做,也就是去拿取待执行的任务,然后去处理。
12月20日
Go语言学习
1、 Golang的设计思想就是用通信代替共享内存
2、 channel有缓冲与无缓冲同步问题
3、 面试高频问题:有缓冲和无缓冲通道的区别?
4、 侵入式和非侵入式的区别
5、 线程和协程的区别的通俗说明
async
文章来源地址https://www.yii666.com/blog/19771.html
flow项目1、 简单理解消息队列
笔记
1、需要有一个任务治理的服务,在例如线程挂掉了,长期得不到更新的时候,可以派上用场。这个服务可以写在broker的服务部分,共享一个服务,因为broker本身做的事情不多,当然也可以抽出来,抽出来的话就会更加解耦的。
2、更新任务的结果到Backend,最后client去文章来源站点https://www.yii666.com/获取。
3、存储的话,一般是全部放在broker里面,因为它要做一个任务的管理,放到broker里面,可以实时查到任务的状态。
4、状态机没有考虑到。任务到底有几种状态,这其实是很重要的。
5、有三个worker同时从broker取一个东西,那么如何处理竞争关系呢?(多机竞争)可以用分布式锁,因为任务的调度需要不少时间,所以通常来说是状态更新之后,就可以释放锁了,不用专门等到任务完成、任务超时、任务异常。比如一开始worker都是待执行状态的,拿到任务之后是执行中状态,更新成功之后就马上释放锁,这样锁的力度也不会太大,锁的力度能小就小,不然会很慢,会成为一个瓶颈的,减少锁占用的时间也www.yii666.com是一种优化方式。分布式锁是一个最常规的,很多时候也是最行之有效的解决方案。
课外扩展
笔记
1、微服务可以理解为是一种设计思想,就是把系统里面的业务全部拆开,变成一个个系统,需要用到的时候我们再去访问它,比如现在有一个很热门的主播,大家疯狂给它刷弹幕,打挂了弹幕系统,但是只要礼物系统还没有挂,就丝毫不会影响给主播刷礼物。而且业务拆分之后,单服务的扩展也十分的方便了,大家继续给他刷礼物,快刷爆礼物系统了,我们可以临时去服务器的厂商那边租一些服务器,把礼物系统的代码部署上去,然后重新上线,去分摊一下礼物系统的流量,等主播下播之后,流量下去了,我们再把服务器还回去,流量的压力得到了缓解,钱一分是没感知的。
12月21日
asyncflow项目
1、 什么是任务调度?什么是分布式任务调度?
2、 【分布式存储】与【传统存储】的区别是什么?
3、 一分钟让你轻松了解清楚什么是分布式存储
4、 能不能通俗的讲解下什么是状态机?
笔记
1、统一异常处理属于微服务治理的重要环节,不管公司规模大小,并发量多大,都要做。比如eBay这种大厂,它的交易量非常大,但它的框架层和业务层错误处理做得非常细致,反倒是一些中小公司常常忽略异常处理。异常处理发生时的确有一定的性能损耗,但是这个是必须的,而且生产级代码是建议尽可能细致全面的做错误处理,目前没有证据显示,细粒度的错误处理会引发性能问题。另外,很多大厂的服务框架都有统一异常处理逻辑,统一异常处理有利于规范和后续的运维。
2、某大牛的回答(关于微服务异常设计实践的问题) :
我之前设计框架的时候,一般只设计两类异常,一类是框架异常(或者你说的系统异常),另一类是业务异常(业务开发自己定制扩展)。
异常种类不需要太多,但是错误码(error code)和错误消息(error message)可以按需定义。你提到的回滚操作可以根据错误码判断。
3、状态机: 多个状态和状态之间的转换组成状态机
12月22日
asyncflow项目
1、 什么是负载均衡?
2、 什么是分库分表?何时进行分库分表?
12月23日
感悟
1、主线进度优先级最高,然后是项目=算法练习>workshop