1
cmdOptionKana 2022-02-23 00:01:44 +08:00
|
2
makdon 2022-02-23 00:04:57 +08:00
1. 同不懂,我也觉得应该会被回收
2. 如果只是相似度的话,可以做相似度哈希,例如 simdhash |
3
BeautifulSoap 2022-02-23 00:43:20 +08:00 1
想了下发现第一个问题如果 lz 没有记错了的话,那就是面试官自己有问题
他想测的是 slice 取区间会导致底层的 array 依旧被引用无法释放引发内存泄漏的知识点。比如 s[90:100] 这样取 slice 的区间的话,新生成的 slice 实际上指向的还是原切片 s 的底层数组,所以会引发内存泄漏 但这面试官自己提的问题就有问题,10000 个元素只保留最后一个元素,谁会傻兮兮得用 s[9999:10000] 这种写法,直接 s[9999] 取值赋给新 slice 就行了(也就是 lz 说的这方法),这种方法不会造成内存泄漏,是面试官自己思维定势了。当然面试官可能想说的只是你没提 “需要将原 slice=nil 置 nil” 也有可能 |
4
heimeil 2022-02-23 02:35:12 +08:00
newLen := len(arr[9999:])
copy(arr[0:newLen], arr[9999:]) arr = arr[0:newLen] 可能是要重复利用底层的数组吧,避免后续频繁申请和释放底层数组的内存 https://go.dev/play/p/ETH4u-QfgtN |
5
tousfun 2022-02-23 08:18:46 +08:00 via iPhone
第二题是寻找最长子序列吗
|
6
lllllIIIlll 2022-02-23 11:36:44 +08:00
@BeautifulSoap 请教个问题,如果不将原 slice=nil ,gc 不会正常回收这部分内存吗?不是已经没有到原 slice 的引用了吗?
|
7
radioactive 2022-02-23 11:39:45 +08:00
|
8
BeautifulSoap 2022-02-23 12:21:07 +08:00 via Android
@lllllIIIlll 引用原 slice 的变量不置 nil ,不还是被原变量引用着吗,就算你没用到
|
9
Goat121 OP @BeautifulSoap 谢谢 应该就是当时表达的问题,我就是觉得我对这个的理解应该没错啊
|
10
Goat121 OP @makdon @radioactive 谢谢 我去看看这个
|
11
monetto 2022-02-23 20:22:23 +08:00
@radioactive 现在面试都已经这么卷了吗....真不敢想象
|
12
mengzhuo 2022-03-04 21:37:46 +08:00
1. 应该是```s[0] = s[9999]; s = s[1:]``` 吧
|