前言
最近是春招、暑期实习的高峰期,自己也凭借着持续的准备和一部分运气,较早拿到了美团的测开暑期实习。
以前接到美团的短信,都是外卖送达的通知,没想到自己有一天,也能收到offer录用的通知。虽然是测试开发的岗位,比很多大佬差远了,但还是心怀感激。
这篇文章,主要会分享自己的学习历程和心得,包括如何准备算法、八股、项目,以及投递测开需要注意哪些
也包括一些面试的相关经验,希望能帮助你在面试中游刃有余、愈战愈强。
希望这篇文章能给正在求职战场上厮杀的勇士们,带来些许帮助
背景
双非本科,软件工程专业,无实习经历,几个小比赛省奖
3.1投递美团,3.9笔试,3.20一面,3.22二面
投递的第一家大厂就是美团,当时的算法、八股的准备情况可能只有50、60%,在不完全准备充分的情况下就直接投递,并且以测试开发岗位为第一志愿,后端开发为第二志愿。
为什么我在没准备好的情况下就投递简历?
包括很多人都有这个困惑:自己还没准备充分能不能去投递简历,投了害怕面的很糟糕,不投害怕后面坑位越来越少。大厂投递简历,到笔试,再到约面是一有段较长的时间间隔,所以不要觉得自己还没有准备好就害怕投递简历,准备的七八成就可以投递简历了,而不是非要面面俱到才去投递。并且尽早的面试也能帮助你发现问题,检验成果。不逼自己一把,怎么知道自己行不行
学习经验分享
算法
经验分享
重要性
对于中大厂,无论是笔试还是面试,算法都是必不可少的环节,甚至有着一票否决权,一般放在面试的最后环节,一般只出一道。尽管前面的八股、项目回答的再好,如果算法没有做出来,可能还是要凉凉。当然,如果你在前面的环节表现得比较好,面试官就有可能会出一道相对比较容易的题目,而不会在算法题上为难你。
对于有些中小厂,并不会在面试中考察算法,如果你的目标没那么高,也可以不刷算法题。
对于算法题的准备,当然是以leetcode刷题为主,并且题量大概要到200往上,才有能力对付面试。
刷题顺序
刷题的顺序一般按照“代码随想录”题单来刷,并且要刷两到三遍,之后再去刷“leetcode hot100”题单;或者二刷三刷时结合hot100来刷
刷题tips
刷题这里我自己也有个小tips:
-
刷题比较好的方法,是用自己的话梳理总结题目的思路,并做好笔记。做笔记一方面是能帮助自己梳理思路,方便后续复习,另一方面是面试过程中可能需要讲解自己的思路
-
在二刷代码随想录的时候,可以结合着codetop网站,去查看这道题的出题频率,能帮助自己对这道题在面试中的考察频率有个认识,并且在codetop题目的评论区中可能也会提到这道题需要掌握哪些解法、达到怎样的复杂度、以及相关的变形题目
-
在面试前,可以去刷一下上面的高频题目,以及对应公司考察过的题目
-
对于时间比较充足的同学,还是建议把题量刷上去。如果题量太少,在面试的过程中可能会出现一些简单题,但你又没有刷过,当场想的话又比较困难和紧张(亲身教训)
-
面试的话,可能出现核心代码模式,也可能出现ACM模式。比如美团的面试就是在牛客网上进行,出的算法题使用的是核心代码模式;ACM模式其实也不难,主要是需要掌握不同数据格式的输入输出,可以在代码随想录的网站上进行练习。
刷题心态
大家背过单词都知道,明明昨天才背了abandon,过几天可能就想不起来单词怎么拼了
刷题也是一样,需要反复的刷,刷了忘,忘了刷,是一个长期积累的过程
所以,调整好心态,不会的题、忘了的题,反复刷、每天刷。
刷题历程
我自己是在大二上的时候就开始尝试刷题,但由于白天基本满课,所以都是睡前刷题的。但在睡觉前刷题都有个坏处,那就是会有些疲惫,以及着急上床休息,所以会导致刷题草草了事,效率低下。所以很难坚持每天刷题,过了几个月就放弃了。
所以,一定要根据个人的情况,选择效率较高的时间段刷题,比如有的人白天刷题效率高,有的人是晚上,也有的人是下午。
开始比较系统刷题是在进入大三的暑假,但其实也是比较断断续续。自己在这算法这方面确实还是比较薄弱,应当继续加强
八股
经验分享
八股的话主要分计算机基础和语言相关,计算机基础中大厂考察的比较多,包括计算机网络、操作系统、数据结构
语言方面以Java为例,主要是看JavaGuide的网站,一些Java基础知识、集合、框架的知识上面都有
计算机基础知识、数据库相关的八股,小林coding的网站还是很给力的。
当然对于这些常见的面试问题,我自己也有做了大量的笔记。这些问题和回答,都是根据个人的语言梳理总结出来的,并且每一部分都会有对应的资料进行补充,帮助更好的理解问题本身、以及相关知识点。除此以外,回答也会更加的精简,不会罗里吧嗦,更快get到重点。因为面试官听你的回答,就是听那几个关键字和重点,只要重点提到了,怎么表述就是你自己的事了。
八股的优先级
根据个人理解以及面试经验,我认为八股的优先级是这样的,当然仅供参考,不同公司可能重点不一样
MySQL > 语言 >= 计算机网络 > 操作系统 >= 数据结构
学习八股的正确姿势
-
面对一个问题,如果你之前有过些许基础,但不知道如何回答、从哪些角度回答,那么就可以参考我的笔记,总结成自己的回答
-
面对一个问题,如果你之前没有了解过,那么建议阅读资料中推荐的文章、google搜索相关的文章来了解背景,最后再参考我的回答,梳理总结成自己的回答
-
通过阅读资料,潜移默化的形成自己的理解,以此为基础上再去记忆,会记得更牢。并且通过阅读不同的资料,能够发现不同资料之间是有所交集的,也能清楚哪些地方是重点,被反复提及
这些个人笔记都放到了我的公众号“宏夏coding”,有需要的可以自取,后续也会上线到个人网站上,大家可以先关注一手,说不定以后有所帮助~
项目
项目我觉得是大家比较头疼的一个问题了。大多数人在学校里哪有机会接触到真实的企业项目、实验室项目,更多的肯定是网上的学习项目。
所以是网上的项目不要紧,更重要的是如何去对项目进行修饰和准备。
如何修饰和准备项目
-
如果你学习过新的技术点,可以尝试把它添加到项目上,比如学过SpingAOP,那么就可以在项目上实现它,比如使用AOP记录日志,又比如学习过Spring的安全框架,也可以在项目上进行一个实现。尽量动手实现,也能发现过程中存在的问题。如果无法动手实现,也要通过google搜索相关的实现方式、以及可能会遇到的问题,做到充分的准备。如果你做过比较多的项目,多个项目的功能点,也可以整合到一个项目上,让一个项目更为丰富和充实
-
在做项目的过程中,也要思考哪些地方是重难点,是可以写到简历上的,及时记录下来,而不是傻傻跟着做完项目了,等到要写到简历上了,才去挖掘项目的亮点和重难点。除此以外,这些重难点可能在面试官面前不值一提,更重要的是要体现出你的思考过程,如何解决问题、如何比较和选择方案。也就是多问自己为什么
比如你项目使用到了缓存,简历上写了“对热点数据添加缓存,针对可能的缓存穿透,使用缓存空对象和布隆过滤器解决”,那么你就可能需要针对以下问题做准备:
为什么使用缓存?
使用Redis做缓存为什么快?(这时你就要去google为什么Redis能更快处理请求,和MySQL的区别在哪里)
如何对数据缓存、用了什么数据结构、为什么不用其他数据结构?(这时候你就要清楚Redis有哪些数据结构,使用场景是什么,对它们进行一个比较)
如何解决缓存穿透、解决的方式有哪些、为什么用这个方案而不用那个方案?(同样的道理,对多个方案进行比较,分析优势劣势)
-
对于网上的项目,在写到简历上时,你可以给他换个名字,甚至换个类型。比如黑马点评,主要是对店铺优惠券的秒杀,那你可不可以把它替换成对课程优惠券的秒杀呢,类型能不能替换成某某学习平台呢,名称不要局限于某某点评,把思路打开。
测开
大厂的测开问的问题和后端差不多,也会问语言相关的、MySQL、计算机网络、项目等等
区别的话可能会问一些测试相关的问题,比如:
-
对测试开发的理解
-
为什么投测开
-
如何对某某功能设计测试用例(比如微信朋友圈点赞、微信转账等等)
-
你做测试开发有什么优势吗
-
你认为测开需要哪些能力(需要具备哪些核心竞争力)
所以在面试测开前,这些问题要提前准备,也要提前了解相关的测开知识。这些问题如果你不知道怎么回答,可以参考我的回答
面试经验
提前准备,反复练习
机会是留给有准备的人,可能有些人觉得自己的学历太差或者怎么样,才导致没有面试机会。但当机会真正给到你的时候,你真的把握得住吗?
对于八股的回答、自我介绍、项目介绍、面试问题,都需要经过提前的准备,并且通过动嘴讲述的方式来不断练习。在讲述的过程中,你可能发现有些地方忘了,有些地方还不太理解,有些地方讲的磕磕巴巴,发现问题,才能解决问题。
比如拿我自己举例,在第一次面试的时候就被面试官问到:你觉得你的优点和缺点是什么?你会不会有压力大的时候,如何解决?因为没有提前对这些问题进行一个准备,结果现场回答的时候一塌糊涂,比如我当时回答“期末阶段课程压力会比较大”,但面试官就可能就觉得你平常都不上课、不学习、爱玩游戏,到期末的时候才手忙脚乱的学习,才导致的压力比较大,所以应该想或者编一个更好的回答。
所以,针对这些问题,需要提前做出思考和准备。
-
对我们公司有没有什么了解
-
对未来的规划
-
会不会有压力大的时候,如何解决
-
经历过最大的挫折
-
取得最大的成就
-
优点、缺点
-
性格关键字
-
有没有团队合作,发生分歧怎么解决
-
如果在工作中给他人分配任务,有人不愿执行如何解决
-
反问
这些问题未必是hr面才会出现,有些可能一面、二面就会聊到,如果你提前思考提前准备,那就是一招吃遍天下鲜
自我介绍,学会引导
自我介绍作为开场白,其实还是比较重要的,并且有可能引导面试官接下来的提问
那自我介绍通常都说些什么,如何进行引导?
这个其实没有固定的答案,因人而异,但可以围绕个人信息、比赛获奖、学习情况、项目收获几个方面去说,比如我的自我介绍是这样的:
“面试官你好,我叫宏夏,来自哔哩哔哩大学,软件工程专业。在校期间有参与一些比赛,包括二次元大赛、cosplay大赛、鬼畜大赛,并取得了一定的名次,收获和成长最大的是cosplay大赛(重点提到了某某比赛,面试官可能就因此提问,比赛的内容,收获了什么)。自己学习和使用叽里呱啦语言已经有两年的时间了,也做过几个项目,其中收获最大的是这个达拉崩吧项目(如果有多个项目,重点提到了这个项目,面试官可能就会问)。在自己平常的学习过程中,也比较喜欢阅读一些技术文章和书籍,比如《如何获取女人的芳心》、《线性代数》(往你熟悉的知识点引导,比如你熟悉mysql就说相关的书籍,熟悉网络就说网络相关的书籍),也会梳理总结成博客发布,目前累计有超过1个亿的访问量。(或者说自己github有什么开源项目,收获了1个亿的star)”
学费了木有,要个一键三连不过分吧哈哈
不懂就问,避免内耗
在面试的过程中,特别是需要手撕算法题或者sql题,如果你经过尝试后觉得自己真做不出来了,就及时和面试官沟通,表达自己的思路后看看是否能寻求面试官的思路,或者询问面试官能否换题,面试官人比较好的话,是有可能给你提示思路,或者换题的。
最忌讳的是什么,你明明知道自己做不出来了,却在那死磕,把时间耗在那里,你不主动开口那就只能面试官等的不耐烦了先开口,然后留下极差的印象。所以,寻求帮助也是一种智慧。
录音复盘,持续升级
录音复盘我觉得是面试的基本常识了,所以不展开讲了。录音转化成文字可以使用通忆听悟、飞书妙计等一些工具来自动转换。
最后
其实在实习招聘开始之前,自己已经做好了最坏的打算:
可能投递了几百次简历,却依然没有面试机会
可能在一次又一次的笔试中,质疑自己的能力
可能每天都在八股、算法、项目的反复循环中,疲惫到不行
可能在看到别人一次又一次斩获offer时,对自己的未来充满了迷茫和焦虑
每个人都会感到迷茫和焦虑,自己也不例外
有时候经常会怀疑自己正在坚持的,是否会有意义,还是听天由命,随便找个班上得了。
但很庆幸,自己还是坚持下来了,当机会真正出现在面前的时候,之前所坚持的、所做出的努力,都不会白费
我是这样告诉我自己的,也将这段话送给你:
即使身处黑暗,也不丧失向上生长的勇气和决心,重要的不是自己何时盛开,而是不断从土壤汲取养分,当哪天阳光真的照射进来,才有足够的养分向上生长、开花结果。
最后,希望这篇文章对你有所帮助,如果有任何的问题,也欢迎通过公众号“宏夏coding”向我私聊,我也会尽我所能为你提供帮助!