面试相关题一
1、cap(map) 是否正确? 请说明理由
不正确,cap是获取slice底层结构中容量(cap)的值,而在go中map结构并没有直接获取长度的函数,若需要获取则只能通过range关键字。
2、a := make([]int, 5, 20)
fmt.Println(a[6])
fmt.Println(a[6:10])
编译通过,运行出错。数组越界,此slice是一个长度为5,容量为20的slice,而程序访问到了长度之外的数据。
3、列出 golang 的所有数据类型
这道题。。。。。。
bool,
数字类型(整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字),
字符串类型,
派生类型
- (a) 指针类型(Pointer)
- (b) 数组类型
- © 结构化类型(struct)
- (d) Channel 类型
- (e) 函数类型
- (f) 切片类型
- (g) 接口类型(interface)
- (h) Map 类型
4、所有数据类型定义时候的默认值
bool为false,int为0,slice,map为nil
5、函数接受者问题
哪个无法运行?为什么?如果能运行,使用什么方法能区别出来?或者说如何能使其中看起来不正确的使它不要运行?
1 | type A struct {} |
实际运行,上下两种情况均能顺利运行。
这里区分的话,可以以修改receiver的值作为判断依据。
6、需要屏蔽 10 万个关键字, 写算法实现?
AC自动机(Aho-Corasick)。
也可以使用grep
。
7、Golang,empty slice 与 nil slice,json包如何应对?
1 | var a []int |
8、空struct{}的使用
空struct不占用内存,也就是说即使分配切片10000个空struct,也只是占用底层结构体的大小。
用途一般是:chan struct{} 比如用来实现set: map[string]struct{}
空struct相等的特性在1.6之后不支持了。
9、在Go语言中结构体是否能够比较?该如何比较两个结构体?
相同类型的结构体能够进行比较。利用字段标签和反射可以达到比较的目的。
例如库:diff。
10、range 关键字
大概是有这样一串代码:
1 | byteArr := []byte{1, 2, 3} |
问,程序是否会终止。
答,会终止,循环三次,按原有的数据进行遍历。
参考我之前的博客:Go-Range
本文标题:面试相关题一
文章作者:小师
发布时间:2019-04-25
最后更新:2022-05-04
原始链接:chunlife.top/2019/04/25/面试相关题一/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可