一、听清题,勿抢答

面试,首先也是一个人与人交流沟通的过程。有些时候,面试官还没说完问题,面试者就会打断说「这个问题我知道...」。打断不利于沟通,同时,这样其实导致面试题没听清。比如面试题是「如何理解Java 的 JMM,...」后面还没说的时候,面试者打断说「你说的这个我会。。。,包括方法区,堆,栈 balabala」这就答的都跑偏了。

二、从全局、到具体

如果问题是「 Spring 是什么,怎样理解的」。很多人就会直接回答「Ioc 和 Aop嘛」这样说不能算错,但我个人认为从一个更宏观的方式先入手,再具体介绍对于 Spring 你深入了解的一个或者多个方面,这样感觉更好一些。

发展到今天,Spring 并不仅仅只有Ioc 和Aop,而是一个包含一系列功能的XX,像快速开发的Spring Boot, 像微服务支持的 Spring Cloud, 像支持认证和鉴权的 Spring Security, 支持各种抽象的Spring data 提供的 xxxTemplate,Testing, 以及现在使用众多的 Spring MVC。当然 Denpendency Injection 和 AOP 依然是核心。

再比如回答如何理解Java的垃圾回收机制,比起直接回答 「将无用的对象清除出内存」这类概括,如果描述垃圾回收,什么时候会发生垃圾回收,具体的回收方式,了解哪些回收算法。出现OOM时如何调整,以及 JVM 的内存划分等,我感觉效果会好很多。

三、不要骄傲自负,也不妄自菲薄

面试官在提问之后,有的候选人问题还没听完,一是抢答,二是不屑。心想为啥问这么简单的问题。其实面试大家都理解为一个不断沟通,发现面试者长项的「交流」。比如有的面试者一听「请写一个单例模式」时,会略有不爽,仿佛才华被埋没了,却在「双重锁检查」时,大意失手,忽略了CPU 指令重排序的影响。

还有的面试者,在面试官刚说出「接下来我们写一个算法题...」还没说完时,会抛出选项,「要不我写个快排,二分查找?balabala」,如果你是面试官,你会怎么做?

也有一些面试者,在被问到简历中所写项目时,「眼神黯淡」,说道「我们没做什么有技术含量的,和你们没法比」,又或者在面试官说到项目中的某个实现时,会说「你们也用了啊」,然后有的不敢向下说,仿佛简历包装过度,也有的则是感觉有更多的共同话题,开始探讨实现,选型等等。所以大胆展现自己,至少有一次机会。

四、简历切勿太夸张,更不要全是产品描述

看过不少简历,有些整个简历里的项目,全是业务和产品介绍,通篇没提到几个技术点,不讲实现,不写用了什么技术,全是大段的文字描述。做为一个技术面试,没有什么技术性。

也有不少,简历里写着精通XX技术与YY框架,是ZZ专家。其实实际交流时,真的是只限使用,都没配置过。

一个「熟悉」的大部分时候会大于一个「精通」的水平。

五、广度与深度

一般的面试,都会根据面试者的实际工作经验时长,对应到该有的广度与深度。但广与深两者间,我认为先深入一个领域,一个概念,再拓展开来,这样效果更好。

而且面试过程中,如果每问到一个话题,都是平常,或者是简单了解过,会给人一种浅尝辄止的感觉。如果某个方面深入,在回答相应的问题时得心应手,甚至可以回答「你最擅长什么?」时,可以更有底气。比如聊 Java 的并发 。除了能描述 sync 之外,先按从全局到具体,可以描述「内存模型」,以及Happens Before, Lock 与 sync 的区别。Lock 与 sync 分别对应的实现,以及JVM 的 monitor 指令, AQS ...

去年电话面试一个实习生,对于开发框架还在自学阶段,问到一些未学习到的部分,会实话说「目前还没学到」,甚至精确到说XX技术「今天就要学了」,有计划,有学习能力。但其描述的这种学习方法,态度 以及对已经学习部分的掌握程度与理解,对应表现出来的水平,都让人印象深刻。后来到公司实习时并没使用框架,而是根据需求使用了新技术,果然也没让人失望。

六、积极主动

这个我自己理解是在回答问题时,可以将自己擅长的展示出来。比如简历里有写到「项目使用过 RPC」,那在回答项目中如何使用RPC的时候,可以描述一些 RPC框架的设计实现思路,例如「我大致了解过 Dubbo 是这样设计的」,和 「Thrift 有这些区别」,当然,这个时候面试官可能会问,有了解过 grpc么? 你会怎么办?

此外,在讲述项目使用技术时,可以顺便将自己为什么这样做,为了什么选择使用这个技术,这样简历之外的丰富信息,才会让面试官更立体的了解,从而为「交流」打开局面。

七、有证明更佳

如果能在简历里附上一个长期活跃的开源项目,不断输出的Blog 等等,也是一个让人更全面了解你代码风格,展现设计、思想的方式,学习方式的「平台」。

不多说了,工头喊我去搬砖了,  ; )