生死六重门:高级开发人员面试宝典

无论你是在职、待业,还是高级工程师、架构师,如果你正处于面试阶段,请务必看完此文!

相信这篇文章会对你的职业生涯和价值观产生重大的影响。

如果你是一名 PM(Product Manager,产品经理)或者是管理者,正在物色合适的开发人选,那么我相信这篇文章同样会在你考虑如何挑选技术型人才上带来重大的帮助。

注意:本系列不适合想去应聘 PM 或管理路线的人士!

作为一名技术型人才,尤其是程序员,用什么可以衡量自己是否合格?或者我们怎么去衡量一个程序员是否资深、是否合格?

比如说:他适合一般的软件工程师岗位,还是适合高级工程师岗位,亦或是架构师、系统分析员这样的岗位呢?

作为一名 Java 开发人员来说,Java 涉及到的面太广了。我们就拿企业级开发人员,即 J2EE 开发人员的基本功来说事吧!

在面试前先问自己 5 个问题

  1. 我想要什么?
  2. 我会什么?
  3. 目前的市场需要什么?
  4. 目前我还缺什么?
  5. 如何去补缺?

一个 J2EE 高级开发人员需要具备些什么技能?

或许你会说:我会 SSH,我会工作流,我会 jQuery、ExtJS,我参加过数个大型项目,我带过 5、6 个人的队,我有 SCJP、SCEA 证书,我工作经验达 5 年。

我会告诉你,其实你是 Nothing,Nothing!

我这个"Nothing"的前提是指好的公司、好的项目组招人时的要求!为什么这么说?

这样告诉你吧,越是好的公司,越是好的项目组,在招开发人员时他们面的东西越是底层。

本人结合以前在公司负责 Java 开发人员的招聘与策划,和对新进 Java 人员的培训经验,即自己本身近 10 年来 50 多次的面试经历总结,发觉:

越是工作年限长的人,技术越是倒退

尤其到了 3 年、5 年、7 年工作经验的高级开发工程师群体们,往往发现自己在择业上碰到了一个瓶颈:上不上去,跳槽时工资能涨个 1000、2000 已经到顶了,几乎不太可能达到他们本身期望的 30%-50% 的涨幅。这些原因主要源自于“基础”。

大部分人基础全忘了,或者以前做过几年程序,但是后面转向管理、TL(Team Leader)等角色后,平时开发的时间下降到只占到本身工作的 30%-50% 这样的量了;

或者有很多一批人,由于工作、项目等其它的原因,没有接触过一些正规的、系统化的知识;

或者平时不善于总结,只求我用技术时就 Google、Copy & Paste,忘记了代码基本功了。

您别不信,来,我们就来试一下

不许查网络,你现在就处在面试官面前,面试官问你这么一个问题:

面试官: 你有没有平时自己重写(Override)过 hashCodeequals 两个方法?

候选人: 我写过的。(可能很多人以前用的是 Eclipse 或者是 MyEclipse 里的自动生成器)

面试官: 怎么写?

候选人: 。。。。。。(大致讲出来什么原理)

面试官: 你为什么要重写 hashCode & equals 方法?

候选人: (如果准备过的人能够回答得出这个问题)

面试官: 如果说两个对象 equals,它们的 hashCode 是否一定相同?如果两个对象的 hashCode 相同,它们一定 equals 吗?

候选人: 70% 以上的人会挂在这个问题上。

面试官: 你知道在写 hashCode 时为什么要使用一个 31 这样的数?我用 100、11、17 是不是一样呢?有什么不一样的地方呢?

到此为止,基本都挂了(如果在没有网络的情况下)。

你看到这边或许会说:Come on,有 Eclipse 代码生成器,这个没必要。

OK,我们再来:

面试官: Oracle 中的 Index 有 Bitmap、B-Tree 两种索引,请比较它们。

候选人: 70%-80% 说自己 Oracle 用了 3、4 年的人首先就不知道这个 Bitmap 和 B-Tree 是什么,更无从谈起比较了。

以上两道问题,可以作为一个面试官判断你是否在一直写代码和是否真正熟悉 Oracle 的标准。可能因为这两道题,你就挂了,面试官不愿意再和你谈下去了。

真的,这两道问题其实基础得不能再基础了,就和你不会 1+1=2 一样,你说“我熟练掌握四则运算”是一个道理。

记住,越是好的公司,越是好的项目,面试的问题就越是底层。IBM、eBay、HP、百度、MS、1 号店、阿里巴巴、Oracle、Starcite 等都是这样。

一般,一个高级 Java 开发人员的面试,其实是分成 3 个部分

  1. 基础考核
  2. J2EE 相关知识和框架以及 J2EE 相关性能调优等的考核
  3. 综合考核,即给你 1-2 个 Case,让你说说你的设计和想法

其中,最难过的就是这个基础

这个基础中,其实再可以分为四个部分的考核:

  1. 笔试:45-60 分钟笔试卷,基本都是多选。
  2. SQL 部分:一般是数据库基础,SQL 统计函数等的写法是肯定逃不掉的。
  3. 问答/设计:然后是 1-2 道的问答类,也可以是设计模式方面的题。
  4. 智力题:放入一道智力题(eBay、Oracle、MS、百度很喜欢干这种勾当)。

有的公司也会把这四部分都放在笔试题里,有的则会加上多线程、算法变成 6 道问答,直接让面试者在面试时给面试者一些白纸,然后就此一问一答。

像一些外资类公司,会加入一道"电话面试"关,一般在 30 分钟,过了电话面试再去他们公司本部,然后就是 3 轮的 Face-to-Face 面试,最后再和主管谈、HR 谈,一般 6 轮面试是需要的。

这边请记住,这 6 轮面试 9 成的可能性都是全英语面试

很多搞 IT 的,首先英语本身没有重视,有的不能够很好的交流,基础又丢了不少,那基本这样的面试都会被挂。这也是为什么有些人总觉得这些大公司怎么怎么好,怎么怎么难进!

其实不然,掌握了技巧,要通过这样的面试,易如反掌。因为你发觉吗,一般人都是伤在基础部分的面试,这关过了基本后面都很好过的。所以我们把基础部分 4 个部分的面试,即:

Java 基础 + SQL + 设计模式 + J2EE + 算法 + 智力题

总结成"6 道题"。别看看这些都是基础,如果真的让你处在面试官面前时,你不能查 Google,没有 Eclipse,相信 90% 的人都会挂掉。

这"6 道题”其实就是考核一个高级开发人员是否真正适合高级开发人员岗位的标准,也是一个真正做技术的人必须要具备的能力。没有了这个基础,你的一切,你的工作经验,你的简历再漂亮,也都是浮云。

有些人会说,我能达这 6 个部分的 50% 左右的能力,有些人能达到 70%,那有些面试官就会觉得:这个人我可以用了,只是招进来后砍砍价吧。

试问,你愿意被人砍价吗?对吧,被人砍掉 2-3K,你不疯了?如果你工资本身就 40、50 万,被砍个 2、3K 也无所谓。大部分人都是 5K 冲 8K,更多的是 8K 冲 13、15,或者是 12、15 想冲 20K 的人。那么,我告诉你,你就必须,对,是必须这"6 道题”至少——这边看清了哦,是至少能够回答到 90%。如果是英语面试,你还要准备全英语面试哦!

那么,我们说为什么一个企业要这么去考核一个开发人员呢?

首先,对于企业来说,招一个高级开发人员,是不容易的。中国人,做什么都喜欢一哄而起。1996 年房地产发展时,短短 1、2 年内到处都是房地产公司、设计所、设计公司,CAD 盛行一时。

2000 年初,IT 开始盛行,这个更猛,到处都是 IT 公司,都是 IT 人员。学个 IT 就高档了,学个 IT 就高技术了,搞得连在 6 层楼居民住宅中租个 2 室户也能开个 IT 公司了。

从业人数一庞大,就造成了鱼龙混杂,层次参差不齐。

于是 SSH 满天飞,大有"练好 Struts、Hibernate、Spring,货卖帝王家"的感觉。嘿嘿,你别不爱看,现在的市场确实是这样。

但是,事实摆在那边。你要想进一个好的公司,要被一个好的项目组,你的工作想要有价值,可以学到真正知识、锻炼到能力的项目、Team 中去,你就得过这 6 道关。所以,无论你觉得现在如何,或者觉得不爱看我写的这些,或者觉得“我这样挺好呗”,但你就是不能否认这 6 道关是摆在那边的。它是你提高一个层次的拦路虎,不打掉它,你永远上升不了。

啊。。。或许这就是许多人到了后来选择走管理的道路的原因吧,这也或许是中国 IT 之所以还停留在初级阶段的原因吧。唉。。。中国式的一夜暴富梦想充斥着搞 IT 人们的头脑,建筑在沙滩上的城堡总有一天会倒塌

Come on,各位!又来了,老套了,不好意思,发发牢骚。

下面我们就要讲如何来过这六道关,一道道我们来过。任何一个以技术为终生目标的开发人员,这些基础,其实不是通过看了我这篇文章,您临时抱一下佛脚就可以抱得出的。我告诉你,抱不出的。就算你死记硬背了我在这系列文章中提到的近百道例题,你如果不是真正把它们做为你一直需要修炼的基本功的话,你到头来还是要露馅的。

这就和我上面用 1+1=2 都不知道何谈四则运算是一个道理,这就和练武功一样,奇材很少,所有人都是从练马步开始的。

下面我们将慢慢来谈“面试经验”。

说明:本文提及的部分技术术语(如 J2EE、SSH、SCJP/SCEA 证书、MyEclipse 等)具有明显的时代特征,主要适用于 Java EE 早期及中期阶段的面试场景。现代开发环境已逐步转向 Spring Boot、Jakarta EE 及云原生架构,但文中强调的“基础重要性”及“面试底层原理考核”的逻辑依然具有参考价值。