分享最近在百度和米哈游的 Go 岗位面试

2021年11月21日 阅读数:4
这篇文章主要向大家介绍分享最近在百度和米哈游的 Go 岗位面试,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

面了两家公司的 go 技术岗位,一家百度,一家米哈游,面试的状况也不太乐观,如今分享一下面试中问的问题吧。mysql

两家都是采用线上面试的,当时没有录音,如今全靠本身的回忆来复盘一下了。linux

发散性的问题。nginx

基础相关面试

  • 算法,包括不限于红黑树、二叉树等等。
  • 数据结构,包括不限于链表、数组等。
  • tcp、ip 相关的一些问题,好比三次握手、四次挥手、time_wait 等等。
  • 浏览器输入地址,中间发生的过程,仔细的描述一下。(这个我感受基本都会被问,哈哈哈)。

这一块的话,我回答的是稀碎,算法和数据结构我一个都没答上来,后面两个由于以前面试问到过,因此查过一些,回答的还算能够。redis

go 相关算法

  • GC,(面 GO 必问题),GC 中 stw 时机,各个阶段是如何解决的。
  • gpm,(面 GO 必问题),这个必需要彻底理解,抢占式调度是如何抢占的,怎么调度 goroutine 的,M 和 P 的数量问题。
  • 如何优雅的实现一个 goroutine 池(这个回答的稀碎)
  • 谈谈内存逃逸
  • 内存管理(这个也回答的稀碎)

mysql 相关sql

  • mysql 锁,分锁粒度和锁算法(间隙锁、记录锁,临键锁),以及锁算法在什么状况下会用到。大概意思就是若是精准能匹配到的话,用的就是记录锁,不然退化为间隙锁
  • mysql mvvc 实现原理。
  • mysql 索引,索引创建时机,创建规则。
  • mysql 分库分表规则,有没有实践过?
  • mysql 索引的类型以及索引的数据结构
  • mysql 事务特性,以及隔离级别。

redis编程

  • redis 的数据类型有哪些,使用场景说说。
  • redis zset 的编码方式,应该有两种,在配置文件中配置的,默认 128 个元素是 ziplist(压缩表),大于 128 则是 skiplist
  • redis 的内存淘汰策略
  • redis 的持久化策略
  • redis 分布式锁
  • redis 分布式架构有哪些
  • 若是有一个排行榜,用 zset,根据积分和时间来排序,积分高的,时间最近的拍前面,怎么实现?获取更多视频教程,微信搜索【码农编程进阶笔记】

linux数组

  • 你熟悉的有哪些命令
  • 若是线上流量暴增,全都打到一个 upstream 上了,怎么排查。
  • 如何在 nginx 的 access log 中查出请求前 10 的 ip

总结浏览器

我面试结束后,通常都会问面试官,根据此次面试,针对个人技术上面,有什么好的建议或者意见,这位面试官给个人回答是:计算机基础比较薄弱,可是业务能力很强。这也是我目前的现状,哈哈,因此最近一直在看哈工大老师的计算机理论和操做系统。但愿能勤能补拙吧。

米哈游一面

米哈游面试整体分为四个部分,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 基础较差,可是业务能力较强。可能这就是以前干外包的特色吧。

米哈游的二面

米哈游二面主要问的是业务方面和算法方面的问题,主要有三部分。

  • 微服务相关,包括微服务的注册与发现,微服务的监控,微服务的限流相关等等,还有微服务怎么守护进程,我回答的是 supervisor,也不知道对不对。
  • 具体业务的实现,兑换码的实现,如何批量生成几十万或者上百万的兑换码,(这个我回答的是用雪花算法实现),高并发下,一个兑换码如何保证只能被一我的兑换一次,以及一个兑换码如何能够被多我的兑换的实现。(这道题前先后后回答了有半个小时吧,由于以前作过相关的业务,因此内心有点底)
  • 三个算法问题:
  1. 写一个方法,解决:输入 4 个数字,经过加减乘除,输出一个指望值。
  2. 广度优先算法:怎么输出各层的值。
  3. 台阶问题,假如对于上台阶,能够一次上一阶,也能够一次上两阶,写一个方法,实现输入台阶数,输出能够有多少种上法。

分享最近在百度和米哈游的 Go 岗位面试_数据结构