笔记7 | 青训营

53 阅读2分钟
  1. 高质量编程与性能调优实践

课堂重点

  • 重点 1 错误和异常处理
  1. 简单错误

    1. 优先使用errors.New创建匿名变量直接表示
    2. 如有格式化需求,使用fmt.Errorf
  2. 错误的Wrap和Unwrap

    1. 在 fmt.Errorf 中使用 %w 关键字将一个错误关联至错误链中
    2. errors.Is() 和 errors.As()
  3. recover(?)

  • 重点 2 性能优化建议
  1. atomic 包

    1. 锁通过操作系统实现,atomict通过硬件实现。atomic效率比锁高。
  1. 网络交互之网络传输

课堂重点

  • 重点 1 网络传输-UDP
  1. 发包每次发多少?怎么避免分片?
  2. 怎么知道没丢包?
  3. 怎么权衡传输效率和质量?
  • 重点 2 网络传输-TCP
  1. 什么是Timewait
  1. 认识存储与数据库

课堂重点

  • 重点 1 RAID技术
  1. 主流存储产品剖析

课堂重点

  • 重点 1 Linux文件系统的两大数据结构:Index Node & Directory Entry

Index Node 是一个文件的唯一标识 1:1,储存在磁盘

Directory Entry 内存结构(不会持久化到磁盘),与innode的关系是N:1

  • 重点 2 分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互

    • 分布式文件系统HDFS:
    • 分布式对象存储:
  1. 走进消息队列

  1. 消息队列-Kafka

  • 重点 1 Kafka架构

  1. Git 的正确使用姿势与最佳实践

  1. Git 对象(object)

  • 数据对象(blob object)
  • 树对象(tree object)
  • 提交对象(commit object)
  • tag object

Git

保护分支

MR/PR

版本控制

Git Config --globe --system --local 低级别的配置会覆盖高级别的配置

  1. 课外阅读知识点

  1. Git 是一个内容寻址文件系统,核心部分是键值对数据库(key-value data store)。
  1. Go 1.19 排序算法实践

  1. benchmark结论

  • 所有短序列元素有序情况下,插入排序性能最好
  • 在大部分的情况下,快速排序有较好的综合性能
  • 几乎在任何情况下,堆排序的表现都比较稳定
  1. pdqsort

  • 对于短序列 (<=24) 使用插入排序
  • 其他情况,使用快速排序 (选择首个元素作为 pivot) 来保证整体性能
  • 当快速排序表现不佳时 (limit==0) ,使用堆排序来保证最坏情况下时间复杂度仍然为 O(nlogn)
  1. 优化-Pivot 的选择

  • 短序列(<=8),选择固定元素
  • 中序列(<=50),采样三个元素,median of three
  • 长序列(>50),采样九个元素,median of medians
  1. 深入浅出 RPC

  2. 中间件

  1. c.Next()
  2. c.Abort()
  3. c.Set(key, value) 和c.Get()