zoukankan      html  css  js  c++  java
  • 分享最近在百度和米哈游的 Go 岗位面试

    最近面了两家公司的 go 技术岗位,一家百度,一家米哈游,面试的情况也不太乐观,现在分享一下面试中问的问题吧。

    两家都是采用线上面试的,当时没有录音,现在全靠自己的回忆来复盘一下了。

    百度一面

    百度的面试步骤分为计算机基础、go 相关mysql 相关、redis 相关linux 相关问题。还有一些发散性的问题。

    基础相关

    • 算法,包括不限于红黑树、二叉树等等。

    • 数据结构,包括不限于链表、数组等。

    • tcp、ip 相关的一些问题,比如三次握手、四次挥手、time_wait 等等。

    • 浏览器输入地址,中间发生的过程,仔细的描述一下。(这个我感觉基本都会被问,哈哈哈)。

    这一块的话,我回答的是稀碎,算法和数据结构我一个都没答上来,后面两个因为之前面试问到过,所以查过一些,回答的还算可以。

    go 相关

    • GC,(面 GO 必问题),GC 中 stw 时机,各个阶段是如何解决的。

    • gpm,(面 GO 必问题),这个必须要完全理解,抢占式调度是如何抢占的,怎么调度 goroutine 的,M 和 P 的数量问题。

    • 如何优雅的实现一个 goroutine 池(这个回答的稀碎)

    • 谈谈内存逃逸

    • 内存管理(这个也回答的稀碎)

    mysql 相关

    • 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. 台阶问题,假如对于上台阶,可以一次上一阶,也可以一次上两阶,写一个方法,实现输入台阶数,输出可以有多少种上法。

    ef32964e95f29244ca9093ec997a00f1.png

  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15847731.html
Copyright © 2011-2022 走看看