《高质量编程与性能调优实战》| 青训营笔记

98 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记


近况:所谓取法乎上,得乎其中,通过大量阅读代码规范相关的文章,以及自己亲身实践,现在差不多能写出像模像样的中质量的代码了。

如何定义高质量的代码是主观的,但是高质量代码的作用是客观的

不同语言语法虽然不同,但是代码规范的规则是相通的,说是规则,其实也是根据实际场景总结出来的经验。 规则简单,实践很难。

  • 简单性(不要写过于复杂的代码以及无法排查问题和重构的代码)
  • 可读性(代码给人看,不好的代码浪费大家的时间)
  • 生产力(重视团队效率,统一代码格式,独特的代码风格并不是好事)

1.补充《go代码review建议》

注释回答四问题:

  1. 代码作用
  2. 代码如何作用
  3. 代码为何作用
  4. 代码失效原因

Good code has lots of comments,bad code requires lots of comments


2. 性能优化建议:

  1. 学习使用benchmark测试代码
  2. slice,map预分配内存以及注意释放内存 sl:=make([]type ,0,size)
  3. 使用Builder或buffer处理字符串并且预分配内存 (两者底层都是[]byte,而string内存是固定的)

var builder strings.Builder
builder.Grow(n*len(string))
for i=0;i<n;i++
builder.writerstring(string)

  1. 使用空结构体占位(空结构本身不占内存空间)

m:=make(map[int]struct{}
for int i=0;i<=nums;i++
m[i]=struct{}{}

  1. 使用atomic包(操作由硬件实现,性能比锁高,锁最好运用来保护一段逻辑)

具体细节:Go - atomic包使用及atomic.Value源码分析 - 掘金 (juejin.cn)

3.性能调优实战

数据分析不是凭空猜测,优化终点不是细枝末节,不要为了优化而优化(过犹不及)

pprof-可视化性能和数据的工具 image.png


3.1pprof排查实战

从github上下载项目源码 浏览器中打开http://localhost:6060/debug/pprof image.png 排查了埋藏在内存,协程,锁和阻塞部分的炸弹 重点需要熟悉:火焰图,逐步排查的思想,可视化分析命令操作

##学习总结:

我目前是一个代码能跑就行选手,以前存在代码优化的误区 1.死抠细枝末节,而不是重点。 2.代码缺少注释,可能由于团队合作经验的缺乏。 3.不会是用调试工具,以后需要熟悉练习pprof的操作(现在使用起来还是云里雾里的)