米哈游 golang 一面
米哈游面试总体分为四个部分,go 相关,mysql 相关,redis 相关,linux 相关。
go 相关
- 第一题就给我干懵逼了。代码如下:
... m := make(map[int]int, 10) for i := 1; i<= 10; i++ { m[i] = i } for k, v := range(m) { go func() { fmt.Println("k ->", k, "v ->", v) }() }
问会出现什么状况,为什么,怎么解决。就是不要闭包直接使用外部变量,通过传参就能解决了。
- 内存泄露,什么情况下内存会泄露。
- channel 的底层实现原理,(其实就是问 buf 是环形链表的数据结构)
- defer,这个一定要认真回答,defer 在什么时机会修改返回值。多个 defer 的顺序。
- make 和 new 的区别
- channel 关闭了接着 send 数据会发生什么,关闭一个已经关闭的 channel 会发生什么。
- map 是线程安全的吗,map 的扩容规则。
- 数组和切片的区别。
- GC
- GPM 模型
- 进程、线程、协程区别。(这个很重要)
还有其他的我忘记了。
redis
差不多就是百度那样。
mysql
也差不多和百度那样。
linux
大差不差,就问了一个怎么根据进程名查该进程的 id.
总结
根据面试反馈来看,米哈游给出的是 go 基础较差,但是业务能力较强。可能这就是之前干外包的特点吧。