小齐说:
这篇文章来自读者冰红茶,他刚结束了秋招,拿了很多家 offer。
和他聊完之后,我觉得他的备考思路也完全适用于美国的面试,只是分值要调整一下,但是具体每一块的内容,地球村通用。所以分享给大家一起学习一下~
长达一年的实习、秋招之路终于落下了尾声,我最终收获了快手、百度、网易等互联网大厂的开发岗offer。
大学我学的专业是通信工程,也算是半个非科班出身,一路走就像是打怪升级的过程,不断地纠错尝试,一点经验分享给准备参加秋招的你。
大学时候每次期末考试我们都会等老师划重点,目的就是想确认考试的范围和形式以及各部分出题的分值,做到心里有数、合理分配时间。
我认为其实秋招面试的本质和平时期末考试是一回事。秋招考什么(考试范围)、秋招有哪些题型(考试形式)、以及各部分出题分值(考试各部分比重)?
我自己常常把秋招面试考察范围划分为三个部分,算法题、基础知识题、过硬的项目或实习经历。
以我熟悉的开发岗位来说,对于大厂面试,我觉得算法题占了40分。
这个分数很微妙,你会发现再需要20分就可以及格了,能勉强通过这次考试。但是如果40分完全丢掉那么靠其他方面力挽狂澜就会非常吃力。
特别是对于字节跳动这种业界内对算法题出了名重视的公司,撕出算法题是对话的基础。
我个人也认为考察算法题,是一个相对比较公平的考察形式。没有撕出算法题不代表你没有能力,但是能撕出算法题起码能证明你要么是天赋型选手,要么是努力型选手(刷了够多的题,做了准备),面试官筛选人的目的已经达到了。
如果是线下面试,会直接给你一张白纸,写伪代码或者是全部。
今年因为疫情影响很多面试搬到了线上,我觉得以后线上面试会变得越来越常见。国内很多大厂用的都是牛客网作为平台,整个屏幕分为两块,一块是代码考察区,一块是和面试官视频交流区。面试官给出题目后,你写代码的过程会实时在面试官屏幕前同步,这个就要求你想清楚了再动手。
一般来说整个考察过程是这样的,从面试官给出题目起。
首先,看了题目之后你先不要着急动手,进行短暂思考后。务必要和面试官进行交流,得到面试官的同意后再动手写代码。
常见的交流内容就是你解题思路的时间复杂度、空间复杂度,得到面试官首肯之后就可以进行代码书写。最后一步,代码写完后可能会让你跑测试用例看看是否通过,或者跟面试官解释你是如何组织代码的。
算法题的考察,除了考察你的写题能力外,更多的也是展示你的沟通表达能力,一个题目往往只是提供了一个大概。你应当去提问,某些极端边界条件下题目的输出会是什么?或者根据面试官的提示,去改进自己解题思路的时间、空间复杂度。
这部分我参考了齐姐之前的两篇文章,对我帮助非常大:
点击这里:从 LRU Cache 带你看面试的本质
点击这里:有关 HashMap 面试会问的一切
点击这里:这才是面试官想听的:详解「递归」正确的打开方式
我个人感觉,对于秋招来说,算法题一般在力扣刷200道左右的简单、中等题目就足够了。
刷题的顺序我觉得可以先从《剑指offer》入手,上面大概有六十道左右的经典算法题,而且教材的作者也从面试官角度指出了我们可能会犯的错误和一些沟通的思路,一道算法题就是一个案例。如果从来没有接触过算法题的同学,这里可能会花两个月左右的时间。
如果你能把这本书刷完,接下来我建议是去刷高频考点题目。
如何能获知什么是高频考点题目呢?
另外要多注意复盘和总结。一道题往往有多种解题思路,一种思路往往可以解多道题目。很多题目的解题思路是大同小异的,只要坚持练习,最后绝大多数题目你都能做到快速反应。练习和复盘是一体两面的,相辅相成的,你既要知晓各种各样的解题思路,也要增强动手能力。这是我力扣复盘时候对题目的一些分类收藏。
一开始有些同学觉得会很难,各种题目想不出来,我建议是直接看答案。只有你了解了足够多的解题思路之后才能有所输出,就像我们做乘除之前,先要学点加减法一样。
具体基础知识要求,每个岗位的侧重点会有所偏差,以开发为例,常见的考察内容有:Linux、Mysql、Redis、计算机网络、操作系统、语言本身特性等。由于这部分问的问题因面试官而异,所以自己还是要多准备,尽可能的去覆盖。这部分往往回旋的余地比较大,只要你能把面试官的问题答个七八成,再加上算法题撕出来基本上就能通过本轮面试。
你学过计算机网络,但是并不是所有问题都会问到,自己私下钻研怎么深入都不过分。但是对于秋招来说,你需要的是抓住核心考点。所有的考点前人都已经用血泪教训给你总结好了,牛客网上的面经专栏有大把的内容。你只需要关注其中高频的,有扩展性的考点就行。
面试时候,面试官往往抛出的问题有两种。
一种相对比较死板,比如讲一讲快速排序的原理,只要你对各个细节掌握的够清楚,能跟面试官讲明白,这题就算过了。
另一种,是一些扩展类题目,比如很经典的从输入一个URL到出现页面这个过程发生了什么?
这个问题根本没有所谓的准确答案,只有相对符合面试官胃口的答案。比如我一般就是,先从宏观上讲整个过程发生了什么,细节一笔带过。然后再跟面试官交流,我觉得哪块比较重要,可以展开聊一聊,或者您觉得哪块比较重要,我可以跟您展开说一说。面试是交流的过程,你要注意面试官的反应,看看是否要继续还是点到为止。不要自己像背作文一样,只顾背诵。一言以蔽之就是你要足够清晰的思路向面试官证明你确实懂这个东西,但讲多少,讲到什么程度要跟面试官交流。
针对不同的基础问题,可以上网搜不同类型的回答,然后自己总结一套答题的模板。这个不是让你跟面试官照本宣科,而是作为你面试答题的基本依据。我们面试时候其实都或多或少有点紧张是正常的,你心里有个大纲,阐述起来时候清晰很多。
有几个常见的面试技巧,一个是如果题目你一点都不懂,千万别和面试官含含糊糊。这会让面试官以为你懂一点,但是讲不清楚或者不懂装懂,这很减分。你可以大方的说,不好意思,这一块我并不太了解。面试官一般来说就会换个话题,他没有必要跟你谈论一些你不懂的问题。面试官目的就是考察你知识的广度和深度。
另外就是,很多同学常见误区是以为,简历上写的东西越多越好,这其实是个误区。面试官面试你之前基本上就是花几分钟看你的简历,提问的基本上就是简历上的内容,如果你写了很多精通某某,一问三不知就很减分了。
要学会引导面试官去问你很有把握、很熟悉的内容。
面试时间是有限的,面试官不可能所有的知识点都问一遍。所以有限的时间里面,谈论你会的,基本上就能给面试官留下很好的印象。比如我个人就对Mysql这块了解的很多。所以每次自我介绍的时候,我都会故意说,我个人对Mysql、计算机网络方面了解的相对比较多一些,主动给面试官一些引导。
或者在聊别的话题时候,适当时候你也可以跟面试官说哪块我用的比较多,自然而然的让面试官跟着你的思路走。
我是强烈建议大家秋招之前去找一份与岗位相关的实习,如果能拿到大厂实习,秋招时候就是如虎添翼。虽然对于校招生来说,在面试官眼里都是白纸一张,但是如果你具备一些实践经验,绝对是加分项,团队培养你和融合成本就低很多。
基本上很多面试官都会主动的问你的项目或者实习经历,无非是问这些问题:实习时候你做了什么?用了什么技术?解决了什么样的问题?你觉得你解决的最难的问题是什么?面试官问这些问题的目的就是发掘你的知识深度怎么样,比如最难的问题,你遇到的到底是什么样的问题?可以看出你知识接触的深度。你是怎么解决的?考察你解决问题的思路手段。
在面对实习经历和项目的考察时候。我建议是自己要想明白自己项目中的亮点是什么?
自己先做一个提炼,比如说我觉得我项目中两点一是引入了缓存降低响应时间,二是做了高并发的处理…最好这些亮点是和你的基础知识紧密结合的,而且要想清楚你为什么要这么做。比如你说引入了缓存降低响应耗时,那面试官就可以问Redis的相关基础知识,或者问你为什么要引入换成在这个项目里,用别的手段可以吗?引入缓存会有什么危害呢?如何解决带来的负面效应呢?这些东西都是我们日常实践时候也应该思考的东西。就是工具你不仅知道怎么用,还要知道为什么这么用?知其然,也只所以然。
有些同学会说,确实没有过硬的项目经历或者实习经历怎么办。我建议是去Github上找点跟岗位相关项目做一做,改一改,看看能不能提炼出一点什么。其次,最后还是没有的话,可以跟面试官如实的说,其实一般来说面试官也不是要求非得有实习项目经历。但是你的基础知识就要准备扎实,因为面试官能跟你聊的就只有这些了。
以上内容只是从面试知识考察层面做了一些介绍。除此之外我们还需要做的是,有良好的心态,准备好从刚开始面试时候的忐忑不安到后来的游刃有余,给自己犯错成长的机会。
其实准备面试无论校招还是社招思路都大同小异,分值略微不同,多在群里和大家交流、利用各种资源去学习,拿几个 offer 还是没问题的~
好了,以上就是本文的所有内容了,如果你也有想和大家分享的经历和经验,欢迎到后台来找我,有稿费的那种~
我是小齐,纽约程序媛,我们下期见!