Files
mianshiya/Go 面试题.md
2025-12-25 21:05:14 +08:00

13 KiB
Raw Permalink Blame History

Go 语言中如何访问私有成员?

Go 语言使用断言时会发生拷贝吗?

Go 语言的接口是怎么实现的?

Go 语言中怎么实现闭包?闭包的主要应用场景是什么?

Go 语言中触发异常的场景有哪些?

Go 语言中通过指针变量 p 访问其成员变量 title有哪几种方式

Go 语言中 defer 的变量快照在什么情况下会失效?

不分配内存的指针类型能在 Go 语言中使用吗?

Go 语言中的局部变量是分配在栈上还是堆上?

Go 语言中所有的 T 类型都有 *T 类型吗?

Go 语言中数组与切片有什么异同?

Go 语言中 init() 函数在什么时候执行?

GO语言中非接口的任意类型T都能调用*T的方法么反过来呢

Go 语言中函数返回局部变量的指针是否安全?

Go 语言切片的容量是如何增长的?

Go 语言切片作为函数参数,有哪些注意事项?

Go 语言中的 = 和 := 有什么区别?

Go 语言中的指针的意义是什么?

Go 语言的多值返回有什么用?

Go 语言有异常类型吗?

Go 语言中的 rune 类型是什么?

Go 语言中的 rune 和 byte 有什么区别?

什么是 Go 语言中的深拷贝和浅拷贝?

什么是 Go 语言中的字面量和组合字面量?

如何使用 Go 语言中的对象选择器自动解引用?

Go 语言中 map 的值不可寻址,如何修改值的属性?

Go 语言的有类型常量和无类型常量有什么区别?

为什么在 Go 语言中传参使用切片而不是数组?

Go 语言中的引用类型和指针有什么不同?

如何判断 map 中是否包含某个 key

Go 语言的 map 如何实现两种 get 操作?

Go 语言中 map 的 key 为什么是无序的?

Go 语言支持默认参数或可选参数吗?

Go 语言中 defer 的执行顺序是什么?

Go 语言中如何交换两个变量的值?

Go 语言 tag 的用处是什么?

Go 语言中如何判断两个字符串切片slice是否相等

Go 语言中打印字符串时,%v 和 %+v 有什么区别?

Go 语言中如何表示 enums 枚举值?

Go 语言中空 struct{} 的用途是什么?

Go 语言字符串转成 byte 数组时会发生内存拷贝吗?

Go 语言如何翻转含有中文、数字、英文字母的字符串?

Go 语言 map 不初始化使用会怎么样?

Go 语言中,如何判断一个数组是否已经排序?

Go 语言的空切片和 nil 切片是什么?有什么区别?

Go 语言中,什么是 slice 的深拷贝和浅拷贝?

Go 语言中,如何自定义类型切片转字节切片,以及字节切片转回自定义类型切片?

Go 语言的 make 和 new 有什么区别?

Go 语言 slice、map 和 channel 创建时的参数有什么含义?

Go 语言中 struct 是否可以比较?

Go 语言中如何顺序读取 map

Go 语言中如何实现 set

Go 语言 map 的扩容机制是什么?

Go 语言中,使用值为 nil 的 slice 和 map 会发生什么?

Go 语言中有没有 this 指针?

Go 语言中局部变量和全局变量的缺省值是什么?

Go 语言中的引用类型有哪些?

Go 语言中指针运算有哪些?

Go 语言类型的值可以修改吗?

Go 语言中array 类型的值作为函数参数是引用传递还是值传递?

在 Go 语言的 for 循环中 append 元素会发生什么?

Go 语言中如何使用 defer 语句?

Go 语言在循环内执行 defer 语句会发生什么?

Go 语言的 switch 中如何强制执行下一个 case 代码块?

Go 语言中如何从 panic 中恢复?

Go 语言中如何实现字符串和 byte 切片的零拷贝转换?

Java 和 Go 的区别

Go 语言的 context 是什么?有什么作用?

Go 语言 context.Value 的查找过程是怎样的?

Go 语言中 context 如何被取消?

Go 语言中什么是反射?

Go 语言中什么情况下需要使用反射?反射有哪些应用场景?

Go 语言如何实现反射?

Go 语言中 reflect 反射包如何获取字段 tag

Go 语言中为什么 json 包不能导出私有变量的 tag

Go 语言中如何利用 unsafe 获取 slice 和 map 的长度?

Go 语言中如何利用 unsafe 包修改私有成员?

Go 语言中如何用 json 包解析数据?

Go 语言中解析 JSON 数据时,默认将数值当做哪种类型?

Go 语言中 net/http 包中 client 如何实现长连接?

Go 语言中 net/http 如何做连接池?

Go 语言与鸭子类型的关系?

Go 语言中值接收者和指针接收者的区别?

Go 语言中 iface 和 eface 有什么区别?

什么是 Go 语言接口的动态类型和动态值?

Go 语言编译器如何自动检测类型是否实现接口?

Go 语言的接口构造过程是怎样的?

Go 语言中类型转换和断言的区别?

请介绍 Go 语言中接口转换的原理?

Go 语言中如何用 interface 实现多态?

Go 接口与 C++ 接口有什么异同?

Go 语言中逃逸分析是怎么进行的?

Go 语言的 GoRoot 和 GoPath 有什么用?

请介绍 Go 语言的编译链接过程?

有哪些 Go 语言编译相关的命令?

请介绍 Go 语言程序的启动过程?

Go 语言中有哪些必须要手动对齐内存的情况?

什么是 Go 语言中的栈扩容和栈缩容?

Go 语言中分段栈的缺点是什么?

Go 语言的栈空间是怎么管理的?

Go 语言中 uintptr 和 unsafe.Pointer 的区别是什么?

Go 语言中 slice 扩容后容量是如何计算的?

请介绍 Go 语言中闭包的底层原理

Go 语言的局部变量是分配在栈上还是堆上?

Go 语言中两个 interface 类型的变量可以进行比较吗?

为什么 Go 语言中的常量、字符串和字典不可寻址?

为什么 Go 语言中的 slice 元素是可寻址的?

Go 语言的默认栈大小是多少?最大值是多少?

在 Go 语言中两个 nil 可能不相等吗?

请介绍 Go 语言中 map 的实现原理?

Go 语言中 map 的遍历过程是怎样的?

Go 语言中 map 的赋值过程是怎样的?

Go 语言中 map 的删除过程是怎样的?

Go 语言中 float 类型可以作为 map 的 key 吗?

Go 语言中可以边遍历边删除 map 的元素吗?

Go 语言中可以对 map 的元素取地址吗?

Go 语言中如何比较两个 map 是否相等?

Go 语言是值传递、引用传递还是指针传递?

Go 语言中哪些内容是可寻址的,哪些是不可寻址的?

Go 语言的 map 不初始化长度和初始化长度有什么区别?

Go 语言的 map 承载数据量过大时会怎么样?

Go 语言 channel 底层的数据结构是什么?

Go 语言中的读写锁RWMutex底层是怎么实现的

Go 语言中 WaitGroup 实现原理是什么?

如何利用 Go 语言特性设计一个 QPS 为 500 的服务器?

Go 语言如何进行代码优化?

Go 语言的 hot path 有什么用?

Go 语言如何高效地拼接字符串?

Go 语言拷贝大切片一定比小切片代价大吗?

什么是 Go 语言的 trace它有什么作用

什么是 Go 语言的 pprof它有什么作用

如何对 Go 语言的 GC 进行调优?

协程可以自己主动让出 CPU 吗?

协程与进程、线程的区别是什么?协程有什么优势?

一个协程能保证绑定在一个内核线程上吗?

Goroutine 和 Channel 的作用分别是什么?

怎么查看 Goroutine 的数量?

Go 语言中无缓冲的 channel 和有缓冲的 channel 有什么区别?

什么是 Go 语言的协程Goroutine它有什么作用

Go 语言中 map 是线程安全的吗?

什么是 CSP通信顺序进程

Go 语言向 channel 发送数据的过程是怎样的?

Go 语言从 channel 接收数据的过程是怎样的?

Go 语言关闭一个 channel 的过程是怎样的?

Go 语言从一个关闭的 channel 仍然能读出数据吗?

Go 语言中如何优雅地关闭 channel

Go 语言 channel 在什么情况下会引起资源泄漏?

Go 语言中关于 channel 的 happened-before 有哪些?

Go 语言中如何实现线程安全的 map

Go 语言 for select 时,如果通道已经关闭会怎么样?

Go 语言的 select 可以用于哪些场景?

说说你对 Go 语言中的抢占式调度的理解?

为什么 Go 语言中的 GMP 模型需要有 P

哪些操作会触发 Go 语言中的 runtime 调度?

什么是协程泄露Goroutine Leak

Go 语言可以限制运行时操作系统线程的数量吗?

Go 语言中对已经关闭的的 channel 进行读写,会怎么样?为什么?

Go 语言中对未初始化的 channel 进行读写,会怎么样?为什么?

Go 语言中 sync.Map 的优缺点和使用场景是什么?

Go 语言中主协程如何等待其余协程完成再操作?

Go 语言中的协程通信方式有哪些?

Go 语言中 for select 时,如果通道已经关闭会怎么样?如果只有一个 case 呢?

Go 语言中的 Mutex 几种状态是什么?

Go 语言中 Mutex 的正常模式和饥饿模式是什么?

Go 语言中 Mutex 允许自旋的条件是什么?

Go 语言中 RWMutex 使用时的注意事项有哪些?

Go 语言中的 Cond 是什么?

Go 语言中的 Broadcast 和 Signal 区别是什么?

Go 语言中Cond 的 Wait 方法怎么使用?

Go 语言中 sync.Once 有什么作用?

什么操作叫做原子操作?

原子操作和锁的区别是什么?

什么是 CASGo方向

Go 语言中 sync.Pool 有什么作用?

当 Go 服务部署上线后,发现有内存泄露,该如何处理?

Go 语言的 Data Race 问题怎么检测?怎么解决?

Goroutine 什么时候会被挂起?

什么是 Go Scheduler

Go 语言中 Goroutine 的调度时机有哪些?

什么是 Go 语言的工作窃取机制?

什么是 Go 语言的 GPM 模型?

请介绍 Go Scheduler 的初始化过程?

Go 语言中主 Goroutine 是如何创建的?

Go 语言中 g0 栈和用户栈如何切换?

Go 语言的 schedule 循环如何启动?

Go 语言的 Goroutine 如何退出?

Go 语言的 schedule 循环如何运转?

Go 语言的工作线程 M 如何获取工作?

Go 语言的 sysmon 后台监控线程做了什么?

Go 语言中,为什么小对象多了会造成 GC 压力?

Go 语言中两次 GC 周期重叠会引发什么问题GC 触发机制是什么样的?

什么是 Go 语言的插入写屏障?它又是如何实现的?

什么是 Go 语言的删除写屏障?它又是如何实现的?

什么是 Go 语言的写屏障?它又是如何实现的?

什么是 Go 语言的混合写屏障?它又是如何实现的?

什么是 Go 语言中的 GC作用是什么

Go 语言中 GC 垃圾回收的过程是怎么样的?请介绍工作原理

什么是 Go 语言中的根对象?

常见的 GC 实现方式有哪些Go 语言使用的是什么 GC 实现?

Go 语言中的三色标记法是什么?

如何观察 Go 语言的 GC 运行情况?

在有 GC 的情况下,为什么 Go 语言中仍会发生内存泄漏?

Go 语言中并发标记清除法的难点是什么?

Go 语言中 GC 的具体流程是什么?

Go 语言中触发 GC 的时机是什么?

如果内存分配速度超过了标记清除的速度Go 语言会如何处理?

Go 语言的 GC 关注的主要指标有哪些?

Go 语言垃圾回收器的相关 API 有哪些?它们的作用分别是什么?

Go 语言历史版本在 GC 方面有哪些改进?

Go GC 演化过程中有哪些设计没有被采用?为什么?

目前 Go 语言的 GC 还存在哪些问题?

哪些编程语言提供 GC哪些不提供GC 和 No GC 各自的优缺点是什么?

Go 语言的 GC 性能相比 Java 和 JS V8 引擎中的 GC 怎么样?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?

以下 Go 语言程序的输出结果是?