-
Notifications
You must be signed in to change notification settings - Fork 0
/
0_0mianshi.txt
45 lines (33 loc) · 1.95 KB
/
0_0mianshi.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
基础:
1、golang 中 make 和 new 的区别?
new 函数用于分配内存,并返回指向该内存地址的指针,内存空间清零
make 函数为切片、映射和通道分配空间后,会进行初始化,并返回实例
2、数组和切片的区别
1、数组是定长,切片可以自动扩容
2、数组是值类型,切片是引用类型
3、for range 的时候它的地址会发生变化么?
在 for a,b := range c 遍历中, a 和 b 在内存中只会存在一份,
即之后每次循环时遍历到的数据都是以值覆盖的方式赋给 a 和 b,a,b 的内存地址始终不变。
由于有这个特性,for 循环里面如果开协程,不要直接把 a 或者 b 的地址传给协程。
解决办法:在每次循环时,创建一个临时变量。
4、4、go defer,多个 defer 的顺序
先入后出,理解为栈
5、能介绍下 rune 类型吗?
rune 等同于int32,即4个字节长度,常用来处理unicode或utf-8字符:例如求中文字符串长度
6、golang 中解析 tag 是怎么实现的?反射原理是什么?
用反射实现的
7、讲讲 Go 的 slice 底层数据结构和一些特性?
8、怎么使用select?
1、select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句
2、每个 case 必须是一个通道操作,要么是发送要么是接收
3、select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞
4、存在 default 语句,select 将不会阻塞,但是存在 default 会影响性能
使用场景:
1、竞争选举
2、超时处理(保证不阻塞)
3、判断buffered channel是否阻塞
4、使用 select{} 阻塞main函数
9、单引号,双引号,反引号的区别?
单引号是 rune 类型,代表一个 UTF-8 字符
双引号代表字符串
反引号代表定义时写的啥样,它就啥样,不支持转义