首页 > 开始到微信支付宝抖音Offer(特别篇)-面试准备与技巧
头像
viseator
编辑于 2020-08-10 11:35
+ 关注

开始到微信支付宝抖音Offer(特别篇)-面试准备与技巧

写在前面

首先原谅我用这样的标题来博得关注和点击,因为思前想后也只有我所拿到的Offer才最能在一定程度上代表能力,为我下面将要分享的内容作背书。

在最开始准备写这篇文章的时候只是想像往常那样放在我的博客上作为自己的回忆和总结,不太想去获得别人的关注;但另一个声音告诉我这些东西和之前的技术文章不太一样,这些经验和教训可能可以帮助到很多刚刚踏入校门的新人们,或多或少地产生一些价值。

既然决定了写这篇文章是为了创造价值,那么只有分享出来,让更多感兴趣的人看到才能创造更多的价值,这就是此时此刻你能看到这篇文章的原因。


由于文章的篇幅已经远超最初的预想,所以会拆成几篇分别在微信公众号VirMe发出(确实是公众号最适合创作与分享,还烦请关注),所有文章共用开头部分,特此说明。

个人介绍

笔者2016年高考考入华中科技大学计算机科学与技术专业,同年10月份加入学生技术团队联创团队Android组,后任组长。

2017年底(大二寒假)拿到今日头条(字节跳动)深圳研发中心Android开发实习生Offer,在深圳研发中心实习至2018年3月。

2018年4月加入新成立的今日头条武汉研发中心实习,2019年5月离职。

2019年春招拿到腾讯(微信)、蚂蚁金服(支付宝)、Airbnb的暑期实习Offer,2019年7月加入微信实习。

2019年秋招拿到字节跳动SSP(抖音)、微信***(转正)、猿辅导SP(斑马英语)校招Offer,最终选择留在微信,目前仍实习在职。

在我的大学四年中,有四年的Android开发经历,两年半的实习经历,有两款Google Play上架的应用,个人原创技术博客也收获了25w+的访问量,当然,最重要的是最后拿到了自己满意的Offer,也算是给大学生活画上一个比较完整的句号了。

文章目的

上面介绍的经历并不是为了显示我的经历有多牛逼,事实上在我认识的范围内我的经历还远远谈不上出彩。当我刚刚考入大学,进入我心仪的计算机专业时,觉得提升自己的技术、加入BAT这样的大厂就是我的目标,这也由此指引了我大学生活的方向。相信很多无论是不是刚入学的新生、也无论是不是计算机专业,都有着像我那时的想法。很幸运的是我在非典型的大学四年中找对了方向,也找到了方法,收获了很多的经验与教训,最终达到甚至稍稍超出了自己当初的立下那个目标。

现在回想起来,这很大程度上要归功于给我提出建议、给我指引的前辈们,没有前人的经验我们很难找到正确的方向与方法,以至于陷入无谓的迷茫与焦虑之中。当然在这过程中,也从自己的经历中认识到很多“假如我早点知道该多好”的问题。我所在的华中科技大***创团队(学生技术团队)有着近20年的历史积累,通过前辈的方法与经验的传承,近年就业的队员几乎是人手几家大厂SP Offer,我想这些方法与经验应该是行之有效的,也是值得与大家分享的。

我写这篇文章的目的也正是在此,一是为了总结自己的大学四年;二是给有着和我一样的目标的同学们一些参考和建议(包括对应届生比较实用的面经),希望可以给读到这篇文章你们一些帮助,希望你们也可以达到自己的目标或是在追求更高的目标的路上更进一步,也算是作出一些微小的贡献;三也是为了帮助大家更好地认识客户端开发这个现在普遍认识不足却有着极大缺口的方向,也是给我所在的联创团队微信团队打打广告。

最后,本文表达的内容都是一些自己的看法,也仅代表个人的观点,受文笔和经验所限,表达不当之处敬请包涵,也恳请经验更加丰富的前辈多多指正。


正文

大学四年的经历很长,总归不是三言两语就能表达清楚的,每个人所处的阶段不同可能感兴趣的内容也不同,为了保证阅读体验,会主要分为三篇文章(非通用内容和一些书籍推荐等会后面另行发出):

其实本文应该是全文的第三部分,但是由于腾讯的秋招已经开始,近期工作也比较繁忙,没有充足的时间完成第三部分的全文,故先通过特别篇的方式介绍一些对面试比较有用的经验,后续完整(包括实习)的内容会在公众号和这里进行更新。

面试

和平时学习的过程不同,面试是一个比较功利的过程,需要在尽可能短的时间内表现出更多的亮点、展现自己的实力,但能展现实力的前提是有对应的实力,实力是离不开长时间的学习与积累的。

以下的方法和技巧只适用于面试阶段的准备,千万不要舍本逐末,一开始就以面试为目的进行学习,这样对个人的发展是百害而无一利的。

面试准备

面试的准备主要包括两大块,一是知识的复习,二是很容易被忽视的简历的准备与练习

为什么要强调对简历的准备呢?首先能否进入到面试环节,除了笔试之外(很多公司的笔试分数只是参考),就是简历了,在对你毫无接触的情况下,简历是让面试官提前了解你的唯一途径,绝大部分的面试官会在面试的时候会选择先对着简历上的内容问问题,这其实是非常有利于我们展现自己的优势,从而锁定Offer的。

而对于实践经验比较丰富的同学来说,把简历写好更容易提高面试官的预期,大大提高拿到SP Offer的几率。

这里强调了一下简历的重要性,那是不是花时间“美化”自己的简历,准备好简历上的内容就行了呢?显然不是,把简历“写好”不是说费尽心思地在简历上包装自己,而是可以让简历比较好地体现出自身的优势,让面试官可以更快更好地认识你的能力,但想要顺利通过面试,一定靠的是展现出来的硬实力,而知识的复习就是为了可以更好地展现自己知识和能力上的积累,不至于发生明明深入了解过的东西到了面试的时候没想起来这种非常遗憾的事情。

知识与能力是本,简历是末,千万不要本末倒置。

下面就这从这两个方面分别讲讲准备面试的一些个人经验。

知识复习

需要复习的知识有两大类,第一块是基础知识的复习;第二块是岗位相关知识的复习。

基础知识

看过我之前两篇文章的同学应该能认识到基础知识对于个人发展和通过面试的重要性,在这里就不再赘述重要性了。基础知识有比较核心的四门课程:数据结构与算法、计算机网络、操作系统、组成原理,其中除了组成原理非硬件相关岗位问得比较少之外,另外三门课程几乎是面试中必考察的基础知识。

  • 对于算法与数据结构的复习(这里只针对非算法岗的同学),刷题是最快最有效的方法。像《剑指Offer》这种方法性的书以及相关的课程,如果你之前完全没有任何做算法题的经验的话,还是非常推荐看一遍来熟悉算法题的套路的。而刷题是必不可少的过程,算法面试其实更看重的是过程,比起得到正确的答案,清晰的思路、流畅地编码、整洁的代码规范、对各种Case的完备考虑更加能打动面试官。
    应该怎样有效地刷题呢?

    • 各个刷题平台其实都大同小异,熟悉英文的可以选择LeetCode,习惯中文的可以选择牛客网,刷题的难度不用太高,非算法岗的面试题难度一般不会超过LeetCode的Medium(像猿辅导一面这种只考算法的面试也只是刚刚到Medium难度),大部分非算法岗出算法题的目的还是考察候选人的编码能力,比起会做更难的题目,能把一般的题目更流畅、高质量地做出来才是刷题的目的

    • 一定要裸写代码,这里的裸写指的是不依赖IDE的补全、格式化等功能,直接在平台上写甚至可以用word/记事本来练习正确的缩进。因为面试时使用的编码环境是完全不确定的,如果使用的工具没有任何的补全和格式化功能,很多人写出来的代码就面目全非了。而能把代码完整地写出来,甚至一个空格也不会错的人会马上脱颖而出。
      我自己的要求是平台裸写的代码复制到IDE里格式化一个空格都不差,并且可以一次编译通过。我相信这样的编码习惯即使没能把题目做对,也能给面试官留下好的印象。

    • 看题解,学习别人解题和编码的思路,同样能AC的代码,思路清晰写出来的和到处打补丁勉强通过的代码是完全不一样的。

    • 时刻注意各种Corner Case的情况,每一个考虑到的Corner Case都是在面试时的加分点。

      刷到什么程度合适呢?我在大三寒假的时间刷了近200道LeetCode Easy和Medium,对于客户端岗是完全够用了,其实刷到某一类型的题目看到马上就有思路,能比较流畅地AC就可以了。

  • 对于计算机网络、操作系统和其他常考察的基础课程(如数据库等),复习的目的首先是确保不出低级错误,如果基础知识在面试中出现低级错误,比如把TCP/UDP哪个是可靠通信这种问题都弄错的话,会非常影响面试官的评价,面试官会认为连课内知识都没学好,基本上就不会通过面试;其次是要加强对细节的印象,同样的问题如果你能讲出更多的细节,就更能在面试官的印象中加分;最后要主动了解一些课本外的更加现代/实用的知识,比如HTTPS/HTTP2.0等,这些都是面试中让你脱颖而出的亮点。

    • 如果时间比较充足,建议复习书本上比较核心的章节(如计网的链路层协议、拥塞控制,操作系统的进线程等),完整地看一遍,各种细节的点就能更好地覆盖到。
    • 如果时间比较紧,比如几天后马上就要面试的情况下,建议从面经出发,根据面经的问题涉及的知识点查漏补缺,复习相关的内容,确保知识点没有遗漏。不过建议还是以书本为主,太依赖面经往往不会有突出的表现。
岗位相关

岗位相关的知识取决于面试双方的情况,如果你在这个方向上实践比较多,简历上有所体现的话,会问的多一些,反之主要会以基础知识为主,相关知识作为加分项;对于公司来说,如果岗位比较急缺(比如近年的客户端),基本就不考察岗位相关知识了,这时候有相关经验的同学会比较加分。

总体来说有一件事是确定的,公司越强,对基础知识就越重视,反之一些小公司会更关注招来的人能否直接上手干活。

对于岗位相关的复习有两点想提,第一个是语言相关的东西并不重要,你会写Java后台,腾讯后台用C++,这个时候没必要去为了准备面试学C++,对于校招生来说,公司看重的是培养的潜力,语言层面的东西到公司以后再学都不晚。

第二是复习的内容要有深度,不要仅仅停留在使用层面,而是要深入到实现原理层面,你了解得越是底层,越是会和已有的基础知识互相联系,这个时候如果你能完整地把这些知识说出来,会是面试里一个非常大的亮点。以我自己为例,我曾经把Android的触摸事件分发从api层面一路看到了Android系统驱动的触摸驱动,每次面试有机会就会讲这里整个的过程,十几分钟讲完之后基本上面试官都会非常满意,这次面试基本上也就十拿九稳了。对于竞争比较激烈的岗位而言,比如你说你会写Java,面试官基本都会问一下有没有看过JVM的实现,在这种大家都会了解一些底层知识的环境下,比拼的就是更加深入以及能和基础知识融会贯通的能力了。

简历准备与练习

如何写简历

前面说过,好的简历应该能非常直接地让面试官了解你的优势与能力,帮助你在面试中展现自己。

简历的内容应该尽可能地简洁精炼、切中要害,不要出现与面试/工作无关的内容,一般控制在一页A4纸之内,太长太密集又没有信息量的内容只会让面试官抓不到重点。

下面以我自己的简历为例,谈谈简历应该怎样写。

  • 姓名、联系方式、专业、学历:

如果有博客或者github有contribution的话可以一起放在这里,另外注意一下手机不要欠费了(每年还真有不少只留了手机然后手机打不通的情况)

  • 个人简介:

简介里的内容要能体现出自身能力上的特点,至于一些兴趣爱好、性格之类的无关紧要的内容其实是扣分项。

  • 实习经历/获奖经历(如果有):

总结自己实习所做的工作,以小点的形式列出项目中自己遇到的技术点/难点,切忌长篇大论描述细节,和下面的项目经历的总结一样,在简历上只需要体现重难点,面试官如果对细节有兴趣会在面试中问到,这时就是展现自己的机会。

如果有计算机相关比赛的获奖经历可以在这里列出。

  • 项目经历:

项目经历按难易度从难到易排序,根据版面情况挑选几个重点项目写在简历上。我的简历由于前面内容比较多,这里只挑选了两个项目写在上面,选择这两个项目的理由很简单,都是自己实现了一些重难点功能,并且两个项目都上架了。如果你没有课外的项目,课内的课程实验也是可以写上去的,项目经历是简历上很重要的一个部分,要是觉得项目没什么好说的就不写的话很容易连简历筛选都过不了。

对于项目的介绍和实习经历差不多,简要介绍项目中的重难点就可以,如果项目是开源的可以附上源码,上线运行的可以附上下载链接、列出下载量等数据。

针对简历的练习

前面说过,简历是面试前面试官了解你的唯一途径,大部分的面试官会在面试时先针对简历上感兴趣的点过一遍,所以一定要保证简历上的所有内容都做好充分的准备,如果面试时简历上的内容被问到答不上来的话,面试官会认为简历有水分,留下非常不好的印象。

更应该提前准备的是实习/项目中遇到的重难点,很多面试官会问的一个问题是“这个项目中你觉得遇到的最难的技术点是什么?”,甚至我微信的面委面试只有一个问题就是“讲两个项目中解决的难点”,我在没有准备的情况下着实懵逼了一会,幸好在之前的面试中讲过很多遍这个内容才勉强答得上来。

回顾简历上的项目,组织好语言来完整地讲出这个项目中的重难点,最好和同学练习几遍看能不能说清楚,在面试中遇到这类开放性问题时才能心理有数,取得面试官的认可。

面试技巧

说到面试很多人包括我自己一开始都会有一种畏惧感,总会担心自己不能通过面试,失去进入心仪的公司的机会,这种心理其实很正常,但也确实给我们带来了不必要的心理负担,影响了面试的表现。在经历了很多公司的很多面试以后,我却渐渐地开始享受面试的过程,一旦一些认知改变以后,面试其实并不可怕。

放平心态,正确认识面试

有一句话说得非常正确:“面试是双向选择的过程”,面试官面试是为了挑选未来一起共事的队友,而你应聘参加面试也是在了解一个公司、了解未来和你并肩作战的同事。所以在某种程度上面试的双方是对等的,你在担心自己能否通过面试加入优秀的公司,面试官也会担心优秀的人才能否顺利发挥并加入他们。所以不要把面试当做单方面的考核,这是一个双方通过沟通来增进了解的过程。

你需要做的是尽可能在这短短几十分钟的面试里让面试官了解自己的能力,并尽量去了解对方,只要你能正常地展现出自己的能力与水平,这就是一次成功的面试,至于面试结果,取决于你的能力和岗位的要求能不能匹配,面试没通过不代表失败,好好总结面试的表现,更好地应对下一场面试才是最重要的。

积极沟通,不要把面试官当对立面

在Google的面试说明里有一句话令我印象非常深刻:“The interviewer is willing to help you.”。面试官不是来刁难你的,他们也非常希望你能通过面试。

Google会希望你在面试(做题)的过程中保持和面试官沟通,说明自己的思路和遇到的问题,一是为了让面试官更好地了解你,二是一旦在思维进入误区的时候面试官可以及时提醒,避免浪费时间。

虽然没能通过Google的面试,但是这条指引确实给了我后面的面试很多帮助。

积极沟通,可以大大提高面试的成功率。

很多人拿到算法题以后二话不说就开始埋头苦写,十几分钟一言不发,其实这样无论最后写没写出来给双方的体验都不好。面试官也有很多的工作,这十几分钟冷场的时间其实对面试官是一种浪费,而你也浪费了宝贵的交流机会。

更好的做法是拿到题目后首先和面试官沟通确认对题目的理解是否一致,确认输入的范围、输出的要求,再开始想解题思路,在有了初步的思路以后和面试官沟通,得到面试官的肯定以后再开始写,这样可以避免不必要的理解偏差,也不至于写完后发现和面试官的期望大相径庭。如果实在没有思路,也可以让面试官给一些提示,适当的提示下如果能写出来对结果也不会有太大的影响,而如果直接放弃会对结果非常不利。

在写的过程中,可以边写边告诉面试官自己的代码逻辑,可以让面试官更好地理解你的代码,节约时间;就算编码中陷入困境,及时与面试官沟通,面试官一般都非常乐意给你一定提示。很多时候在思路以及编码正确的情况下,沟通顺利,面试官会让你直接通过算法面试,进入下一个环节。还是那句话,做算法题的过程比结果更重要。

对于技术问题面试,积极沟通同样重要。遇到比较难的技术问题,没有确定的答案的时候不要直接放弃,可以和面试官沟通:“我之前没有了解过这个,但是我可以根据已有的知识猜测一下”,尽可能多地展现自己已有的相关知识。这种问题有可能是在试探你的上限,面试官可能也不期待你能完整地答上来,这个时候如果根据已有知识说对了,就是一个非常好的融会贯通的能力的体现;如果说错了其实也没什么,还可以和面试官讨论错误的原因,也可以给面试官留下好的印象。

当然如果对于这个问题你确实一无所知毫无思路,直接和面试官说“我不了解这方面”,尽快跳出这个问题才是最优的选择。一场面试有几个问题没答上来很正常,强行回答只会暴露自己的不足,给面试官留下不好的印象,也浪费了宝贵的时间。

主动大胆,别把遗憾留在面试之后

对于技术问题,尽量不要被动地问一个问题答一个问题,如果面试官问你HTTP和HTTPS的区别,那么他想听到的一定不是“一个不加密,一个加密”这种浅显的回答,而是HTTPS究竟是如何实现加密传输的、秘钥的交换过程是怎样的,甚至于RSA加密的原理这些更细节、更原理性的知识。较好的回答方式是在答出问题的答案后,主动地更进一步,把自己对于这个问题所了解到的相关知识、更深入的知识主动地说给面试官听,尽量把能说的都说完。不要担心面试官不想听,其实面试官挺希望你自己能多说一点,他少问一些的。

这里还有一个我自己百试不厌的加分技巧:如果面试官所问的问题和你深入探究过的知识有关联,可以主动告诉面试官:“这里我深入了解过XXX,你有没有兴趣听?”面试官会非常乐意听你讲这些比较深入的知识,因为这些东西很可能他自己也没深入了解过,这也是他学习的机会,如果你确实有非常深入的探究,并且让面试官能有所收获,还会担心面试不能通过吗?

上面说的这些所谓的技巧其实很简单,只要意识到沟通对于面试的重要性、大胆主动地和面试官沟通、积极地展示自己的能力,就可以提高面试的容错率,避免实力没有展现出来的情况。
---

今年腾讯也是历史上最大规模的一次的校招,hc据说增加了40%,欢迎对腾讯有兴趣的同学点击下面的链接通过我内推,可以投递所有BG的所有部门,通过链接内推的同学可以牛客私信我查询进度,有问必回!

如果以上的内容对你有所帮助,欢迎你把它分享给更多人,谢谢!

如果有任何想法、疑问、意见或是建议,欢迎在评论区留言交流,有问必回!
---

前文

《从开始到微信/支付宝/Airbnb/抖音Offer——我的大学客户端开发学习之路(一)开始——步入大学生活》https://www.nowcoder.com/discuss/431452

《从开始到微信/支付宝/Airbnb/抖音Offer——我的大学客户端开发学习之路(二)过程——技术学习与个人成长》https://www.nowcoder.com/discuss/435215



全部评论

(5) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐