基础相关:

1、golang 中 make 和 new 的区别?(基本必问)
2、数组和切片的区别 (基本必问)
3、for range的时候它的地址会发生变化么?
for 循环遍历 slice 有什么问题?
4、go defer,多个 defer 的顺序,defer 在什么时机会修改返回值 ? (for defer)
defer recover 的问题? (主要是能不能捕获)
5、 uint类型溢出
6、介绍rune类型
7、 golang中解析tag是怎么实现的?反射原理是什么?(问的很少,但是代码中用的多)
8、调用函数传入结构体时,应该传值还是指针? (Golang都是值传递)
9、silce遇到过哪些坑?
10、go struct能不能比较?
11、Go 闭包

Context相关:

1、context结构是什么样的?
2、context使用场景和用途?(基本必问)

Channel相关:

1、channel是否线程安全?锁用在什么地方?
2、go channel 的底层实现原理 (数据结构)
3、nil、关闭的channel、有数据的channel,再进行读、写、关闭会怎么样?(各类变种题型)
例如:go channel close后读的问题
向为 nil 的 channel 发送数据会怎么样?
4、向channel发送数据和从channel读数据的流程是什么样的?

Map相关:

1、map使用注意的点,并发安全?
2、map循环是有序的还是无序的?
3、 map中删除一个key,它的内存会释放么?
4、怎么处理对map进行并发访问?有没有其他方案? 区别是什么?
5、 nil map和空map 有何不同?
6、map的数据结构是什么?是怎么实现扩容?
7、map 取一个 key,然后修改这个值,原 map 数据的值会不会变化

GMP相关:

1、什么是GMP?(必问)调度过程是什么样的?(对流程熟悉,要求更高,问的较少)
2、进程、线程、协程有什么区别?
3、抢占式调度是如何抢占的?
4、M 和 P 的数量问题?
5、协程怎么退出?
6、map如何顺序读取?

锁相关:

1、除了 mutex 以外还有那些方式安全读写共享变量?
2、Go如何实现原子操作?
3、Mutex是悲观锁还是乐观锁?悲观锁、乐观锁是什么?
4、Mutex有几种模式?
5、goroutine的自旋占用资源如何解决
6、读写锁底层是怎么实现的?

同步原语相关:

并发相关:

1、怎么控制并发数?
2、多个goroutine对同一个map写会panic,异常是否可以用defer捕获?
3、如何优雅的实现一个 goroutine 池(百度、手写代码)
4、select可以用于什么?
5、主协程如何等其余协程完再操作?

GC相关:

1、go gc是怎么实现的?(必问)
2、go是gc算法是怎么实现的? (得物,出现频率低)
3、GC 中 stw 时机,各个阶段是如何解决的? (百度)
4、GC的触发时机?

内存相关:

1、谈谈内存泄露,什么情况下内存会泄露?怎么定位排查内存泄漏问题?
2、知道golang的内存逃逸吗?什么情况下会发生内存逃逸?
3、请简述 Go 是如何分配内存的?
Channel分配在栈上还是堆上?哪些对象分配在堆上,哪些对象分配在栈上?
4、介绍一下大对象小对象,为什么小对象多了会造成gc压力?
5、堆和栈的区别?
6、当go服务部署到线上了,发现有内存泄露,该怎么处理?

微服务框架

1、go-micro 微服务架构怎么实现水平部署的,代码怎么实现?
2、怎么做服务发现的

其他:

1、go实现单例的方式?
2、项目中使用go遇到的坑?
3、client如何实现长连接?

编程题:

1、3个函数分别打印cat、dog、fish,要求每个函数都要起一个goroutine,按照cat、dog、fish顺序打印在屏幕上100次。
2、如何优雅的实现一个 goroutine 池?

本作品采用《CC 协议》,转载必须注明作者和本文链接