昨天最终下定决心离开了实验室,感觉一下子就轻松了许多。经过一段时间的思考,我发现我自己缺少专注,自己学python,还使用django开发网站,又要学ROR的开发, 还学习前端设计css,js...,又想要参加nodejs的开源项目,还要研究Nosql数据库,高并发访问,nginx服务器配置,linux文件系统,fuse文件系统,socket编程,levelDB, oAuth服务端设计....还有实验室的Vxworks开发。 很多时候真的感觉自己的脑袋有些转不过来,但又什么都不想放弃。再加上各种面试准备和课程考试,痛苦不已。各种面试的碰壁让我静下心来冷静地思考失败的原因, 最终我觉得自己缺少专注。 于是我给自己一个选择的机会,离开了原来的实验室,因为我自己对硬件级别上的开发并不是很感兴趣,只是觉得底层的实现原理应该要了解,才能够写出优秀而高效的上层应用来。 之前我一直认为只要给自己安排更多的学习任务就可以让自己不断提高,但是现在证明这样子会失败。往往最终什么也得不到,更多的是丧失了对自己的肯定感和成就感, 而在最近全球移动互联网大会上,雷军讲到的“专注”让我感到自己也许就是被各种各样的“学习任务”给拖住了。每天自己感觉压力很大,但是回头看看自己实实在在做出来的东西 却是少的可怜。而现在觉得自己只要学习好课程内的知识,然后好好复习就可以了,可以在校园悠闲的逛逛了。而在这样轻松的心情下也可以让自己静下心来专注的做一些事情。下面记录一下这些时间苦逼的面试经历吧。
因为腾讯是最早来我们学校招实习生的,所以处女笔和处女面都给了腾讯,那天上午腾讯笔试,下午微软笔试,微软笔试是全英文的选择题,自己英文本来就不好,笔试也就没有过。 腾讯面试比较戏剧性,我是第二天早上去面试,有当天去面试的同学,然后那天晚上回来给我们讲面试的题目和面试的经验,当时也就是熟悉熟悉,没有怎么在意,结果第二天过去之后, 竟然和我同学是同一个面试官,面试时候的问题都是差不多的。我当时就有些hold不住了。但是和我同学不同的是我对web开发学的不深,也不怎么用php。而面试管貌似就是phper, 一上来就问我用什么语言写的那个小网站,我说用python的Django框架。然后就问我觉得用php开发怎么样,我说当时学的第一门web开发语言就是php,当时初学的时候, 给我一种感觉,就是比较乱,可以任意嵌套在html代码里,而且当时还要配置apache服务器,就是感觉有些乱。然后他就说其实php才是最能够让人了解web开发的语言,然后跟我讲php语言的各种优势。 其实我自己对偏向底层一些的东西比较感兴趣。所以后来问我一些Xpath之类问题的时候,我就回答不知道。而我偶尔问他WSGI具体表示什么,他说他不知道。 中间给我出了两道算法题,一道是给你一个字符串和一个包含一堆字符窜的数组,让你判断该字符窜是否在这个数组里面。我第一反应就是用hash,将数组里面的字符窜映射成一个有连续 整数的区间,然后求待判断的字符窜的hash函数值,然后再问我还有没有其他方法,我说用分类查找,其实也就相当于hash分类。后来回来自己想想,基本方法应该就是hash,但是我说的 有些偏离。另外一道是说有一个2G的文件,里面放着一列QQ号,然后找出这里面重复次数最多的QQ号。限制是内存只有1G。我当时就想是不是有什么特别巧妙的方法,但是一直没有想出来, 后来他提示说“bitmap”,但是我还不知道什么是bitmap。但是本能的感觉就是用位来表示,这样字明显可以节省内存空间。但是还是没有想到什么特别有效的方法,最后经他提示,说将 QQ号映射成位表示,这样的子就都可以存在内存里面了。可是当时我根本就没有往这个方面想。后来想了一下他的这种优化方法也就刚刚好适合这道题目。最后面试结束之后,给我的一个 感觉就是我和他做的不是一个方向的。我关心的问题他不怎么研究,而他研究的东西我不知道。最终也就这样了。
其实这个面试真的是一个巧合,当时很匆忙,听到有小米实习的消息过去听了宣讲会,当时连简历都没有带,等到现场之后才知道宣讲会之后就要进行笔试。于是也就是抱着试试的心态去 了,但是很意外,当天晚上竟然就给我打电话了,然我去第二天去面试。于是第二天就是这么去了,小米的面试效率真的是很高,进去之后,房间里坐着两个人,然后让我坐在一个小的 柜子上,于是面试就开始了。开始的时候我就傻逼了,原理是两个人一起面试我。一个纯技术,一个偏生活。不过我当时也没有什么紧张,就全都豁出去了。那场面试真的是什么都说, 基本自己会的那点东西全都说了一边,而那个技术大牛貌似也是一个全才,从算法到数据库,从C语言到nodejs。最后简直不是面试官和被面试的关系,而是两个人交谈了。当然绝大多的 情况下都是我被问得倒了底。一个小时的“舌战”之后。让我在外面等一下,然后就告诉我暑假可以去那里了。我当时也没怎么记清楚他说的话,然后就回来了。说实话,在这样两个人面试 我一个的情况下,我竟然可以“活着”出来了,有点小庆幸。同时现在想想也挺幸运的,刚好这次面试没有让我现场写代码。而都是谈一些原理性质的本质的东西。也仅仅是这一次。
百度就是比较纠结了,中间有各种各样的原因,在这里也没有办法细说了。首先我投递的是系统研发的岗位,但是哈尔滨这个职位不过来找人,也不用笔试,筛选完简历之后就电话面试, 结果到了其它职位要笔试的时候,还没有收到通知,无奈之后,只能是去霸王笔,那个考场环境真是混乱,10点开始的考试,被各种干扰,发试卷,最后到一点才考完试。当时感觉时间 有点不够用,不过大自的都已经答上了。于是回来等消息,悲惨的是和我一起的同学收到了消息,而我悲剧了,当时就郁闷了,觉得自己怎么也不会在笔试上面就被刷了吧,而且和我同学 也讨论了题目,基本上都是差不多,就是其中一道题目想法完全不一样。回头想想唯一可以解释的就是自己当时写的字实在是太难看了。但是自己总是觉得不甘心,郁闷了一晚上,第二天 决定跟着同学一起去,不算是霸面,但是就想看看自己的试卷得了几分。然后在门口,听同学和面试官交流。其中讲到笔试的题目,刚好说道我同学想法不一样的那道题目,结果我当时的 答案是正确的。于是更加增加了我郁闷的心情。等同学面试结束之后,我硬着头皮和面试官说,说实话,面试官真的是很nice。非常友好,把我的简历拿着去找HR,还向我解释批卷的时候 难免会有差错。当时我真的很感激。也算是幸运吧,当时刚好另外一个房间面试的同学没有来,于是我就在一半的时候插进去了。进去之后就是两道提,写代码,一个数的集合,其它数都 出现两次,只有两个数出现一次,这两个数不相同。我知道要是一个数出现一次的话直接抑或,但是两个数就不知道有什么O(1)的空间复杂度。没有很好回答上来,第二道写单链表反转,在这里我真想打死自己算了,当时不知道什么地方抽筋,就是在保存节点的时候没有用next。又紧张的原因,写了半天了,最后他一说next。我恍然大唔。然后就说好了。我想估计悲剧了。 不过很意外后来接到了二面的电话。于是面试那天早上过去了,开始的时候也是要我讲自己写的那个小网站,然后就延伸到高并发,火车票订购网之类的,我就根据自己之前看过的博客, 文章讲述思想,还提到mapreduce。然后他要我详细讲讲mapreduce的工作原理。其实这个我在几个月之前接触到google的Bigtable的时候,就花了不少时间去研究,还去图书馆借书查看, 延伸到hadoop的一整套开源云计算框架。当时因为觉得这些没有条件在自己笔记本上面实现。所以就没有彻底明白里面的内容。而现在提及也是仅仅有一点点的印象而已,也不敢自己说, 于是就说具体不太清楚。后面还有类似的相似的问题。由于只是自己看的,而没有实际使用过,也不敢说。而更有一些,我研究和使用过的,面试官却没有。 另外自己在纸上面写代码的能力真的是太弱了,我自己都觉得自己写在纸上的代码惨不忍睹。在这中间问了我一道很简单的额问题,我当时就想是不是可以用什么特别巧妙的方法来解决, 于是就想了很久,但是也没有什么特别的方法,于是就有普通的方法写了一下,但是那个代码写的真的是很难看,然后怕他看不明白,于是就讲一边。虽然也行,但是效果就不一样了, 再后面就各种讲我自己研究过接触过的东西,其实我很想在我讲的时候,面试官能够提出一些我不太完整的认识的,但是悲剧的是,有些我讲的东西,他说没有研究过。尤其是最后让我 问几个问题的时候,我问了一个文件系统和oAuth服务器端认证的问题,可怜的是这两个问题他都不研究,但是也是一般性的和我讲一下,其中我还发现他对linux文件系统实现也不太了解。 反正最后就这样没有消息了。后来回过来想想,自己都不知道面试官是哪个部门的。不过从交谈中猜测应该是数据挖掘,数据处理方向的,因为他对map/reduce这些比较熟悉。最后还是有些 郁闷,因为总是觉得这样的面试是有太多的影响因素了,其中在面试的时候,我要应聘的职位都是未知的。交谈中就各种“不兼容”……
尽管有很多的郁闷,但是自己还是冷静下来思考原因,其中一个就是不够专注,给自己太多的方面,于是就就没有一个细的切入点。尤其在面试的时候,如果不是真正弄明白的,就很容易 显得夸夸其谈,还有一个比较弱智的地方就是在面试的时候,碰到很简单的问题的时候,总会想会不会有什么玄机,然后想半天可优化的办法, 更加的要命的是在那样的状态下面根本不会跳出什么灵感来。于是在写代码的环节上自己都觉得很垃圾。其实这个最终原因还是自己平时书写的代码量不够,没有一个好的写代码的习惯。 现在自己选择推出了实验室,感觉轻松了许多,接下来好好做一两个事情,首先是基于fuse的文件系统,先完成了,也算是课程的一个交代。然后再实现一oAuth的服务器端的认证,其它的 还有时间的话就把自己的小网站改进一下,优化一下客户端,在离开学校之前也算是留下一些东西吧。