刘毅同学

About Python, MySQL & Life

我在BIT的这几年

| Comments

Changelog

Version Time Description
0.3 2014-3-1 毕业设计的总结
0.21 2014-1-5 最后一学年的小结
0.2 2014-1-4 研究生第二年
0.1 2014-1-3 研究生第一年

我在BIT的这几年

2年半的研究生即将结束,聊以此文做一下这几年的回顾吧。

2011年我考入了BIT,之后机缘之下来到了现在的实验室,正式成为了现在的导师的第一任弟子。实话说如果当时选择导师的时候能了解到更多的信息,可能就不会是这个选择了。幸运的是误打误撞的还碰到了不错的导师,与其说是导师,现在感觉倒更像是朋友和师兄,他给予了充分的自由和平等,我很感激。不过自己的散漫之气也因此耽误了不少事情,实感愧疚。这个之后会有提到。

第一学期

研究生课程

研究生的第一年主要是上课了,没有在实验室待多少时间。第一个学期和大多数人一样尽力把培养方案中要求的课程上完,于是乎第一个学期几乎是宿舍、研究生楼、食堂、实验室这四个地方奔波,课满的时候一天5节课,从早上8点一直到晚上9点半。比较坑爹的是下午和晚上的课程之间的休息仅有40分钟——下午6点下课,晚上的课6点40就开始,40分钟几乎连晚饭都搞不定。(一是下课高峰人很多,二来距离不近)
研究生的课程难度上其实和本科生差别不大,不过还是让我感受到了一些压力:每一门专业课程都有至少一个,有时几个可以称得上是project的作业。虽然听说这种程度的project其实只能算是接近于本科生课程的要求,有的甚至还要宽松。但这恰恰是燕山大学计算机专业的不足之处,本科时我一直期待着可以有这种一试身手的有挑战的任务。

环境

住宿和饮食得益于北京重点高校的给力扶持令人满意,所住的宿舍环境干净、宽松,食堂因为学校的补助,饭菜相比外面实惠很多。(不过现在也因为CPI有所涨价了,从2011年¥8每顿饭到现在¥12左右)
实验室的环境同其他同学相比也好一些,人均面积可以说是在整个学院来说都是很大的。刚到的时候实验室的机器不怎么给力,是2007年的老机器了,忍受了一年之后终于在2012年的时候换成了目前非常给力的工作站。
研究生阶段不同于大学本科,每个人的作息和时间安排因实验室而异,有的实验室要求很严格,规定了下课后必须到实验室;有的则相对灵活宽松,没有具体的要求,只要及时把任务搞定就可以。我很幸运的是后者,所以没有课的时候比较自由。不过后面会提到这样带来的一些副作用。

实验室工作

每个实验室因Boss不同,对研究生以及整个实验室的工作方向都有相当的差别。有的是企业项目导向的,以企业合作的方式让学生去完成一些企业项目(说白了就是当廉价劳动力…);有的是以学术研究为导向的,具体来说就是拿到了某个基金,之后来做一些研究工作,说白了就是发论文;更多的则是兼而有之,既有一些与企业合作的项目,也有一些学术型的研究。我所在的实验室是第二种,单纯以学术研究为导向的,因而研究生的第一个学期我在实验室的主要任务就是读论文,内容集中在Simulation,Performance Evaluation这一块。由于自己之前没有什么基础,因而读的时候收获甚微。
除此之外,我还接触了Gem5模拟器。惭愧的是在实验室待了2年有余,Gem5模拟器钻研的不是很精,只是对整个架构,完整的工作原理有了一个初步的了解,实现了一些功能的扩展。这个稍后会细说。

整个一个学期,最令我印象深刻的事是关于人工智能课程,其实这个课程当初没有选,几个舍友选了之后向我推荐,当时想着不如多学些让自己有个更宽的知识面,没成想最后的结束比较狼狈,课程项目做的马马虎虎,考试也只是擦边60分水过,自己现在对AI依旧比较陌生,不得不说是一个遗憾。现在想来这是自己的一个弱点——对自己没感觉的东西,总是不能做的令人满意,如果现在设想十年后自己没有成功的原因的话,这应该算上一条。

第二学期

2012年4月份这一个学期伊始,导师出国做为期一年的访问学者。

几个月的实习

临走前将我安排到了中国软件评测中心CSTC做实习(在2011年年末的时候就已经有了一些接触,当时不过是在学校来做,这个时候就正式去公司去做实习了)。实习工作比较水,一如给的不足一百的实习薪水。做的内容是Android平台的安全软件研究。具体来说就是“研究”LBE隐私卫士的实现原理。这也是我第一次接触LBE。
之后大概两个月都在做这一块的逆向研究,越发的感觉到LBE“主动防御”技术真的好牛逼。恰巧的是同年四五月份,360安全卫士、腾讯管家也才陆陆续续的推出了类似功能。我在CSTC的情况很微妙,只是我一个人独立在做这一块,最终是大概到了4月末还是没有作出成果,原因是多方面的,对Android整个系统的了解我只是个大菜鸟,只是自学了一点皮毛,同时我也不是Hacker级别的玩家。虽然对我来说我也研究出了一些门道,但很遗憾的没有做出成品。
这一段时间我实现了利用ptrace实现动态注入共享库,还有运行时的function redirection,对Android Binder协议也接触了一点。我已经尽力了,没什么遗憾。
之后为了交差,CSTC的指导人又让我做一个简单的短信和来电骚扰拦截应用,这个相对于前者难度很小,于是大概一个月的时间就做出来一个基于黑白名单的短信和电话过滤应用。实现使用的核心原理没什么难度,网上都有,就是Java反射调用一个没有公开的接口从而实现来电拦截。这个应用代码主要是sqlite的增删改查以及界面的实现。

实验室工作

导师和我在这个学期还是经常有邮件的联系,实验室的工作也一直还有,主要工作就是完成一个很tricky的trace收集算法,在gem5上实现,然后发会议paper,因为CSTC的实习,实验室的这块工作就没怎么顾得上,到了七八月份眼看着到了论文deadline,这时候CSTC那一块要求做的来电和短信的过滤应用也告一段落,因此就决定把实习辞掉,专心来做paper,这个时候是7月末。
于是从7月末开始,也就是研究生第一年的暑假,整个一个假期都在实验室苦逼地做实验,一直到9月初deadline截至时,尤其印象深刻的是deadline是北京时间的上午,距离几个小时前依旧在跑实验数据,最终算是勉强把数据跑完加上了,论文几乎没有怎么校对过。现在回顾看来,这其中至少一半的原因在于我的拖延,论文实际上在大约五六月份时就已经有了初稿。自己在一段时间不能兼顾多个任务使得最终放弃了实习,专注于实验室的工作。坦诚地来说,这也是自己需要做出改变的一点。
经过了2个月的奋战,论文首先经历了HPCA顶级会议的考验。没有做出实际成品之前,一直觉得这个东西有些难度,需要花上很大的工作量才能搞定,可完成之后反过来回顾时会觉得实际做出来的东西真正弄透以后会觉得实际的东西没有那么高大上,只不过是….(此处省去1万字)。最终在HPCA的peer review阶段,我们根据reviewer的反馈还是将paper撤了下来,得到了许多我们之前没有考虑过的东西,也发现了一些reviewer的关注点,总体上讲我们的主要目的是达到了——让顶级会议的大牛们看一下你的成果,发表下意见。如果大家都很感兴趣,那么自然很有希望被会议录用,反之也可以得到一些中肯的反驳意见。
最终我们这篇paper发到了一个C类会议上,结果虽然不是最好的,但也不至于很失望。

第三学期

这个学期是“无政府状态”的巅峰时期,几乎完全荒废了学业。这个学期我完全的变成了无业游民般的自由——2012年9月初,论文的事情进入尾声,此时这个学期要进行研究生的毕业开题,因此就没有找实习。这样子整个一个学期只有开题这一个任务。这里还有个背景:我所在的实验室是以学术为唯一目的的实验室,大boss,我的导师的导师,近几年几乎不招收硕士了,“两年半的时间,其中还有一年来上课,半年毕业,做研究的时间太少了”,因而导致曾经人满为患的一个屋子现在几乎是空荡荡的,这个学期到了人最少的一个学期——常驻的学生只有我一个人…
虽然看起来屋子很宽敞,自己一个人极为自由,可那种只能和空气说话的气氛,人待久了会疯掉的。也就是在这个时候我发现自己一天几乎说不了几句话。(研一开始的时候就没有选择什么课余活动,宿舍的哥们都和我一样,每天宅在各自的实验室,只有晚上的时候会在宿舍)当时的我就很恐慌,怕自己因此变得自闭,与人隔绝了一般。
于是我决定做出改变,不能为了科学让自己变得脱离社会,要找机会融入集体多和人交流,找人一起玩,而因为硕士生毕业开题的事情自己觉得又不应该离开学校,恰逢第一学年的新学期开始,研究生会开始招新。于是我作为研二的学长参加了研究生会。虽然这个学期学业上几乎完全荒废了,可此时回顾来看,我依旧不后悔当初的决定,如果给我重新选择的机会,我还是会这样选择。
此后的研究生会的活动中,自从研究生开始就没怎么参加集体活动的我玩的很嗨很投入,自然而然地结交了很多好朋友,认识了许多有意思的人,同时也有机会认识了相当多的其他学院的朋友,我很满足。这里给后来人提一个醒,无论怎样都要找到一个集体,融入进去,无论是学术的还是娱乐的,人不能脱离了群体而存在。我之所以选择加入研究生会,是因为学术上并没有给我提供充分的群体归属感,我只能从其他地方寻找。
这里不得不提到知乎上的一个精彩回答:二十多岁该做些什么,将来才不会后悔?
作者是yolfilm, 链接地址:http://zhi.hu/CddD

「一個人」的狀態,總是最糟的。

我覺得說一些我的個人經驗,於你無用,因為環境機遇不同。(多一半,還有自我吹噓的潛意識存在)。但,我可以給你一個,我母親給過我的,非常好的建議。

我母親曾經告誡過我,一個人的狀態,總是最糟的。

你一人吃穿用,一人度日過日,非常容易解決,也非常容易跌入谷底,高興時無人分享,但,失志時,那種惡劣的狀態,卻只能一再重復浸淫。所以,要讓自己振作,第一件事,絕不要長期保持「一個人」的狀態。

再不濟,你養條狗,這狗,都要逼你準時餵牠,準時拉牠出去運動,牠病了,你得給牠奔走求醫。你悲傷時,牠會給你溫暖,分攤你的愁苦。你成功時,牠會哈哈斥斥地笑張大嘴,靜坐在一邊共享你的快樂。

牠是你的責任,也是你的負擔。按我母親說的,就是養條狗,你也不會是「一個人」。

你可以不成家,你可以是失怙孤兒,你可以是找不見伴侶的同性戀,你可以悲慘到無以復加的地步,但,就是到那樣境地,你也要強迫自己,不要是一個人。

孤獨殺手里昂,也要養盆花。

孤獨殺手亞蘭德倫,也要養隻金絲雀。

我個人的經驗是,只要你不是一個人,你即使不成功,但,也絕不會失敗。

我一直記住老娘的教誨,一直在身上背著負擔。搞合唱團時,背著團員,搞劇團時,背著團員,開公司時,背著員工,寫劇本時,背著徒弟,拍戲時,背著債務,背著投資人。成家時,背著老婆孩子。

因為總不是一個人,所以你荒唐不起來,也沒辦法混噩度日。

如此,你謀生求職,你艱辛度日,你的理想事業,就是失敗了,但因為有負擔,不是一個人,只要保全了身上背著這些負擔,另一個層面來說,你也總是成功的。

所以,只要你不是一個人,不是只為自己活,某種層面來說,你永遠不會失敗。

你就是被車撞死了,死在半夜的馬路上,因為你不是一個人,就會至少有一個人在惦記著你。

你的生命,就不會沒有意義。

这个学期玩的太用力,导致整个开题报告做的马马虎虎,给之后的毕业论文埋下了很大的隐患,这是后话。这个学期可以用几个关键词来总结:研究生会、玩、开题报告。

第四学期

这学期出国访学一年的导师回来了!这也是我的研究生二年级的最后一个学期。
这个学期周围很多人开始了毕业前的实习,看到许多人开始实习,我也有些心急了,毕竟我没打算继续读博,因而找到一份理想的工作是我的主要目标。也许每一个初当导师的人都心慈手软吧,或者我的导师本来就是一个很好说话的人,总之这个学期我成功的出去实习了。
实习的公司很有意思,就是LBE!看过前面的应该都知道我在第二学期实习时花了很久来逆向研究LBE的隐私卫士,对它的技术上有很好的印象。现在来看,LBE团队依旧是具有很强的技术实力。能在LBE实习有很大的偶然——正是在自己在论坛扒实习帖子的时候偶然发现了他们在byr论坛发布的招实习生的帖子,之后才知道这个帖子已经贴了很久,我加入那时候其实他们已经不打算继续招人了的。
去LBE面试,就是面总本人来面的我(后来才知道的==),结果顺利地通过了,当时非常欣喜,竟然只有一面,因为之前一直以为能做出这么高技术含量的人,一定是一个相当规模的牛逼团队,要进入得具有相当的实力才行。
就这样,我开始了接近半年时间的实习生活。
加入LBE后才发现,这是一个不到20人创业型团队,实际开发的不到十人。而且做出隐私卫士第一版主要作者竟然是面总一个人!!膜拜…加入到LBE,原本就打算以后就从事Android平台的开发了,做个Android Developer。可命运再次向我开了个玩笑。
进去后,面总想要我来做一键root的三星专版,因为三星手机市占率很高同时三星刷机和升级手机使用的是自己开发的特殊协议Odin,同时该协议已经被国外某位大神逆向出来,制成了Heimdall工具,当时国内还没有哪一家公司使用这种方式root手机,由于当时LBE只有我和面总对Linux这一块熟悉,而他还要继续负责LBE核心应用的开发,因而自然由我来承担这块工作。这也就是我在LBE——一个以Android平台安全软件出名的公司几个月的工作成果——LBE一键root三星专版。而这只和Android平台沾边,一点都不几乎不涉及Java的开发,而主要工作是Linux系统开发、QT完成的Windows桌面应用的维护、还有一系列脚本以及一个后台抓取数据的python程序,基本上可以将这些工作归为后台开发,当然整个过程只是覆盖面很广:从Linux平台的脚本python程序Windows平台的驱动QT应用再到Android手机上Framework层下的Android su以及Android平台的Superuser,单独来看哪一个部分涉及的技术要求都不高,但是得懂。
在LBE实习的这几个月,认识了许多小伙伴,大家也给予了我很多肯定,我很感激大家。唯一让我郁闷的地方是公司的地点离学校太远了,学校在西三环,而公司在东三环,后来又搬到了东四环,每天要坐地铁加步行总共1个多小时才能到,每天有2个半小时时间是在地铁上的,很辛苦。

最后一学期

9月份研究生最后一个学年(两年半学制)。一到九月份就结束了自己的实习,在暑期的时候就得知和导师合作的那篇论文被会议录用了,会议的地点就在贵阳,因此可以两个人一起去那里参加,很开心。
9月初2014年秋季校园招聘就逐渐拉开了大幕,第一波互联网公司的校招接踵而至,首先来的是阿里巴巴——我最向往的互联网公司。自己还曾下豪言,如果拿到阿里的offer真的就别无他求了。与此同时,至于毕业设计嘛,呵呵…不巧的是阿里校招的笔试时间和那个国际会议的的时间几乎挨着,可为了阿里的校招,果断放弃了去贵州贵阳“免费旅游”的机会。
就这样9月下旬参加了阿里校招,一周后得到面试通知,面试那天从上午10点一直聊到了中午12点多,感觉还蛮不错的。这时正巧临近十一长假,最终有没有通过面试只有长假之后才会通知。就这样几乎杳无音信的一直到10月18日,终于得到了阿里巴巴发来的短信,拿到了阿里的offer!虽然这几周过得异常虐心和纠结,现在想来也算值了。在等待的这一段时间由于不敢确定阿里是否能给offer,所以还是其他的笔试面试没有掉以轻心,百度、小米和网易的都参加了笔试和面试,因为自己选择的都是Linux内核相关以及底层的东西,因为自己没有实际经验,小米的算是面试之后默拒了,百度的一面就被不明原因莫名其妙的刷掉了,至今还很纳闷,网易等其他的公司都是在收到阿里offer之后才给的面试通知,因此就都没有去。
之后的事情目前还没有结束,待本学期结束了再做总结吧。

可以说确定offer后的这一段时间里是研究生阶段里最堕落的一段时间了:上午10点左右起床,到实验室也快中午,上上微博看看新闻就去吃午饭,然后下午做一些事情,晚上便又开始玩了起来。毕业设计的进度极为缓慢,过了年末才慢慢的抓紧时间了。这应该算是一个典型拖延症患者的自白了吧。
幸好这一段时间一直使用印象笔记做每天的时间流水账,回顾可以看到每天差不多专心工作的时间大概在3小时上下,有时还不到这个数。完全可以说这个学期专注工作的能力已经残了…
就这样,到了1月中下旬为了逃避论文的压力,我早早的启程回家了。事实证明,这是个极错误的决定。1月19日到家后,我才发现家里的环境远远不如学校实验室,在家里甚至连个像样的桌子也没有。而这时候正好是春节前夕,因此更加的不想做毕设了,可心里又很清楚年后就要毕业答辩了,这样纠结的情绪一直弥漫于整个在家的假期之中,以至于春节的那几天躺在床上回想时“想到实验还没做出来,不到几周就要答辩了,这是要悲剧的节奏啊!!!”,于是我失眠了。年三十的时候和导师做了电话沟通,我像个犯了错误的孩子一样忏悔了自己的无作为,于是我和导师研究了毕业论文的解决方案。我们选择了改变策略,做不到预想的实验就不做了,把已有的实验结果加上去也算完整。沟通之后,忐忑的心总算平静了一些。
本来已经订了农历十六返程车票,因为爷爷家出了一些事,临时改变了计划,当时一想反正也要退票,不如直接提前回校了。后来证明这是最后时刻做出的正确选择。
就这样我农历十二就到校了。可是对我来说,这依旧没有到最后时刻,每天还是会开小差,到了2月12日,论文的初稿还没有弄出来。这时候开始了爆发突击模式,2月13日到2月17日这几天每天都搞到很晚,还通宵了两次,总算在2月17日交了初稿,并且于2月18日通宵完成修订稿,2月20日发出外审。在最后时刻及时完成了毕业论文。2月27日顺利过了毕业答辩。
毕业论文的预想和最终稿内容有许多不同,但是依然还是有三万多字的内容,很充实。也就是说没有完成之前预想的实验也达到了毕业的水平,而且内容充实。我的论文题目开的不怎么好,题目太大了,涵盖了许多方面的内容。起初论文的设想是把这几个方面完整的做出来,由于完成实验需要高出自己能力和精力的付出以及自己对毕业论文的期望(及格就行)远低于导师对论文水准的期望,所以我一直在拖延着。直到最后时刻,我只把已经做出的东西写进去才发现工作量已经足够毕业了——如果真的按照起初论文的设想完成的话,我不敢说那是一个博士生的工作量,但两三个硕士生毕业是没有问题的。
不管怎样,事情已经过去,说什么都要算作是马后炮了。
总结来说,这个学期让我认识到一个人习性的改变是多么的困难——现在的毕业答辩可以说和本科时准备毕业论文时的狼狈很相似。当时信誓旦旦的要改变自己,要改掉逃避压力的习性,几年过去了,起色不大。

Comments