2022-2023年度 golang(Go语言)工程师最新大厂面试真题

GO 基础类
1、与其他语言相比,使用 GO 有什么好处?

答:很快:开发效率快,尤其在异步并发,编译速度快,执行效率中上

简单:免去解释器,部署简单,自带交叉编译

语法:单一语法,强类型要求,利于团队协作

社区活跃:承诺版本向下兼容,工具多,第三方库丰富

2、GOLANG 使用什么数据类型?

​Go 语言中数据类型分为:基本数据类型和复合数据类型

基本数据类型有:

整型、浮点型、布尔型、字符串

复合数据类型有:

数组、切片、结构体、函数、map、通道(channel)、接口等。

Method、Bool、String、Array、Slice、Struct、Pointer、Function、Interface、Map、Channel

 
3、GO 程序中的包是什么?

包 (pkg) 是 Go 工作区中包含 Go 源文件或其他包的目录。源文件中的每个函数、变量和类型都存储在链接包中。

每个 Go 源文件都属于一个包,该包在文件顶部使用以下命令声明:

package <packagename>

您可以使用以下方法导入和导出包以重用导出的函数或类型:

import <packagename>

Golang 的标准包是fmt,其中包含格式化和打印功能,如Println().

更多内容,微信搜一搜:后端开发面试题

4、GO 支持什么形式的类型转换?将整数转换为浮点数。

Go 支持显式类型转换以满足其严格的类型要求。
i := 55 //int

j := 67.8 //float64

sum := i + int(j) //j is converted to int


5、什么是 GOROUTINE?你如何停止它?

一个 Goroutine 是一个函数或方法执行同时旁边其他任何够程采用了特殊的 Goroutine线程。Goroutine 线程比标准线程更轻量级,大多数 Golang 程序同时使用数千个 Goroutine。
10
要创建 Goroutine,请go在函数声明之前添加关键字。
go f(x, y, z)
您可以通过向 Goroutine 发送一个信号通道来停止它。Goroutines 只能在被告知检查时响应信号,因此您需要在逻辑位置(例如for循环顶部)包含检查。
package main func main() { quit := make(chan bool) go func() { for { select { case <-quit: return default: // … } } }() // … quit <- true }


6、 如何在运行时检查变量类型?

类型开关(Type Switch)是在运行时检查变量类型的最佳方式。类型开关按类型而不是值来评估变量。每个 Switch 至少包含一个case用作条件语句,如果没有一个case 为真,则执行default。


7、GO 两个接口之间可以存在什么关系?

    如果两个接口有相同的方法列表,那么他们就是等价的,可以相互赋值。如果接口A的方法列表是接口B的方法列表的自己,那么接口B可以赋值给接口A。接口查询是否成功,要在运行期才能够确定。


8、GO 当中同步锁有什么特点?作用是什么?

    当一个Goroutine(协程)获得了Mutex后,其他Goroutine(协程)就只能乖乖的等待,除非该Goroutine释放了该Mutex。RWMutex在读锁占用的情况下,会阻止写,但不阻止读 RWMutex。 在写锁占用情况下,会阻止任何其他Goroutine(无论读和写)进来,整个锁相当于由该Goroutine独占
同步锁的作用是保证资源在使用时的独有性,不会因为并发而导致数据错乱,保证系统的稳定性。


9、GO 语言当中 CHANNEL(通道)有什么特点,需要注意什么?

如果给一个 nil 的 channel 发送数据,会造成永远阻塞。
如果从一个 nil 的 channel 中接收数据,也会造成永久阻塞。
给一个已经关闭的 channel 发送数据, 会引起 panic
从一个已经关闭的 channel 接收数据, 如果缓冲区中为空,则返回一个零值。


10、GO 语言当中 CHANNEL 缓冲有什么特点?

    无缓冲的 channel是同步的,而有缓冲的channel是非同步的。


11、GO 语言中 CAP 函数可以作用于那些内容?
12、GO CONVEY 是什么?一般用来做什么?
13、GO 语言当中 NEW 和 MAKE 有什么区别吗?
14、GO 语言中 MAKE 的作用是什么?PRINTF(),SPRINTF(),FPRINTF() 都是格式化输出,有什么不同?
16、GO 语言当中数组和切片的区别是什么?
17、GO 语言当中值传递和地址传递(引用传递)如何运用?有什么区别?举例说明.
18、GO 语言当中数组和切片在传递的时候的区别是什么?
19、GO 语言是如何实现切片扩容的?
20、看下面代码的 DEFER 的执行顺序是什么? DEFER的作用和特点是什么?
21、GOLANG SLICE 的底层实现
22、GOLANG SLICE 的扩容机制,有什么注意点?
23、扩容前后的 SLICE 是否相同?
24、GOLANG 的参数传递、引用类型
25、GOLANG MAP 底层实现
26、GOLANG MAP 如何扩容
27、GOLANG MAP 查找
28、介绍一下 CHANNEL
29 、 CHANNEL 的 RING BUFFER 实现


GO 并发编程
1、MUTEX 几种状态?

⚫  mutexLocked — 表示互斥锁的锁定状态;

⚫ mutexWoken — 表示从正常模式被从唤醒;

⚫ mutexStarving — 当前的互斥锁进入饥饿状态;

⚫ waitersCount — 当前互斥锁上等待的 Goroutine 个数;

 更多内容,微信搜一搜:后端开发面试题
2、MUTEX 正常模式和饥饿模式
3、MUTEX 允许自旋的条件
4、RWMUTEX 实现
5、RWMUTEX 注意事项
6、COND 是什么
7、BROADCAST 和 SIGNAL 区别
8、COND 中 WAIT 使用
9、WAITGROUP 用法
10、WAITGROUP 实现原理
11、什么是 SYNC.ONCE
12、什么操作叫做原子操作
13、原子操作和锁的区别
14、什么是 CAS
15、SYNC.POOL 有什么用

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mingw-w64是一个开源的GNU编译器集合,它提供了在Windows平台上编译和运行C和C++程序所需的工具。而Golang(也称为Go)是一种开源的编程语言,最初由Google开发,现在由Go的开发者社区继续维护。 在mingw-w64环境下进行Golang的交叉编译,主要是为了在Windows平台上生成能够在其他操作系统运行的可执行文件。这可以帮助开发者更方便地在Windows上进行跨平台的开发和测试。 为了使用mingw-w64进行Golang交叉编译,我们可以按照以下步骤进行操作: 1. 首先,我们需要在Windows上安装mingw-w64工具链。可以去mingw-w64项目的官方网站下载,选择适合自己操作系统的版本,并按照指示进行安装。 2. 安装完成后,需要配置一些环境变量。将mingw-w64的bin目录添加到系统的PATH变量中,以便在命令行中可以直接访问编译器。 3. 在命令行中,进入到需要进行交叉编译的Golang项目所在的目录。 4. 执行以下命令进行交叉编译: ``` GOOS=target GOARCH=arch CGO_ENABLED=1 CC=mingw-w64-gcc go build -o output.exe ``` 其中,target是目标操作系统(例如windows、linux、darwin等),arch是目标处理器架构(例如amd64、386等)。 5. 执行完以上命令后,将生成一个名为output.exe的可执行文件,该文件即为交叉编译生成的可在目标操作系统上运行的文件。 通过以上步骤,我们可以在mingw-w64环境下使用Golang进行交叉编译,生成适用于其他操作系统的可执行文件。这样,开发者可以更方便地进行跨平台的开发和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值