由于我做了比较长时间的技术面试官,根据我的面试体会,不少同学收到面试后,什么准备也不会做,到时候就来了。
这样做的后果是:不知彼,不知己,每战必殆。哪怕侥幸面试成,工资一定会被压得很低。
其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的。
在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到这点,简单点,让面试官感觉你达到了最低标准即可。
至于通过技术面试后,项目经理或人事的面试一般是过滤特别差的,比如考察些团队协作能力和沟通表达能力等,这对大家来说应该不是问题。所以在本文里,主要讲述下面试的准备点。
01
至少定出2天的准备时间
面试的准备时间一般别低于2天,如果可以,再延长些,但别太长。
比如是去现场面试,可以找的借口就比较多,比如项目忙,会多,时间间隔别超过5个工作日。比如周二收到通知,就尽量约到周五,如果是是周三周四,那么别超过下周二。
电话面试的话,借口不多,一般可以约到两天后。
但不建议今天接到通知,明天就直接电话面或现场面了,一方面公司会认为你当前很闲,另一方面,你真就没太多的准备时间了。
02
一定得再次阅读
公司的职位要求
就好比是考试,先得审题,大方向错了,准备就白做了。
比如,有如下的职位描述。
我们能从中挖掘出如下的技能需求点:
1、3年经验,熟悉常用类库
2、熟悉Spring和Mybatis框架
3、熟悉分布式中间件(比如消息,缓存等中间件)
4、熟悉数据库,最好是NoSQL
5、最好有大数据经验
而关于非技能的要求如下:
1、有责任心,有主动性
2、需要有团队合作的能力
3、需要有良好的编码习惯,学习能力要强。
其实,在投简历前,就可以根据上述要求微调简历,这样获得该岗位的面试机会能更大。不过在本文里,就将以上述需求为例,讲述面试前的准备。
03
在刷题前
先准备项目描述的说辞
我见到不少候选人,在面试前,就会着重刷题,比如看算法题,基础题等,这个是必要的。
不过在面试里,第一个环节一般都是项目介绍,也就是说,如果面试官通过项目,看到你的技能和职位不匹配,你甚至没有机会被问其他问题。
这里介绍些项目描述的要点:
01 业务需求可以一笔带过,用寥寥几句话介绍项目的背景,大致做了什么,工期和人数即可,别讲太多,因为面试官不关心。
下面给出一个说辞的案例。
我上个项目是做电信系统的计费软件,客户是xxx,工期是xxx个月,有5个人一起做,我在里面做的是开发。
02 结合项目实际需求,介绍项目用到的技术,比如在上述职位描述里,要求有spring mvc,消息中间件,数据库等需求。
下面同样给出各说辞的案例。
在这个项目里,我们用到了Spring MVC(或Spring Boot或Spring Cloud)框架,数据库是用Oracle,ORM组件是用Mytabis。
在项目里,我们在是通过消息queue来发送计费成功的消息,消息中间件我们使用Kafka,为了降低数据库访问次数,我们会把客户信息放在redis缓存中。
此外,我们在网关层接入了nginx做负载均衡。
大家能看到,在上述说辞里,我们结合了案例,说出了招聘方需要的技术点。
不过请注意,这里仅仅是介绍项目,结合功能点说出技术即可,别过多展开,因为一旦过度展开,就会让面试官感觉你思路不清晰,或者凭借准备有恃无恐。
03 再结合项目,说些招聘方需要的非技术的要求。
在这个项目里,我们用到了xx设计模式,而且,我们会定期review代码,以求保证代码的质量,而且,当项目工期比较紧的时候,我还会客串配置管理的角色。
在这个项目里,我一有问题,马上会和经理或测试或其它组的人沟通。
04 如果有,说下你在项目里的亮点,比如用到了一些比较好的技术。
这个项目对数据库性能和内存性能要求比较高,所以我用到了Oracle调优技术和JVM内存优化技术,此外,我们还用到了大数据分析的工具对计费模式做了优化。
大家看到,上述说辞不复杂,准备好以后,说起来估计也就2,3分钟。但就通过上述说辞,亮出了你的基本信息,而且能给面试官留下思路清晰,技术匹配的印象。
这里请注意,如果大家在项目里的技术和要求的不匹配,不建议作假,但可以通过如下的方式来做到匹配。
01 如果你的ORM用的不是Mytabis,而是itabis或干脆hibernate,就直说用到这些,因为ORM是相通的。
02 如果这个技术,比如Redis,在项目里用到,但你没做,你可以在了解的基础上说出来。
比如说:“这个项目还用到了Reids...,redis是用在xx模块上,功能是xxx”,请注意,这里你说是项目用到了,而不是你用到了,这里,如果在后继的回答中,你对redis的用法和技能问题都能回答上,那么面试官不会介意这点。
03 某个技术你在这个项目里没用到,但你比较熟悉,你也可以通过如下的说辞说下。
我在其它项目里还用到了nginx(模糊回答,没刻意说这个项目),具体的应用场景是xxx(结合功能点说),用到了其中的xx配置项(通过些关节点来印证你用过)。
这里请务必注意,在准备项目说辞的时候,可以尽量和职位要求靠,但别太离谱。
因为你说的每个技术点,在后面,面试官都可能提问。
如果某个技术点你没掌握,其实问题不大,面试官本来就没要求你十全十美,但如果你说你用过某个技术,但通过后面的问题,面试官发现你其实没用过,或者掌握程度没像你说得那样好,那么这个性质就不一样了。
04
一定得准备
项目描述里提到的技术
在介绍项目时,就好比是钓鱼,吸引面试官把注意力集中到你提到的技术点上。
所以在准备面试的时候,一定得先准备你项目里提到的技术(大多也是招聘要求的技术)。准备时可以按照如下的思路。
第一:
一定得结合项目背景,比如大家要准备分布式缓存redis,先说在哪个项目的哪个场景里用到,比如在刚才提到的电信系统里。
这样就会让面试官感觉到这个技术你实际用过,而不是简单地只有学习经验。
第二:
有不少关键点,你用到以后一定是知道的,比如redis的基本数据结构,如何读和写,缓存如果击穿了怎么办?这些问题点一定得准备,所谓吹牛要打草稿。
比如你可以说,在配置redis时,用到了xx配置文件的xx属性,它是干嘛的。这话不用多,但说出来以后,面试官一听就知道你真的用过。
第三:
可以准备些这个技术的高级问题,比如Redis集群如何搭建,集群里一台机器失效了怎么热备转移。
同样,可以讲些如何配置以及如何使用的关键点。或者,大家可以准备redis分布式锁的底层实现。
请记住,需要对你项目里提到的任何技术都按上述要求做准备,虽然有些技术你未必会被问到。
这里,如果大家在项目里仅仅是用到了基本的功能,比如redis就用了基本的读和写,但你可以适当看些高级知识点和面试题。
05
一定得准备亮点话题
一定得准备亮点话题,并想办法往这方面绕,而且亮点话题多多益善
对于java高级开发而言,可以准备如下的话题,大家也能以此为参考,准备些其它的话题:
1、虚拟机内存优化
2、数据库性能调优
3、分布式高并发架构
4、一些热门组件,比如redis,nginx等
5、大数据方向的用法
6、java core(比如集合或多线程)方面的底层实现代码
7、Spring系列(比如IOC, AOP, MVC,Spring Boot, Spring Cloud)方面的底层实现代码。
要准备到什么程度:
1、最好结合项目实际说出真的用过这些技术。
2、最好往性能调优方面靠。
下面就以虚拟机为例,说下如何在面试中引出该话题,以及面试时该怎么说。
第一:
在简历的最近项目介绍里加上类似这样描述,“这个项目的内存要求比较高,虽然在项目里分配的对象不少,但这个项目只被分配了1G内存。
所以在这个项目里,我实践了一些定位排查内存问题的技能,也做了些调优的工作“,这样面试官见到简历的描述,就会自然而然地提问了。
第二:
在面试中总会有“项目介绍”这个环节,面试官会让候选人介绍最近的(或最拿得出手)的一个项目,这样大家就可以顺势说出刚才已经给出的描述。
第三:
大家可以在回答数据库或集合等方面的问题时引出这个话题,比如回答完JDBC问题后,大家可以说一句,“用好的Connection对象我们会及时关闭,否则它所占用的内存对象无法被GC回收”。
或者在谈及List等集合类型时,同时多说一句,“用好的集合对象我们会及时clear掉,否则这个集合也会对一些对象产生强引用,这样就会延迟对象的回收时间”。
第四:
在自我总结时,可以说,有虚拟机调优的经验。那么,在面试时,该怎么说呢?
1、大家可以先从堆的结构入手,进而详细说明垃圾回收的流程。
2、再进一步说明如何写出高性能的代码。比如物理对象(比如Connectio或IO)用好之后得及时close。大的对象用好后应当及时设置成null,以撤销强引用。集合对象用好后应当及时clear。尽量别频繁地使用String(或其它不变类)对象,这样容易产生内存碎片。
3、还展示监控、定位和调优方面的综合能力。这里可以说下,比如通过Jprofiler+jmeter进行JVM性能调优的方法。
4、大家甚至可以看些虚拟机的底层实现细节,在面试中说下,这样能大大提升自己的专业素养。
(责任编辑:代码如诗) |