29|细节决定成败:切片与哈希表的陷阱与原理
郑建勋
你好,我是郑建勋。
这节课,让我们来看一看切片与哈希表的原理。
我想先考你两道面试题。下面的代码中,foo 与 bar 最后的值是什么?
下面的程序又会输出什么呢?
其实之前我们在初始化 seeds 切片的时候,也有一些不合理之处。你发现了吗?
切片和哈希表是 Go 语言内置、并且使用广泛的结构。如果你对上面问题的答案都很模糊,很可能就是不太理解切片底层的原理。理清这些原理可以帮助我们更好地规避常见陷阱,写出高性能的代码。
切片的底层原理
我们先来看看切片的底层原理。
和 C 语言中的数组是一个指针不同,Go 中的切片是一个复合结构。一个切片在运行时由指针(data)、长度(len)和容量(cap)三部分构成。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Go语言中切片与哈希表的底层原理及性能优化技巧。首先,切片作为重要数据结构,其底层结构由指针、长度和容量构成,作者详细介绍了切片的特性和动态扩容机制,并强调了合理分配切片容量的重要性。此外,文章还涉及哈希表的原理和解决哈希碰撞的策略。在哈希表的重建过程中,提出了在初始化时评估并指定放入Map的数据大小,以减少重建的性能消耗。另外,对哈希表的删除原理进行了深入探讨,强调了在进行查找时,遇到emptyRest可以直接退出,提高了查找效率。总结指出,在实践中应评估容器容纳的数据量大小,并在初始化时指定容量,以提高程序性能。此外,文章还提出了避免混合使用切片截取和append的用法,以及在使用哈希表时进行合理的程序设计和必要的race检查。整体而言,本文内容深入浅出,适合读者快速了解切片与哈希表的底层原理及性能优化技巧。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- Realm1. map是指针型变量,多个协程同时写同一个内存时,会出现data race; 2. 写操作加锁,或者使用sync.Map;2022-12-15归属地:浙江5
- InfoQ_lu老师,这门专栏,能不能多介绍写爬虫框架的技巧使用呢?感觉全是你的那本书里内容,关于Go语言的底层原理的改编,设计到爬虫内容更多。怎么说呢?这种理论确实是必要的,但对于不用用户群体,就应该和专栏名对应呀,感觉和爬虫相关性太少,更像分布式开发理论基础。2023-08-31归属地:北京
- 林龍拉链法: 用链路的数据结构, 开放寻址法 :用数组的数据结构 链路(空间换时间) 优势: 对应新增跟删除数据时,无需挪动后面的元素 劣势 : 空间稍大,需要存放上下元素的指针 数组*(时间换空间) 优势: 空间较小,无需存放上下元素的指正 劣势: 增加或删除需要挪动后面的元素的数据2023-03-27归属地:广东
收起评论