手记

给扔物线 HenCoder Plus 学员的一次分享文字版

半个月前,和我的终极技术目标扔物线朱凯一拍即合,到了他所开展的 HenCoder Plus 课程给大家分享了 1 个多小时的「模拟面试」心得,也顺便听了几次凯哥的课程,感觉真的挺用心的。自己也希望能一直不忘初心,在技术领域像凯哥一样,认真并且锲而不舍。准备了许久,主要是为了做这一次分享。

自己下来其实看了好几遍自己的录屏,觉得还是有必要做一篇文字版的分享给大家,还要有一位童鞋能够从中得到收获,那也是不枉费我手打了接近 3 万字的分享。很多思想都受着去年 Android 巴士成都交流会另外一位讲师 Even 的影响,所以说,你的圈子,真的会潜移默化地影响你。

下面是正文:

我先自我介绍一下,我叫刘世麟,在网上呢,我的名字是南尘或者说,是南尘2251。

在找工作之前,我们总会经历写简历,准备面试知识,再到面试的过程。但我们总会发现,即使我们准备许久,感觉自我良好。但在面试的时候,却总感觉使出浑身解数也无济于事。实际上,我们的面试是需要实战的,我们刷再多的题,不实战也是无济于事。然而,我们通常面试一次,算上花在路上的时间,我们至少得要好几个小时。最重要的是,这个时间还基本都是花在了工作日上。

此外,我们即使花上几个小时,面完之后却会发现,我们能得到的有价值的东西却需要深挖细掘才能形成精华。我们很难得到面试官对自己真正的反馈,大多数情况下被拒绝的时候面试官给的原因都极其委婉。

为了解决这样尴尬的窘境,我在去年11月在公众号上推出了「模拟面试」这项活动。用工作之余的时间帮助那些真正渴望希望面试却又不希望浪费工作时间的读者。

在为期 4 个多月的活动中,我面试了 118 位读者,其中包括小米、硅谷、美团的一些在职员工。在活动中,我与他们共同成长,一起进步,从自我介绍,到面试过程,再到面试反馈。读者从我这里得到了有价值的评价,我从读者那里得到了非常有价值的数据反馈。

我只是抱着一种尝试的态度,希望小范围进行,但没想到有这种情况的读者极多,我采取的排队机制已经完全不能让读者得到及时反馈了,加上我自己的时间分配问题,我很快就停止了这项活动。

虽然做的时间不长,但却非常有意义,所以,今天,我和凯哥一拍即合,来到了这里,给大家做一下分享。我并不是什么面霸,也不是什么大佬,仅仅是凯哥的迷弟而已。

周三呢,我跟着大家一起听了课,我发现听课的同学不少我认识的哈,还有在我这里进行过模拟面试的人,不得不说呀,做 Android 的人很多,但圈子里面上进的人,转来转去还是这些人。

下面,我给大家简单地分享一下我做这个活动后的一些心得。在分享之前呢,我想先送大家一句话:你能否通过面试往往不是靠技术,但你能否拿高工资绝对是靠技术。我们的求职面试,决定因素确实不是只靠技术,你的简历、面试表现,通通都会影响着你的评级。

几个月的「模拟面试」下来,我发现大家的问题五花八门,总结下来就是这四个问题:

  • 不知道怎么写简历

  • 不知道怎么做自我介绍

  • 不清楚自己的定位(优势)

  • 不知道怎么准备面试

我先说一下简历呀。虽然我只面了 118 位读者,但收到的简历却远不止这点,对于明显抱着来尝试浪费其他人时间的,我从来都是直接打回去的。但我面试的人中,简历写的足够让我满意的人,也是凤毛麟角。大多数人的简历都是写的非常的乱,连基本的排版整洁都谈不上。

简历的本质

我经常会收到来自读者的同一个问题,「南尘呀,你能不能给我一个好的简历的模板?」

这个问题让我十分为难,如果我说「其实不存在好与不好的模板,主要看气质」。你可能会很失望,觉得我可能在浪费你的时间。如果我说有,并且挑了一份我认为还不错的模板给你,可能你也会很失望,会怀疑,好的简历模板是这个样子的吗?

这就好比凯哥在上海开发者大会上讲的一样,「图片上传怎么做,你服务器怎么给你要求的你就怎么上传呀」。

实际上我们并没有逗你,要得到一个「好」的简历模板,其实并不困难,而且根本就不需要向别人要。你只需要问一下自己,什么是「好」,并把「好」这个很缥缈的词量化出来,你的简历就是好简历。

不过,在你量化「好」这个词之前,我们需要先解决一个问题:「简历的本质是什么?」

可能每个人的理解并不一定相同,不过这并不是很重要。如果你有不同于我的思考,那也不代表你和我之间有一个人是错的,我们暂时可以这么认为:绚丽或者简约的模板其实都不是简历的本质。

简历的本质只有一个:向别人说明清楚你是谁,你擅长做什么。

你可能会发现,其实这两个问题都是同一个问题:你的定位是怎样的?

  • 问题 1:「你是谁」?

    可能你觉得自己很清楚了,你是张三,你是李四。但如果让你用三个词,可以是名动、形容词、动词或者成语都可以,只用三个词来概括一下「你是谁」,你能做到吗?这就是你对自己的定位。

  • 问题 2:「你擅长做什么?」

    如果我能说「什么都不擅长就是最好的擅长」,可能大家都会拍手称快吧。正如问很多人你的兴趣是什么一样,有很多人都表示没有什么兴趣。然而,你真的没有擅长的事情吗?可能只是因为你没有发现而已。这是你对自己能力的定位。

如何对自己进行更好的定位

如果你真正把问题定位好了,其实解决问题并不难。然而,难就难在对自己进行定位往往很难做到精准,正如苏轼的名句:「不识庐山真面目,只缘身在此山中」。

即然是定位,那么,我们用生活中的一个例子来说明吧。你的手机上的 GPS 定位是怎么做到「精准」定位的?

不是靠手机自身就行的吧,它需要通过在天上的至少 4 颗卫星才能精确定位自己的空间位置。也就是一个简单的道理:

你要定位自己,是需要别人来做参照物的。

那么如果你是应届毕业生,你需要在简历中和你的参照物(基本上是和你同一届毕业的人)做个对比较。如果你已工作多年,那么和同样工作几年的人或者应届毕业生,你也需要和他们做一个比较。

其实,你也可以从另一个角度理解,要定位自己,也可以参考一下别人眼中的自己是怎么样的,别人往往更能发现你的优点和缺点,而且一般比你自己评估的要准确。

此外,你还可以用事物来做参照。比如为了表达你擅长 Android 视频直播技术,很多人喜欢直接在简历上加上一个「自我评价」,然后写上「我擅长 Android 视频直播技术」,你觉得是个什么效果呢?像不像一个人说他很幽默,但别人和他聊天从来没笑过?

比较好的表达一个人幽默的方法应该是直接说段子,那么表达一个人擅长某个技术的方法呢?「段子」留给大家自己去写吧。

简历的加分项和减分项

在面试后和他们分享,我才知道,他们其实并不是说没有认真去做,而是确实不知道简历上到底应该放哪些东西,或者说编写的顺序是怎样的,大多数人都是直接使用比如拉勾网呀、BOSS 直聘呀,这些招聘网站的模板来编写的。这就会导致,我们的简历上出现了一大堆没有任何价值,别人也不关心的东西。所以,我在这里再次申明呀:千万不要去用招聘网站的模板来做你的简历。

有哪些好一点的简历加分项呢?

  • 黄金两页原则:最好简历控制在 A4 两页;

  • PDF 原则:简历最好为 PDF,这样可以解决不同系统上打开格式混乱或者乱码的问题;

  • 在最顶部写清楚个人信息:比如姓名,电话,年龄,毕业院校/专业,Blog 和 GitHub 比较有内容的也可以直接放在最前面。最好一行两个信息,不要一行只写一个信息,导致右半部全部空白浪费。

不知道怎么写项目经历

从简历上来看,大家还有一个常见的问题是,对于项目经历,写的非常粗糙,大多数人都是写的:「我用了什么第三方库,实现了什么功能。」「我在项目中,使用什么技术,做了什么什么。」甚至是,一个项目下来,三句话就被完全介绍完了。对于这点,我还专门咨询了我们的 HR,他们对于这种技术简历,会怎么处理。我得到的回答是:「除非是非常厉害的公司或者项目,不然都会直接 Pass 的。」

那到底怎么写项目经历呢?在网上,盛传着一种法则:STAR (Situation Task Action Result)法则。

  • S(情景):这可以是让你参与这个项目,或者是解决问题的背景;

  • T(任务):只需要在简历上写清楚自己的职责;

  • A(策略):如何实现,是否遇到困难,如何解决的。

  • R(结果):取得的成果,作为程序员,一定用数字说话。

前面说了,在编写项目经历上,大多数人写的真的非常粗糙,基本都是使用了什么技术,什么库。甚至有人仅仅只是用过,也写了一个「精通」,实际上这是非常不好的,即使拿到了面试资格,也很容易在面试中翻车。因为大多数面试官面试的策略都分两步:

  • 就你简历上提及的点问问题,了解你对简历上技术的掌握程度;

  • 就公司处理好的或者还没有处理的难题,问问你的想法。

所以,简历上出现的内容,一定要是自己能答上的,仅仅是使用过的东西,不要写在最前面。

到底写不写自我评价?

还有一个比较受争议的问题,就是到底写不写自我评价。可能是受招聘网站模板简历的影响,我发现 80% 的面试者都写了这一栏。其实无可厚非,但大多数人直接放在第二个位置,我很好奇这样做的缘由。最重要的是,深入一看,内容居然都是一些乱七八糟,面试官并不关心的内容。

先给大家截取一个反面教材:

  • 为人友善,诚实谦虚,勤奋,能吃苦耐劳,有耐心;

  • 有团队意识,能和同事和谐相处,虚心接受别人的建议;

  • 责任心强,善于沟通,具有良好的团队合作精神;

  • 专业扎实,具有较强的钻研精神和学习能力;

  • 性格比较乐观外向,喜欢打篮球和羽毛球。

当我看到这个自我评价的时候,就觉得比较冠冕堂皇,可能面试者确实就是这么好的人,但是,从何取证呢?所以建议大家不要在简历中写一堆废话,简历就是求职的敲门砖,不要把没有价值的东西放在上面。

正确的关注点应该是:

  • 定位:主攻 Android,不依赖别人,希望全栈;

  • 态度:高效完成=>追求完美=>互相提升;

  • 困难:Google && Stack Over Flow,阅读文档源码;

  • 视野:GitHub? 掘金? 简书? CSDN?

  • 优劣势:热爱技术,心态沟通。非科班劣势(算法)

上面并不是模板,只是着重的一些点。好的自我评价应该写清楚自己的定位和方向,以及平时自己的一些生活和习惯。非科班出身的通常会被打上算法不够出众的标签,但我们完全可以从其他方面表现自己的优势。

简历总结

总的来说,简历就是求职的敲门砖。

  • 它不需要精美的外表,但求整洁和规范,使用 PDF,控制在两页左右;

  • 它不求你样样精通,但求你对上面的内容胸有成竹;

  • 只写有价值的内容,不写无意义东西。

  • 对于不一样的公司,简历尽量不要只写一个。

  • 经历一定要写出亮点,如果你没有亮点,那现在就行动起来去创造一两个亮点,让自己一两年后不再重复这样的烦恼。

面试

说完了简历,我们再来谈谈面试。无数次面试让我深刻的明白一个道理:作为程序员,我们的能力都是建立在技术基础上的,技术不达标,其他的能力会显得很缥缈。但决定我们是否通过面试,除了我们得有足够的技术能力以外,还得有不错的表达和沟通能力。

我进行了 118 次模拟面试,却发现了一个非常尴尬的结论,那就是:没有人会做自我介绍。

基本总结下来大家的自我介绍是这样的:

  • 简单介绍下自己的个人基本信息,就已经不知所措;

  • 说两三句就终止;

  • 把简历上的内容背诵一遍;

重点我「模拟面试」的方式仅仅是通过微信语音,还没有现场的氛围压抑感,我难以想象要是在现场面试他们会发挥成怎样。我一度以为他们是表达能力不行,或者说是怯场紧张,所以我一直在调整面试气氛。但到讲技术的时候,我发现他们的问题并不是出在表达能力。

如何自我介绍

必须要说一下自我介绍啊。任何的面试,都会有自我介绍这个环节,这是大家给面试官的第一印象,真的非常重要。一个好的自我介绍,能改善面试气氛,让自己接下来发挥更好,面试官也面试得更爽。

那我们自我介绍应该说什么呢?我建议大家说自己的亮点闪光点,这些东西最好是简历上亮点的详细介绍,时间控制在一分钟左右,再重复一遍:不要背简历!!!

我先给大家来个范例哈,注意一下,这是没有什么技术闪光点的自我介绍。

面试官您好,我是刘世麟,非常荣幸能参加贵公司的面试,下面我简单介绍一下我的个人情况:我从实习到现在一直在 XX 公司工作,从事 Android 开发,凭借良好的工作能力和沟通能力,连续两年蝉联「优秀员工」称号,在今年初被公司内聘为技术总监助理,协助技术总监开展部门管理和项目推动工作。在工作之外,我喜欢编写技术博客和在 GitHub 上贡献开源代码,目前在 GitHub 上总共拥有 7k 左右的 Star,数篇技术博客也有数十万阅读。我非常地热爱移动开发,早已久仰贵团队对技术的看重,所以希望今天自己面试有好的表现,未来能有幸与您共事。

很简单的一个自我介绍,这些内容在简历上都很少提及,其中,我抓住要点,强调了我自己的工作能力和沟通能力。蝉联优秀员工,被内聘为技术总监助理,都说明了自己在工作中的优异表现。在技术博客和 GitHub 上的表现,说面了我的软实力比较强,非常地热爱学习, 通过数字性的展示,让面试官有了一个比较直观的良好感受。

大家在面试之前都可以在笔记本上面写下来,然后自己对着墙壁,模拟介绍几次,这样下来你在面试中进行自我介绍的时候往往就能够得心应手。

技术面试

在自我介绍之后,一般都会开始进行技术面试,基本上你的技术等级都会在技术面试环节敲定。那面试官如何在短时间内判断你的技术等级呢?

这里先借用凯哥之前在知乎上的一个回答,我觉得非常有意思。

image

从这里,我想大家已经可以得到结论啦。通常面试官在开始面试的时候,都会针对你的简历对你进行大概的判断。因为每个人的经历不同,擅长的方向也是千差万别,所以都不会紧抓自己擅长的方向问,而会选择对你简历上提及的内容进行挖掘。

比如你说你擅长使用 RecyclerView,那你知道如何处理 RecyclerView 的嵌套滚动么?那你知道如何处理 ViewPager 和 RecyclerView 嵌套的时候出现的焦点问题么?假设检查 RecyclerView 各种设置没问题后,数据却展示不出来,你能猜想哪些原因么?假设只能用一个 RecyclerView,不用分 Type,让你实现一个复杂布局,你能想到一些方法或思路么?

我们经常会在面试前刷很多的面试题,准备很久,但我们真正到面试的时候,却总是被面试官虐的体无完肤。这说明了一个问题,我们平时准备的东西,平时如果没有深入理解的,是很难在面试中正常发挥的,所以,这还需要一个沉淀的过程。所以大家参加 HenCoder Plus 跟着凯哥搞清楚细节,是非常有价值的。

一些的情况说明一个结论:细节 =>  技术

但我想说,应该是 细节 + 深度 => 技术。

前面我们有说到,在简历上我们可以使用 STAR 法则编写我们的履历。实际上,我们在编写简历的时候,就已经可以思考自己面试中可能被问到的问题啦。呈现在简历上的是遵循 STAR 法则的精简版内容,实际上面试中,我们给到的应该是详细版。不过我认为在面试中应该是 START  法则,我在后面加了一个 T,这个 T 是什么呢?Thinking。

不会总结的程序员不是好程序员,大家知道,我在工作之余写了不少 Blog,实际上就是一个总结的过程,我认为这样的方式,让我成长非常迅速。实际上,我们在面试中完全可以展现自己的总结能力,让面试官看到自己的亮点。

我们来看看面试中,我们如何利用好 START 法则。

  • S(Situation):在简历上我们呈现的是项目的背景,但在面试中,我们还应该就项目的细节进行更加详细的讲解。

  • T(Task):我们在简历上主要是编写自己在该项目中承担的职责,但在面试中,除了说明自己的职责,建议带上团队的整体任务,展现出无论何时,你都很在乎你的团队。

  • A(Action):在简历上我们展现的是应对问题采取的策略和具体方法,在面试中,除了进行详细说明以外,还应该说清楚自己和团队成员的分工,一定需要记住的是:不能否认团队的价值。

  • R(Result):产生的结果,这一点在面试中和简历上可以基本保持一致。

  • T(Thinking):这一个词是我自己添加的,我觉得一个好的介绍还应该举一反三,总结这个事情哪里做的好,哪里做的不好,接下来如何去避免这个问题,以及可以复用在哪些场景。

简历之外的技术面试

除了上面提及的,面试官会对简历上进行深挖细掘以外,通常面试官还会问一些其他的。比如对于中级和初级工程师,一般会问一些 Java 基础和 Android 基础,比如什么 HashMap 的内部结构,Hash 碰撞处理方式呀,还有 JVM 类加载过程呀,垃圾回收算法呀,启动模式呀,Handler 原理呀,Android 的事件分发机制呀,Activity 的生命周期呀等等。这些问题好像网上都已经司空见惯,很多人都选择了直接去背诵面试题答案。

我是非常不赞同背诵答案这种做法的,人的记忆本来就是有限的,你的脑袋就只能装这么多,况且网上的博客基本出处都差不多,很多博客并没有深入到细节里面。现在的面试官也越来越聪明,知道如何辨别面试者是真会还是假会。

比如上面的 Activity 生命周期,可能网上都会写,额是,onCreate() => onStart() => onResume() => onPause() => onStop() => onDestory()。但实际上,背的了这个流程,不一定能灵活应用起来。比如面试官问到,锁屏会依次调用哪些生命周期,面试者不一定知道。有些 Blog 可能写的比较仔细,会给大家列上一个表,展示这些可能的问题,比如 锁屏是 onPause() => onStop(),Activity 从不可见到可见的调用方法是 onStart(),onStop() 是完全不可见的时候调用,所以自然而然调起 Dialog 的时候走的生命周期是 onPause() 而不是 onStop()。甚至有的 Blog 直接教大家背诵。完整生存期是 onCreate() 一直走到 onDestroy(),可见生存期是 onStart() 到 onStop(),前台生存期是 onPause() 到 onPause()。

可能这样的问题早已经被大家司空见惯,但实际上,面试官早就不会这样直接问了。基本采用的方式是给你一个场景,看你能否正确的处理,比如 Activity A启动 Activity B 后,A 真的一定会调用 onStop() 么?毕竟我们平时做需求,也是用自己已有的知识组织起来解决需求的。

如何准备面试

说了这么多面试技巧,那我们还得有个非常重要的过程:准备面试,大多数人会选择去看各种面经,刷各种面试题。虽然这样确实会有一定的作用,但我认为是低效的。首先,大多数的面经,都没有一个深入讲解的答案。第二,刷的题,大多数和求职公司的面试不匹配。目前看来,只有刷算法题在应对算法类面试的时候成功率较高,基本应用类面试,作用都微乎其微。

这就让我们必须谈到了另外一个话题:如何准备面试?

经过我多次试验发现,技术面试的面试官问的知识,80% 会来自于你的简历,所以你至少提前除了准备自我介绍,还应该认真针对简历上的每个技术点,思考一下可能出现的面试题,并想一想如何去应对它。

除了一些特别基础的机制原理问题,比如 Activity 的生命周期呀、Handler 机制等,其他问题都是允许面试者答错的。其实面试官并不会奢望你能够完整无缺地答好每一个知识点,有时候判断一个面试者是否适合面试官所在公司提供的开发岗位,往往看的是面试者在回答问题中体现出来的「编码之外的能力」。所以,不要想着背诵面试题和知识点,那样无疑是低效的,并且这样得来的知识,你以后也基本不可能用到。

此外,针对不一样的工作岗位,准备的面试内容也不应该一样。相较于中小型企业,大厂会问的知识面更广,比如会问不少的算法和计算机网络等基础知识,而一般的中小型企业却对这块不那么看重,他们更期望的是能迅速上手的人。也就是说,他们需求的并不是一个技术多么厉害的人,而是一个合适的人。对于初级和中级工程师,面试官会更看重基础知识,对于高级甚至资深工程师,会对多线程编程,自定义View,架构能力,产品观有更高的要求。

其实「二八原则」在好多地方都发挥着作用,在 Android 开发中,我认为也是一样的。作为一个 Android 开发,你也许只会用到 Android 开发知识的 20%,另外的 80% 你其实学了也不一定会用。

而面试官其实也一样,他有可能也只掌握了 20% 的知识,而且一个面试也不会有足够多的时间给你展示你全部的知识,而往往只会注意开发中最常遇到的 20%。但大体上来说,这 20% 比较重要的知识点,一般都是大家需要重视和答对的。我之前在公众号上写了一个面试专题,现在在公众号底部也还有一个导航。虽然后面夭折了,但写的内容基本都是每一位 Android 开发都需要重视和答对的。

俗话说「英雄不问出处」,前提很明显了你得是「英雄」。如果别人不知道你是「英雄」,那么势必会通过你的学历、公司和项目经验来判断你是否合适。毕业的学校和任职过的公司,包括你跳槽的频繁度等都会对你的评分有一定的影响。

但其实最重要做判断的根据还是你的项目经验。所以对于你从事过的项目及你在这些项目中的职责和作用,你应该有一个清晰的描叙。

对于项目经验丰富但是项目的类型单一的人,如项目中清一色的「资讯」类应用,那么你应该表现你具备独立开发和处理各方面问题的能力,而且最好在平时你就要有意识的避免进入到这种境地当中。对于「一个经验用十年」的人,面试官其实也很难分辨出他在其他的方面是否也能做得一样好,如果你不能在公司层面避免陷入到这种情况,那么你还是应该尝试同一个项目中的不同方面,或者自己做一些和当前公司不相关的项目、开源库等。

但其实有很多人的问题在于,项目经验并不丰富,而且有些人工作了很多年,但有可能其中的几年都在维护一个项目,简历上往往用一句话就把这几年的事情说完了。但我认为,并不是我们在这几年中没有做什么有价值的事,而是我们没有把这些事情记录和总结,并做一个深入的思考和扩展。想想吧,总会有的,把事情想到了还要对这个主题做一下扩展,你总结出来的东西才更有深意。

对于面试者来说,往往觉得面试就是回答对面试官的问题,但从面试官的角度来看,面试其实就是要做一件事情:「如何区分面试者」。简单的说,就是把你和面试官面过的(或即将面试的)的人区分开来,并给你打上几个签标,简单点可以是「不错」、「合适」、「犹豫」、「肯定不行」。复杂点的,可能会把你的某些能力列出来,比如学习能力强、协作能力差,然后再和其他人放在一起综合考虑。每个项目都有不同的特点,所以每次的侧重能力考察也会不一样。

所以,有时候你通过了一家公司的面试,也不需要太得意了,可能并不是你有多厉害,仅仅只是你正好是这个时间段里性价比较高的那个。当然,如果你被淘汰了,也不需要妄自菲薄,也许只是因为在这个时间段有个比你更高性价比的人也来这家公司面试了。

如何准备与 HR 的面试

HR 通常会问你一些离职原因和职业规划,对于离职原因的阐述,我想大家应该都很清楚了,不要否认老东家的价值,不要否认老东家的价值,可以结合现在面试公司来说出自己的展望。比如我之前面试美团的时候,我是这样回答的,因为美团是一个非常重视移动端业务的互联网平台,而我之前公司由于公司战略的变化,现在业务像提供服务转型而弱化了移动端,作为一个深爱着移动互联网的人,我渴望加入美团这样的团队。

而除了说离职原因,我们还极可能遇到的诸如「说说你的优缺点」、「你最擅长什么」、「你在项目提供的最有价值的作用是什么」等等这类问题。这类问题在我前不久的面试中,其实技术面都会提到。其实,反过来看就很简单了,这些问题归根到底就是「你和别人的区别在哪里」。面试官的任务是要把你和别人做区别,你自己也需要把自己和别人做区别,回答「不知道、好像没什么这样的话,其本上会给减分。



作者:nanchen2251
链接:https://www.jianshu.com/p/9896bc16fc9f



2人推荐
随时随地看视频
慕课网APP