实习转正答辩

今天下午进行了实习转正答辩,有很多经验总结下来。

走进工作岗位的几个阶段

首先第一个是实习生面试,这个在每年的春招的时候会进行,也就是我进入阿里巴巴进行的第一次6轮面试。那个面试的经历想比较今天的经历其实是比较简单的。

通过面试以后就算是一个试用期实习生了,大概会经历一个多月左右。实习生的试用期会做一些工作,并且这也是实习转正答辩的主要内容。

如果通过了实习转正答辩,那就是正式的实习生了,我也是最近才知道的,原来这个实习转正是从试用期实习生转到正式的实习生,可见整个工作的流程是比较复杂的,压力也不小。

在实习的后期跟你签了三方协议也只是一个录用意向的协议并没有法律效力。

在你实习结束以后正式入职还有一段试用期,时间一般跟你的签约年限有关。签的时间长试用期也就相应的长。

转正答辩的几点经验

在此次转正的答辩准备过程中,我觉得自己准备的比较好,但是忽略了一些情况,导致最后的发挥并不是很好。
这是经验的问题,因为接触的面试官不太多,所以在遇到某些问题的时候就脑子短路了。经验真的很重要,不同的面试官的关注重点都不一样,所以要不同的策略去应对。

本次在做答辩的之前,我自知自己的工程功底不强,所以在准备做的工作的同时,还做了多一手的准备,那就是我最擅长的算法方向。打算以此作为自己的优势去提升自己在工程深度上的不足。
毕竟我是刚入行Java的新手,做工程一定不如很多一直做工程的人,另一方面自己这一个月接触的项目虽然多,但是并没有什么太深度的难点,所以也没有机会去解决,也就没有什么工作的亮点可以展现。

我在工作的过程中自己学习了redis数据库中两个我认为比较有意义也比较有特点的算法,在我的博客中也写过。我通过这两个算法说明一个问题,就是数据库的发展方向可以脱离原本的通用解决方案,转为为特定场景设计实现算法来解决特定问题。

用这样具有前瞻性的眼光来凸显自己的价值。

这个方案在我做完ppt以后被我的师兄提出了没有意义。但是我坚持保留了这个东西。
随后在跟我的主管预汇报的过程中,主管表示很好,突出自己的优势而且这个思考很有价值。我觉得,这就是不同级别的人思维格局吧。东西就在那里,你能看到你才有可能拿到,看不到永远也拿不到。

答辩的时候,其中一个人是FastJson项目的作者,这就是没有意料的地方。我以为会是一个偏管理+一个偏工程+一个hr的阵容。但是这个偏工程的又有点偏算法,面试官熟算法倒不是什么问题,关键是我们的算法认知不同。这就非常的尴尬。

在第一个算法之后他问了一些算法的细节,尤其是在算法的最终实现是字符串还是int值的问题。
因为我本身是搞ACM的算法竞赛,这个竞赛的重点在于利用思维模型去解决问题,而不是去研究最底层的实现中节省掉的int和char之间的空间差距。当然我不是说这些东西不重要,当然重要。只是我并不去实现这个算法,所以也就没有去研究在实现的细节上是什么方式。另一方面,学习这个算法本身就不是我的工作范围,所以就没有时间去深究。
我只是想透过这个算法去发现数据库的最新发展方向。但是被面试官过于深入的带偏进入这么工程细节的问题是我没想到的。

这就是面试中的一个常见的问题:

同一个事情,关注点不同

我关注的是算法带给我的发展认知,面试官关注的是这个算法你有没有学的很深,有没有学到落地。
这很显然不是自己想去探讨的方向,所以这个时候要么你真的落地了,要么就要及时引导面试官到你的方向上去。但是最好的选择就是问不倒,无论你问什么我都能答出来,是最好。

如果要在这个时候引导其实是不好引导的。因为面试官本身以为自己难住你了,你强行避开这个问题就会被打上学艺不精的标签。你还必须得正面的、恰到好处的回答这个问题。

怎么回答这个问题呢,就要敢想,随机应变开始跟面试官讨论。比如面试官问你为什么不用int编码,这个时候你就要有个折中的回答,一般就要根据现实需要来选择存储的实现方式。随后千万不要贸然的回答问题,一定要把这个问题问的足够细以后再选择性的回答。在问问题的时候也要引导到你擅长的方向。当你说出根据不同的场景会有不同的实现方式的时候,就给了自己提问的主动权,就反问面试官你想比较他们两个之间的哪个方面,是解析时间上、计算上、存储上、取数据上等。然后不断的细化到一个用基础理论可以解决的问题,你就完成了完美的反杀。

一般计算机上的实现总是这样的,在时间和空间上取舍、在存数据速度和取数据速度上取舍、在计算方式上取舍。所以这样的问题总是能够曲线来回答的,千万不要慌。然而当时我就慌了,回答不是很完美。

有些面试官其实就是丢个问题给你,他自己也没有思考很多。所以当你开始跟他讨论的时候,把这个问题抛给他,如果他也没想清楚具体要问你什么,你就可以开始引导了。如果你熟悉算法的计算效率问题,那就往时间效率上引,你熟悉数据存储的东西就往存储上引。实在没有什么擅长的问题就跟他来这么几个来回,他也不会给你个差评的。往往有些时候深入下去,面试官本身也不擅长了,也就不深究了。

扩展出来问你

当你提到一个东西以后,面试官往往会扩展出来问你一些东西,问你既然懂这个你懂不懂其他的相关的啥啥啥。

这也是比较棘手的问题,事实上你也真的没有机会或时间去学习扩展那么多,毕竟你才学习了这几年,又要宽度又要深度是很难的,同样你也不能就直接避开这个问题。

对于这个问题,其实就没有上面的那么好扭转,你只能打打心理战。毕竟扩展的知识有哪些,你不知道也没办法把问题细化到可以理论解决的地步。我推荐的做法是变成一个弱者。去请教对方,这个东西还有哪些扩展,自己可能精力有限,或不是专业搞这个,就没有覆盖到那些。对方如果是个门清儿的专家,回答了你,你就赚了,你还有个好学的印象。如果对方也不懂就诈诈你,那他也就不会在这个问题上继续了。自己不会的东西,别人也不会也不会就给你差评的。

没见过的名词一定要问一下

然后在实现的细节上我们简单的交流了一些,他提到了前缀树。

尼玛,后来我才知道这个前缀树是字典树的别名,而且是20年前的名字。我说我不知道,我知道后缀树。后缀树的复杂度是字典树的10倍,但是这个面试官不知道。。。很遗憾这个问题又GG了。

所以遇到相关领域你没听说过的东西,就不太可能。面试官问出来的问题一定不会非常深入的东西,都应该是你至少听说过的东西。更何况我一个搞算法的怎么会没听过一种树结构呢?

这个时候应该就是叫法不同,问一下这个东西有没有什么别名,或是实现方式是什么。应该很快你就知道这个东西是什么了,即使不是很清楚,从一些信息中也能知道个原理大概,跟面试官简单吹吹还是可以的。

问我既然是学算法的,有哪些你会的不是教科书上的算法

这个问题,我草。我被问蒙了,我怎么知道哪个算法不是教科书上的算法啊!你说哪个不是书上的?
然后这个问题我就跟没回答一样,说了一点疑惑和解释他就继续下一个了。

其实,面试官本身想问的问题,重点不是教科书。而我抓错了重点。他事实上是想问你有什么算法是一般人不会的,而你会。再换句话说,是他不会而你会的。

这样理解这个问题以后,尼玛,这不正中我下怀了。这简直就是装逼时刻,此时不装逼更待何时,打比赛的那些神奇算法名字往外扔就是喽,我特么能给你说一下午。

然而,我当时没有反应过来。失策失策。。。

总结了一下,一向唬得住面试官的我为什么犯这么低级的错误呢? 我认为就是被前面的几个问题给问虚了。几个出乎意料下来,整个人的气场都下来了。下面就开始被各种蹂躏。

所以,一定要不能虚,虚个蛋蛋。

一个堂堂金牌爷,总有你会他不会的东西,虚个蛋!就算他问的问题你不会,这又怎么了。要自信,老子又不干你的工作,干嘛会你的那套。况且我今天不会我明天就会,不行嘛!
在此基础上,做到态度好,技术硬,来者不惧,能屈能伸。忽悠个面试官还是小菜一叠。

Talk is not cheap.