-
高质量编程与性能调优实践
课堂重点
- 重点 1 错误和异常处理
-
简单错误
- 优先使用errors.New创建匿名变量直接表示
- 如有格式化需求,使用fmt.Errorf
-
错误的Wrap和Unwrap
- 在 fmt.Errorf 中使用 %w 关键字将一个错误关联至错误链中
- errors.Is() 和 errors.As()
-
recover(?)
- 重点 2 性能优化建议
-
atomic 包
- 锁通过操作系统实现,atomict通过硬件实现。atomic效率比锁高。
-
网络交互之网络传输
课堂重点
- 重点 1 网络传输-UDP
- 发包每次发多少?怎么避免分片?
- 怎么知道没丢包?
- 怎么权衡传输效率和质量?
- 重点 2 网络传输-TCP
- 什么是Timewait
-
认识存储与数据库
课堂重点
- 重点 1 RAID技术
-
主流存储产品剖析
课堂重点
- 重点 1 Linux文件系统的两大数据结构:Index Node & Directory Entry
Index Node 是一个文件的唯一标识 1:1,储存在磁盘
Directory Entry 内存结构(不会持久化到磁盘),与innode的关系是N:1
-
重点 2 分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互
- 分布式文件系统HDFS:
- 分布式对象存储:
-
走进消息队列
-
消息队列-Kafka
-
重点 1 Kafka架构
-
Git 的正确使用姿势与最佳实践
-
Git 对象(object)
- 数据对象(blob object)
- 树对象(tree object)
- 提交对象(commit object)
- tag object
Git
保护分支
MR/PR
版本控制
Git Config --globe --system --local 低级别的配置会覆盖高级别的配置
-
课外阅读知识点
- Git 是一个内容寻址文件系统,核心部分是键值对数据库(key-value data store)。
-
Go 1.19 排序算法实践
-
benchmark结论
- 所有短序列和元素有序情况下,插入排序性能最好
- 在大部分的情况下,快速排序有较好的综合性能
- 几乎在任何情况下,堆排序的表现都比较稳定
-
pdqsort
- 对于短序列 (<=24) 使用插入排序
- 其他情况,使用快速排序 (选择首个元素作为 pivot) 来保证整体性能
- 当快速排序表现不佳时 (limit==0) ,使用堆排序来保证最坏情况下时间复杂度仍然为 O(nlogn)
-
优化-Pivot 的选择
- 短序列(<=8),选择固定元素
- 中序列(<=50),采样三个元素,median of three
- 长序列(>50),采样九个元素,median of medians
-
深入浅出 RPC
-
中间件
- c.Next()
- c.Abort()
- c.Set(key, value) 和c.Get()