获得徽章 0
- #青训营 x 字节后端训练营#
学习一下网络:
由上到下分为4层:
应用层,由使用因特网通信来完成任务的软件单元组成,如客户机和服务器,使用FTP/SSH的软件等实用软件,HTTP,DNS,FTP
传输层,接受来自应用层的报文,确保以正确格式传输,常常切片标记,到了目的地的传输层才按标记过的顺序组装,TCP,UDP
(这是为了防止长报文阻塞其他报文流)
网络层,决定 分组(即上面切片的片段)的下一个发送方向,使用路由器的转发表来达到这一目的,选路线,IP
链路层,传送分组(实际传输),有关连接网络的硬件处理
这种传输的方式类似于现实生活中的快递,一样物品在包装过后,经过一系列中转站,最终运到买方,然后再进行拆包装,得到了最后那个原来开始的物品,才算运输完成
路由器:在链路层和网络层上
HTTPS 是在HTTP基础上加入了SSH展开赞过评论1 - #青训营 x 字节后端训练营#
今天主要了解了一下经典的排序算法,那些实际中的混合排序代码流程,以及可以优化的方面,主要需要考虑的是对快速排序算法的优化,对基准值的选取等,可以通过采样的方式来进行局部的选择优化,还去学习了快速排序算法,有很多版本,现在就了解了递归的版本,实践的测试过程中,尝试用其原理自己书写,但发现当增大切片的长度,比如由10增加到30多时,由一开始的0.34~0.4s等,到后面的甚至60s都无法出结果,并伴随着散热器的声音变大。由此可见递归的一些缺陷。展开评论点赞 - #青训营 x 字节后端训练营#
今天简要看了一下database/sql的基本用法
这是一个接口,用来抽象化各种不同的数据库,使得对他们的操作一致的格式,而具体的连接就需要导入实现这个接口的包,对于mysql来说就是托管在github上的driver
调用sql.Open来连接及错误处理等一系列快速访问的模型
并学习了部分的设计原理,但没有了解具体细节,大概的就是从连接池中获取连接,直到所有连接都失败,迫不得已才选择新建一个连接。将连接放回连接池,由连接实现一系列接口
并提到了一种新的结构体化的接口connector,以解决open中的一大串看不懂的字符串展开评论点赞 - #青训营 x 字节后端训练营#
错误处理较为简洁,error是一个接口,仅一个error()的返回string类型的方法。
errors.New(“”)可以返回错误信息
panic 与 recover,一个用于主动抛出错误,一个用于捕获panic抛出的错误
引用其中笔记:
1、panic 在没有用 recover 前以及在 recover 捕获那一级函数栈,panic 之后的代码均不会执行;一旦被 recover 捕获后,外层的函数栈代码恢复正常,所有代码均会得到执行;
2、panic 后,不再执行后面的代码,立即按照逆序执行 defer,并逐级往外层函数栈扩散;defer 就类似 finally;
3、利用 recover 捕获 panic 时,defer 需要再 panic 之前声明,否则由于 panic 之后的代码得不到执行,因此也无法 recover;展开评论点赞 - #青训营 x 字节后端训练营#
接口,一种抽象的东西,对某些类所共有的某种方法抽离出来,在go中是隐式实现接口,不用使用关键字。评论点赞 - #青训营 x 字节后端训练营#
再次回顾一下结构体吧
对结构体的成员访问,可以
1 结构体.成员
2 * &结构体(指向结构体的指针).成员
3 * &结构体.成员(指向结构体成员的指针)
相邻的成员类型如果相同的话可以被合并到一行
一个命名为S的结构体类型将不能再包含S类型的成员 可以包含*S指针类型的成员
较大的结构体通常会用指针的方式传入和返回
可比较的结构体类型和其他可比较的类型一样,可以用于map的key类型
结构体的嵌套(有种继承的味道)
Go语言有一个特性让我们只声明一个成员对应的数据类型而不指名成员的名字;这类成员就叫匿名成员。匿名成员的数据类型必须是命名的类型或指向一个命名的类型的指针。展开赞过评论1 - #青训营 x 字节后端训练营#
init()函数 在执行main()前进行初始化
多个文件的init()执行顺序,最内层导包的init()逐步执行到主文件的init()(对于不同包)
init函数先于main函数自动执行,不能被其他函数调用;
init函数没有输入参数、返回值;
每个包可以有多个init函数;
包的每个源文件也可以有多个init函数;
*同一个包*的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序。展开赞过评论1