目录
前言
非应届,大三上,刚拿了字节跳动的机器学习平台研发岗的实习offer,来讲讲经验。这个答案并不是针对字节跳动这个公司,因为我上个学期面过阿里,前几天还面了美团,所以答案本身是针对所有想要找工作的,想进入大厂工作的同学,同时适用于研究生和本科生,我将谈一下自己关于面试大厂的体会,和如何打造一个足够漂亮的简历,还离找工作比较远的同学也可以看一下如何早点开始准备。
我先大概讲一下面试过程吧,我可能是字节跳动里拿offer最快的那一批,因为想要跳过笔试之类的,也不想走常规的官网简历投递这个渠道,因为效率可能比较低,于是我走了内推途径,是字节跳动大佬 内推的我,如果大家有简历可以给他,也可以给我,但是我这里要强调一点就是,内推并不是内定,该少的一样不会少,技术面试该考察的一样不少,如果说和常规途径有什么区别,可能只是免掉笔试吧,如果我参加笔试,应该也能过,所以这个不是决定你能否拿offer的一个因素,打铁还需自身硬。
当天把简历给他的时候,晚上就接到了 HR 的电话,约了面试。
下午两点开始,一共三轮技术面,连着来,第一轮一个小时结束后,面试官让我等下,进行第二轮面试,然后第二轮结束后,开始第三轮,我猜测面试官的职级应该是越来越高的,前两轮都有 coding,第三轮没有。
一面
1. 介绍一下自己, 为什么选择出来看看机会
2. 聊项目, 警报怎么做的, 统一接入监控项怎么做的
3. 聊项目, 配置中心项目, 问实时配置推送怎么做
4. 讨论为什么选择所有的组件依赖放在配置中心中控制
5. 我现在要做一个限流功能, 怎么做?
6. 这个限流要做成分布式的, 怎么做?
7. 怎么抢锁?锁怎么释放?
8. 加了超时之后有没有可能在没有释放的情况下, 被人抢走锁?怎么解决?
9. 不用 zk 的心跳,可以怎么解决这个问题呢?
10. 假如这个限流希望做成可配置的, 需要有一个后台管理系统随意对某个 api 配置全局流量, 怎么做?
11. 某一个业务中现在需要生成全局唯一的递增 ID, 并发量非常大, 怎么做?
12. 算法题, M*N 横向纵向均递增的矩阵找指定数
13. 有什么想问我的?
![](https://i-blog.csdnimg.cn/blog_migrate/1065e99553d4f8549d09988da591e873.png)
二面
1. 平时用的工具链和技术栈是什么?
2. golang 踩过坑吗?
3. 这段 golang 代码有没有 bug?
4. Java 中 HashMap 的存储, 冲突, 扩容, 并发访问分别是怎么解决的?
5. 拉链法中链表过长时变形为红黑树有什么优缺点?
6. HashMap 的并发不安全体现在哪?
7. HashMap 在扩容时, 对读写操作有什么特殊处理?
8. ConcurrentHashMap 是怎么做到并发安全的?
9. Java 有哪些锁机制, 分别有什么特点?
10. 知道 CAS 吗? Java 中 CAS 是怎么实现的?
11. MySQL 的存储引擎用的是什么?为什么选 InnoDB?
12. MySQL 的聚簇索引和非聚簇索引有什么区别?
13. B+树和二叉树有什么区别和优劣?
14. 针对一个场景设计索引,考察的是联合索引与列选择性的知识
15. 现有一个新的查询场景, 要怎么解决?
16. 假如要查 A in () AND B in (), 怎么建索引?
17. 查 A in () AND B in () 时, MySQL 是怎么利用索引的?
18. 假如查询 A in (), MySQL 是针对 N 个值分别查一次索引, 还是有更好的操作?
19. 用过 Redis 的哪几种数据结构?ZSET 是怎么实现的?
20. zrange start, stop, 总长度为 n, 复杂度是多少?
21. Kafka 的消费者如何做消息去重?
22. 介绍一下 Kafka 的 ConsumerGroup
23. Kubernetes 和 Docker 用得怎么样?
24. 时序型数据库的存储结构是怎么样的?
25. LSM 树了解吗? 是一种什么存储结构?
26. 在生产中用过 Cassandra 和 RocksDB 吗? 量有多大?
27. Cassandra 的墓碑机制是什么 ?
第三轮结束之后,大概是四点半,也就是说整个技术面三轮,总共用时没超过三个小时,第二天就被 HR 加微信,打电话简单聊了几句,就得到了 offer 确认,所以offer拿的非常之快。
总结:
我不会把技术面的问题详细的陈列出来,会给个大概的知识点,大家可以朝着这个知识点为中心去扩张性的学习。
我的体会是,面试的问题,其实还是看基础掌握的是否牢固,有两门课尤为重要,就是
第一轮
第一轮面试考察了我关于红黑树,AVL数,堆排序,快速排序的一些内容,还考察了关于 TCP 的握手相关的细节问题,这都是基础,然后有一道 coding 题,我不知道算多难的题,因为我没怎么做过leetcode这种算法题,但是整体上讲绝对是比较简单的,有种找规律的感觉,我的算法水平其实很一般,因为我很少做oj题,但是幸运的是题目本身难度不高。
面试是视频面试,网页的中间有个代码在线编辑页面,直接写就行,不用太在意细节,不用编译运行的,面试官会读你的代码,看你写的对不对,思路对了基本就过了。
第二轮
第二轮考察了关于 计算机网络 数据 设计模式 相关的东西,设计模式的话也是比较重要的,可以专门去学一下,比如依赖注入,工厂模式,观察者模式等,数据库的话一些关于锁的内容,数据一致性的内容要了解,问了一下 concurrentHashMap 的源码问题,代码题就是普通的一道二叉树问题,但是因为我算法过于生疏,以至于没给出最优解,其实这道题本身绝对是简单的。
第三轮
第三轮考察了很多综合性的理解问题,很多问题不是刷面试题就能答上来的,需要对计算机架构本身有清晰的理解才能答好,举两个问题:
- 为什么总听到人们说 Stack overflow,却很少听到 Heap Overflow?
- 线程有自己的stack吗?有自己的heap吗?
然后还问了关于 Web容器的问题,让我从应用层讲到操作系统,再讲到TCP层,把 Web 容器做的事情解释清楚,涉及到了 epoll select等的问题,虽然面试官没直接问linux的一些网络相关的系统调用,但是为了回答他的问题不得不提这些了。
面试官都很 nice,没有距离感,然后还有就是心态问题。
不要被网上的那些面试题吓到,真正面试的时候没有那么恐怖的,一些问题回答不上来很正常,不要给自己心理压力。
如何优化简历?
我在我的 live 中也曾说过一个好的简历应该是怎么样的,我也的确按我说的做了,效果确实不错。自己简历的打造,一定要记住三点:
1.不要陈列你的技术栈
不要陈列你的技术栈,因为这个真的没门槛,没辨识度。
例如这样:
技能:Java Python Go C C++ Rust Javascript ....
这绝对是反面教材,因为最差的简历就长这样,每个语言会写 helloworld ,就能这样写吧?
你们一定要明白 HR 那边筛选简历的时候,什么能引起他的注意。
还有明白一点就是什么东西是没门槛的,比如我上面提到的一堆语言成列就是没门槛,看起来高大尚,其实毫无含金量。
就这么说吧,我本身 java 相关的技术栈用的多,java也写的熟,但是我甚至没有在简历里写我会 java!
2. 一定要有项目
一定要有项目,一定要有项目,一定要有项目!!!
简历的打造,首先要有内容的填充,这个填充一定要是一些经历,可以是比赛,可以是项目,但是就我个人的感觉而言,如果你有一定的时间去打造简历,去做项目往往比比赛来的更实在,更有用。
为什么呢?因为首先,面试官问问题的时候很可能是围绕着你的项目经历问的,项目本身也是实力的一个保证,但是,如果你没项目,你就会陷入一个典型的面试恶性循环
面试官看你没项目,需要更多的考察来确定的水平,但因为没项目所以无法围绕项目去问你问题,只能随机抽查,而随机抽查问题,本身又增大了你答不上来的概率,这个事情又加剧了面试官对你的水平的怀疑。
注意,我说的项目一定要和编程相关,什么学生会主席,足球冠军,都别往简历里写了,你面的是程序员,你说那些业余爱好真的一点用都没有,相信我。
项目本身,最好以 web 的形式给出,这样一个链接给过去,面试官直接打开就能看,注意并不是说我让你做网站,而是把这个项目以网站的形式呈现出来,哪怕是一个开源框架,也要有自己的官网网站,最不济,也要把 github 仓库地址给过去。
3.Github 不要一片空白!
如果一个人有充足的技术热情,哪怕这个人水平差点,面试官也更喜欢,因为有了技术热情,哪怕不会也会去学的,如何向面试官透露出 “我是一个爱搞事,喜欢折腾技术的人”这一信息?最好的办法就是 Github 丰富起来,限于每个人的能力,高星项目比较难搞,但是要从平时开始就持续 commit,让github充满小绿点,项目也要足够专业,有文档,有测试用例,再加上持续集成等东西,会极大的增加面试官对你的好感。
你们要意识到一个事情,就是 好的简历里面一定是充满链接
什么意思呢?就是说,简历只是个简历,真正能说明问题的也许是你的项目,你的Github账号,所以简历可能真的只是个入口,让面试官点进去,看到更丰富的你。
反面教材就是,简历里连 Github 账号都没有,比这个更糟糕的是,都没用过 Github。
我敢说,如果面试官发现你连 Git 都不会用,你一定凉了,一个对技术感兴趣的人,不管是本科生还是研究生,连 Git 都不会用绝对是不应该的,凉的概率是 120%。
所以这其实就是个平时积累的问题,我能面试这么快就拿到offer,简历的优秀本身也起了很大作用,但简历优秀绝不是靠看了一篇我的回答就能搞定的,把平时每天做好,真正做出来东西,有内容了,你的简历才可能真正丰富起来。
第三轮面试的面试官和我说的第一句话就是 “你做了好多东西呀!里面最自豪的是哪一个?”,如果我没项目,接下来的谈话绝对不会那么愉快。
所以只有把平时做好了,机会到来了你才能抓住,当机会到来了你却因为平时不好好搞而错失良机,只能悔恨了。
我现在想想自己过去将近一年的学习路线和做事的方式,虽然也不怎么努力,每天也就学个四个小时,但是方向绝对是对的,因为上面的这些关于简历的感悟,我至少一年前就意识到了,开始着手准备,这些东西都要自己搞,没有老师会告诉你你应该怎么做,你需要自己去探索,自己去干。
最后
感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!
文章到此就结束了!
最后来自小编的福利
以下是小编整理的一份大厂真题的面试资料,以及阿里的面试集锦,还有小编整理的Java核心技术思维导图,需要领取的小伙伴可以 点我 免费领取 ,编程的世界永远向所有热爱编程的人开放,这是一个自由,平等,共享的世界,我始终是这样坚信的。
部分资料图片:
喜欢小编的分享可以点赞关注哦,小编持续为你分享最新文章 和 福利领取哦