前言
很高兴遇见你~
先说一下笔者春招实习的情况:从三月初到四月半,经历了近20场面试,一共面试了五家企业,通过了腾讯、字节、蚂蚁、美团的面试,虎牙在一面之后拒了二面邀请。
金三银四,笔者不是在面试中,就是在面试的路上,踩了很多坑,吃了很多亏,也学了很多的东西。这篇文章,就想要把笔者的这些收获分享给你们,希望对你们有帮助。
文章的内容总体上可以分为两个部分:吹水、干货。吹水部分主要是分析笔者的面试过程,有兴趣的读者可以看一下;干货部分主要是分享笔者的面试经验,从技术到非技术到面试表现,可以根据标题按需阅读。同时需要注意的是:文章内容均为笔者的个人经验之谈,请不要奉为圭臬,辩证看待,同时欢迎各位评论区交流。
那我们开始吧~
面试经历
这部分主要是跟大家分享一下笔者的整个实习面试过程,属于纯吹水内容,且内容稍长。有兴趣的读者可以看一下,或者直接跳转到知识总结看干货。
三四月几乎各路大厂开始疯狂招聘实习生。但其实有一些大厂,如腾讯、字节,在三月前甚至年前,就已经开始接收简历了。这个时候的岗位几乎应有尽有,难度也会相对三四月低一些,是一个非常好的机会。但笔者,比较怂,感觉没有准备好,到了三月才开始投递简历。
三月初投递的第一家企业就是,腾讯。
经过工作室师兄的内推投递简历,很快就收到了面试邀请,这里得非常感谢师兄的帮忙啊。在三月六号开始了腾讯的第一轮面试,也是整个金三银四的第一轮面试。面试形式是电话面,难度不高,也有适当拓展。结束后通过官网查询已经进入复试状态。当时是真的是非常高兴,之后询问了师兄,说简历已经拿给了总监,总监面试一过,就只剩下HR面试了。距离鹅厂就差临门一脚。
随后腾讯二面等待了一个多星期,非常久。等待期间经过其他师兄的内推,投递了字节跳动。
字节跳动的面试流程速度相对稳定,每一面结束后隔一两天就会打电话约下一面。3.11进行了字节一面,3.15进行了字节二面。字节跳动面试自我感觉表现挺一般,有很多的点都没答上来。当时面完我都觉得自己挂了,直接瘫坐在椅子上喘气,心想着完了,与字节无缘了。但隔了两天之后,字节HR打电话来约三面时间,很惊喜,有点失而复得的那种感觉,虽然这个比喻不太准确,但确实是我意料之外的。
隔了一个多星期,在3.16进行了腾讯二面。二面的内容主要是一些软技能问题。心想着没有技术问题,应该差不多稳了。这时候,再一次出乎我的意外:在3.18号腾讯预约了我24号初试。当时惊呆了:啊?怎么从复试退到初试?后来了解后发现是,我上一轮总监面试挂了,被腾讯其他的部门捞了,重新回到一面。这是我三月份的第一次面试挂,当时心里还是蛮难受的,毕竟距离鹅厂offer就差那么一步。但我并没有多少的悲伤时间,因为马不停蹄,字节三面来了。
3.22,字节三面。三面的面试官是c++开发工程师,对于android和Java似乎不太熟练,问的问题主要是c语言和算法。但我准备的内容是android和Java居多,c语言部分我回答得比较一般。总体上,整个字节跳动的三轮面试我的表现都比较一般,但当时面试完还是很期待能过的。这次没有奇迹,过了两天,字节的另一个部门HR打电话给我,给我重新安排面试。好家伙,我又又又回到了一面!!!
到这里其实心态是有点崩的。腾讯与字节都面了一趟,但是都挂了,从一面重新开始。那会的时间已经来到了三月下旬,腾讯和字节都在一面,相当于刚刚起步。而我身边的同学很多已经拿到 BAT offer了。心里有点难受,同时还有点怕,怕最终找不到实习。经过这两轮的打击,心里其实也没有什么底气了。
此时腾讯和字节的面试流程先告一段落,三月下旬,其他的企业也开始面试了。
在三月初那会,我投的不只是字节、腾讯,还有美团、蚂蚁、虎牙。但他们的流程比较慢,迟迟没开始面试。美团在三月中笔试之后,终于在3.23开始了第一场面试。
美团前面的技术面流程比腾讯和字节快很多,3.23下午进行了一面,晚上就约了3.25的二面。但是在之后的HR面试隔得比较久,到了4.1,进行了HR面试。
美团总体的面试过程是比较顺利的,一面和二面的面试题目都回答得七七八八。而且有了前面的面试经验,此时表达更加清晰、语速也没有那么快了。在4.8号美团HR打电话通知面试通过了。但是到了此时,面试情况已经和三月20号那会不一样了。至于为什么,这还要从也是在三月下旬开始面试的蚂蚁开始讲起。
在三月初我经过内推投递了蚂蚁的一个部门。蚂蚁的简历筛选阶段非常久,筛选了半个多月。我一直以为我跟蚂蚁无缘了,简历没过去。直到23号,面试官打电话过来询问了一些我的情况,项目、学习情况等等。然后25号跟我约了26号的一面。对于蚂蚁这个部门,我是真的没有抱希望能过的。前面经过了字节与腾讯的打击,这会已经信心大折。我想着:去体验一下卷中卷的部门,感受被刷的快乐。给你们看看我当时的聊天记录:
之后在26号进行了蚂蚁的一面,总体难度还是比较高,问到了比较多的一些优化、缓存的内容。而这一部分我接触得不多,大多是靠推理、猜测来回答的,也回答得不是很好。后面还跟面试官聊了一些博客相关的内容。面试完之后我觉得悬了,就也没抱着活的希望。接着就在31号上午收到了蚂蚁的电话,约了下午的面试。[oh my god, amazing]
蚂蚁二面是比较特殊的,一共有两个面试官:一个是技术面试官,另一个是HR。技术面试官先提问了一会,大概15分钟吧;之后是HR跟我聊,也是聊了15分钟。主要问的内容都是在了解我的情况,例如工作室如何、成绩如何、怎么学习、怎么管理时间、博客等等。给我印象比较深刻的是这个HR姐姐。和其他企业的HR不同的是,面试过程中就像在和一个朋友聊天,了解我的学习以及周边环境的情况,还会给我反馈表达她对我的印象。
然后在4月2号,面试官加了我微信,给我补了笔试的内容,就是做算法题。过了两天,收到了蚂蚁的录用喜报!!!当时掐了一下大腿,没在做梦。。。
再拐回来说一下腾讯和字节跳动的后续。腾讯在3.24进行了一面、3.29进行了二面、4.2进行了三面、4.13进行了HR面试。前面的速度是比较快的,只是HR可能比较忙,所以一直没约上,隔了比较久。字节跳动在4.1一面、4.6二面、4.9三面、4.14HR面,半个月完成了4个面试,速度比之前的也快了很多。
前面还讲到了三月初投递的虎牙,但虎牙的速度是真的慢,我甚至以为我的简历被筛选掉了。直到四月份才开始约面试。
虎牙在4月6号进行了一面,隔了几天约了线下二面,也是终面。但此时我已经有意向的企业,就拒绝了面试。
整个面试流程,给我最大的感触是:不尝试,永远是0;尝试了,概率再小,都有可能是1。
故事到这里就讲完了。诶,怎么没说去哪个公司了?哈哈,你猜我去哪了?
知识总结
面试中会被考察的具体问题有三个影响因素:部门需求、简历、面试中提到的知识点。因此不同的部门不同的面试者遇到的面试题很可能是完全不一样的,这也是我为什么不直接把面试题放出来的原因,没有多大的参考价值。
这一部分主要总结在面试中被考察到的知识点,多为高频面试问题,读者可以自行考察是否这些知识都掌握了。需要特别注意的是这并不是全部的知识体系,仅仅是笔者遇到的面试题,读者可以按照大体的方向去学习,但切不可认为这样就足够了,这里提到的知识点是远远不够的。
面试的过程中更多的时候不会单纯地考察知识点,而是会结合一些需求或者业务场景来多方面考察对知识点的理解。因此笔者建议,对于知识点要以理解为首要任务,而不是背诵答案。
Android
总体来说,本次春招问的android内容其实不多,主要还是看着我的简历问,简历写得不多,问得也就比较少。但android的基础内容如handler、view机制等还是要会的,其他的有更加深入的研究可以写在简历加分,如Binder、系统服务、优化等。
Activity
Handler
图片
SharePreference
window
view
IPC
序列化
jetpack
okHttp
优化
Java
Java的考察是一个非常考验功底的地方,很多的知识点都是基础中的基础,同时又都可以延伸到底层的逻辑。这些知识点在实际的运用中,也有很多的情况需要考虑,考察我们对于知识点的运用。例如线程池,可以从参数作用、到线程池原理、到阻塞唤醒机制、到实际项目的参数配置,有非常多的知识点可以考察。因而这一块就看各位的造诣了。
当然,一些基础或者常考的知识点还是得会的。
- 集合框架
访问限制符
类
异常
IO
线程池
并发
JVM
Kotlin
kotlin其实问的很少,现在大部分的项目还是使用Java开发的。一些有kotlin业务的公司会问,但是问的内容也不多。这一块如果还没学习其实不急的,把Java学好才是王道,kotlin和java在原理上,都是互通的。
协程
run、let、also、with、apply
特性的具体实现
计算机网络
计网这一部分主要还是HTTP和TCP的内容了,经典中的经典。需要注意的是链路层、网络层的一些协议要了解,也是计算机基础了,被问到不会的话会比较尴尬。其次是一些新的协议如QUIC、http3.0等可以了解一下,面试会很加分,同时也可以进一步去理解TCP的优缺点。
HTTP
HTTPS
数据链路层、IP层
TCP
UDP
数据格式
设计模式
设计模式这一块问的不是很多,原因是设计模式需要实际的编码才能去真正理解他的好处。所以大部分情况下面试官都是询问在项目中用了哪些设计模式、或者哪些开源框架用了什么设计模式。其次问的最多的就是三大架构模式了,必会的。
常见的设计模式
在项目和源码中的体现
MVC\MVP\MVVM
计算机基础
计算机基础这里包括了c语言、操作系统、数据库库、以及前面的计网等等。这部分直接问的内容不多,但却是非常重要的,也是考验我们基础扎不扎实的地方。其次,面试官也会用一些业务场景来考验我们的理解程度,如聊到java并发时,问具体为何线程切换代价高;又如聊到JVM内存分布时,问在native层是怎样的内存分布以及逻辑内存物理内存等;再如聊到volatile,会问到cpu缓存一致性的问题等等。这些都是非常考验功底的内容。因而,这些基础内容要学好,不仅是为了面试,更是为了让我们自己可以更好地学习理解知识。
C语言
操作系统
项目
项目是非常重要的,一个拥有亮点的项目可为面试加分不少。面试前需要把自己的项目总结一下,提炼出项目的亮点难点。假如有优秀的项目,一定要把他写在简历上,并把亮点表现出来。
在面试中面试官一般会先让我们介绍项目,介绍项目一般可以按照这个模板来介绍:项目的背景、项目的内容、自己负责的内容、项目亮点。技术面的面试官会询问项目有什么技术亮点难点,这个时候可以把我们提前准备的亮点给面试官表述出来。例如做了什么优化、自定义view等,体现出自己在技术上的能力。
当然,很多时候我们的项目并没有什么亮点,甚至就是一个Demo,例如笔者。在被面试官问到项目有什么技术难点时支支吾吾说不出来。这时候可以把项目自己实现的功能讲出来,例如一个wanAndroid App可以这样描述:首页使用viewPager+recyclerView来展示后台数据,点击后可跳转到对应文章详情页;登录注册需要跳转到另一个Activity,采用okHttp拦截器和SharePreference来实现记住登录 。千万不要说:额、、就是一个练习demo,拉数据展示,没有什么亮点。这样让面试官完全无法了解我们的项目到底如何,也无法从项目开始提问来了解我们,面试效果就大打折扣了。
面试官对于我们的项目有了一定的了解之后,会继续深问一些相关的知识点或者一些情况是如何解决的。以wanAndroid App为例子,面试官可以进一步提问:viewPager有做缓存吗?recyclerView缓存机制如何?首页图片过多首页加载缓慢导致卡顿如何解决?为什么使用拦截器实现,他有什么优缺点?SharePreference的原理如何等等。
非技术面试官可能会问一些如:项目中学习到什么?你们是如何合作的?项目过程中遇到过什么问题等等。常见的问题可以提前准备,把自己的心得整理一下。
那,没有项目怎么办?那赶紧去写一个。正如某个大厂的面试官说的:到现在都不知道你们这些实习生,到底是真的会,还是背八股文的。的确如此,有时候我们甚至都不知道自己是不是真的懂,唯一的办法就是,是骡子是马拉出来遛一遛,写个项目。项目是面试官一个了解我们的非常好的方式。
需要注意的是:面试前要把自己的项目总结好,包括背景、内容、技术难点、亮点;面试时不要觉得自己项目很捞,而要表现出自己的自信,把项目内容有条不紊地表达出来。后面回答好面试官提出的问题就可以了。
算法
算法这一块,先看看笔者在面试中遇到的算法题:(点击可跳转leetcode对应题目)
算法难度基本就是力扣的中等题,且很多都属于经典题目。面试的过程中,只要别太紧张基本不会有太大的问题。笔者在前期的面试过程中过于紧张,导致大脑空白,根本无法思考,连题意都没看明白。此时,可以深吸一口气,冷静一下,旁边有水可以喝一口水,努力让自己冷静下来。如果是在牛客网面试,可以打开代码全屏,可以遮掉面试官的视频,眼不见心不烦(狗头)。
如何提升算法,其实就是刷题,刷题,还是塔喵的,刷题。算法没有捷径可走,需要靠自己勤奋去做题。如何刷以及刷到什么程度,可以参考笔者的经验:
- 分标签刷。题目的类型总体就分为那么几类,每一类题型都有特定的模板。因此在一段时间内,对同一类型的题目重复刷,然后总结思路,效率会更好。
- 可以参考大厂算法合集、剑指offer,在面试前一段时间把这些题目刷一刷,很多时候可以做到原题或者类型题。
- 多做总结。实习考察的算法大都是有套路,每次刷题都把关键的点记录下来,做总结,很快可以提炼出一个题型的整体思路。这里推荐一个博主的算法框架,帮助我们提炼算法思路。
- 学习官解,精简代码。这里不是要实现那种一行代码解决问题的骚操作,而是去除掉我们代码中的那些无用的判断、循环等操作,增加代码可阅读性和提升效率。
关于算法,不同的企业对算法的要求是不同的,有些企业的算法都是简单题甚至没有算法题,例如美团的算法题是很简单的,腾讯的算法题也基本都是经典题目;而字节跳动对于算法考察较为严格,多为非常见算法题,且基本每轮技术面都有算法题。
其次,企业的不同的部门对算法的考察偏好也是不同的。例如我同学面试wxg一次性来了5道算法题,而笔者面试pcg则没有遇到这个情况。对算法看重的企业多会更深地去考察我们的算法功底,而对算法没有要求的更多是走个流程。
总之,学好算法对我们是一件终身受益的事情,而不管企业考察难度如何。
简历
关于简历,网络上有很多的博客写得很好,读者可以自行去搜查一下。这里主要和读者们分享笔者对于简历的一些心得。
简历的作用是展示自己的亮点给面试官,让面试官可以在短时间内迅速了解我们。
技能点描述要精准,不要模糊。
无用信息不要写。
写上简历的内容一定要是自己掌握的内容。
非技术问题
这部分的内容,大都会在三面或者HR面提问到,到这里其实面试已经差不多稳了,但也不可以乱讲话哦,不然HR姐姐卡我们简历就难受了。这些问题多为考察我们的软实力,重点是要知道面试官提问这个问题的目的是什么,了解他的“潜台词”。
顺带提一下HR面试,基本上到这一步,我们的面试就基本通过了。HR面试的主要目的是了解我们这个人本身的情况,如学习、周边环境、未来打算、价值观等等。只需要真诚和HR姐姐聊聊天,同时避开一些雷别踩就好了。嗯?这还能有雷?有的哇,例如HR姐姐问你拿了几家offer之后你会选择我们吗?你直接说:如果另一家过了就不要你们了。那人家还给你发offer?
但其他的个人情况问题,还是需要真诚和HR沟通,其实也是看企业文化是否适合自己。
下面看看笔者被提问到的一些软实力问题:
你项目中遇到的最大的困难是什么?
你在项目中学到了什么?
平时是如何学习的?
你为什么选android?
未来的计划如何?考研吗?
工作城市有什么考虑吗?父母怎么态度等
你还在面试其他公司吗?拿到其他公司的offer了吗?你会选谁?
你有什么优缺点?在别人看来,你有什么优缺点?
前面的面试体会如何?你觉得你前面的面试表现如何?
自我介绍
你还有什么问题吗?
面试中
未知,所以恐惧。
在没开始面试前,可能很多的读者都是人生第一次入职面试,肯定非常紧张的,在面试前甚至想着,要不算了,不面了。这都是正常的。解决的办法就是:去面一次。经历过一次之后就不会紧张了。或者说,没那么紧张了。
大厂的面试官的体验一般都是非常好的,笔者到目前为止遇到的所有面试官,都给我非常好的面试体验。
在面试的时候要注意语速与咬字清晰问题。笔者本身是一个语速很快的人,加上面试紧张,面试官很难听清楚我到底在讲什么。面试一定要控制语速,可以提前给自己录音看看什么程度的语速是最合适的。
其次,要注意自己的表达清晰。仔细听好面试官的问题,然后先组织好思路,再慢慢表述出来。回答问题,也是相当于和一个讲解知识点的过程,思路一定要清晰。一些口头禅、冗余的表达尽量去除。
有一个需要注意的点就是:不了解的东西,千万不要讲出来,切记!!!。例如,我们不懂NIO,在面试官问到传统IO的时候,就不要拿NIO去比较或者提起NIO。如果提起了,面试官99%会问一些NIO的问题,这时候就会灰常尴尬。而如果自己掌握了NIO,那么就可以不断提起NIO,把面试官的询问重点往我们熟悉的知识点牵引。
最后需要注意一点的是:拒offer是一个很考验情商的事情。这不是在凡尔赛,而是一个非常重要的事情,处理不好可能会上企业黑名单。举个最简单的例子:
现在手上拿到了企业a的offer,但是自己更加向往的企业是b,但是b还在面试。这个时候企业a的HR问你:a和b你选择哪个?然后你坚定地说肯定选择a啊。然后拖了一两个星期,b通过了,然后跟a的HR讲我不去,我去b了。不仅影响了企业a的招聘,而且HR还会觉得你言而无信。
所以,拒offer最好是趁早,不要影响人家的招聘;其次是语言前后要一致,不要当渣男or渣女。[狗头]
春招时间线
实习生招聘一般集中在春季,秋季招聘主要是校招,也就是招正式工。
- 最先的一批开始时间是在年前,也就是12月。例如CVTE在11月、字节跳动在春节前就开启了实习招聘,属于最早的一批。
- 第二批在春节后,也就是2月份,很多的部门有内推直达。多关注牛客网等的一些内推信息,此时公司官网可能还没有开放投递通道。
- 三月份几乎是所以一二线大厂开始招聘的时间。大厂还会分两个批次:提前批和正式批。
- 提前批:一般通过内推直达没有笔试,且提前批hc较多,是最推荐的投递简历时机。
- 正式批:提前批挂了,正式批可以继续面。缺点就是一般都需要笔试
- 但很多的公司没有提前批与正式批之分,这个要看具体的公司具体安排。强烈建议,越早投越好。
- 四月份是正式批开始时间,但热门岗位几乎已经招满人了。此时hc更少,要求也会比三月份更高。
最后
最后想要告诉读者的是:影响面试结果的因素有非常多,如面试官心情、口味,当天自己的状态,岗位要求等等。笔者的两个同学,都是前面连续挂了两次一面,但后面也都成功拿到了BAT offer,甚至不止一个。挂掉面试绝对不是简单的自己能力不行,而是多方面的因素,总结好经验,继续面试就好了。
迈出第一步,开启第一轮面试非常重要。不要觉得自己“好菜啊,投了肯定不过的,不投了”。不投,怎么知道不过呢?面试也是一个学习的过程,会慢慢发现自己的不足,包括表达、知识等等。所以,如果你还在犹豫,赶紧投起来吧。
希望这篇文章能够给正在找实习的读者提供一点帮助,先预祝各位实习面试顺利吧。有什么问题或者想了解的内容可以评论区交流,后续笔者继续补充或者新开一篇文章做解答。