小厂golang面经
go struct可以比较吗
slice扩容机制
在Go语言中,slice是一种动态数组结构,当向slice添加元素时如果容量不足,底层会触发扩容机制。扩容时,新的容量通常是原容量的两倍,同时会分配一块新的内存区域并将原有数据复制过去。如果原容量足够大,则不会触发扩容。
首先明确slice是由一个底层数组支持的动态视图,它包含三个关键属性:指向底层数组的指针、当前长度和容量。当我们对slice进行append操作时,如果当前长度加上新增元素数量超过容量,就会触发扩容。扩容的具体逻辑是创建一个新的底层数组,其容量为原容量的两倍(特殊情况除外),然后将旧数据复制到新数组中,最后返回基于新数组的slice。
带缓冲区channel关闭后的读写
在Go语言中,当一个带缓冲区的channel被关闭后,读操作仍然可以从channel中读取剩余的数据,直到缓冲区为空。此时如果继续尝试读取,会得到一个零值和一个布尔值false,表示channel已经关闭且没有更多数据。对于写操作,一旦channel被关闭,任何试图向该channel写入数据的操作都会导致panic。
linux 怎么查看cpu占用
软链接和硬链接区别
TCP超时重传
HTTP/1.1和HTTP/2.0区别
git命令
docker命令
MySQL可以做大量索引吗
服务发现
参考:https://learnku.com/articles/70653
最长公共前缀
https://leetcode.cn/problems/longest-common-prefix/description/
func longestCommonPrefix(strs []string) string {ans := strs[0]for _,v := range strs{for i:=0;i<len(v)&&i<len(ans);i++{if ans[i]!=v[i]{ans = ans[:i]break}}if len(ans)>len(v){ans = ans[:len(v)]}}return ans
}