深圳幻海软件技术有限公司 欢迎您!

Go 技术一面一般考哪些内容

2023-02-28

没有假如,我就是一个Golang面试官,来自百度。同时我到百度之前也面过头条,腾讯,小米,高德的golang,基本都过了。我回答应该还是比较有说服力。事实上,golang的问题只占我面试问题的20%左右。问东西的顺序不一定是下面的顺序,有的时候我会根据简历选择二分法难度来问,直接问一个难度适中的问题

没有假如,我就是一个Golang面试官,来自百度。同时我到百度之前也面过头条,腾讯,小米,高德的golang,基本都过了。我回答应该还是比较有说服力。

事实上,golang的问题只占我面试问题的20%左右。问东西的顺序不一定是下面的顺序,有的时候我会根据简历选择二分法难度来问,直接问一个难度适中的问题。说上来就继续二分法筛。下面是我问过的问题。

Go 技能考察

1.make和new差别,引用类型的意义

2.逃逸分析

3.channel的实现

4.gmp与gc,重点问题(网络io等待队列,读写屏障)

5.map的实现,重点问题(sync.map的实现,map实现随机的方法)

期间会根据实际情况,从这几个题发散问一些细节,但是难度不会太难了。因为我面的是p6级别的,问源码有点欺负人了。另外会问一个开发性问题,你写go遇到的坑点。从这里也可以发散问一些,但是不会问太多了。这几个问题在10分钟之内肯定要问完的。我的面试范围和我之前遇到过的面试基本都在 https://draveness.me/golang/ ,这个教程还是非常不错的。

PS:除了网页版 https://draveness.me/golang/ 的作者还出了纸质书,全书彩印,装订也十分精美,喜欢读纸质书的可以考虑入手。

这些问题不一定都要答上来,我是综合考察的,我写这几个题目也不是让大家去背这几个题的,只是想告诉大家面试的难度一般如何,顺便说几个经典题目。另外我主要关注的问题其实主要是mysql,redis,mq,算法,分布式。有人看的话,我就补充一下。

MySQL 考察

先声明一下,我说的面试题都是个人向的,其实大家要面哪家公司的时候,搜那家公司的面试题用处其实不大,因为面试官并没有说题库,或者统一标准的说法。如果我去了其他家公司当面试官我一样也会这么问(注意是提问方式和难度,题目我会换的)。而你碰到百度其他面试官,也很可能不会按我这么问。另外,因为我面的校招到10年的都有,所以具体问法也会灵活调整。说到校招,这次大校招我也被安排当面试官了,校招的朋友也可以关注一下,如果能答出来,那就惊喜级别

补充一下我对mysql的考察方式。

1.八股,为什么用b+树不用b树

以第一题为分界线,答出来了问下面的

2.说说对mvcc的理解

3.幻读是怎么解决的

4.redo,undo的作用和实现

5.事务的实现

答不出第一题就问,下面就是纯八股了

2.索引怎么建

3.联合索引最左前缀

4.聚簇索引与回表

如果觉得前半部分回答得不行,就会转问后半部分的简单题。和上面一样,我问的问题和我遇见过的问题,基本都在《 MySQL技术内幕 :InnoDB存储引擎》姜承尧老师的书里面。

Redis 考察

redis的东西虽然不多,但是也是必问的。

​1.底层数据结构实现,重点问题如:压缩列表

2.aof与rdb,重点问题如:aof重写机制

3.为什么用跳表

4.分布式锁与redlock

5.三种分布式的结构

6.大KEY​

基本上说明白一半就行了,和上面一样,我问的问题和我遇见过的问题,大部分都在《Redis设计与实现》里面。因为redis的问题都不算难,如果全答上来了,我可能会问一个:在扩容rehash的时候scan扫集合,会不会扫到重复的数据。

9月9日 补充mq+es+分布式

那就补一下剩下的常问问题吧,mq主要是kafka。下面基本上工作3年之内不怎么问,3年以上的说上1/3到1/2就通过。

​1.kafka的零拷贝和顺序io 零拷贝最好说说细节,其实就是用户空间和内核空间mmap

2.kafka的分片,分片的读一致性(水位和活跃组?忘了叫什么了)和写一致性怎么保证

3.es的倒排索引,和分片的查询召回

4.分布式锁,redis redlock etcd

5.分布式事务 2pc 3pc tcc

6.分布式共识协议 raft和paxos

7.分布式数据库 CAP BASE的概念 etcd tidb的了解​

额外的问题,只有简历写了我才会问

1.k8s的应用和架构(k8s其实我也没深入研究,随便)

2.监控prometheus,比如里面时序数据库TSDB

3.微服务架构的内容,比如服务发现和链路追踪的工具

4.校招的话问问tcp

5.其他我感兴趣的东西

6.算法题必问,一般先选一个中等偏难的,难度参见周赛第三题。要是很顺畅就加一个第四题难度(困难),做不出来就换一个第二题难度(中等偏简单)。

7.架构设计,因为我只是一面,这种问题一般留给二面问。不过我给的建议是,mysql分表,redis缓存,kafka削峰这三板斧

最后

写在最后,其实我的标准只有一个,我的所有提问也是围绕这一标准来的,就是让我感受到你对技术的热情,对技术路线有清晰规划,并且正在进行系统性地有条理的学习持续一年以上,比如看书,事实上我也是这么要求自己的。我相信满足了这个条件,你面其他公司也很容易。