自我介绍
-----
项目难点
- 身份验证: 使用 Token (或 Session + Cookie)。
- (Tips: 我的项目没有啥难点, 但也不能说没有难点啊!)
你还有什么想问我的吗 (反向面试)?
- 公司招的实习生的主要工作内容?
- 公司常用的技术栈是什么?
- (面试中没有答出来的有意思的问题) 刚才的问题怎么回答 (反向狙击)?
一、基础知识
为什么选择 Go语言?
Go语言
浅谈一下Go和Java有什么区别?
Go语言Go语言Java
浅谈一下 Go 和 C++ 有什么区别?
Go语言Go语言C++
go build 和 go run 有什么区别?
go buildgo run
Go语言中变量、init函数、main函数的执行顺序?
- 首先初始化 导入包 的 变量 和 常量
- 然后执行 导入包 的 init函数
- 然后初始化 本包 的 变量 和 常量
- 然后执行 本包 的 init函数
- 最后执行 本包 的 main函数
- 【注: 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)】
Go语言 变量常量 命名规范?
公用UpperCamelCase私有lowerCamelCase常量命名UpperCamelCase
string 是基础的数据类型吗?基础类型有哪些?
String字节类型切片([]byte)intint8int16int32int64intuint8uint16uint32uint64float32float64boolbyteruneuintptr
int 和 int32 是同一个概念吗?
不是一个概念!
- 如果是 32位 操作系统,int类型的大小就是4个字节。
- 如果是 64位 操作系统,int类型的大小就是8个字节。
int32 能表示的数值范围是多少?
int32-2147483648 ~ 2147483647
uint32 能表示的数值范围是多少?
uint320 ~ 4294967295
char 型变量中能不能存贮一个中文汉字,为什么?
Go语言 中没有 char 类型,使用 byte 代替。
- 通过 byte 处理 英文字符。(byte == int8 ≈≈ char)
- 通过 rune 处理 中文字符。(rune == int32)
- 英文 和 数字占 一个字节;
- 中文 占一个字符,即 两个字节;
byte (unit8) 表示的字符 怎么转换为 int 值?
myInt32 := '8'
fmt.Printf("myInt32-T: %T, myInt32: %v\n", myInt32, myInt32)
// 输出: myInt32-T: int32, myInt32: 56
fmt.Printf("myInt32-T: %T, myInt32: %c\n", myInt32, myInt32)
// 输出: myInt32-T: int32, myInt32: 8
myByte := byte(myInt32)
fmt.Printf("myByte-T: %T, myByte: %v\n", myByte, myByte)
// 输出: myByte-T: uint8, myByte: 56
myByte2 := myByte - '0'
fmt.Printf("myByte2-T: %T, myByte2: %v\n", myByte2, myByte2)
// 输出: myByte2-T: uint8, myByte2: 8
复制代码
简单介绍一下 rune类型?
- rune类型 是类型 int32 的别名 (等价于int32),用来区分 字符值 和 整数值。
- Go 语言通过 rune 处理 中文字符。
iota 的含义和作用 (枚举?)?
iota
如何定义类型别名?
type myType = Type=import go_0110_XQZ "helloworld/go-0110-XQZ"
如何实现字符串反转?
- 在Go语言中,需要自己实现 字符串反转 函数, 并且要区分 ASCII字符、UTF-8等字符串。
- 主要是通过 byte切片、rune切片 来实现。
// 反转 ASCII 字符的方法
func reverseBytes(s string) string {
r := []byte(s)
for i := 0; i < len(s); i++ {
r[i] = s[len(s)-1-i]
}
return string(r)
}
复制代码
常用的字符串处理函数?
strings.Index()strings.Contains()strings.Replace()strings.Compare()
哪种字符串拼接方式最高效?
strings.Join()fmt.Sprintf()
string 和 []byte 相互转换的方法 (处理字节)?
string[]byte
var str string = "xqz"
var myBytes []byte = []byte(str)
var myStr = string(myBytes)
复制代码
string 和 []rune 相互转换的方法 (处理字符)?
string[]rune
var str string = "hello 谢清照"
var myRunes []rune= []rune(str)
var myStr = string(myRunes)
复制代码
谈谈 Go语言 中的 nil?
false0""nilnil指针类型unsafemapslicefunctionchannelinterface
浅谈一下 strconv 包?
strconv包
浅谈一下 big 包?
math/big
浅谈一下 flag 包?
flag命令行参数
浅谈一下 json 包?
json
import下划线(_)、点操作(.)的作用?
下划线(_)点操作(.)
new 和 make 的区别?
newmake
浅谈一下 switch语句?
switchcasefallthrough
函数支持 默认参数 或 可选参数 吗?
…
函数允许多个返回值吗?
可以。通常函数除了 返回值 还会返回一个 error。
Go语言里有异常类型吗?
error类型try...catchpanicrecover
如何优雅的把 Go项目 部署到 Linux服务器?
set CGO_ENABLED=0 // 禁用CGO
set GOOS=linux // 目标平台为 linux
set GOARCH=amd64 // 目标处理器架构是amd64
go build -o name // 编译可执行文件到当前目录 (-o:自定义文件名)
复制代码
.envconfig.ini
二、指针
值类型、指针类型、引用类型有什么区别?
值类型指针类型引用类型
Go语言中 指针运算 有哪些?
&*
Go语言里的 指针 有哪些 限制?
- Go的 指针 不能进行 数学运算。
- 不同类型的 指针 不能 相互转换、相互赋值。
Go语言中的 引用类型 包含哪些?
引用类型
简述一下Go语言里的 interface?
Interface
简述一下 空接口 interface{})?空接口的应用?
空接口 (interface{})interface{}
调用函数传入结构体时,应该传 值 还是 指针?为什么?
- 在不发生 内存逃逸 的情况下,传递指针 不会发生 内存拷贝,效率比 传递值 更高。
- 发生 内存逃逸 ,传递指针 的效率要比 传递值 更慢。
值接收者 和 指针接收者 (语法糖)?
- 值类型 调用者既可以调用 值接收者 的方法,也可以调用 指针接收者 的方法。
- 指针类型 调用者既可以调用 指针接收者 的方法,也可以调用 值接收者 的方法。
简单说一下 unsafe包?
unsafe包unsafe.Pointer
什么是链表?
链表是一种 线性表, 链表中每个 节点 存放的是指向下个 节点地址 的 指针。
三、容器
谈谈你对 Go语言 数组 的理解?
- 在 Go语言 中,数组 是 值类型,赋值 和 函数传参 操作都会 复制整个数组。
谈谈你对 切片(slice) 的理解?
切片(slice)
slice 和 数组 有什么区别?
数组切片(slice)
浅谈一下Go slice扩容机制?
oldcapnwecapnewcap = 2 * oldcap
如何比较两个字符串切片 (slice) 是否相等?
DeepEqual()
谈一谈 map[string]interface{} 数据格式
map[string]interface{}
如何判断 map 中 key 是否存在?
valueok
if value, ok := theMap["key1"]; ok {
fmt.Printf(value)
} else {
fmt.Println("key1 不存在")
}
复制代码
map 如何顺序读取?
把 map 中的 key 放入切片,对切片进行排序,遍历切片,通过 key 取值。
map 是线程安全的吗?
panic