面试技巧
由@LYS编辑此页面
概述
对于实习来说,一般会有 1 ~ 2 轮的技术面,而校招则是 2 ~ 3 轮,并且视情况下,可能还会有加面。
技术面主要考察你的技术水平,判断技术是否达到招聘标准,并通过你的项目来考察你的项目经验,对技术的掌握程度。
加面往往出现在校招中,有三种情况:
- 前面面试的评价差异过大,需要加面确认你的水平
- 面试评价足够好,需要加面确认你的上限,可能开出非常可观的 offer
- 加一轮主管或者技术总监的面试,大部分情况是技术面,也可能是纯聊天,用于确认你和技术团队的相性
一般加面都是后两种情况,由于面试的人很多,出现第一种情况就给你筛掉了,基本上不会有人花时间再去管你的。
面试的同时也是一个双向选择的过程,你可以通过技术面反推面试官的水平,以及公司整体技术架构的水平,业务上是否有足够的发展空间和前景。
自我介绍
这个是面试最开始的环节,面试官会让你做一个简短的自我介绍,用于了解你的基本信息。
很多人并不清楚这个环节的重要性,觉得自我介绍很简单,随口两句就草草结束。这种做法会使得自己在接下来的面试时间里长期处于被动,尤其是遇上水平不高不会引导的面试官,面试将会变成一场折磨。
要弄清楚这个环节怎么设计,必须带入面试官的场景,进行深入分析:
- 面试官平时比较忙,可能在面试开始前才看到你的简历,所以大概率面试官对你一点也不了解
- 面试官在你做自我介绍的同时翻看你的简历,根据你展现出来的水平思考接下来的问题
- 面试官一定看过非常多的简历,大部分都是毫无亮点,因此面试官想要找一些你具有亮点的东西
基于这三点分析,我们可以有针对性地设计自我介绍的内容。
首先是你的个人履历,主要是介绍你的个人信息和教育背景,比如开篇”面试官您好,我叫xxx,来自河南工程学院,就读于计算机科学与技术专业“,这是必须要有的信息。之后,你可以补充说明自己曾经参加比赛所获的奖项,也可以提起你的绩点很高,让面试官清楚你在校是一个非常优秀的同学。这一部分简要介绍即可,下面的才是重点。
如果你有实习经历,可以按照如下思路设计:
- 先来一段综述,概括自己任职过的企业,实习的时间,做过什么项目
- 接着按照最早的时间顺序开始简要介绍一下项目背景,以及实习的产出,挑重点来
- 最后,简单介绍一下自己最近一段实习离职的原因
关于实习产出,不要照搬简历,每一段的实习只要挑一个你觉的最重点或者收获最大的产出即可,因为基于面试官的心理分析,他也在找你项目中的亮点,这个时候就需要明确地点出来,让面试官注意到你所做的东西。
如果没有实习经历,可以简单介绍一下自己做的项目:
- 简述项目的背景,用到的技术栈
- 如果是合作项目,说明你担任的角色
- 重点介绍你认为最出色的产出
通过上述介绍,面试官对你的水平就有了一个基础的认知,除此之外,你也可以介绍自己的个人博客,写过的技术文章和笔记或者读过哪些技术书籍,让面试官知道你在工作之外也注重个人提升,以及知识沉淀。
如果在你自我介绍完后,面试官对你的经历感兴趣,他会继续让你挑一个你觉得最有挑战的事情详细展开讲,那么这就是一个比较好的面试节奏了。
基础拷打
这个环节一般是考察你的计算机基础以及对专业技能的掌握程度,一般内容就是八股。
八股问题都是标准答案,可以理解为考试题,知识点是固定死的,这些内容很多,网上也有各种计算机八股文资料,随手找几个免费的凑合用就行,挑和你自身技术栈匹配的重点内容背熟即可。
这一部分的内容实在没什么经验可言,比谁八股文背的熟练、背的多,而且这个环节一般不可避免,但仍有技巧可以减少提问你八股问题的,那就是——引导。
你需要在回答八股问题的同时,引导面试官到你擅长的领域提问。八股文是背不完的,只有把面试官引领到你最擅长的领域才能减少你翻车的概率。
举个例子,假如面试官问你:你了解过 Java 里的 HashMap 吗,说说看?
一般八股文的回答:
- Java 的 HashMap 是常用的集合类,有 1.7 和 1.8 两个版本 ...
- 扩容的方式也不一样,1.7 是 ... 1.8 是 ...
这样的回答,面试官已经听了成千上万遍了,千篇一律的回答毫无亮点可言,接下来提供以下思路:
- 向面试官说明自己阅读过底层源码,举例说明源码中的扩容机制是怎么实现的
- 介绍自己在项目中的应用,在简历里哪个项目里面用到过,使用的时候有没有踩过坑
- 提出自己的观点,认为设计的好的地方或者不合理的地方
以上面的回答为例:
- 我曾阅读过 HashMap 的源码,对其中的扩容机制比较了解,具体是通过其中的
resize()
函数实现的,这个函数在不同的版本有不同区别,首先是 1.7 版本 ... 在 1.8 版本中的区别是 ... - 我自己在 xxx 管理系统中使用 HashMap 做过局部本地缓存,缓存查询的用户信息,结果由于我忘记了重写用户信息类的
equals()
方法和hashcode()
方法,导致出现了键值匹配失效的问题 ... - 我认为 1.8 版本中的 HashMap 对扩容机制进行 hash 计算的优化比较好,不再需要重新计算,节省了大量的性能开销,还有 ...
这样回答完全就不是一个档次了,不仅很好体现出你扎实的基础知识,还表现出你对技术应用的思考,绝对是很大的加分项。
项目拷打
这个阶段应该是面试中花费时间最多的环节,通过这个环节,面试官可以最直接了解你的真实水平,可能会拷打地很深,一个细节就会引申出很多的问题。
还是先对面试官做一个简单的分析:
- 面试官想确认你的项目是不是真实的自己做的,有没有过度包装
- 面试官想要了解你在项目中的职责,具体干了什么,如何做的
- 面试官想知道你对项目的熟悉程度,业务和技术层面的理解
- 面试官想知道通过这个项目,你经历了什么的成长,有没有什么技术上的提升
- 面试官会判断,你所做的事情能否体现出你的潜力,和未来的发展,有没有培养价值
上面前两条不是重点,重点是后三条,我们逐条分析。
对于项目的理解,只要是你自己从头开始做的,一般不是问题,重点在于你是如何理解项目业务的。从一个项目的需求点出发,到功能需求,需要用到的技术,解决的痛点问题,都是你值得说明的地方。
而通过项目,你获得的技术提升,则必须要经历一系列踩坑或者性能优化来体现,比如基于 MySQL 的索引进行查询优化,通过报错日志排查项目问题等等。
最后,你的潜力和发展体现在你是否具有钻研精神,能否敏感地捕捉到一个技术点会产生的问题,以及相关的解决方案,会不会通过项目是持续积累,沉淀出一套可复用的方法论。
反问环节
在面试的结尾,面试官一般会让你进行反问。
你需要准备的问题如下:
- 贵司是做什么业务的,您负责的是哪一方面的业务
- 您所在项目组用到的技术栈,可否举一个简单的例子
- 如果我通过面试,我会具体负责什么样的工作,我还有什么需要提升的地方
这三个一般是必须问的,其余的问题根据你的兴趣来,先说一下这三个问题的核心思想。
第一个业务问题是看面试官的诚意,如果面试官希望你能来,他一定会很详细介绍自己负责的业务方向,希望你能有一个基础的认知,同时通过业务了解,你也可以对业务发展有一个简单的预期,来到这个公司,发展的前景如何。
因此就引申出后面的提问,询问项目技术栈,可以比较一下自己的专业技能是否匹配,并且根据公司的技术栈,可以反推技术团队的技术水平。如果技术比较新,说明技术团队比较有活力,会关注新的技术,技术成长空间还是有的。询问自己具体负责的工作,也可以反推出面试官对你的评价,如果在面试官明确会带你的情况下,也会具体介绍,但也有可能是看后续安排,分配到其他业务线或别的面试官,从这一点可以简单对自己的面试结果有一个了解。
其他的问题看你的兴趣,除了薪资问题都可以问,薪资属于隐私问题和人事问题,不是技术面的重点。
HR 面
HR 面一般是在技术面全部结束后,才会进行,这个环节一般不会挂人。
HR 面对于实习来说就是直接的谈薪环节,而校招则会确认你的意向,最后会再进行一次电话谈薪。
HR 面主要看以下几点:
- 你对公司、岗位的了解程度
- 你是否认同公司文化,能否融入团队
- 你是否存在沟通或者性格上的明显缺陷
- 你对工作地点、作息和薪资的要求
这些问题正常回答即可,只要不是非常离谱,一般都可以通过。
其中只有一点要注意——薪资。
当 HR 要和你谈薪的时候,你必须学会和 HR 进行拉扯,比如 HR 问你期望薪资,你可以反问 HR 公司的薪酬体系和薪资结构,对公司的薪资水平有一个合理的预期和推断。然后再报一个你的心理价位,这个价位可以参考你已有的 offer,如果 HR 认为你要价太高,可能会压价一些,这时候你必须顶住压力,坚持自己的心理价位,或者一开始就报一个稍微高的价格,反复拉扯就行。