什么网站流量大,拍摄宣传视频,企业在哪里查询,wordpress 开发版 视频教程前几天参加了一场面试#xff0c;GoLang 后端工程师#xff0c;他们直接给了我 10 道题#xff0c;我留了一个截图。 在看答案之前#xff0c;你可以先简单做一下#xff0c;下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是…前几天参加了一场面试GoLang 后端工程师他们直接给了我 10 道题我留了一个截图。 在看答案之前你可以先简单做一下下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是什么3、关于channel操作正确的可能是?4、Golang字符串转成byte数组会发生内存拷贝吗5、请说一说Golang 的 GC可以怎么触发的?6、Channel是同步的还是异步的 ?7、defer在return返回前还是返回后执行?8、什么情况下可能会发生内存逃逸 ?9、Golang中有哪些方式可以安全读写共享变量?10、Golang协程为什么比线程轻量? 最后 1、golang map 是否并发安全?
Go 语言中的原生 map 并不是并发安全的。在多 goroutine 并发读写同一个 map 时可能会导致数据竞争race condition从而引发程序崩溃。
可以用 sync.Map
Go标准库中的 sync.Map 是一个并发安全的map实现。它内部通过读写分离的策略来减少锁争用适用于读多写少的场景。例如
var m sync.Map
m.Store(key, 42) // 存储键值对
value, ok : m.Load(key) // 获取值
m.Delete(key) // 删除键值对2、协程泄漏的原因可能是什么
在 Go 语言中协程泄漏Goroutine Leak是指启动的协程无法正常退出持续占用资源最终可能导致程序崩溃或系统资源耗尽。
例如
协程中存在无限循环且没有退出条件。多个协程之间存在死锁导致无法正常退出。总的来说就是协程没有释放、不受控制。
3、关于channel操作正确的可能是?
从已关闭的 channel 接收数据是可以的。向已关闭的 channel 发送数据会导致运行时错误。关闭已关闭的 channel会导致运行时错误。
4、Golang字符串转成byte数组会发生内存拷贝吗
不会。GoLang 底层字符串就是用 byte 数组存储的。
5、请说一说Golang 的 GC可以怎么触发的?
自动触发堆内存达到阈值、时间周期触发、系统监控触发。
手动触发调用 runtime.GC() 。
6、Channel是同步的还是异步的 ?
无缓冲通道同步。
ch : make(chan int) // 创建一个无缓冲通道有缓冲通道异步。
ch : make(chan int, 2) // 创建一个缓冲大小为2的通道7、defer在return返回前还是返回后执行?
在函数真正返回给调用者之前执行。
8、什么情况下可能会发生内存逃逸 ?
在Go语言中内存逃逸Memory Escape是指变量被分配到堆上而不是栈上。这通常发生在Go编译器无法确定变量是否会在函数外部被引用时。以下是一些可能导致内存逃逸的常见场景
返回局部变量的指针
如果函数返回了局部变量的指针该变量会被分配到堆上因为其生命周期需要超出函数的作用域。
func createPointer() *int {x : 42return x // x逃逸到堆上
}闭包引用局部变量
如果闭包引用了局部变量这些变量可能会被分配到堆上。
func main() {f : func() int {x : 10return x}fmt.Println(f()) // f会导致x逃逸到堆上
}还有多种情况这个有一定难度我会再单开一篇继续讲解。
9、Golang中有哪些方式可以安全读写共享变量?
使用互斥锁sync.Mutex使用读写锁sync.RWMutex使用原子操作sync/atomic使用通道channel使用sync.Map进行并发访问
10、Golang协程为什么比线程轻量?
调度开销更小协程的切换由Go运行时管理上下文切换的开销非常小通常只需要几十纳秒。协程的内存占用Go协程栈空间的初始大小非常小通常为2KB并且会根据需要动态扩展。这种动态栈分配机制使得协程的内存占用非常低。协程的轻量级结构Go协程的内部结构简单主要包含协程状态、栈指针等信息而操作系统线程需要维护更多的内核资源。Go运行时通过多路复用Multiplexing的方式将协程映射到少量的操作系统线程上从而实现高效的并发执行。多路复用机制、高并发能力。阻塞处理协程阻塞时运行时会自动切换到其他协程充分利用CPU。Go协程协程的创建和销毁由Go运行时管理开销极小。创建和销毁协程的成本非常低因为它们不需要操作系统内核的介入。
最后
离线版PDF下载
链接: https://pan.baidu.com/s/1zsffbsHj5CRC9whL7W-9aw?pwd6666 提取码: 6666