
一、语法基础
main 函数的底层执行流程是什么?
nil 值可以赋值给哪些类型?
rune 类型是什么??与 byte 的区别?
bool 类型底层表示是什么?
break 和 continue 如何在嵌套循环中使用?
数组如何传递?值传递会带来什么问题?
if 语句支持初始化语句吗?作用域如何?
零值是什么?
var、:= 和 const 的使用区别是什么?
指针类型如何工作?与 C 的指针有何不同?
type 关键字如何定义类型?类型别名和类型定义的区别?
recover 函数只能在 defer 中生效的原因是什么?
interface 赋值时会发生什么?零值接口的行为是什么?
slice append 操作如何触发扩容?扩容的内存分配策略是什么?
defer 在循环中的执行顺序如何?可能导致的陷阱问题?
标签(label)和 goto 语句底层如何实现?
switch 语句与 if-else 的底层区别?fallthrough 的作用是什么?
range 循环中如何避免值拷贝的开销?
const 常量如何定义?
map 是如何初始化的?为什么未初始化的 map 是 nil?
方法接收者(receiver)是指针还是值类型?如何选择?
struct 嵌入(embedding)如何实现方法继承?
chan 关闭后会发生什么?如何检测 channel 已关闭?
error 接口如何实现?如何自定义错误类型?
切片和数组底层有何区别?切片的 header 结构是什么?
make 和 new 函数底层有何区别?如何选择使用?
unsafe 包如何绕过类型安全?常见使用场景是什么?
类型断言和类型开关(type switch)底层如何实现?
goroutine 栈是如何动态增长和收缩的?
for-range 循环如何处理切片和 map?可能导致的性能问题是什么?
iota 机制如何工作?底层如何实现常量递增?
panic 和 recover 底层实现是什么?如何正确使用?
string 类型底层结构是什么?与 []byte 的转换成本有多高?
runtime 调度器如何处理系统调用阻塞?
闭包(closure)如何捕获变量?可能导致的内存泄漏问题是什么?
runtime.Gosched() 函数作用是什么?如何影响调度?
atomic 包如何实现无锁操作?与 Mutex 相比的优缺点?
select 语句如何选择 channel 操作?底层实现是什么?
context 包底层如何实现取消机制?
sync.Mutex 和 sync.RWMutex 底层实现有何区别?
interface 底层数据结构是什么?空接口和非空接口的区别?
defer 底层实现原理是什么?如何处理多个 defer 的执行顺序?
map 底层实现是什么?如何处理哈希冲突?
切片(slice)扩容机制是什么?如何优化切片性能?
runtime 包如何实现 goroutine 的创建和销毁?
内存模型中的 happens-before 关系,如何保证并发安全?
channel 底层实现原理是什么?如何实现无缓冲和有缓冲 channel?
如何分析 Go 程序的内存分配和逃逸分析?逃逸分析对性能的影响是什么?
Go 的垃圾回收器是如何工作的?三色标记算法的核心原理是什么?
解释 Go 的 GMP 调度模型,goroutine 如何被调度到线程上?