一、基础语法与类型
-
Go 与 C/Java 有哪些主要区别?
-
Go 的数据类型有哪些?值类型和引用类型分别是什么?
-
nil
、zero value
的区别? -
切片(slice)、数组(array)、map 的底层实现原理是什么?
-
defer
的执行时机和使用场景? -
指针在 Go 中的使用限制?Go 不允许指针运算的原因?
-
new
与make
的区别?
二、控制流与函数
-
Go 如何实现可变参数函数?
-
闭包(closure)的原理和使用场景?
-
panic
、recover
与error
的区别和使用场景? -
方法(method)与函数(function)的区别?
-
值接收者与指针接收者的区别?
三、并发与调度
-
Goroutine 是什么,如何创建?
-
runtime.Gosched()
、runtime.Goexit()
、time.Sleep()
的区别? -
channel
的类型、缓冲与非缓冲区别? -
select 多路复用的原理?
-
如何避免 channel 死锁?
-
sync.Mutex
、sync.RWMutex
、sync/atomic
的区别? -
WaitGroup 的作用与使用方法?
-
如何限制并发数量(例如线程池)?
-
Goroutine 泄漏的场景及排查方法?
四、内存管理
-
Go 的内存分配策略(栈 vs 堆)?
-
垃圾回收(GC)机制是什么?
-
指针逃逸分析(escape analysis)是什么?
-
slice 扩容(append)的原理?
-
map 底层实现原理(哈希表 + 冲突处理)?
五、接口与面向对象
-
Go 如何实现面向对象?
-
接口(interface)是什么,如何使用?
-
空接口(interface{})的用途?
-
类型断言和类型转换的区别?
-
Go 中没有继承,如何实现多态?
六、标准库与工具
-
Go 的包管理方式(module、GOPATH)?
-
context.Context 的作用?
-
net/http 与 fasthttp 的区别?
-
Go 内置日志包 log 的特点?
-
reflect 包的使用场景和性能问题?
七、性能与优化
-
如何分析 Go 程序性能瓶颈?
-
pprof 的使用方法?
-
内存泄漏、Goroutine 泄漏的排查方法?
-
大量小对象频繁创建对 GC 的影响?
八、实战类/场景题
-
用 Go 实现一个限流器(Token Bucket/Leaky Bucket)
-
用 Go 实现一个线程安全的缓存
-
并发下载文件/数据聚合
-
实现一个生产者-消费者模型
-
实现一个简单的协程池(Goroutine Pool)
-
用 channel 实现奇偶交替输出(面试常考)