长沙数创 | Golang实习
时间:2022.10.21
- 自我介绍
- go语言的chanel
- GMP模型
- redis的数据结构
- redis持久化的方式
- es的倒排索引
- 简易版抖音项目的登录注册实现,防网络攻击
- mysql的隔离级别
- innodb的数据结构,b树和b+树的区别
- 计算机网络的七层模型
- ip的分类,ICMP协议
- RobGin中间件怎么实现的?
反思
虽然这是我第一次线下面试,但其实我是不紧张的,毕竟有了线下实习的经验。
-
面试的时候还是有几个问题没有理Go | 匿名,回调函数,闭包
匿名函数
简单来说就是没有名字的函数,比如说
func main () { func(str string) { fmt.Println("hello ", str) }("world") }
回调函数
简单来说就是函数的参数包括函数,比如说稳定排序函数:
func SliceStable(slice interface{}, less func(i, j int) bool) // 按照结构体val降序 type S struct { name string val int } func main () { arr := make([]S, 0) less := func(i, j int) bool { return S[i].val > S[j].val } sort.SliceStable(arr, less) }
闭包
简单来说,闭包就是返回函数的函数,在一个函数内部定义另一个函数,内部的函数可以访问外部的变量。
比如:
func counter() func() int {
count := 0 // 这是外部函数的变量
// 内部函数是闭包
innerFunc := func() int {
count++ // 可以访问外部函数的变量
return count
}
return innerFunc
}
- 解得太深入,比如说B树和B+树,这个答案我是知道的,但是面试官问我B+树和B树的结构,还说如果是保存用户id是怎么保存的,因为只是概念层次的理解,所以具体的实践并不清楚,从这一点来看,除了掌握理论知识,更应该将这些知识运用在实际的开发中,思考一下如果在实际开发中将会如何使用,所以知识的最终去向一定是实际运用,不然就没有什么意义。
- 还有就是像ES这种,因为是跟着书做的项目,所以其实对es理解是不深入的,只是知道别人是那样使用的,而自己掌握的就只有这个使用,而面试的话是远远不够的,还是要准备一些面试会问的问题。
- 其次就是项目问题,就登陆注册来说,如果就简单的密码加密校验,在实际开发环境看来这是最简单的方式了,所以必须考虑一下是不是要防止网络攻击等因素。这一点给我的教训就是项目还有很多的地方是可以去完善的,特别是分布式对象存储,可以自己添加功能,尝试部署在docker和k8s上,对于放在简历上的项目一定要十分熟悉才行,也就不会出现中间件怎么实现回答不上来的情况
保持一个好习惯吧,对于面试完之后没有回答上来的问题,及时地解决,面试完就去寻找满意的答案,而不是一直拖着拖着,在学习的过程中也是,遇到了就及时解决,不要一直堆放在那里!
评论区