【高德Golang二面面经】
非常有意思的一场面试,全程多选题,选完给面试官解释为什么选指定答案,其他答案错在哪。
面试官不开摄像头,回答完一个继续出另一个。
关于 select 语句的分支选择规则,以下说法正确的是?
A:所有 case 表达式都会在 select 语句执行之初被求值
B:仅当所有 case 表达式都被求值完毕后,select 语句才会开始选择候选分支
C:若有多个候选分支满足选择条件,那么 select 语句会用一中伪随机算法选择其中的一个
D:D:select 语句中的默认分支只在无候选分支可选时才会被执行,并且与它的编写位置无关
关于 context.Context,以下说法错误的是?
A:实现一对多的 goroutine 协作流程,context.Context比sync.WaitGroup更合适
B:此类值是可以繁衍的,这些子值可以携带其父值的属性和数据,也可以响应我们通过其父值传达的信号
C:所有的 Context 值共同构成了一棵上下文树
D:通过调用 context.Background 函数,我们可获得一个新的作为根的Context值
关于 sync.Pool,以下说法错误的是?
A:我们必须先向此类值中放入足够多的对象,才能在使用时取出有效的对象,否则将会取出nil
B:此类值在被真正使用后就不应该再被复制了
C:此类值中的对象会永远存在,除非被手动删除
D:此类值中的本地池列表的长度总是与 Go 语言调度器中的 P的数量相同
关于条件变量,以下说法正确的是?
A:条件变量是基于锁的
B:当需要等待通知时,条件变量的 Wait 方法总是会先解锁再阻塞当前的goruotine
C:当收到通知时,条件变量的 Wait 方法会先加锁再唤醒当前的goruotine
D:条件变量的 Signal 方法会把通知发给所有正在等待的 Wait方法
以下哪些代码可以让当前的 goroutine 暂时让出 CPU
A:runtime.Gosched()
B:假设 lock 代表互斥锁:lock.Lock()
C:time.Sleep(time.Millisecond)
D:runtime.GC()
哪些类型不可以作为字典的键类型?
A:函数类型
B:字典类型
C:切片类型
D:通道类型
关于 append 函数的说法正确的是?
A:它总会返回新的切片
B:它有时会返回指向新底层数组的新切片
C:它有时会返回指向原底层数组的新切片
D:它总会返回我们传给它的那个切片
一个切片的容量什么时候会与其长度一致
A:在用 make 函数初始化切片时指定其容量与长度一致
B:在用 make 函数初始化切片时不指定其容量
C:用字面量直接初始化一个切片值的时候
D:当切片的长度等于其底层数组的长度时
最难受的一场面试,呵呵