# Go语言面试题
Go语言面试,核心就四块:基础语法、内存管理、并发编程、底层原理。
现在Go岗的面试已经不满足于你"会用"了,面试官要的是你"懂底层"——goroutine和线程有什么区别、channel底层怎么实现、GMP调度模型为什么需要P、map并发写为什么直接panic而不是报错。
这个专栏把Go面试的高频问题按四大分类整理,每个问题从面试官视角出发,讲清楚原理和追问方向。
# 语言基础
- Go语言有哪些基础数据类型?
- Go语言中slice和array有什么区别?slice和map有什么区别?
- Go语言中值类型和引用类型有什么区别?
- Go语言中new和make的区别是什么?
- Go语言中的接口是什么?如何实现接口?
- Go语言中struct tag有什么作用?
- Go语言中defer的执行顺序是怎样的?
- 多层defer中发生panic时,defer还会执行吗?
- Go语言中的反射原理是什么?什么场景应谨慎使用?
- Go语言中panic和recover的作用及使用场景是什么?
# 内存管理
# 并发编程
- 什么是Goroutine?协程的上下文切换保存在哪?
- Go语言中协程、线程、进程有什么区别?
- Go语言中协程是如何进行通信的?
- Go语言中怎么实现协程池?
- Goroutine的创建数量存在限制吗?
- 哪些操作会导致Goroutine阻塞?调度器会怎么做?
- 如何等待并收集多个并发goroutine的执行结果?
- Go语言中无缓冲和有缓冲的channel有什么区别?
- 向已关闭的channel发送数据会怎样?如何安全关闭channel?
- 对值为nil的channel读取会发生什么?
- Go语言中channel死锁的场景有哪些?如何避免?
- Go语言中select语句的执行机制是怎样的?
- sync.Mutex的两种模式是什么?正常模式和饥饿模式有什么区别?
- sync.Mutex是如何在底层实现锁状态的?
- sync.Map如何实现并发安全?与map加锁相比有什么优缺点?
- Go语言中如何用context实现请求的超时或取消控制?
- Context.Value的使用场景和注意事项是什么?

评论
验证登录状态...