【青训营】1月19日总结

101 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第4天

  1. gin框架中间件:类似于 Node.js 洋葱模型,中心为最终处理请求的 handler,称为 main handler,其他为 middleware handler 。每一个 middleware handle 可以分为两部分,随着 request 的流动,左边是入,右边为出,而分割点就是 next 。昨日总结中的 next 的作用就是明确在这个地方进入到下一个 handler ,如果没有指定,默认是当前 handler 结束后进入下一个 handler。如果遇到 abort 则拦截本次请求禁止向下传播,但是不会影响当前中间件的运行。

image.png

  1. mysql存储音频数据的方案:将音视频文件存储的url信息存入mysql中,如果将音视频文件完整存入mysql则大大增加了mysql的负载

  2. 性能优化:(越高级的性能优化手段越容易出现问题)premature optimization is the root of all evil.

    • 可以使用go自带的Benchmark进行性能测试

    • slice预分配内存,并且在已有切片的基础上创建切片不会创建新的底层数组

      origin[len(origin)-2:]
      result := make([]int,2)
      copy(result,origin[len(origin)-1:])
      return result
      
    • map也应预分配内存

    • 字符串拼接尽量使用strings.Builder(如果已知最终字符串长度可以使用Grow方法进行内存预分配)

  3. http为什么要三次握手(三次握手的作用):三次握手的目的是建立可靠通信,也就是双方确认自己和对方的发送和接收正常

    • 第一次握手:Client什么都不用做;Service确认对方发送正常,自己接收正常

    • 第二次握手:Client确认了自己发送、接收正常,对方发送、接收正常;Service确认了对方发送正常,自己接收

    • 第三次握手:Client确认了自己发送、接收正常,对方发送、接收正常;Service确认了自己发送、接收正常,对方发送、接收正常