深浅色
Go 高频题单
来源:
golang-design/go-questions(GPL-3.0) 完整答案在6.interviews/参考/go-questions/content/,一个文件一题,文件名就是题目。 这里只列题目,用来勾进度;背完的打个 x。
channel(12 题)
- 什么是 CSP
- channel 底层的数据结构是什么
- 向 channel 发送数据的过程是怎样的
- 从 channel 接收数据的过程是怎样的
- 关闭一个 channel 的过程是怎样的
- 从一个关闭的 channel 仍然能读出数据吗
- 操作 channel 的情况总结
- 如何优雅地关闭 channel
- channel 发送和接收元素的本质是什么
- channel 在什么情况下会引起资源泄漏
- 关于 channel 的 happened-before 有哪些
- channel 有哪些应用
compile(5 题)
- 逃逸分析是怎么进行的
- GoRoot 和 GoPath 有什么用
- Go 编译链接过程概述
- Go 编译相关的命令详解
- Go 程序启动过程是怎样的
interface(10 题)
- Go 语言与鸭子类型的关系
- 值接收者和指针接收者的区别
- iface 和 eface 的区别是什么
- 接口的动态类型和动态值
- 编译器自动检测类型是否实现接口
- 接口的构造过程是怎样的
- 类型转换和断言的区别
- 接口转换的原理
- 如何用 interface 实现多态
- Go 接口与 C++ 接口有何异同
map(12 题)
- map的底层实现原理是什么
- 如何实现两种 get 操作
- map 的遍历过程是怎样的
- map 的赋值过程是怎样的
- map 的删除过程是怎样的
- map 的扩容过程是怎样的
- map 中的 key 为什么是无序的
- float 类型可以作为 map 的 key 吗
- 可以边遍历边删除吗
- 可以对 map 的元素取地址吗
- 如何比较两个 map 相等
- map 是线程安全的吗
memgc(5 题)
- 垃圾回收的认识
- 垃圾回收机制的实现
- 垃圾回收的优化问题
- 历史及演进
- 总结
sched(15 题)
- goroutine和线程的区别
- 什么是 go scheduler
- goroutine 调度时机有哪些
- 什么是M_N模型
- 什么是workstealing
- GPM 是什么
- 描述 scheduler 的初始化过程
- main goroutine 如何创建
- g0 栈何用户栈如何切换
- schedule 循环如何启动
- goroutine 如何退出
- schedule 循环如何运转
- M 如何找工作
- sysmon 后台监控线程做了什么
- 一个调度相关的陷阱
slice(3 题)
- 数组和切片有什么异同
- 切片的容量是怎样增长的
- 切片作为函数参数
stdlib/context(4 题)
- context 是什么
- context 有什么作用
- context.Value 的查找过程是怎样的
- context 如何被取消
stdlib/reflect(5 题)
- 什么是反射
- 什么情况下需要使用反射
- Go 语言如何实现反射
- Go 语言中反射有哪些应用
- 如何比较两个对象完全相同
stdlib/unsafe(4 题)
- Go指针和unsafe.Pointer有什么区别
- 如何利用unsafe获取slice&map的长度
- 如何利用unsafe包修改私有成员
- 如何实现字符串和byte切片的零拷贝转换
另一个源:interview-go
lifei6671/interview-go(Apache-2.0)偏八股 + 算法。Go 相关的有:base/go-gpm.md、base/go-grammar.md、base/go-scheduler.md、base/redis.md、mysql/mysql-mvcc.md, 以及architecture/(13 篇架构题)、question/q001~q025.md(25 道综合题)。