1、goalng相关
Q:context作用,原理,超时控制
A: golang context的理解,context主要用于父子任务之间的同步取消信号,本质上是一种协程调度的方式。另外在使用context时有两点值得注意:上游任务仅仅使用context通知下游任务不再需要,但不会直接干涉和中断下游任务的执行,由下游任务自行决定后续的处理操作,也就是说context的取消操作是无侵入的;context是线程安全的,因为context本身是不可变的(immutable),因此可以放心地在多个协程中传递使用。
Q:切片和数组区别
A: 基础问题。
Q:channel关闭阻塞问题,goroutine如何调度,gopark是怎么回事?PMG模型描述,谁创建的PMG,runtime是怎么个东西,怎么启动第一个goroutine
A: golang CPS并发模型和PMG模型的理解。
Q:go逃逸分析怎么回事,内存什么时候栈分配什么时候堆分配
R: 内存方面问题,这个网上很多,自己理解完整正确。
Q:sync.Map实现原理,适用的场景
A:go 1.9 官方提供sync.Map 来优化线程安全的并发读写的map。该实现也是基于内置map关键字来实现的。
这个实现类似于一个线程安全的 map[interface{}]interface{} . 这个map的优化主要适用了以下场景:
(1)给定key的键值对只写了一次,但是读了很多次,比如在只增长的缓存中;
(2)当多个goroutine读取、写入和覆盖的key值不相交时。
更进一步,可看sync.Map源码。
Q:go语言有什么优点和缺点
A: 优势:容易学习,生产力,并发,动态语法。劣势:包管理,错误处理,缺乏框架。
Q:Go框架用过哪些,有看源码吗
A: 优势:beego,go-micro,gin等
Q:Go GC算法,三色标记法描述
A: 自己找,网上有
Q:Go内存模型(tcmalloc)
A:tcmalloc是线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数
Q:行列都是有序的二维数组,查找k是否存在,时间复杂度
1 3 5 7 9
3 5 7