面试题答案
一键面试扩容机制
- 扩容条件:当向切片追加元素时,如果当前切片的容量不足以容纳新元素,就会触发扩容。
- 扩容策略:
- 如果当前切片的容量小于1024,新的容量将翻倍。
- 如果当前切片的容量大于或等于1024,新的容量将增加当前容量的1/4。
- 扩容后会重新分配内存,将原切片内容复制到新的内存地址。
对程序性能的影响
- 内存分配和复制开销:扩容时需要重新分配内存,并将原切片内容复制到新的内存区域,这会带来额外的内存分配和数据复制开销,影响程序性能。
- 频繁扩容:如果频繁触发扩容,会导致大量的内存分配和复制操作,严重影响程序的运行效率,特别是在对性能要求较高的场景下。
优化策略
- 预分配容量:在创建切片时,根据预估的数据量,提前分配足够的容量,避免在运行过程中频繁扩容。例如
make([]int, 0, 1000)
提前分配1000个元素的容量。 - 批量操作:尽量减少单个元素的追加操作,改为批量追加,这样可以减少扩容的次数。例如使用
append(slice, []int{1, 2, 3}...)
一次追加多个元素。 - 复用切片:在需要重新使用切片时,不创建新切片,而是使用
slice = slice[:0]
重置切片,复用已有内存。