《PhD Journey》Chapter 2 – Spring 2018
第一个学期过了一个Theory和IIS,第二个学期打算过Software和 Systems。于是我选了数据库和计算机网络。这样可以把所有四个类别的qualifier课程都过掉。
教数据库的是Himanshu Gupta,他讲课给人一种充才华横溢的感觉,比较algorithmic,喜欢搞一点theory和proof。Himanshu在PhD期间是研究数据库的,不过当教授之后改到无线网络了。
这门课用的教材是 Database Systems The Complete Book,斯坦福数据库实验室的大牛写的书,这本教材的一个作者Jeffrey Ullman是Himanshu的导师。很多作业的题目,来自这本教材的课后习题,然后这本教材的课后习题网上找不到答案。讲课的重点内容是relational algebra,datalog,存储,索引,query execution,concurrency control。这些讲课重点也是作业中的主要题目。
我觉得Himanshu的讲课风格,非常符合科班生的胃口,特别是喜欢一点理论的科班生的胃口。然后他喜欢上课提问题,学生举手回答问题,回答问题正确有加分。我一开始不敢举手,后来发现加分的名单越来越长,我也开始逼自己举手,有几次我认为我的答案是正确的,但是举手他没有点我,最后我没有进入加分名单中,这可是直接在总成绩上加一分或两分。他喜欢用Google doc,经常上课讲着讲着,就打开Google doc来现场写题目的答案或证明等。我去了office hour两次,问作业的题目,Himanshu解答题目很耐心。
总共有6次作业,其中最后一次作业是选做,所以相当于是5次作业。两个人组队提交一份作业,第一个学期的经历让我看到了队友的重要性,于是我主动找了TWHT组队,他看上去比较厉害。找TWHT当队友是一个非常重要的决定,后来和他一起搬到校外一起租房子,成为了房友。我做作业在overleaf.com上写。每次我和TWHT都独立把作业完整做完,然后一一对答案,整理出一份完整的作业。
五次作业分别为93/100, 71/100, 98/100, 88/90, 55/55。除了第二次71分低于均分之外,其余四次都高于均分。后两次作业是批改部分题目,所以总分不是100。期中考试是49/80分,期末考试是123/150。期中考试没有考好,均分是52.8,中位数是54。期末考试考得不错,均分是103.7,中位数是102.5分,我比均分高了一大截。最后Himanshu弄了一个给成绩的标准: Finals/5 + Midterm/4 + (h1 + h2 + h3 + h4 x 160/90 + h5 x 100/55) x 50/560 + Extra-credit。按照这个公式,我的得分是83.1分。然后Himanshu给出了ABC的标准。A的门槛在85分左右,我低了一点点,遗憾拿了A-。我主要是期中和第二次作业低了一点,然后没有课堂举手的加分项目。
Grades, Approximate CUT-OFF, # of students:
A, mid-80s, 27
A-, around 80, 37
B+, around 75, 34
B, around 70, 37
B-, mid-60s, 9
C+, 60+, 5
计算机网络听说是Systems类别里面稍微轻松一点的,于是我选了。授课老师是Aruna,她学术上很积极,活跃于各大会议。计算机网络也是很重要的一门课,于是就选了。Aruna是一个女教授,搞移动网络系统的,玩玩手机,最近也开始做一些measurement,然后关注video在网络里面的传输性能,她和老公也合作一下,搞搞NLP在手机上的应用。她讲课不深入,不过范围比较广。
这门课的工作量也是很大的,不过还好是用Python来做作业(比其他的System课用C语言的好多了)。有三次作业(3 X 10分),五次论文总结(5分),一个大project(20分),还有两次考试(45分)。
第一次作业是关于DNS的,域名解析。最终是自己写了一个域名解析程序 DNS resolver,模仿Linux的自带工具dig,写一个叫做mydig的程序,然后做性能分析。然后还有写一个安全版本的mydig,这里是依据 DNSSEC来写的。这个DNSSEC不是很容易弄的,很费不少功夫。
第二次作业是关于HTTP,TCP和Wireshark。就是编程分析pcap文件,分析各种flow,sequence,window,throughput,RTT,loss rate等等细节。还有分析congestion control,duplicate ackownledge。分析比较HTTP/1.0,HTTP/1.1,HTTP/2.0,看HTTP协议如何进化的。最后还分析了一下TCP的fairness。这一次作业整体难度不高,但是东西很多,比较花时间。
第三次作业是网络层的路径寻找,这个作业在三次中最难。本次作业需要在Mininet中设计和实现网络。初次弄Mininet,一头雾水,虚拟机,各种配置,在黑暗中摸索。然后是创建一个有6个节点的静态网络。测试A节点能否ping B节点,然后假设网络某个链接如果断了,Routing information protocol 多久再次收敛等等。最后是在Mininet里面写一个自己的Bellman-Ford algorithm,自己写了一个分布式的寻找最短路径协议的程序,每个节点都在运行这个程序,用socket监听端口,听到了邻居节点传来的distance vector的更新信息,就在本地运行Bellman-Ford算法,然后把自己更新的distance vector传给邻居,记录日志。这个真是不好弄,最后我求助大佬HLX,他帮我找bug,挺感谢的,最终我在最后一刻完成作业,比较惊险。
五次论文总结。就是给五篇影响力比较高的顶会论文,每篇写一页总结。最后选择得分最高的三篇总结,取个平均。由于我前三次总结都是满分,所以我只写了三篇总结。这三篇总结分别是:一篇IMC 2011的分析网页的复杂性如何影响page load time;一篇NSDI 2014 的分析SPDY协议;一篇SIGCOMM 2010年发明DCTCP算法。
大project。三人组队,我和HLX和LHRX。一开始是选题目,我们每个人都想出一个题目。我提出做一个fan qiang工具,HLX提出探索一下区块链,LHRX好提出做一个入侵检测系统。Aruna听了听我们三个人的idea,最喜欢我的,于是我们队的题目就确定为做一个fan qiang工具了。我们的思路是仿照ss的原理,基于socks5协议写一个代理工具。在这个project中,我深入了解了fan qiang的知识。在推进这个项目的过程中,发现HLX真的是大牛呀,核心代码他全包了。原来,他以前在国内就自己搭建ss服务器,fan qiang经验丰富。相比之下,我以前是花钱买服务,没有自己搭建。然后HLX写代码也是很厉害的,这次我是抱上了大腿了。HLX把核心代码都写了,于是我就负责做测试了。。。首先我写了脚本做自动化测试,然后找了国内的高中和大学同学,帮忙做测试,看看能否访问谷歌和油管,成功了。然后我和HLX一起写了报告,LHRX写了几段话吧,然后我负责最后做presentation。最后给Aruna展示presentation,让Aruna印象深刻。PS,现在最新的fan qiang技术是基于x2y(x=V, y=Ray)了。
两门考试,第一次我考的可以,第二次一般般。第一次考试是在spring break之后,因为spring break之前的数据库的考试,我意识到考得不好,所以spring break 期间花了很多时间准备计算机网络的考试,最终付出有所回报。第二次考试就有一般般了。
最后这门课我获得了A!三次作业,分别是95,91,92(满分100)。这三次的均分分别为79.2,79.3,79.4。中位数分别为87.5,85,86。论文报告我的了5分满分,然后大project我门队得了106分,满分是100。我们的fan qiang的project被评为4个最佳project之一。两次考试我分别的了54.5和47.5(满分是75分),均分分别为45.2和45.5,中位数分别为45.5和46.1。最终我的加权总分是84.6分。以下是Aruna给出的评分标准,我应该是正好卡在了A的边缘上。我这次比较幸运~
Here is the rubric
85 A
76.5 A-
66 B+
60 B
50 B-
50 C+
这门课是Anita讲课,水课,但是可以算作qualifier。于是我轻松的拿了一个qualifier的A。Anita是一个仁慈的老太太,是个好人。不过她真是比较“古董”了,讲的东西有点跟不上潮流。作业,和project都没啥难度,还好几个人组队,每个人分到的任务也不多。最后考试我就突击了两天,我得了120(95+25)分。满分是100加上25的附加分。这些题目很多就是PPT上的题目改编一下。我应该是最高分。因为我认识TA,我翻了翻所有人的考卷,我没有看到满分100+25的。我记得考试中的题目有一道关联分析,附加题有一道遗传算法。其实这整门课,基本上我本科就学过了。这门课轻松拿A。
这个学期当本科的Analysis of Algorithms的TA,总共有三个TA,授课老师是Rob Patro。他是做计算机生物学的,2019年跳槽到马里兰大学,回到了他读博的地方。有一次作业是三个TA一起出题。我出了一道关于kruskal算法(最小生成树)的题目,还出了一道关于DAG图里面找最长路径的题目。有一次临近期末的时候,Rob不在学校,要求TA找一间教室,给学生讲作业的题目,复习一下期末,然后我们几个TA搞砸了,具体细节不记得了,反正做的不好。
整个寒假都在玩,没有和Anshul 联系,开学之后,开始联系Anshul希望跟进一下,干点活。Anshul给了我一篇paper,好像是用马尔可夫链去做云计算的资源分配的预测之类的,要我读一读,然后写总结。然后和Anshul没有实质性进展。期间第一学期教我算法的Sekar给上了他的算法课的人群发email,说对他研究感兴趣的,欢迎联系。我随后去他的办公室找他聊了聊,我发现他做的东西非常底层,搞system安全,然后比较有钱。
二月初的时候Anshul发email说,要好好考虑一下theory vs system,看看哪个更适合自己,然后建议和更多的教授联系一下。在3月11日春假,我联系了Aruna,Himanshu,Michalis三个教授。其中Aruna和Michalis说不收新学生,Himanshu说等一个月。4月9日晚上,Anshul发email说他收了一个学生,无法再收另外一个学生了。然后4月11日中午,我发email给Himanshu,问了问他的情况,他回复说下周来办公室聊聊。4月17日去找Himanshu聊了,聊了聊基本情况。Himanshu说比较看重smart和responsibility,聪敏而且负责。最后他收了我。
Himanshu读博期间是研究数据库的,毕业后去工业界工作了两年,然后回到学术界。来到了石溪大学。在二十一世纪初,无线网络,sensor network这些领域是很火的。Himanshu之前搞关系型数据库,他可能感觉这领域的发展前途有限,于是转到了无线网络和sensor network。这几年,wireless和sensor有些不温不火。不过最近借着IoT和edge这两个概念,再蹭一蹭深度学习的热度,又开始有些意思了。在2018年的时候,我也没有考虑那么多,感觉有导师收我就行了。而我也觉得搞搞计算机网络,搞搞无线网络,既有system也有theory,也行。2018年的时候,最火的当然是计算机视觉,不过做最火的研究方向也是有好有坏。
Last update: 2020/6/11
喜 欢 或 者 觉 得 有 帮 助 , 记 得 点 赞 , 收 藏 , 甚 至 打 赏 哟 ~ 喜欢或者觉得有帮助,记得点赞,收藏,甚至打赏哟~ 喜欢或者觉得有帮助,记得点赞,收藏,甚至打赏哟~