作者:混血王子 链接:https://www.zhihu.com/question/67846139/answer/2105444792 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
没有假如,我就是一个Golang面试官,来自百度。同时我到百度之前也面过头条,腾讯,小米,高德的golang,基本都过了。我回答应该还是比较有说服力。 事实上,golang的问题只占我面试问题的20%左右。问东西的顺序不一定是下面的顺序,有的时候我会根据简历选择二分法难度来问,直接问一个难度适中的问题。说上来就继续二分法筛。下面是我问过的问题。 1,make和new差别,引用类型的意义 2,逃逸分析 3,channel的实现 4,gmp与gc,重点问题(网络io等待队列,读写屏障) 5,map的实现,重点问题(sync.map的实现,map实现随机的方法) 期间会根据实际情况,从这几个题发散问一些细节,但是难度不会太难了。因为我面的是p6级别的,问源码有点欺负人了。另外会问一个开发性问题,你写go遇到的坑点。从这里也可以发散问一些,但是不会问太多了。这几个问题在10分钟之内肯定要问完的。我的面试范围和我之前遇到过的面试基本都在https://draveness.me/golang/内,这个教程还是非常不错的。 这些问题不一定都要答上来,我是综合考察的,我写这几个题目也不是让大家去背这几个题的,只是想告诉大家面试的难度一般如何,顺便说几个经典题目。另外我主要关注的问题其实主要是mysql,redis,mq,算法,分布式。有人看的话,我就补充一下。
—————————————————————————————————————————— 9.7 补充mysql 先声明一下,我说的面试题都是个人向的,其实大家要面哪家公司的时候,搜那家公司的面试题用处其实不大,因为面试官并没有说题库,或者统一标准的说法。如果我去了其他家公司当面试官我一样也会这么问(注意是提问方式和难度,题目我会换的)。而你碰到百度其他面试官,也很可能不会按我这么问。另外,因为我面的校招到10年的都有,所以具体问法也会灵活调整。说到校招,这次大校招我也被安排当面试官了,校招的朋友也可以关注一下,如果能答出来,那就惊喜级别 补充一下我对mysql的考察方式。 1,八股,为什么用b+树不用b树 以第一题为分界线,答出来了问下面的 2,说说对mvcc的理解 3,幻读是怎么解决的 4,redo,undo的作用和实现 5,事务的实现 答不出第一题就问,下面就是纯八股了 2,索引怎么建 3,联合索引最左前缀 4,聚簇索引与回表 如果觉得前半部分回答得不行,就会转问后半部分的简单题。和上面一样,我问的问题和我遇见过的问题,基本都在《MySQL技术内幕:InnoDB存储引擎》姜承尧老师的书里面。
—————————————————————————————————————————— 9.8 补充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削峰这三板斧
写在最后,其实我的标准只有一个,我的所有提问也是围绕这一标准来的,就是让我感受到你对技术的热情,对技术路线有清晰规划,并且正在进行系统性地有条理的学习持续一年以上,比如看书,事实上我也是这么要求自己的。我相信满足了这个条件,你面其他公司也很容易。