事实上,很多人的能力并不差,但他们在面试中没有准备或者说不出话来。这些人在团队工作后可能真的达到了他们的期望,但他们可能无法通过面试,但面试官总是根据面试来判断。在本文中,将使用一些常见问题来介绍面试准备技巧。读完后,大家都会感叹:只要方法得当,第一次准备面试并不难,第二次用的时间也不会太多。

1 框架是重点,但别让人感觉你只会山寨别人的代码 

面试前,我会阅读简历以检查应聘者在该框架下的项目经验。在介绍候选人的项目时,我还将重点介绍候选人最近的框架经验。目前,SSM是最流行的。

然而,大多数通常在五年内工作的应聘者只能“复制”他人的代码,也就是说,他们可以在现有框架和他人编写的流程的基础上扩展新的功能模块。例如,如果你想编写一个股票挂单的功能模块,你会模仿现有的下单流程,然后画一个葫芦,从前端到后端再写到数据库,这样最多可以改变与该功能相关的代码点。

事实上,我们每个人都是这样来的,但在面试中,如果你只表现出这样的能力,那将与大多数人的水平相似。在这一点上,你无法反映你的优势。

我们知道,如果我们只使用SSM框架,大多数项目都会有痛点。例如,数据库性能差,或者业务模块复杂,并发性高。spring MVC中的控制器不能满足跳转要求。所以我通常会问自己:除了根据现有框架编写业务代码外,您还做了哪些更改?

我听到的答案是:添加redis缓存是为了避免频繁调用一些未更改的数据。或者,在MyBitasXML中,select语句的where条件为NULL,也就是说,如果值为,则将添加where条件。为此,当语句的传入参数为null时,将向anywhere添加一个不带isnull的查询条件,以避免进行全表扫描。或者,简单地说,后端异步返回的数据量非常大,需要很长时间。在项目中,我增加了异步返回的最大时间,或者压缩了返回的信息以提高网络传输性能。

对于这个问题,我不在乎我听到了什么答案。我只关心答案是否合乎逻辑。一般来说,只要答案是正确的,我会给出“我有自己的经验,在框架层面有一定的理解”。否则,我只会说“我只能在项目经理的领导下编写框架代码,对框架本身不太了解”。

事实上,在准备面试时,不难在框架中总结要点。我不相信每个人在做这个项目时都没有积累任何东西。只要你说出来,你就可以说你已经在这方面击败了将近70%的竞争对手

2 别单纯看单机版的框架,适当了解些分布式

此外,在描述项目里框架技术时,最好你再带些分布式的技术。下面我列些大家可以准备的分布式技术。

1、反向代理方面,nginx的基本配置,比如如何通过lua语言设置规则,如何设置session粘滞。如果可以,再看些nginx的底层,比如协议,集群设置,失效转移等。

2、远程调用dubbo方面,可以看下dubbo和zookeeper整合的知识点,再深一步,了解下dubbo底层的传输协议和序列化方式。

3、消息队列方面,可以看下kafka或任意一种组件的使用方式,简单点可以看下配置,工作组的设置,再深入点,可以看下Kafka集群,持久化的方式,以及发送消息是用长连接还是短拦截。

以上仅仅是用3个组件举例,大家还可以看下Redis缓存,日志框架,MyCAT分库分表等。准备的方式有两大类,第一是要会说怎么用,这比较简单,能通过配置文件搭建成一个功能模块即可,第二是可以适当读些底层代码,以此了解下协议,集群和失效转移之类的高级知识点。 

如果能在面试中侃侃而谈分布式组件的底层,那么得到的评价就会比较好了,比如“深入了解框架底层”,或“框架经验丰富”,这样就算去面试架构师也行了,更何况是高级开发。

3 数据库方面,别就知道增删改查,得了解性能优化

在实际项目里,大多数程序员用到的可能仅仅是增删改查,当我们用Mybatis时,这个情况更普遍。不过如果你面试时也这样表现,估计你的能力就和其它竞争者差不多了。

这方面,你可以准备如下的技能。

SQL高级方面,比如group by, having,左连接,子查询(带in),行转列等高级用法。

建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?

尤其是优化,你可以准备下如何通过执行计划查看SQL语句改进点的方式,或者其它能改善SQL性能的方式(比如建索引等)。

如果你感觉有能力,还可以准备些MySQL集群,MyCAT分库分表的技能。比如通过LVS+Keepalived实现MySQL负载均衡,MyCAT的配置方式。同样,如果可以,也看些相关的底层代码。

哪怕你在前三点表现一般,那么至少也能超越将近一般的候选人,尤其当你在SQL优化方面表现非常好,那么你在面试高级开发时,数据库层面一定是达标的,如果你连第四点也回答非常好,那么恭喜你,你在数据库方面的能力甚至达到了初级架构的级别。

本文给出的面试题不多,从本文中,希望大家能够吸取到知识。