如何进入鹅厂?25秋招面试心得与小结(已上岸)
之前的帖子因意外又没了,基于之前的重新补上,顺便加一点工作后的感悟。不过内容是基于25年秋招,那时候AI还没现在这么强大,仅供参考,能吸收到一些就可以了,务必不要无脑照搬。我个人在25届的秋招中收获了几家的offer,经过抉择以及多方问询后加入了腾讯,选择在TEG进行后台开发。修订后的内容主要分三部分: 面向现在正在秋招的 / 还在准备实习的非应届 / 还不着急准备实习秋招的
面向现在正在秋招的同学的一些建议
0 算法题相关
对面试,hot100足以,而且现在一堆题单帮你缩小范围,其实hot100都不用全刷完,但不要花太多时间去找题单,而是要先去刷题。找个你能看得懂的题解,自己去实现,逐步理解即可。对于新手,可以参考代码随想录系统学习,以及你的数据结构教材或普林斯顿的《算法》。此外,英文能力较好的可以试试CS61B, 使用Java语言的数据结构课程,全英课程。面试的题很多都是力扣原题,大部分都是hot100,看面经也有很多奇奇怪怪的题目,有余力准备一下就好。以及还有些sql/操作系统/Java实现一些多线程代码的情况,各位看面经时看到记得准备一下就好。
笔试和面试的题目是不同的,笔试的遵循难度分布,很少原题,这部分大部分人基本只能做出来1-2/3题(例如美团5题就是能做出4题)。笔试的范围大于hot100,例如前缀和这个常考的点。关于笔试题解可以参考万诺coding。具体的程度看你自己情况,这玩意本身就是个参考的,力扣和代码随想录刷明白了再刷点往年题就可以了。
1 投递时间
水平较好的 + 学历可以(至少一个211), 可以尽早投,当你现在看到这个帖子时,如果还没投,可以考虑赶紧做一份简历然后投递。晚点就没offer了,只能等补录,不要等来你学校开宣讲会了再去投,我秋招9月末回学校参加宣讲会投递,赶上10.1等了3周才有笔试,10月中下旬才开始面。有人觉得,我没准备好,实际上你投了,HR还有筛选,部分公司还有笔试,约面后还有延迟,一般起码1周左右,足以复习了。而且很多公司是无限复活的(比如我司腾讯),早点投不会有风险,反而能找到一些稀缺的岗位。
2 面试
面试是一个你和面试官沟通的过程,这是个双向的,不是你问我答的电视节目,是一个你要展示出自己的能力,不管是学习、沟通、思考深度(体现在项目和实习)都是需要的,毕竟面试官是在选将来要从事的同事,不是AI机器问答官。所以面试时是需要你去尽可能的展示你的知识深度,广度以及沟通能力,确保面试官认为愿意做你的同事。所以很多问题不要再去直接说八股的套话啦,加入自己的理解,也可以看到的一些文章对这个部分的最新解释。比如jvm虚拟机部分,深入理解JVM虚拟机其实是多年前的书了,最近是否有新的相关内容呢?java8也是很多年前的了,现在比较稳定的版本是哪个呢?都有什么新特性呢?建议都拓展一下。
3 简历/项目
简历/项目部分,我的简历写的挺烂的,就不献丑了。项目部分的描述可以参考star法则,尽可能的展示你做的内容,以及给到一个具体的量化。
还在准备实习的非应届同学:
对于非应届,首先是规划排期,我个人规划的路线是Java基础 - 集合 - 刷力扣 - SSM(或者直接springboot) - 第一个项目(找点简单的即可) 到这里正常努力是可以1个月完成的,也不排除项目难度较大或者SSM学的太多导致无法完成,动态排期即可。第一个建议是业务类型,用于熟悉SSM的具体开发以及一些常见的工具使用,写项目的同时可以应用到软件工程相关内容,写好文档记录、重点难点、类图、UML图、设计模式等,都是面试的资本。同时 开始了解数据库、Juc、Jvm、消息队列等内容 - 考虑第二个项目。不过今年情况不太一样,似乎Agent开发火了起来,公司内部也在鼓励拥抱AI,自动化一些事情,所以这也是个可以的方向,只是需要真的学明白,而不是只会一些名词。
如果有时间,根据之前的文档与思路重写第一个项目,例如引入原子变量等多线程内容。时间不足则跳过,直接开始第二个项目,此时可以是轮子项目,这个种类较多,Github、牛客网自行找即可,不做分享。
此外,项目来源主要是实验室/个人团队的需求、网上现成开源的以及开源项目(例如腾讯的犀牛鸟/中科院开源之夏),这类开源项目注意一下时间节点,建议提早准备(提前3-4个月吧),我之前也参与过相关的,直接落选了,看中选者的申请内容,基本已经有了整体的思路,甚至可以说都快做完了,这类内容还是很依赖积累以及方向对口的,不过做的好应该很出彩。
之后根据你的安排或者学校安排,找实习/完成毕业条件后找实习/继续巩固/开源/完成自己的项目均可。
如果你是现在的大三、研二还是0准备的话,从现在开始也不晚,我和几个朋友的观点是,保证每天6h学习时间,1个月足以学完Java的绝大多数内容,更多的细节内容和复习可以留到之后再去补充。
还不着急准备实习秋招的
对于刚刚大一、研一的新生,倒也不必要直接选择语言和方向,可以先建立计算机体系逻辑或者加入到学校的实验室/兴趣小组中,而不是直接落入到互联网民工中。回想到读研之前本科混了4年,我对互联网还只停留在算法、前后端开发、测试这几个方面,也不知道具体各个岗位都是负责什么内容,算法分为哪些方面,选择面无疑窄了很多,看到今年同门拿到大模型的天价总包也很是羡慕,所以如果你还有时间(即不是现在的大三、研二),都是可以考虑了解更多的方向找到你所热爱的。如果找不到或者学习之后发现不感兴趣怎么办?当然是回来看帖子的后续内容。并且现在的开发也不仅仅只是开发,很多研究生同学都是做算法的,对于涉及到算法的开发岗位也会有额外的加分。
以及不要设限,我本科还算可以,但没啥就业意识,大三下的时候90%的人都选了读研(考研 + 保研),认为本科没出路。可实际上,我进入公司后,见到了双非本科的算法大佬,非美术强校(甚至普通双非)的王者组绘画大佬,一切都是靠着自己的热爱去一直走,最后也成功上车,各位没必要觉得我是普通本科啥也做不了,不如多去试试,至少腾讯是没有学历歧视的,欢迎大家投递。
一些可参考的学习资料包括北大自学CS,国外公开课(B站就有很多)等(之前放链接被屏蔽了,这次不再放链接了,而且学计算机,寻找知识的能力也是很重要的一环)。以及,不要只看了我说的就一股脑搜索课程,然后束之高阁或者只看视频,动手去做实验与修改bug才是最重要的,毕竟计算机也是工科。
如何学习
Java开发的面试内容包括八股[ Java基础(语言特性 +集合 + Juc + Jvm + Spring) + 数据库(Mysql, Redis/或其他nosql如MongoDB)+ 计算机基础(计网 + 操作系统 + 基本的Linux) + 额外内容(消息队列 + 高并发、可用、分布式、系统设计)] + 项目拷打 + 算法题。对于资料,我都是白嫖的,白嫖的内容足够大家用了,如果你确实有需要再去考虑付费内容。
先从八股说起,对于具体的面试题内容,这里空白太小,我写不下,各位可以去牛客上搜索,但切记,一切的八股都仅供参考,这些是他人的问题,和你可能完全不同,不同公司、小组、面试官以及你们之间不同的简历都会影响到八股问题。将其看作高考/考研前的模拟题即可,这不是你的真正试卷。有用的是你面的部门甚至小组的面经,你可以推测出面试官/公司偏好的倾向(但也不排除面试官从一个题库中选题,这种没救了)。实际上,我个人遇到的面试问题,大部分都是常见的题,剩下的都是和项目相关,所以各位看到面经有奇怪的问题,很可能是项目或背景相关,你可以不在意。
我个人的学习路线是Java基础(B站上很多视频,我看的是韩顺平老师的课程,尚硅谷、黑马的也都可以 - 注意,这部分只是基础,快速了解基本的语法即可,没必要抱着本书或者多个课程深入学习),练习的话就是学了一下集合内容直接去刷力扣熟悉语法(集合常用的只有List, Set, Map, Queue, 初步学习不会可以直接看题解,再去百度/GPT对应语法的含义)。
有了基本的语言基础建议此时去学习Spring,准确来说是Spring + SpringBoot + Mybatis(SSM),时间紧直接学SpringBoot, 建议按部就班学习,这部分直接看B站视频即可,涉及到很多设置,视频更加流畅。这部分面试常见的只会问(Ioc/Aop/Spring事务/SpringBoot启动流程)之类的,八股不算多,甚至可以直接背,但没有这个你就无法后续推进项目。
学完基本的SSM后,可以直接去做练手项目了,可以直接B站找各种商城、牛客的仿牛客网、黑马的外卖等,这个其实是熟悉基本的Spring使用以及项目开发过程,做完之后也可以作为自己的项目。有人会问,这些都烂大街了,怎么办?最好的自然是用实习项目或者实验室项目顶替(我个人是实验室项目)或基于自己的爱好去开发,之前所学的知识用于过度的练手。其次可以考虑去Github或者B站上找相关的项目,选一个文档相对好一点且你觉得不烂大街的,最后还可以考虑套皮改写项目描述。
有了项目之后,就是八股盛宴了,基础的资料网站主推小林,可以将数据库、计算机基础学的很扎实,不过内容是有部分缺少的(例如Redis中没分布式锁,也没分布式等内容),这些可以自己去找内容补上,学习的时候又不是只会看一份,建议多个对比学习。现在也多了面试题板块,有了Java的内容,个人感觉深度和广度都有了。Java基础的直接JavaGuide即可或者全栈体系等其他你需要的。
Java基础 + 集合 : 基本的语法、反射、面向对象三大特性、包装类, 直接看课和资料即可。熟悉语法可以自己写写小demo或者直接刷力扣。
Juc : 建议B站黑马Juc , 可以结合Github上的相关资料一起学习,更深入的可以考虑博客,书也可以去看。
Jvm: B站黑马Jvm。之后看周志明老师的《深入理解Java虚拟机》书中有些内容过时,但总体很完整。Jvm主要分为内存、垃圾回收、类的加载三部分, 可以结合大厂的技术博客例如美团,查看更加精细化的内容。
SSM : 八股就是AOP,IoC等老生常谈的内容,实际还是要去看怎么使用,B站找个播放量不低的SSM课程即可。后续的学习直接跟项目走就好。
数据库:Mysql 直接小林 + MySQL45讲(极客时间的课程,看了后一本不需要看这个了) + Mysql是怎样运行的(很多,很细,我没看完..) , 以及声哥的手写Mysql,总体来说小林的足够了,在掌握的基础上,再去考虑深入。 Redis直接小林即可
基础知识同理看小林,也可以看大黑书来补全知识体系(CSAPP至今只看完了100页,听说HIT考研考这个,看完的可以去试试),或者网络是怎样连接的/计算机是怎样跑起来的这类通俗一点的。计网相对较多,基本算是必考,主要是HTTP和TCP。操作系统少一些,重点就是内存和进程线程,和Juc对比学习即可。这些只是重点,不代表你只要会这些。
Linux对于普通的Javaer同学而言,大部分只熟悉一点命令,很少去主动部署服务,可以去尝试部署服务运行,并排查对应的问题,Steam有个Hacket的游戏也能帮你提升能力(确信只是为了学习命令,毕竟这游戏太枯燥了)。
对于额外的内容,消息队列会在项目中遇到,需要时直接学对应的八股即可,系统设计以及三高等内容,都可以在JavaGudie中找到,对于深入的内容,一方面是看网上的博客与帖子,参考大厂的技术博客(例如B站就有点赞系统设计的文章) , 还可以去Github上寻找。
最后到了力扣,hot100+代码随想录足够了。
入职前的准备
最后一点碎碎念:进入公司前,可以和你的mentor(一般都是1面面试官)多多沟通,交流进度。学的东西包括git,linux的使用(不要再去背命令啦),以及Docker的使用,docker用的还是很多的,各位可以自己去练习一下。以及部分同学对于业务部分sql写得很少,也可以学习一下,同理还有python。对于没时间的同学也可以先不考虑,现在AI很发达,可以帮你实现大部分简单的部分。提一下设计模式,这玩意平时用不到,但实习过程中看到很多优秀的代码都用到了这部分内容,可以初步学习一下,看大话数据结构即可,能应用到项目中也是一个亮点。
最后打个小广告
目前腾讯秋招已经开启,欢迎各位加入腾讯,秋招相关的信息可以在@腾讯招聘中找到。目前在这里工作的两个月中,我个人还是感觉到很舒服,公司的人文关怀和网上风传的一样好,有着免费的早晚餐,暑期每周都有的抽奖活动,以及一系列额外的腾讯产品福利。总体的工作氛围也很舒适,至少我所在的部门为例,几乎没有会议要开,所有的问题基本都是点对点高效沟通,减少了冗杂的会议时间,而且大家都很亲和,不会出现pua等情况,一切都是抱着鼓励和解决问题的态度去做的。欢迎大家投递腾讯,来体验一段不一样的生活。