获得徽章 0
#青训营 x 字节后端训练营# 不必要的阻塞是什么意思?首先,线性阻塞是指线程因为要等待某些条件(互斥元、条件变量、时间等)无法继续运行时所处的状态。多线程代码中,常用]些条件,而这些条件常常无法获得满足,因此就出现了不必要的阻塞问题。我们着又会提出下一个问题:为什么这个阻塞是不必要的?因为有其他一些线程在等该阻塞的线程执行一些动作,如果该线程阻塞的话,其他线程也势必阻塞。不必的阻塞又分成以下几种。 不必要的阻塞 活锁——当第一个线程等待第二个线程时,而这第二个线程又在等第一个线)情况时,活锁类似于死锁。活锁与死锁的关键不同在于等待过程不是一个阻;状态而是一个不断的循环检测状态,如自旋锁。严重时,活锁的症状就像死(应用不会执行任何进程),不同仅在于 CPU此时的利用率非常的高,因为现;还在不断的运行检测,只因相互等待而阻塞。不太严重时,当某个随机事件;生时,活锁可能会被解锁,但是,活锁会导致任务较长时间得不到执行,并!在这期间 CPU利用率高。
展开
评论
#青训营 x 字节后端训练营# 1、首先安装anaconda

Anaconda是一个基于Python的数据处理和科学计算平台集成环境,它内置了许多非常有用的第三方库,装上Anaconda,就相当于把Python和一些如Numpy、Pandas、Scrip、Matplotlib等常用的库自动安装好了。

Anaconda在官网下载安装就行。(www.anaconda.com

如果国外下载太慢,可以用清华源。

mirrors.tuna.tsinghua.edu.cn

2、查看conda版本:

conda --version

3、查看所有环境:

conda info --envs

4、创建一个环境:

conda create -n pytorch python=3.6 #3.6是我python版本,pytorch是环境名称name
环境之间的关系,像进入另一个房子
5、进入环境:

conda activate pytorch
左边变化成新环境
6、去pytorch官网使用官方的安装命令:
展开
ByteWang于2023-06-10 20:50发布的图片
评论
#青训营 x 字节后端训练营# 在表示锚框的坐标中,[10, 13] 表示锚框的左上角的坐标位置。具体而言,10 表示锚框的左上角在特征图中的水平(x)方向上的位置,13 表示锚框的左上角在特征图中的垂直(y)方向上的位置。

这些坐标值是相对于特征图而言的,而不是相对于原始图像的像素坐标。根据特征图的尺寸和缩放比例,可以通过将这些坐标与特征图上的像素进行映射,来确定锚框在原始图像上的位置和大小。
展开
评论
#青训营 x 字节后端训练营# 主键索引(聚簇索引)查询过程
select * from product where id=5;
在根节点(磁盘块1)索引查找(一次磁盘 I/O 操作)
在第二层(磁盘块2)索引数据查找(一次磁盘 I/O 操作)
在叶子节点(磁盘块N)索引数据查找(一次磁盘 I/O 操作)
二级索引(辅助索引)查询过程
当查询语句select * from product where product_no = '0002';由于字段product_no不是主键,需要先查询二级索引中的B+Tree索引值,获取主键值,通过该主键值,主键索引查询对应叶子节点获取数据。
回表:二级索引查询两个B+Tree过程。
索引覆盖:当查询数据能在二级索引的B+Tree叶子节点中查询到,比如:select id from product where product_no ='0002' # 直接查询主键id;主键索引(聚簇索引)查询过程
select * from product where id=5;
在根节点(磁盘块1)索引查找(一次磁盘 I/O 操作)
在第二层(磁盘块2)索引数据查找(一次磁盘 I/O 操作)
在叶子节点(磁盘块N)索引数据查找(一次磁盘 I/O 操作)
二级索引(辅助索引)查询过程
当查询语句select * from product where product_no = '0002';由于字段product_no不是主键,需要先查询二级索引中的B+Tree索引值,获取主键值,通过该主键值,主键索引查询对应叶子节点获取数据。
回表:二级索引查询两个B+Tree过程。
索引覆盖:当查询数据能在二级索引的B+Tree叶子节点中查询到,比如:select id from product where product_no ='0002' # 直接查询主键id;
展开
ByteWang于2023-06-08 10:48发布的图片
ByteWang于2023-06-08 10:48发布的图片
评论
#青训营 x 字节后端训练营# 三、map预分配内存
map预分配内存可以优化性能 ,其原因类似slice, 因为不断向map中添加元素会触发map扩容,而提前分配好空间可以有效减少内存拷贝和rehash的消耗。
ByteWang于2023-06-07 10:03发布的图片
评论
#青训营 x 字节后端训练营# 性能优化要依靠数据而不是猜测,用统一标准评估,服务优化要定位最大瓶颈而不是细枝末节,不要过早优化,因为产品在不断迭代优化,部分要求可能被更新,预期在即将出现性能问题后进行分析,不能过度优化,部分优化手段在修改需求后可能无法兼容。
性能分析工具pprof是能够可视化和简单性能分析的工具。基于github.com/wolfogre/go… 该项目埋入了炸弹代码,可以产生可观测的性能问题。性能分析主要针对CPU,堆内存,协程goroutine,锁Mutex,阻塞Block等方面进行展开。pprof提供可视化终端来分析代码性能。
六、空结构体
空结构体struct{}实例不占据任何内存空间,可以作为占位符使用,能够节省资源而且具有很强的语义。例如只需要用map代替实现set,值设置为空结构体能够有效节省内存。
七、atomic包
一般锁的实现是通过操作系统调用来实现,而atomic操作是通过硬件实现,效率比锁搞,sync.Mutex应该用来保护一段逻辑而不是仅仅用于保护一个变量,对于非数值操作可以用atomic.Value来承载interface{}。
小结:避免常见性能陷阱可以保证大部分程序的性能,而且不要一味追求程序的性能,越高级的性能优化手段越容易出现问题。
展开
ByteWang于2023-06-06 09:37发布的图片
评论
#青训营 x 字节后端训练营# Mock测试
首先一些软件往往会依赖数据库,Cache和本地文件等,而单元测试目标是幂等和稳定,幂等是指重复运行测试case结果和之前一样,稳定是指单元测试可以相互隔离,能在任何时间对任何函数进行测试。如果存在强依赖,会不符合稳定的原则,因此产生了Mock机制。
常用的开源Mock测试包是monkey。常用功能是Patch(target(原函数), replacement(打桩函数)),打桩即为用函数A替换函数B,内存函数地址替换成运行时函数地址,实现mock功能。以及unpatch()卸载桩。
以下代码中,ReadFirstLine()函数会依赖读取的本地log文件,而通过Mock来替换就不会依赖本地文件了Mock测试
首先一些软件往往会依赖数据库,Cache和本地文件等,而单元测试目标是幂等和稳定,幂等是指重复运行测试case结果和之前一样,稳定是指单元测试可以相互隔离,能在任何时间对任何函数进行测试。如果存在强依赖,会不符合稳定的原则,因此产生了Mock机制。
常用的开源Mock测试包是monkey。常用功能是Patch(target(原函数), replacement(打桩函数)),打桩即为用函数A替换函数B,内存函数地址替换成运行时函数地址,实现mock功能。以及unpatch()卸载桩。
以下代码中,ReadFirstLine()函数会依赖读取的本地log文件,而通过Mock来替换就不会依赖本地文件了
展开
ByteWang于2023-06-05 10:36发布的图片
ByteWang于2023-06-05 10:36发布的图片
评论
#青训营 x 字节后端训练营# go语言中直接传入函数名称:函数也是一种类型,可以作为变量的值,动态绑定请求处理函数。

go mod init创建一个新模块,初始化描述它的go.mod文件。
go build、go test和其他包构建命令根据需要向go.mod添加新的依赖项。
go list-m all列出当前模块及其所有依赖项
go get更改依赖项的所需版本(或添加新的依赖项)。
go mod tidy 删除未使用的依赖项。
展开
ByteWang于2023-06-04 13:19发布的图片
评论
#青训营 x 字节后端训练营# 切片的比较:
不能直接比较两个切片的内容是否相等,因为切片是引用类型,它们的底层数组可能不同,即使它们的元素相同。先比较它们的长度,如果长度不相等,则它们不相等;如果长度相等,则可以使用循环遍历来比较每个元素。
可以使用 reflect.DeepEqual 函数来比较两个切片是否相等,但要注意,该函数是一个通用的深度相等性测试,会比较两个值的类型和结构,并且可能会在某些情况下出现误判。因此,除非必要,否则不建议使用该函数进行切片比较。

切片类型和数组类型的比较可以通过循环遍历比较每个元素的方式实现,但是需要注意两者长度和元素值的一一对应关系。
切片类型和 nil 的比较可以使用 len() 函数,如果切片长度为 0,则说明切片是 nil。
展开
ByteWang于2023-06-03 17:59发布的图片
评论
#青训营 x 字节后端训练营# 测试程序运行时性能和CPU的损耗,在实际项目开发中会遇到热点代码和代码性能定位问题,可以通过基准测试来检验和定位。其使用方法类似单元测试,benchmark 和普通的单元测试用例一样,都位于 _test.go 文件中,函数名称为BenchmarkXxx(d *testing.B)。
ByteWang于2023-06-02 10:05发布的图片
评论
#青训营 x 字节后端训练营# 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链表的入口节点称为链表的头结点也就是head。
ByteWang于2023-06-01 09:51发布的图片
评论
#青训营 x 字节后端训练营# 注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。综上,注意力机制主要有两个方面:决定需要关注输入的哪部分;分配有限的信息处理资源给重要的部分
展开
评论
#青训营 x 字节后端训练营# go语言中直接传入函数名称:函数也是一种类型,可以作为变量的值,动态绑定请求处理函数。

go mod init创建一个新模块,初始化描述它的go.mod文件。
go build、go test和其他包构建命令根据需要向go.mod添加新的依赖项。
go list-m all列出当前模块及其所有依赖项
go get更改依赖项的所需版本(或添加新的依赖项)。
go mod tidy 删除未使用的依赖项。 go语言中直接传入函数名称:函数也是一种类型,可以作为变量的值,动态绑定请求处理函数。

go mod init创建一个新模块,初始化描述它的go.mod文件。
go build、go test和其他包构建命令根据需要向go.mod添加新的依赖项。
go list-m all列出当前模块及其所有依赖项
go get更改依赖项的所需版本(或添加新的依赖项)。
go mod tidy 删除未使用的依赖项。
展开
ByteWang于2023-05-30 12:25发布的图片
ByteWang于2023-05-30 12:25发布的图片
评论
#青训营 x 字节后端训练营# 切片的比较:
不能直接比较两个切片的内容是否相等,因为切片是引用类型,它们的底层数组可能不同,即使它们的元素相同。先比较它们的长度,如果长度不相等,则它们不相等;如果长度相等,则可以使用循环遍历来比较每个元素。
可以使用 reflect.DeepEqual 函数来比较两个切片是否相等,但要注意,该函数是一个通用的深度相等性测试,会比较两个值的类型和结构,并且可能会在某些情况下出现误判。因此,除非必要,否则不建议使用该函数进行切片比较。

切片类型和数组类型的比较可以通过循环遍历比较每个元素的方式实现,但是需要注意两者长度和元素值的一一对应关系。
切片类型和 nil 的比较可以使用 len() 函数,如果切片长度为 0,则说明切片是 nil。
展开
ByteWang于2023-05-29 11:27发布的图片
评论
#青训营 x 字节后端训练营# 所以我松开拳头用手握紧笔,作为自己作为人类也作为你。 --贰拾
若是你所期望的,那定会得到强烈的回应。 --M八七
评论
#青训营 x 字节后端训练营# 所以我松开拳头用手握紧笔,作为自己作为人类也作为你。 --贰拾
评论
#青训营 x 字节后端训练营# IDEA 中玩转 Git
请不要再轻视Git —— 我在工作中是如何使用 Git 的
Git 工作流实践方案探索
git仓库清理--"保姆级"教程
比较全面的 Git 命令手册,几乎涵盖日常所有的使用场景(下)
不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?
展开
评论
#青训营 x 字节后端训练营# 今天我想分享一下我对Git与Go语言的学习和思考。Git帮助我更好地管理代码变更,而Go语言则为我提供了高效的开发工具。它们的结合让我的开发过程更加流畅和高效。Git的版本控制和分支管理使我可以轻松追踪和合并代码变更
评论
#青训营 x 字节后端训练营# 今天在看课程的实战部分,刚好看到一篇文章 是很好的补充
主要收获是更熟悉了用chan来实现多个goroutine之间的通信的方法。等
评论
下一页
个人成就
文章被阅读 542
掘力值 52
收藏集
0
关注标签
9
加入于