面试题答案
一键面试- Go语言切片扩容策略:
- 当切片容量不足以容纳新的元素时会触发扩容。
- 如果新的元素个数小于等于当前容量的2倍,且当前容量小于1024,则新容量会变为当前容量的2倍。
- 如果当前容量大于等于1024,则新容量会变为当前容量的1.25倍。
- 如果新的元素个数大于当前容量的2倍,则新容量直接变为新元素个数所需的大小。
- 与底层数组的关联:
- 切片是基于底层数组实现的。当切片扩容时,会重新分配一个更大的底层数组,然后将原底层数组的内容复制到新的底层数组中,原底层数组可能会被垃圾回收。
- 频繁扩容场景下的优化:
- 预分配容量:在创建切片时,通过
make
函数预先分配足够的容量,例如make([]T, 0, initialCapacity)
,这样可以减少扩容的次数。 - 复用切片:在一些场景下,可以将使用过的切片重置(如
slice = slice[:0]
)后重新使用,避免每次都创建新的切片导致频繁扩容。
- 预分配容量:在创建切片时,通过