不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

心就那么大,重了装不下,也跳不动,这是我最近悟出来的,也是道家的一种心法。(网上看的,是不是真的就不知道了…)

这段时间经历了我从毕业以来的低谷期,和安恒的面试官闲聊的时候眼泪和鼻血控制不住地都流了出来,我知道,这只是我人生路上的一道坎,跨过去就好,是的,说起来容易,但考虑的事情很多很多…

国庆回了趟家,彻底放松了一下,节后面试大厂,结束后闲聊了四十分钟,让我发觉大公司和中小公司面试的区别非常大。

我一直想把我最好的一面展现出来,以至于简历写了很多自以为曾经拿过奖就是自己能力的奖项,殊不知人会老,技能不练就倒退这个道理。

不过还好,一切都来得及。

阅读全文 »

使用Helm管理Kubernetes应用

什么是Helm?

Helm是一个kubernetes应用的包管理工具,用来管理charts————预先配置好的安装包资源,有点类似于Ubuntu的APT和CentOS中的yum。

Helm的三个组件

  • Chart: 一系列 k8s 资源集合的命名,它包含一系列 k8s 资源配置文件的模板 与参数,可供灵活配置
  • Repo: 即 chart 的仓库,其中有很多个 chart 可供选择,如官方 helm/charts
  • Release: 当一个 Chart 部署后生成一个 release
阅读全文 »

本文笔记源自专栏《职场求生攻略》

职业素养篇

优先级

优先级为什么重要

  • 手忙脚乱,工作不得法,往往是因为优先级没安排好;
  • 时间和精力有限;
  • 事情等不起;
  • 对事情的质量要求不同。
阅读全文 »

SRE方法论

确保长期关注研发工作

所有的产品事故都应该有总结,无论有没有触发报警。

在保障服务SLO的前提下最大化迭代速度

错误预算,发布策略。

阅读全文 »

作业

  • 必做:实现⼀个⾃⼰的 validator,⽀持通过 tag 对结构体中的字段进⾏⾮空校验
  • 选做:完成⼀个属于⾃⼰的 restful ⻛格 API 框架

整合 httprouter,sqlx
整合 validator,和 gin 的 binding 库
实现兼容 http.HandlerFunc 的 middleware

作业

1
2
3
4
5
6
7
X86 OOO 
{ x=0; y=0; }
P0 | P1 ;
MOV [x],$1 | MOV [y],$1 ;
MOV EAX,[y] | MOV EAX,[x] ;
locations [x;y;]
exists (0:EAX=0 /\ 1:EAX=0)

并阅读明⽩输出结果。

  • 选做,难度+++:为什么使⽤atomic.cas可以实现⼀个互斥锁,为什么临界区内的内存读写操作不会被重排到 cas 操作之外?
阅读全文 »

作业

  • 必做:封装⼀个数据结构 MyMap,实现并发安全的Load,Store,Delete,LoadAndDelete,LoadOrStore⼏个API(禁⽌使⽤ sync.Map),不⽤考虑性能
  • 选做:编写 benchmark,⽐较 MyMap 与 sync.Map 的同名函数性能差异,输出相应的性能报告(注意,你应该使⽤ RunParallel),将性能⽐较结果输出为 markdown ⽂件
  • 选做:使⽤ channel 实现⼀个 trylock,模板 trylock.go
  • 选做:修复 deadlock.go 的死锁
  • 选做:在 context 学习过程中,我们知道,在⼦节点中 WithValue 的数据,⽗节点是查不到的。请实现⼀个 MyContext,其 WithValue ⽅法赋值的 k,v 在⽗节点中也可以查得到。模板:mycontext.go
  • 选做难度++:实现,或封装社区的 timewheel,使⽤ benchmark 或 pprof ⽐较⼤量 timer 存活时,内置 timer 和 timewheel 的性能差异。不要求提交代码,只需要性能对⽐报告 markdown。

作业

  • 必做:channel ⼀⻚中,找出所有红线报错在 runtime 中的位置,使⽤ Go 1.14.12 版本
  • 选做1:修复 https://golearn.coding.net/p/gonggongbanji/files/all/DF12 中的 test case
  • 选做2:扩展其功能,增加更多的操作符号⽀持(随意发挥)
  • 难度++选做:分析 Go 语⾔新版本的函数调⽤规约,将分析过程总结为 markdown ⽂档

作业

  • 部署好本机的 docker 环境,使⽤ ppt 中的 dockerfile build ⾃⼰的环境

  • 使⽤ readelf ⼯具,查看编译后的进程⼊⼝地址

  • 在 dlv 调试⼯具中,使⽤断点功能找到代码位置

  • 使⽤断点调试功能,查看 Go 的 runtime 的下列函数执⾏流程,使⽤ IDE 查看函数的调⽤⽅:
    (1).必做:runqput,runqget,globrunqput,globrunqget
    (2).选做:schedule,findrunnable,sysmon

  • 课外作业:跟踪进程启动流程中的关键函数,rt0_go,需要汇编知识