《前后端面试题
》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。
文章目录
- 一、本文面试题目录
-
-
- 41. 什么是goroutine?它与线程有何区别?
- 42. 如何启动一个goroutine?启动后如何保证主程序等待goroutine执行完毕?
- 43. `sync.WaitGroup`的作用是什么?如何使用它?
- 44. `sync.Mutex`和`sync.RWMutex`的区别是什么?分别适用于什么场景?
- 45. 什么是死锁?如何避免goroutine之间的死锁?
- 46. `sync.Once`的作用是什么?举例说明其使用场景。
- 47. `sync.Cond`的作用是什么?如何使用它实现goroutine间的协作?
- 48. `sync.Pool`的作用是什么?它的设计目的是什么?
- 49. 什么是工作池(worker pool)?如何用goroutine和通道实现工作池?
- 50. 如何限制goroutine的数量?
- 51. 什么是原子操作(atomic)?`sync/atomic`包提供了哪些常用操作?
- 52. 原子操作与互斥锁相比,有什么优势和局限性?
- 53. Go的调度器(scheduler)是如何工作的?G、M、P分别代表什么?
- 54. 什么是抢占式调度?Go的调度器是否支持抢占式调度?
- 55. 什么是协程泄漏(goroutine leak)?如何检测和避免?
- 56. 如何在goroutine之间传递数据?除了通道还有其他方式吗?
- 57. 什么是上下文(`context.Context`)?它的主要作用是什么?
- 58. `context`的`WithCancel`、`WithTimeout`、`WithDeadline`有何区别?
- 59. 如何使用`context`实现goroutine的优雅退出?
- 60. 多个goroutine同时操作同一个变量时,如何保证数据安全?
-
- 二、120道Go面试题目录列表
一、本文面试题目录
41. 什么是goroutine?它与线程有何区别?
goroutine 是Go语言特有的轻量级执行单元,由Go运行时(runtime)管理,而非操作系统内核,用于实现并发编程。
与线程的区别:
特性 | goroutine | 操作系统线程 |
---|---|---|
调 |