这段时间蠢蠢欲动的想要离开现在的公司,找一家新公司,想象离开后可以开始新的生活。但是因为种种原因没有离职成功,在这一场又一场的面试中发现了自己很多的缺点与不足。
首先就是很多面试官都批判的,我的java项目经验不足。我本身是12年12月开始工作,应聘来现在的公司做java工程师的,但是进来后因为公司的安排我做了一年的数据库开发,导致现在去面试,实际的java项目经验只有3个月。想要去别的公司应聘java的职位仅仅三个月的项目开发经验严重的不足。一开始我认为数据库开发的经历让我学习到了很多,但是我始终还是想在java的道路上走下去的。这也是我想继续在现在的公司待下去的一个很大的原因,再好好的积累java项目经验。让自己对于java的理解更加深刻。
今天去的是真旅网面试,去的时候先拿到了笔试题目,一看也不是很难,但是实际开始做了发现了一道自己完全没法下手的题目:有10个线程,5个为i加1,5个为i减1。请用java实现。看见这个题目我首先就晕了,我对于线程以及同步的理解仅仅是在同步的时候给方法加锁,以及在单件模式中的双重检查加锁上。这道题目我的想法是实例化10个线程然后五个调用add方法,五个调用minus方法,每个方法都使用锁。具体的思路就是这样,到最后我也不清楚这是对还是错。希望有看到的朋友为我好好解释下这个题目,本人不胜感激。
做完笔试题目后就进入了面试环节,面试官是个看起来很阳光的年轻人,目测年龄不会超过30岁,还有喷香水呢。一开始当然是千篇一律的自我介绍,以及项目经验的介绍,其中有问到在webservice中WSDL有什么作用,这个我没有回答出来。后面就问我在数据结构跟算法上更加擅长哪个,我回答更擅长数据结构。他给了我个关于数据结构的题目:栈内有存放一系列的int类型的元素,在不改变栈内元素顺序的情况下,怎么样找出栈内元素的最小值?这个我下意识的回答就是把栈内元素都弹出来,遍历找出最小值,在依照顺序压入栈中,可是这样的遍历面试官不满意,说复杂度太高叫我重新设计。我就想到再加一个辅助栈,从主栈压入的第一个元素开始辅助栈也压入同样的元素,如果主栈再压入元素就跟辅助栈栈顶元素比较,如果辅助栈栈顶元素比较大,再把这个元素再压入辅助栈,如果辅助栈栈顶比较小则不做任何操作。如果主栈弹出元素也与辅助栈的栈顶元素比较,如果两个值相等则同时弹出,始终保持辅助栈栈顶的元素是主栈中最小值。在上面的算法中有一个不严谨的就是如果有重复的最小数值在压入,辅助栈就不会改变,但是在弹出的时候辅助栈的却跟重复的元素一起弹出,本来主栈中还是这个重复的元素最小却导致辅助栈栈顶已经不是这个元素。在这里有一个建议要给以后的面试者:要坚定你的想法,不要迟疑,也不要否定自己。当他问出这个不严谨的地方之后,我第一个反应就是如果有重复的就继续往辅助栈压入重复的最小数字,这样即使弹出重复的,辅助栈顶依然是那个最小值,但是在这里我迟疑了,导致说的时候有点磕巴。这边的面试告一段落,面试官叫我用伪代码完成上述算法也算是有惊无险。但是他接下来说的话让我大吃一惊,他说你先等等我去叫你的第二个面试官....二面我经历过,但是从来没经历过二面紧跟在一面后面的情况,也没有办法,只能硬着头皮上了。
第二个面试官来了,是个跟上面面试官风格完全不同的人,严肃,认真。传统程序员的代表啊。来了还是问我自我介绍,项目经验。当时我已经跟前一个面试官交流有一个多小时了,包括笔试一个小时两个小时没喝水,感觉自己的头脑有点缺氧。这个面试官首先问了我一个同步的问题,如果每秒有三四千人在抢入场券,我该怎么做?我的想法是把所有的入场券分成几个等份,每个等份一个字段,然后当一个线程进来时看看每个字段是否都有锁,只要有一个没有就立刻获得该字段的锁,我想这样用分布的方式可以减少数据库的压力。面试官当时面无表情的问我最后一个问题,用java代码写出一个二维数组s型输出,这个可以说是非常简单的也很常见的面试题目,但是当时我就是写不出,知道算法了就是写不出代码,最后我无可奈何的跟他说,抱歉,这个我写不出来。他看着我还是面无表情说:那今天的面试就到这吧......
在我从真旅网出来的时候我心情很失落,于是一直在想那个问题。没想到在电梯到达一楼的时候我竟然想起来该怎么写了,我真想跑回去跟他说,我会写了,再给次机会。可惜很多事情都是这样的,无可奈何。
这个月的面试让我更加清楚的知道了自己在技术方面有哪些不足,还有就是因为朋友同事跳槽薪水比我高得多,而内心越来越浮躁。用一句我朋友的话:职场是马拉松,不要看着你前面人的背影,而是要看着终点。我要静下心来,好好为接下去的路积蓄力量。