1. sync包下有哪些同步原语
- sync.Mutex
- sync.RWMutex
- sync.WaitGroup
- sync.Map
- sync.Pool
- sync.Once
- sync.Cond
2. 怎样检测goroutine泄露
- 代码中定时打印goroutine数量:runtime.NumGoroutine,PProf分析:https://learnku.com/articles/61995
- uber 开源工具goleak
- PProf:但在业务服务的运行场景中,Goroutine 内导致的泄露,大多数处于生产、测试环境,因此更多的是使用 PProf:只要我们调用 http://localhost:6060/debug/pprof/goroutine?debug=1,PProf 会返回所有带有堆栈跟踪的 Goroutine 列表。
3. 锁优化
- 减少持有时间,缩小临界区
- 优化锁的粒度,空间换时间
- 读写分离,读写锁 & sync.Map
- 使用原子操作,无锁数据结构
4. 字符串拼接不同方式的区别
- 使用 + 号:"abc" + "def"
- 使用 fmt.Sprintf
- 使用 strings.Join:适用于切片
- strings.Builder:性能好
https://geektutu.com/post/hpg-string-concat.html
https://blog.csdn.net/xz_studying/article/details/106602307
5. benchmark基准测试
https://cloud.tencent.com/developer/article/2216022
6. grpc和http的区别
gRPC和HTTP都是网络协议,但是它们之间存在一些显著的区别。
1)传输协议
HTTP使用文本基础的协议,而gRPC使用的是二进制协议,这意味着gRPC数据包更小,传输效率更高。另外,gRPC使用HTTP/2协议,支持多路复用,从而可以更好地处理并发请求。
2)性能差异
gRPC在性能方面优于HTTP。由于使用了二进制格式,因此gRPC传输速度更快、更稳定。而且gRPC通过使用连接池,实现客户端与服务端的长连接机制,使得延迟较低,在高网络带宽时表现更好。
3)使用场景
HTTP主要用于Web中浏览器和服务器之间的交互,在Web应用程序中非常常见。而gRPC通常用于服务之间的通信,特别是分布式系统中,例如微服务框架等。gRPC具有高性能、低延迟、易扩展等特点,是一个理想的分布式系统通信协议。
4)序列化和反序列化
HTTP在传输过程中使用JSON或XML格式来表示数据,需要进行序列化和反序列化。而gRPC则使用了更为高效的protobuf格式,同时也支持JSON等格式。
综上所述,gRPC和HTTP在不同的场景下各有其优势,使用时应根据具体情况来进行选择。如果需要高性能的服务之间通信,则可以选择gRPC,而在Web浏览器与服务器之间传输数据时则更适合使用HTTP。
7. CGO 能用到GPM吗
https://uncledou.site/2022/go-cgo-c-to-go/
附录:
Go常见面试题
https://learnku.com/articles/62720