面试题答案
一键面试切片扩容算法
- 扩容条件:当向切片中添加元素,而当前切片的容量不足以容纳新元素时,就会触发扩容。
- 扩容策略:
- 如果当前切片的容量小于1024,那么新的容量会变为原来容量的2倍。
- 如果当前切片的容量大于或等于1024,那么新的容量会变为原来容量的1.25倍。
- 扩容时,Go语言会创建一个新的底层数组,其大小为新的容量,然后将原切片中的元素复制到新的数组中。
预先估计切片容量提升性能
- 方法:在创建切片时,通过
make
函数的第三个参数来预先指定切片的容量。这样可以避免在添加元素过程中频繁的扩容操作,因为已经提前分配好了足够的空间。 - 示例:
package main
import (
"fmt"
)
func main() {
// 预先估计容量为100
var s = make([]int, 0, 100)
for i := 0; i < 100; i++ {
s = append(s, i)
}
fmt.Println(s)
}
在这个示例中,make([]int, 0, 100)
创建了一个初始长度为0,容量为100的切片。后续通过append
向切片中添加100个元素时,由于预先分配了足够的容量,不会触发扩容操作,从而提升了性能。