Go 的 sync/atomic 操作和互斥锁在保护简单计数器时怎么选,原子操作能保证什么?
Go 的 sync/atomic 操作和互斥锁在保护简单计数器时怎么选,原子操作能保证什么? 本文先给出可直接复述的结论,再用最小代码说明Go atomic 原子操作 mutex 选择的工作方式、判断依据、项目边界和常见误区。
语言与并发专题面试题第 1 页,显示第 1–35 题,共找到 35 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
Go 的 sync/atomic 操作和互斥锁在保护简单计数器时怎么选,原子操作能保证什么? 本文先给出可直接复述的结论,再用最小代码说明Go atomic 原子操作 mutex 选择的工作方式、判断依据、项目边界和常见误区。
Go 的带缓冲 channel 缓冲满了和空了分别会怎样,缓冲大小如何影响并发行为? 本文先给出可直接复述的结论,再用最小代码说明Go 缓冲 channel 满 空 阻塞的工作方式、判断依据、项目边界和常见误区。
Go 中函数参数把 channel 声明为只读或只写有什么作用? 本文先给出可直接复述的结论,再用最小代码说明Go channel 方向 只读 只写 chan<-的工作方式、判断依据、项目边界和常见误区。
Go 中关闭 channel 的正确姿势是什么,哪些操作会 panic? 本文先给出可直接复述的结论,再用最小代码说明Go close channel panic 向已关闭发送的工作方式、判断依据、项目边界和常见误区。
Go 的 context.WithCancel 和 WithTimeout 的取消信号如何在调用链中传播? 本文先给出可直接复述的结论,再用最小代码说明Go context WithCancel WithTimeout 取消传播的工作方式、判断依据、项目边界和常见误区。
为什么 Go 官方建议不要把 context 存进结构体字段,而要做函数第一个参数? 本文先给出可直接复述的结论,再用最小代码说明Go context 结构体字段 第一个参数的工作方式、判断依据、项目边界和常见误区。
Go 中用 defer 关闭文件、连接等资源时,多个 defer 的执行顺序和错误处理要注意什么? 本文先给出可直接复述的结论,再用最小代码说明Go defer 关闭资源 顺序 错误的工作方式、判断依据、项目边界和常见误区。
Go 的 defer 参数何时求值,defer 在循环里累积会有什么问题? 本文先给出可直接复述的结论,再用最小代码说明Go defer 参数求值 循环 资源释放的工作方式、判断依据、项目边界和常见误区。
Go 的空接口 interface{}(any)能存任何值,滥用它有什么代价? 本文先给出可直接复述的结论,再用最小代码说明Go any 空接口 滥用 类型安全的工作方式、判断依据、项目边界和常见误区。
Go 中什么时候返回 error、什么时候 panic,recover 应该用在哪里? 本文先给出可直接复述的结论,再用最小代码说明Go error panic recover 区别的工作方式、判断依据、项目边界和常见误区。
Go 的 fmt.Errorf %w 包装错误和 errors.Unwrap、Is、As 如何配合工作? 本文先给出可直接复述的结论,再用最小代码说明Go error wrap %w errors.Is errors.As的工作方式、判断依据、项目边界和常见误区。
Go 中 runtime.Goexit 和 return 结束 goroutine 有什么区别? 本文先给出可直接复述的结论,再用最小代码说明Go runtime.Goexit return defer的工作方式、判断依据、项目边界和常见误区。
Go 在循环里启动 goroutine 捕获循环变量会有什么结果,Go 1.22 前后有何不同? 本文先给出可直接复述的结论,再用最小代码说明Go goroutine 循环变量 闭包 Go 1.22的工作方式、判断依据、项目边界和常见误区。
Go 的 goroutine 为什么比操作系统线程轻量,调度上有什么关键设计? 本文先给出可直接复述的结论,再用最小代码说明Go goroutine 轻量 GMP 调度的工作方式、判断依据、项目边界和常见误区。
Go 的接口是隐式实现的,这带来哪些设计上的好处和风险? 本文先给出可直接复述的结论,再用最小代码说明Go interface 隐式实现 优缺点的工作方式、判断依据、项目边界和常见误区。
Go 中接口值为 nil 和接口持有 nil 指针有什么区别,为什么 == nil 判断会失效? 本文先给出可直接复述的结论,再用最小代码说明Go interface nil 陷阱 类型 值的工作方式、判断依据、项目边界和常见误区。
Go 接口变量赋值和比较的开销与限制是什么,什么时候接口不可比较? 本文先给出可直接复述的结论,再用最小代码说明Go interface 比较 动态类型 不可比较的工作方式、判断依据、项目边界和常见误区。
Go 程序 main 函数返回后,还在运行的 goroutine 会怎样,如何正确等待它们? 本文先给出可直接复述的结论,再用最小代码说明Go main 返回 goroutine 退出 WaitGroup的工作方式、判断依据、项目边界和常见误区。
Go 的 map 为什么不能并发读写,会如何失败,怎么改? 本文先给出可直接复述的结论,再用最小代码说明Go map 并发读写 panic fatal error的工作方式、判断依据、项目边界和常见误区。
Go 在 range 遍历 map 过程中增删元素是安全的吗,结果如何? 本文先给出可直接复述的结论,再用最小代码说明Go range map 遍历中删除的工作方式、判断依据、项目边界和常见误区。
Go 遍历 map 的顺序是随机的吗,需要稳定输出时怎么办? 本文先给出可直接复述的结论,再用最小代码说明Go map 遍历顺序 随机的工作方式、判断依据、项目边界和常见误区。
Go 读取 map 中不存在的 key 返回什么,如何区分「不存在」和「存的零值」? 本文先给出可直接复述的结论,再用最小代码说明Go map key 不存在 零值 comma ok的工作方式、判断依据、项目边界和常见误区。
Go 为什么结构体里含 sync.Mutex 后不能再按值拷贝,go vet 如何发现? 本文先给出可直接复述的结论,再用最小代码说明Go Mutex 拷贝 lock by value vet的工作方式、判断依据、项目边界和常见误区。
Go 的 sync.RWMutex 相比 Mutex 在什么读写比例下才值得用,有什么注意事项? 本文先给出可直接复述的结论,再用最小代码说明Go RWMutex Mutex 读多写少的工作方式、判断依据、项目边界和常见误区。
Go 的 nil 切片和空切片有什么区别,序列化和判空时各要注意什么? 本文先给出可直接复述的结论,再用最小代码说明Go nil slice 空切片 区别的工作方式、判断依据、项目边界和常见误区。
Go 的 select 在多个 case 同时就绪时怎么选择,default 分支带来什么行为变化? 本文先给出可直接复述的结论,再用最小代码说明Go select 随机 就绪 default 非阻塞的工作方式、判断依据、项目边界和常见误区。
Go 切片的 len 和 cap 分别决定什么,reslice 时各自起什么约束? 本文先给出可直接复述的结论,再用最小代码说明Go slice len cap 区别的工作方式、判断依据、项目边界和常见误区。
Go 对大切片取子切片后为什么会造成内存无法释放,如何避免? 本文先给出可直接复述的结论,再用最小代码说明Go 子切片 内存泄漏 底层数组的工作方式、判断依据、项目边界和常见误区。
Go 把切片传给函数,为什么函数内改元素生效而 append 不回传? 本文先给出可直接复述的结论,再用最小代码说明Go 切片传参 函数内修改的工作方式、判断依据、项目边界和常见误区。
Go 的 sync.Map 相比加锁的普通 map 适合什么场景,不适合什么? 本文先给出可直接复述的结论,再用最小代码说明Go sync.Map 适用场景的工作方式、判断依据、项目边界和常见误区。
Go 的 sync.Once 如何保证初始化只执行一次,函数返回错误时还能重试吗? 本文先给出可直接复述的结论,再用最小代码说明Go sync.Once 只执行一次 单例的工作方式、判断依据、项目边界和常见误区。
Go 用 make 嵌套创建二维切片后,修改一行会影响其他行吗? 本文先给出可直接复述的结论,再用最小代码说明Go 二维切片 共享 底层数组的工作方式、判断依据、项目边界和常见误区。
Go 的类型断言和 type switch 分别在什么情况下使用,panic 如何避免? 本文先给出可直接复述的结论,再用最小代码说明Go 类型断言 type switch comma ok的工作方式、判断依据、项目边界和常见误区。
Go 的 sync.WaitGroup 的 Add、Done、Wait 调用位置有什么约束,常见错误有哪些? 本文先给出可直接复述的结论,再用最小代码说明Go sync.WaitGroup Add Done Wait 用法的工作方式、判断依据、项目边界和常见误区。
Go 用 channel 实现固定数量 worker 池处理任务时,如何正确关闭和收集结果? 本文先给出可直接复述的结论,再用最小代码说明Go worker pool channel WaitGroup的工作方式、判断依据、项目边界和常见误区。