当前位置: 首页 > news >正文

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风格的代码,所以比较灵活,因此就诞生了众多不同类型的框架,各具特色,满足不同开发人员的喜好。
4、go的框架其实是可以理解为库,并不是说用了某一个框架就不能用别的框架,go允许可以选择性的使用各个库中的优秀组件,进行组合。因为每个框架都不可能是十全十美的,都会有各自的优点特色,而go语言拥有的这种集成的特性对于我们解决问题是非常有帮助的。
5、broker是由服务(用gin得到的web服务)+ 存储组成。存储做成通用接口性的,而要想访问这个接口,就需要gin起一个web服务来作为入口,对外是透明的。
6、Worker的作用是拿任务来做,也就是去拿取待执行的任务,然后去处理。

12月20日

Go语言学习

1、 Golang的设计思想就是用通信代替共享内存
2、 channel有缓冲与无缓冲同步问题
3、 面试高频问题:有缓冲和无缓冲通道的区别?
4、 侵入式和非侵入式的区别
5、 线程和协程的区别的通俗说明

asyncflow项目

1、 简单理解消息队列

笔记

1、需要有一个任务治理的服务,在例如线程挂掉了,长期得不到更新的时候,可以派上用场。这个服务可以写在broker的服务部分,共享一个服务,因为broker本身做的事情不多,当然也可以抽出来,抽出来的话就会更加解耦的。
2、更新任务的结果到Backend,最后client去获取。
3、存储的话,一般是全部放在broker里面,因为它要做一个任务的管理,放到broker里面,可以实时查到任务的状态。
4、状态机没有考虑到。任务到底有几种状态,这其实是很重要的。
5、有三个worker同时从broker取一个东西,那么如何处理竞争关系呢?(多机竞争)可以用分布式锁,因为任务的调度需要不少时间,所以通常来说是状态更新之后,就可以释放锁了,不用专门等到任务完成、任务超时、任务异常。比如一开始worker都是待执行状态的,拿到任务之后是执行中状态,更新成功之后就马上释放锁,这样锁的力度也不会太大,锁的力度能小就小,不然会很慢,会成为一个瓶颈的,减少锁占用的时间也是一种优化方式。分布式锁是一个最常规的,很多时候也是最行之有效的解决方案。

课外扩展

1、B站的直播架构演进之路分享

笔记

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

相关文章:

  • C++——STL之stack和queue详解
  • 结构体嵌套函数指针
  • 基于Xlinx的时序分析与约束(4)----主时钟约束
  • Arcgis使用教程(十三)ARCGIS地图制图之地图输出参数设置详解
  • QT中Qthread线程彻底销毁的实例与注意事项(防止线程资源内存泄露)
  • PCL点云处理之曲面法线估计(八十二)
  • MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》
  • 数据库系统概论第七章(数据库设计)知识点总结(1)—— 概述
  • 【QT】信号与槽
  • 河道非法采砂识别系统 yolov5
  • JavaWeb语法四:多线程案例
  • Unity使用飞书在线表格做配置表
  • 计算机网络最新复习【太原理工大学】
  • 视频异常检测技术研究进展
  • 【Java 数据结构】-二叉树OJ题
  • [译]如何构建服务器端web组件,为何要构建?
  • CAP理论的例子讲解
  • CentOS6 编译安装 redis-3.2.3
  • Java-详解HashMap
  • maven工程打包jar以及java jar命令的classpath使用
  • node学习系列之简单文件上传
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 大数据与云计算学习:数据分析(二)
  • 翻译--Thinking in React
  • 回流、重绘及其优化
  • 设计模式走一遍---观察者模式
  • 用简单代码看卷积组块发展
  • 字符串匹配基础上
  • 7行Python代码的人脸识别
  • ​一些不规范的GTID使用场景
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ###C语言程序设计-----C语言学习(3)#
  • #android不同版本废弃api,新api。
  • #define用法
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (11)MATLAB PCA+SVM 人脸识别
  • (java)关于Thread的挂起和恢复
  • (pytorch进阶之路)扩散概率模型
  • (离散数学)逻辑连接词
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core 依赖注入的基本用发
  • .NET NPOI导出Excel详解
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET程序员迈向卓越的必由之路
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET下ASPX编程的几个小问题
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • :如何用SQL脚本保存存储过程返回的结果集
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RequestMapping处理请求异常
  • @test注解_Spring 自定义注解你了解过吗?
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具