菜狗的秋招面经分享
背景:广东某双非一本毕业
#实习:
-字节跳动-Lark-某业务 干了大概半年吧
-欢聚时代(YY)-Shopline-数据中台 干了大半年吧
#实习相关:之前在YY的时候主要是重构了监控,然后基本上就是监控的Owner,由于这个监控跟我们说的promethus+grafana的监控不太一样,不属于服务监控,属于针对大数据领域中针对作业的状态监控,所以经常会被人问一些大数据相关的问题;在字节的时候虽然是直接做业务的,但是由于真正工作主要在做优化,所以经常被问SQL优化相关的事情。由于实习的时长还挺足的,所以基本不问一些传统的八股,所以后面其实也没什么八股画重点这一说,但是感觉八股理解透彻了,其实跟我下面的大差不差。
秋招给面的不多,但是我印象中好像给面的都有offer了。下面就是以几个大厂的为例子吧。分成两部分,一部分是基础的结构化技术面试,还有一部分是算法相关的,总的来说就是多写DP和树的题就好了,hot100刷熟点,人力面基本程序员都差不多,没啥技巧。
#1.百度
一面的时候吧,主要是感觉面试官问了一些实习相关的事情,一个是针对我的监控,问了一些当时的设计,以及探讨一下当时调研的对象和最终的技术选型。这里感觉就是要自信,就是要说出自己对这个东西的理解,就像有时候我们架构一个crud的项目什么的,为什么这些地方要这么设计,他针对的业务场景是什么,作为架构的那一方是一定清楚的,尤其是这种从0到1的项目,只要把业务场景说清楚了,为什么这样设计就可以了。然后就是问了一下,SQL优化,为什么这样做,把整个innodb的底层存储引擎说清楚就好了,例如using index在底层是怎么做的,怎么避免回表,执行计划是干什么吃的,在哪里出来的,把统计数据计算应该用什么索引的过程说出来就好了。然后问了一些spring相关的问题,问的还挺里的,有些问题不懂就直接说不会,问题不大的,以及go的问题(由于我会一点go,部门用的也是go)
二面的时候估计是面试官看到我做了SQL优化的工作,然后试探性问了一下我看什么书,我就说我看了那三四本mysql的书以及一些存储相关的书。然后我们聊天的时候主要是针对《mysql是怎么运行的》这本书里面的内容在聊的,由于我们俩都是这本书的读者,所以对这本书的细节非常了解,然后他就在书中很细很细的地方问了我,由于这本书真的写的太好了,我就基本上都记得,所以面试官就挺满意的。还就书中一个:RR是否解决幻读。这个问题跟我展开了很激烈的讨论。然后聊了聊DDIA和分布式共识算法,聊了聊raft和paxos。基本上就过去了。总的来说这一面其实比较特殊哈,我是一个喜欢存储领域的后端开发,刚刚好面试官也是,我们就这一点上其实气场挺合的,对于后端来说,我们对DB的了解其实也应该挺深的。
三面的话,主要其实不是技术面。是针对一些人力方面的问题,例如说我们如何协调研发资源,如何解决倒排问题,如何去做风险上报等等。
四面的话,就是纯纯被吊打面了。由于部门是C端的,天生自带高并发,所以有很多设计方面其实在我的工作中(B端或者内部平台)其实并没有这方面的经验,所以很多主要的设计是不能支撑业务的膨胀的以及不能支撑那么大的流量。我觉得这里就是我的短板,大伙们啊,活用redis吧,redis不只是用来做cache好用的。
五面主要是跟大老板聊我们怎么学习,估计是二面的时候说了我喜欢看书,大老板好像挺喜欢这一点的,问我是怎么看书的啥的巴拉巴拉的。然后问了我生活作息,我说一点睡七点起,给老板惊到了,笑死。
#2.字节
字节我是转正答辩通过的,所以其实没有面试,就是直接讲讲文档,问我C,B端的区别,如何做建模等等,没有技术性的问题。
#3.快手
一面的话,还是在聊SQL优化和innodb的底层,以及用过的优化的手段,我们怎么去玩mysql的。感觉回答这个问题就是有些条理性就可以了,一般来说分为技术层面的优化和业务层面的优化嘛,所以我们就分开讨论就可以了,再讨论成本,最终选型是偏向xxx,也是真实的解决慢SQL比较常见的思路。不过我当时由于回答的没有太规整的结构性,所以面试官稍稍有些不解,稍微提醒了我一下,也很感谢他包容我,各位大佬也要注意一下这点。
二面的话,依旧是聊SQL优化和innodb的底层,然后问了一下spring的比较八股的问题,有些不会的就直接说不会了(这个真的很重要,别给自己挖坑)。
三面的话,聊了聊现在互联网的现状,聊了聊怎么学习的,怎么做自我提升,怎么规划,作息等。问了些技术问题,一个是问监控的架构设计,跟上面其实如出一辙,还有问了一下innodb和Kafka的设计是怎么设计的,例如Kafka的时间轮,innodb的buffer pool和wal等等。
最后给了道大设计题:如何设计大数据的作业调度系统,我直接mr思路了。
总结:
其实很多是围绕我看过的书和论文的,看书的这种积累一定程度上能展示你的知识面(下面的是面试中跟面试官提到过的书和论文合集)。对实习内容一定要懂得透彻,如果只是穿针引线那还不如不聊实习,实践能力很重要,但是理论基础一定要扎实,千万不要相信所谓的实践>理论,没有足够的理论基础的支持下的实践会让我们高原缺氧。在工作中不可避免会有“常见思路”,工作中考虑到成本因素而否决掉其他的方案是正常的现象;但是永远不要停止思考,多去思考其他的解决方案能对自己的思维有更大的提升。总得来说在后端来说,考究的更多的不是你的coding能力,真实开发中其实coding时间占比很短的,但是我们协调资源(包括机器资源,例如你要上topic,要上redis;人力资源等等)的能力其实是面试官更为看重的。
#附录
数据库or mysql or 分布式相关书
《mysql是怎么运行的》(推荐)
《MySQL技术内幕Innodb存储引擎》
《数据库系统内幕》
《数据库系统设计与实现》
《数据库系统实现》
《高性能mysql》(不推荐)
《DDIA》(推荐)
《大规模分布式存储系统》
《深入理解分布式系统》
《分布式系统概论》
中间件相关
《深入理解Kafka什么鬼忘记了》
《Redis设计与实现》
《Redis深度历险》
《Redis实战》
操作系统相关
《现代操作系统》
《深入理解Linux内核》
《30天自制操作系统》
《若干操作系统的教科书,忘了,这里还挺多的》
论文 or 其他资料
《Raft等MIT6.824中涉及的所有论文》
《LSMTree》
《MapReduce》
《BigTable》
《Google File System》
阿里的内核月报
各个社区的官方文档
#实习:
-字节跳动-Lark-某业务 干了大概半年吧
-欢聚时代(YY)-Shopline-数据中台 干了大半年吧
#实习相关:之前在YY的时候主要是重构了监控,然后基本上就是监控的Owner,由于这个监控跟我们说的promethus+grafana的监控不太一样,不属于服务监控,属于针对大数据领域中针对作业的状态监控,所以经常会被人问一些大数据相关的问题;在字节的时候虽然是直接做业务的,但是由于真正工作主要在做优化,所以经常被问SQL优化相关的事情。由于实习的时长还挺足的,所以基本不问一些传统的八股,所以后面其实也没什么八股画重点这一说,但是感觉八股理解透彻了,其实跟我下面的大差不差。
秋招给面的不多,但是我印象中好像给面的都有offer了。下面就是以几个大厂的为例子吧。分成两部分,一部分是基础的结构化技术面试,还有一部分是算法相关的,总的来说就是多写DP和树的题就好了,hot100刷熟点,人力面基本程序员都差不多,没啥技巧。
#1.百度
一面的时候吧,主要是感觉面试官问了一些实习相关的事情,一个是针对我的监控,问了一些当时的设计,以及探讨一下当时调研的对象和最终的技术选型。这里感觉就是要自信,就是要说出自己对这个东西的理解,就像有时候我们架构一个crud的项目什么的,为什么这些地方要这么设计,他针对的业务场景是什么,作为架构的那一方是一定清楚的,尤其是这种从0到1的项目,只要把业务场景说清楚了,为什么这样设计就可以了。然后就是问了一下,SQL优化,为什么这样做,把整个innodb的底层存储引擎说清楚就好了,例如using index在底层是怎么做的,怎么避免回表,执行计划是干什么吃的,在哪里出来的,把统计数据计算应该用什么索引的过程说出来就好了。然后问了一些spring相关的问题,问的还挺里的,有些问题不懂就直接说不会,问题不大的,以及go的问题(由于我会一点go,部门用的也是go)
二面的时候估计是面试官看到我做了SQL优化的工作,然后试探性问了一下我看什么书,我就说我看了那三四本mysql的书以及一些存储相关的书。然后我们聊天的时候主要是针对《mysql是怎么运行的》这本书里面的内容在聊的,由于我们俩都是这本书的读者,所以对这本书的细节非常了解,然后他就在书中很细很细的地方问了我,由于这本书真的写的太好了,我就基本上都记得,所以面试官就挺满意的。还就书中一个:RR是否解决幻读。这个问题跟我展开了很激烈的讨论。然后聊了聊DDIA和分布式共识算法,聊了聊raft和paxos。基本上就过去了。总的来说这一面其实比较特殊哈,我是一个喜欢存储领域的后端开发,刚刚好面试官也是,我们就这一点上其实气场挺合的,对于后端来说,我们对DB的了解其实也应该挺深的。
三面的话,主要其实不是技术面。是针对一些人力方面的问题,例如说我们如何协调研发资源,如何解决倒排问题,如何去做风险上报等等。
四面的话,就是纯纯被吊打面了。由于部门是C端的,天生自带高并发,所以有很多设计方面其实在我的工作中(B端或者内部平台)其实并没有这方面的经验,所以很多主要的设计是不能支撑业务的膨胀的以及不能支撑那么大的流量。我觉得这里就是我的短板,大伙们啊,活用redis吧,redis不只是用来做cache好用的。
五面主要是跟大老板聊我们怎么学习,估计是二面的时候说了我喜欢看书,大老板好像挺喜欢这一点的,问我是怎么看书的啥的巴拉巴拉的。然后问了我生活作息,我说一点睡七点起,给老板惊到了,笑死。
#2.字节
字节我是转正答辩通过的,所以其实没有面试,就是直接讲讲文档,问我C,B端的区别,如何做建模等等,没有技术性的问题。
#3.快手
一面的话,还是在聊SQL优化和innodb的底层,以及用过的优化的手段,我们怎么去玩mysql的。感觉回答这个问题就是有些条理性就可以了,一般来说分为技术层面的优化和业务层面的优化嘛,所以我们就分开讨论就可以了,再讨论成本,最终选型是偏向xxx,也是真实的解决慢SQL比较常见的思路。不过我当时由于回答的没有太规整的结构性,所以面试官稍稍有些不解,稍微提醒了我一下,也很感谢他包容我,各位大佬也要注意一下这点。
二面的话,依旧是聊SQL优化和innodb的底层,然后问了一下spring的比较八股的问题,有些不会的就直接说不会了(这个真的很重要,别给自己挖坑)。
三面的话,聊了聊现在互联网的现状,聊了聊怎么学习的,怎么做自我提升,怎么规划,作息等。问了些技术问题,一个是问监控的架构设计,跟上面其实如出一辙,还有问了一下innodb和Kafka的设计是怎么设计的,例如Kafka的时间轮,innodb的buffer pool和wal等等。
最后给了道大设计题:如何设计大数据的作业调度系统,我直接mr思路了。
总结:
其实很多是围绕我看过的书和论文的,看书的这种积累一定程度上能展示你的知识面(下面的是面试中跟面试官提到过的书和论文合集)。对实习内容一定要懂得透彻,如果只是穿针引线那还不如不聊实习,实践能力很重要,但是理论基础一定要扎实,千万不要相信所谓的实践>理论,没有足够的理论基础的支持下的实践会让我们高原缺氧。在工作中不可避免会有“常见思路”,工作中考虑到成本因素而否决掉其他的方案是正常的现象;但是永远不要停止思考,多去思考其他的解决方案能对自己的思维有更大的提升。总得来说在后端来说,考究的更多的不是你的coding能力,真实开发中其实coding时间占比很短的,但是我们协调资源(包括机器资源,例如你要上topic,要上redis;人力资源等等)的能力其实是面试官更为看重的。
#附录
数据库or mysql or 分布式相关书
《mysql是怎么运行的》(推荐)
《MySQL技术内幕Innodb存储引擎》
《数据库系统内幕》
《数据库系统设计与实现》
《数据库系统实现》
《高性能mysql》(不推荐)
《DDIA》(推荐)
《大规模分布式存储系统》
《深入理解分布式系统》
《分布式系统概论》
中间件相关
《深入理解Kafka什么鬼忘记了》
《Redis设计与实现》
《Redis深度历险》
《Redis实战》
操作系统相关
《现代操作系统》
《深入理解Linux内核》
《30天自制操作系统》
《若干操作系统的教科书,忘了,这里还挺多的》
论文 or 其他资料
《Raft等MIT6.824中涉及的所有论文》
《LSMTree》
《MapReduce》
《BigTable》
《Google File System》
阿里的内核月报
各个社区的官方文档