-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.json
1 lines (1 loc) · 418 KB
/
index.json
1
[{"authors":["admin"],"categories":null,"content":"I am now a software engineer @\rDolphinDB Inc.\nI graduated as a master student of artificial intelligence from the Zhejiang University CAD\u0026amp;CG National Key Lab ZJULearning Group. I was very fortunate to be advised by Prof. Deng Cai. My research includes machine learning, data mining, deep learning, computer vision, operating system, system programming, and database. I have worked as a system developer in Optiver Shanghai and have interned as a machine learning engineer in Hangzhou FABU and Google.\n","date":-62135596800,"expirydate":-62135596800,"kind":"taxonomy","lang":"en","lastmod":-62135596800,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"https://conanhujinming.github.io/authors/admin/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/authors/admin/","section":"authors","summary":"I am now a software engineer @\rDolphinDB Inc.\nI graduated as a master student of artificial intelligence from the Zhejiang University CAD\u0026amp;CG National Key Lab ZJULearning Group. I was very fortunate to be advised by Prof. Deng Cai. My research includes machine learning, data mining, deep learning, computer vision, operating system, system programming, and database. I have worked as a system developer in Optiver Shanghai and have interned as a machine learning engineer in Hangzhou FABU and Google.","tags":null,"title":"Jinming Hu","type":"authors"},{"authors":[],"categories":[],"content":"首先关于15-721的课程介绍请参见我的上一篇文章。昨天晚上刷完了CMU 15-721 2023 Spring课程的全部视频,也看了一部分的推荐论文,这里做一下课程总结。\n首先评价一下课程质量,个人认为这是网上现有的关于OLAP技术教学的最佳资源,没有之一。Andy自身水平极高,对数据库又非常的热爱,花了巨量的时间在课程设计和准备上,加上CMU的研究生同学水平也相当厉害(特别的指@迟先生),这一切合在一起,成就了这样一门顶尖的课程。\n其次是关于这门课学习中的一些心得。首先推荐论文和教学课程是必读必看的,价值超过黄金。其次是学了之后,我个人建议要自己去写一下代码体验一下这些技术。比方说我本人是DolphinDB的研发负责人之一,我在学到一些技术之后,会看这项技术是否已经应用在DolphinDB里了。如果还没应用,那么我会自己实现一下,并判断在DolphinDB里这项技术有没有效果,也碰到过一些完全没有效果的情况。举个例子,Andy有一课说branchless coding,我试了一下,其实三目运算符?:和if else生成的汇编是完全一样的,所以这项技术在现代编译器下已经没什么用了。当然大部分学到的技术加到DolphinDB都是有效果的。这里想重点强调的是,纸上得来终觉浅,绝知此事要躬行。\n第三是关于这门课刷完之后,个人推荐下一步可以做的事情。我最推荐的就是结合duckdb的源码来学习课上学到的知识在实践中是如何应用的,甚至可以参与duckdb这一顶级开源项目。\n最后非常感谢Andy以及TA们的努力,成就了一门顶尖的课程,还要特别感谢Andy将这门课程开放出来,真的是学习到了很多。\n","date":1683676982,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1683676982,"objectID":"c453359539abcabb78c627a83535d97e","permalink":"https://conanhujinming.github.io/post/15721summary/","publishdate":"2023-05-10T08:03:02+08:00","relpermalink":"/post/15721summary/","section":"post","summary":"首先关于15-721的课程介绍请参见我的上一篇文章。昨天晚上刷完了CMU 15-721 2023 Spring课程的全部视频,也看了一部分的推荐论文,这里做一下课","tags":[],"title":"CMU15-721课程总结","type":"post"},{"authors":[],"categories":[],"content":"2022真是魔幻的一年,开年的时候怎么也没想到今年会在阳中结束这一年。正好在家养病没事做,遂写一篇年度总结,总结一下这一年的林林总总。\n总得来说,比起去年,这一年在工作上投入的精力更多了一些。事情的起因要从去年7月说起。当时我刚完成了项目存储引擎TSDB的数据读取与计算的工作以及分布式join的工作。公司的CEO Davis找我说希望我能担任公司的研发副总监一职。当时我就慌了,我说我也不是谦虚,我怎么有能力承担这样一个角色?你们还是另请高明吧。但是呢,Davis讲“大家已经决定了”。后来我就念了一句成语,叫“当仁不让”。后来就觉得,在其位,谋其政,既然选择了接受这个职位,就应该认真做这个职位该做的事情,就投入了更多的精力到工作上。\n这样的投入带来了一个最直接的“负面影响”就是今年刷的课明显比往年少了。去年我刷了三门课程,今年就只刷了一门课程:\rCMU的DLSys。这里不妨先介绍一下这门课程,以及给出我对它的评价。DLSys是CMU的Kolter和Tianqi两位老师共同执教的一门课程,其内容主要是深度学习系统的实现。学习了这门课程并完成它的作业,就会对pytorch这样的框架原理上是怎么实现的有一个基本的认识。两位老师从最基本的神经网络讲起,介绍了反向传播、自动求导、优化、normalization、dropout、CNN、GPU、训练大网络、LSTM、Transformer、部署和编译等内容。最重要的是,两位老师还介绍了这些内容的具体实现,并要求学生在作业中实现其中的大部分内容。这门课程还有一些很赞的implementation课程,就是两位老师step by step地带学生写代码实现一些功能,如卷积、LSTM、transformer等。**可以说,这门课程是目前学习深度学习系统的最佳资源。**与其他课程不同的是,这门课程不仅公开了所有的资源,甚至还对通过网络学习的学生做出了优化:Kolter和Tianqi专门为通过网络学习的学生录了所有的视频课程,并且还提供了一个供大家使用的论坛。当然,这门课也是有一些缺点的。比如其作业(尤其是最后几次的)的坑点不少,以及Lecture 22, Lecture 25和Lecture 26到现在也没有放出对应的视频。但瑕不掩瑜,我个人认为这门课还是挺值得感兴趣的同学学习一下的。说回来我现在一个做数据库的人为啥要学这门课程,主要原因是以前我是搞机器学习的,自己也改过TensorFlow、ncnn等框架的代码,所以对这方面有一些兴趣;而且我认为机器学习尤其是深度学习在未来几年内应该还是会保持很高的热度,我也对其与数据库的结合有一些兴趣。总之,欢迎大家点击了解。\n当然,对工作上的投入也是带来了一些成效。最直接的数据是,我今年完成了1000多个jira,是公司完成jira数最多的人,占公司今年所有完成的jira的20%左右。考虑到我们研发部门有30多位同学,一个人能有这个产出还是相当可观的。\n今年的工作大部分集中在计算引擎上。今年一方面是做了比较多的性能优化,比如将TSDB在特地场景下更新少量数据的性能从几十秒降到了30ms左右(从修改整个level file改成了append数据),将pivot by(DolphinDB独有的SQL语句,可以将单值模型的窄表转置为多值模型的宽表)在一些使用场景下的性能提升了40倍左右,将TSDB表的join的性能提升了10倍\u0026hellip;\u0026hellip;另一方面在数据库立身之本的稳定性上花了比较多的时间,帮助系统大大提升了稳定性。最大的遗憾是今年没什么时间精力参与内存OLTP数据库的开发,感觉少学了不少东西。\n在技术方面,自己也有了一些心得。这些心得说起来也不复杂。最大的一个心得是要抓住主要矛盾。例如,在实现一个系统的时候,设计方案时要尽量设计出一个简单可靠易维护的方案,实现前与实现完都要分析关键路径,在关键路径上做好性能优化,在非关键路径上注重简单易懂易维护。这样,设计出来的系统就会高效又稳定。\n为了实现一些高性能的模块,也研究了一些开源的实现。这里直接给出对比的结论。首先是内存分配器,现在世界上最好的内存分配器当属微软的\rmimalloc,具体的比对可以使用这个开源项目\rmimalloc-bench。我觉得最神奇的是google开源的最新的\rtcmalloc相对于较早的\rgperftools的版本做了很多优化,如per CPU cache,但在这些benchmark上竟然还是老的版本会更优异一些\u0026hellip;\u0026hellip;还研究了hash函数的实现,这个没啥可说的,最快的当属\rxxHash。google的\rabseil项目还提供了大量高性能的C++基础设施,这里就不赘述了,感兴趣的同学自己前往了解吧。\n再讲讲自己认为自己做得最好的地方吧,我觉得是招人。我一直觉得招人对一家公司来说重要性极高,所以一直投入了比较多的精力在这个上面。今年的招人总体上我觉得还是比较成功的。校招方面,暑期实习的时候招了10来个实习的同学,其中也有放弃阿里云offer来dolphindb的同学,日常实习也招到了来自top2的选手,秋招的时候还招到了ACM金牌爷。社招上也招了几个不错的同学,比如有一位同学是从阿里钉钉跳槽过来的,进来之后表现也相当不错。招来优秀的同学的效果是立竿见影的,他们很快都有了不错的产出。这里也再打个广告,欢迎感兴趣的同学随时投递dolphindb。\n也讲讲自己做得不是很好的地方吧,个人觉得是今年年初的时候对实习生的管理做得不是很好。当时招了比较多的实习生,但自己也有比较多的其他任务要做,对于有几位实习生就没有很花时间精力去带。后来在带暑期实习生和后面招进来的日常实习生的时候就特地注意了这一点,增多了在带实习生上的时间与精力的投入。总得来说,大家对这边的工作体验的认可度还是比较高的,详情可见这个知乎问题:\r在dolphindb工作是一种怎样的体验?\n讲完了工作,再讲讲生活上的感悟吧。最大的感悟就是健康真的很重要。疫情的来袭让我回想起了多年前身体虚弱飘摇的自己。其次是对付新冠的时候提醒大家不要吃含有咖啡因的感冒药。我买的感冒药是复方氨酚烷胺胶囊,这种感冒药的主成分是对乙酰氨基酚,这个没问题,但这种感冒药里有咖啡因(我也是后来才知道)。按照我的理解,这种药中放咖啡因的原因是为了提神,让吃了药的人即使在感冒中也有力气去干活,我称之为卷王感冒药。但是得了新冠之后,我觉得还是应该躺平睡大觉,应该吃泰诺这种含有助眠成分的感冒药。我吃了复方氨酚烷胺胶囊,退烧是很快,但是阳了的前两天我几乎都没睡着觉,相当痛苦。如果只能搞到这种含有咖啡因的感冒药,那我建议不要像我一样傻傻地睡前吃。\n最后,希望自己在未来一年里能继续和优秀的人一起做有意思的项目。祝大家身体健康,新年快乐!\n","date":1672316140,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1672316140,"objectID":"4aee49ae62e8004aca001e07a3dcb73e","permalink":"https://conanhujinming.github.io/post/2022_summary/","publishdate":"2022-12-29T20:15:40+08:00","relpermalink":"/post/2022_summary/","section":"post","summary":"2022真是魔幻的一年,开年的时候怎么也没想到今年会在阳中结束这一年。正好在家养病没事做,遂写一篇年度总结,总结一下这一年的林林总总。 总得来","tags":[],"title":"2022年度总结","type":"post"},{"authors":[],"categories":[],"content":"今天突发奇想,看了下我在DolphinDB智臾科技入职的时间,看到是2021年3月3日,算了算距今刚好一年零几天,遂写篇文章,作为对过去一年工作的总结,同时展望一下未来一年的工作计划。在工业界工作,工作内容往往由一个个项目组成,故这篇文章也借一个个我在DolphinDB主导或者参与的几个比较大的项目,来总结我过去这一年的工作。\n新的存储引擎TSDB(Time Series DataBase) 新加入公司的第一个项目是与@无敌大饺子一起开发一个新的存储引擎TSDB。这里首先要讲讲为什么要开发一个新的存储引擎,以及这个存储引擎是做什么的。DolphinDB原先是有一款存储引擎的,叫OLAP。OLAP的设计比较简单,基本上就是按列存储,每个文件是表格的一个列,数据写入时的顺序即为数据存储的顺序。这样设计的好处是当列并不是很多的时候写入非常快:只需要在每个列文件上进行追加写即可。同时(当列并不是很多的时候)如果要对表格数据进行大规模的分析(例如策略回测)的效率也比较高。但是随着DolphinDB的应用场景在拓宽,OLAP的存储引擎逐渐碰到了一些问题。其中最大的问题就是在物联网中的点查需求。这里又需要简单介绍一下物联网的时序数据库应用场景是一个怎么样的场景。物联网通常的应用场景都相当简单,会有大量的设备(如几十万,甚至上千万的设备)接入数据库,例如一个省份的电表。每个设备每隔一段(固定的)时间(如一秒)会产生一条数据。而用户对数据的最主要的需求是去查某个或少数几个设备在给定时间段内的数据,这样的需求我们称之为点查。在我们试图将DolphinDB应用到物联网的场景时,OLAP存储引擎遇到了困难,这个困难就是点查效率的低下。具体地说,对于OLAP引擎,由于存储数据的顺序即为数据写入的顺序,而对于同一个设备来说,它的数据在写入的时候往往是分散在表格的各个位置的。例如,假设数据库总共有3个设备接入,数据写入的顺序往往是先写入1号设备的第1秒的数据,再写入2、3号设备的第1秒的数据,然后再写入1号设备的第2秒的数据,再写入2、3号设备第2秒的数据,以此类推。很显然,如果数据的存储顺序与写入顺序是一致的,那么假如我们要查询1号设备的数据,就需要遍历整个列文件才能找到所有1号设备的数据,这样的效率是相当低下的。设想如果有1000万个设备,而查询1个设备的数据就需要访问所有的数据,这个效率自然是不会高的。当然,实际情况没有这么糟,DolphinDB有完善的分布式表分区机制(具体可以可以参考\r这篇文章),使得一个分区的设备数不会太多,但即便如此,在OLAP引擎中进行点查,也往往需要几百毫秒的延时。而TSDB就是一款我们为了解决这个核心的点查问题而设计出来的存储引擎,我们期望它的点查效率能够低至几十毫秒,甚至是几个毫秒。\nTSDB的设计是我和@无敌大饺子以及公司的两位领导Davis和大飞哥一起讨论得出的。设计的思路也不复杂:既然OLAP中点查效率的低下是由于同一个设备的数据是散落在文件四处的,那简单,我们TSDB中就将同一个设备的数据连续存储在一块就可以了。这很自然地就需要将写入数据进行排序,在结合其他的一些实际需求,我们很自然地引用了LSMT(Log Structured Merge Tree)架构作为TSDB的设计基础。关于TSDB设计的详细介绍可以参考我和@无敌大饺子之前的一个\r直播录像,我这里就不展开介绍了。在设计完之后,我们进行了任务分工,我负责存储引擎的读取、计算部分,@无敌大饺子负责存储引擎数据的写入部分,大飞哥负责存储引擎的WAL和recovery模块。我们大约花了一个月的时间给出了第一个内部测试的beta版本,后面又陆陆续续地花了一些时间来加入一些新的功能如数据自动去重、增加列、支持blob类型,以及修复系统中存在的bug。在我加入公司的第三个月,我们终于决定将这个存储引擎推出供客户使用。\nTSDB这个项目对我来说意义非凡。首先,这是我第一个参与甚至是主导的数据库相关的项目,我借此机会学了众多数据库的知识。其次,这是我第一次参与的复杂的大型项目。之前在前东家也有进行过交易系统的开发,但说实话,那样的项目我觉得称不上大型与复杂,虽然也有很多的代码量,但主要也就是业务逻辑的堆积。TSDB不一样,它中间有大量的状态需要维护,完完全全是一个复杂的系统,想要让它稳定的运行并不容易。而且TSDB大量地涉及到与计算机系统底层打交道,而且我负责的是数据查询与计算部分,性能的重要性不言而喻,我借此机会学会了诸多的性能优化技巧,如leaky buffer, 尽量减少内存拷贝,合理规划读盘的顺序,避免多线程对磁头的争抢等等等等。最后,我们在一个真实的物联网数据集上进行了TSDB与其他数据库的性能对比评测。这个数据集有两百万个设备,我们使用了三台机器组成的集群来进行评测,主要对比了物联网领域常用的数据库在点查方面与TSDB的性能比较。下图给出我们的实验结果:\n可以看到,TSDB的点查性能显著优于在物联网中以点查性能著称的ClickHouse与TDEngine。能够做到这一点,毫无疑问TSDB是一个成功的项目,也让我为之自豪。\n分布式join 这是我独立完成的一个项目。具体地说,之前的DolphinDB在分布式join方面只支持同数据库下相同分区方式的分布式表做join,且join的列必须全部为分区列。这显然是有较大局限性的。我的方案也很简单,就是对数据进行re-shuffle(或称re-hash)。若join列为左表的分区列,则我们将右表的数据进行re-shuffle,使得re-shuffle后的数据也按join列进行分区,且将左表与右表相同分区方式的子表存储于同一节点上,这样就可以实现将整个分布式join分解为每个节点上的join,最后再将join的结果合并到一块去。类似的,若join列为右表的分区列,则我们将左表的数据进行re-shuffle。倘若join列既不是左表的分区列,又不是右表的分区列,则这是最糟情况,这种情况下会涉及到大量的数据移动,需要将左表和右表的数据都按join列进行re-shuffle,再进行join操作。\n这个项目从设计到开发完成总共花了大约两周的时间,作为第一个我独立完成的项目,我还是比较满意的。\n在线机器学习(online machine learning) 这是一个我至今尚未完成的项目。这个项目的背景大概是这样的:现在机器学习非常火热,应用的场景很多,DolphinDB当然也是支持机器学习模型的训练和预测的。然而,目前DolphinDB仅支持先训练机器学习模型,再部署机器学习模型这一批数据处理的范式,而不支持在线地根据最新的数据来更新模型。所以在线机器学习这个项目自然就是想支持在线地根据最新的数据来更新模型。由于我之前对机器学习和机器学习系统,所以我很快地就给出了这个项目的设计方案。再由于我一直有其他优先级更高的任务要做,所以我一直试图找一位实习生或者正式工的同学来按照我的设计方案完成这个项目。无奈直到今天还没寻到相应的同学。如果有同学对这个项目感兴趣,请一定要联系我\u0026gt;_\u0026lt;\n内存OLTP存储引擎 这个项目其实我参与不多。在9月份之前,这个项目是由@无敌大饺子牵头在设计与实现,后来他去MIT读PhD去了,就由我们的实习生同学@river接过了实现的大旗,并完成了大部分的代码编写,其他一些同学如实习生hj同学完成了B+树的代码实现,实习生@olaoo 实现了logging模块等。这个项目的背景很简单,我们的很多金融客户有内存OLTP数据库的需求,如金融的交易场景等,而DolphinDB其他的存储引擎都是OLAP的,对于高频的删除、修改、更新的支持有限。这个项目的最大的复杂度来源于二级索引的支持和MVCC的支持,尤其当这二者结合到一块去之后,事务的处理将会变得非常复杂。其实我本来也想深度参与这个项目的,但无奈个人精力有限,又不愿意加班,所以最后只能是摸鱼划水了一波。目前这个项目的单机版已经初具雏形了,在性能调优阶段;而之后我们将会开始进行这个项目的分布式版本,这则会有新的挑战:现有的2PC等框架都太重了,性能不够优秀,如何高效地支持分布式事务,以及分布式场景下如何支持二级索引等等。对这个项目感兴趣的同学,可以联系我\u0026gt;_\u0026lt;\nPython Parser 这个项目实际上我完全没有参与,是由我的好友jc与公司CEO/CTO Davis一直在牵头设计与实现的。具体地说,为了提供更强大更灵活的计算能力,DolphinDB提供了一门自带的编程语言DolphinDB Script,其语法类似于Python与SQL的结合。使用这门编程语言,用户就可以在数据库中方便而高效地完成各种复杂的计算操作。然而,语法类似Python,也终究不是Python,用户仍然有一定的学习成本;更重要的是,在数据分析领域,Python的两大重量级的包numpy和pandas早已深入人心,大家已经习惯了它们的操作语法与方便性。Python Parser这个项目,目标就是让DolphinDB原生地支持使用Python来管理存储与计算,这样用户的学习成本就可以降至最低,而且Python Parser还将原生地支持numpy和pandas的操作。具体地说,我们自行在DolphinDB内部实现了一个Python的解释器,而且这个解释器将没有GIL的束缚,计算性能会非常出色。我们将在今年三月底四月初推出第一个beta版本的Python Parser,但之后仍然有非常多的工作需要做。对这个项目感兴趣的同学,可以联系我\u0026gt;_\u0026lt;\n总结完了过去一年里我参与、主导的一系列较大的项目,下面我将简单介绍我们未来一段时间内打算做的项目,欢迎对这些项目感兴趣的同学加入我们。大家也可以看到,在我们公司,即便是实习生也可以承担重任,所以不用担心自己资历不深而无法参与到核心的项目~\n分布式内存OLTP数据库 这个在前面我已经介绍过了,这里就不详细介绍了。\nPython Parser 同样,在前面已经介绍过了,这里就不赘述了。\n流式数据库 DolphinDB已经有一个非常强大的流计算引擎了。然而目前的流计算引擎的管理和运维还比较麻烦。之后我们计划实现一个流式数据库,能够方便地进行流计算的管理和运维,并支持自动化的流式复杂指标计算。\n基于k8S和容器的自动化部署 目前DolphinDB的部署和升级还比较麻烦。我们目前已经在开发基于k8S和容器的自动化部署,未来希望能够继续强化这项功能。\n新硬件的支持 过去的数年内涌现了众多的新的硬件,如NVM, Infinity Band, RDMA, 高性能的GPU等,然而却鲜有将这些新硬件融入到数据库内的。我们计划未来一段时间内探索如何将这些新硬件与数据库结合,以进一步地提高数据库的性能。\n对以上任一项目感兴趣的同学都可联系我~\n总结 过去的一年里,我在DolphinDB按照自己期望的方式成长了很多。希望在接下来的一年里,我能够继续这样的成长。\n","date":1646750057,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1646750057,"objectID":"b9e34e173133d5df07d25f44c7636fe0","permalink":"https://conanhujinming.github.io/post/a_year_in_dolphindb/","publishdate":"2022-03-08T22:34:17+08:00","relpermalink":"/post/a_year_in_dolphindb/","section":"post","summary":"今天突发奇想,看了下我在DolphinDB智臾科技入职的时间,看到是2021年3月3日,算了算距今刚好一年零几天,遂写篇文章,作为对过去一年","tags":[],"title":"在DolphinDB智臾科技工作的这一年","type":"post"},{"authors":[],"categories":[],"content":"前言 近几年来,越来越多的名校课程选择公开课程的资源供大家学习。学习这些课程不仅能够让我们很好地学习和掌握知识,更能培养我们的学习兴趣和学习能力。公开的资源包括且不限于授课录像、课件(slide)、课程阅读资料(reading)、课程作业(lab)、自动评测系统(autograder)、期中期末试卷等等。因此,我们很幸运地能够免费地享受到这些最顶级的教育资源。另一方面,国内本科阶段的大部分课程的质量一言难尽,这也让我们更需要使用这些顶级的公开课程来学习知识。\n我在过去的数年间就大大受益于这些公开的课程,前前后后自学了有几十门各种各样的课程,受益无穷。也因此,我也一直在不遗余力地推广我所学过的优质课程。在学习课程的过程中,我发现自学这些课程终究还是存在一些困难,如:\n 有多所名校公开了某门课程的资源,那么该用哪门课程学习呢?它们相互比较各有什么优缺点呢? 我想学一门课程,但是这门课程的难度如何呢?适合现阶段的我吗? 这门课程公开的资源有哪些呢?是否有视频呢?是否有自动评测系统呢? 自己完成作业的时候常常碰到很多坑,又没有助教TA可以询问这些坑,导致常常在一些没意义的地方浪费大量时间。如果有前人总结出来有哪些坑、如何绕过就好了\u0026hellip;\u0026hellip; 学这门课之前,需要有哪些前置课程呢?这门课学完之后,又有哪些合适的进阶课程可以学习呢? 这门课程的授课质量如何呢?值得花时间去好好观看吗? 这门课有没有非官方的优秀资源呢?(如课堂内容的中文翻译) \u0026hellip;\u0026hellip;.\n正是因为有这些问题存在,我在写文章的时候往往也力求能给出这些问题的回答,帮助后人能够更高效更合理地去学习这些课程资源。然而写文章终究还是太散乱了,且一个人的力量终究是有限的。受启发于\rCS公开课程学习群一位同学的建议与\r浙江大学课程攻略共享计划,我们创立了\r这个项目,\r对应的网站在这里,意在整合大家对于高质量公开课程的评价、总结、与建议等等,期望这些评价能对后来的同学在选择、学习课程的时候能有一些帮助。\n特性 本项目的目标是收录以下内容:\n 课程资源链接 是否有视频 有哪些作业(homework)、实验(lab/assignment) 是否有自动测评程序(autograder) 课程简介,包括前置课程知识,适合哪个阶段学习等等 课程评价,包括难度、有趣程度、讲课质量、作业难度与质量等等 非官方的优质课程资源链接(如笔记、课程内容翻译等等) 后续课程推荐 等等。由于一门课程可能会有多个评价,大家可以在提供个人评价的时候附上自己的相关信息(如ID或主页)。\n贡献 欢迎贡献!\nIssue、PR、纠错、资料、攻略,各种欢迎!\n来自大家的关注、维护和贡献,才是让这个项目质量越来越好的动力~\n警告 下列内容为不适合上传的内容。如果你认为缺少这些资料将会影响资源的完整性,请优先考虑放在校内资源平台,或联系你的教师并由教师发布。建议你撰写一个 README 文档并放置一些链接或指引文字来帮助找到这些资源。\n 盗版电子书/付费电子书 盗版/破解版/绿色版付费软件及其安装包 如果你认为本仓库的一些文件侵犯了您的权益,请 向我们发送邮件 。我们将会从仓库中彻底清除这些文件。\n项目现状 从昨晚发起项目,到现在已经有10多门名校课程的评价了,其实已经覆盖了大量计算机的基础课程了,欢迎大家关注与贡献!\n\r项目地址在此,\r对应的网站在此。\n致谢 感谢提出这个想法的同学@itwangashao,同时本项目大量参考了\r浙江大学课程攻略共享计划,一并感谢~\n","date":1624196773,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1624196773,"objectID":"137b95371abd025abcbfc2e97796158b","permalink":"https://conanhujinming.github.io/post/comments_for_awesome_courses/","publishdate":"2021-06-20T21:46:13+08:00","relpermalink":"/post/comments_for_awesome_courses/","section":"post","summary":"提供名校公开课程的评价与攻略","tags":[],"title":"名校公开课程评价项目","type":"post"},{"authors":[],"categories":[],"content":"之前我们自发地组织了一次系统论文阅读研讨会,\r详情见此。一开始我们还有些担心怕聚不起足够的同学来举行这次活动,但后来我们惊讶地发现小伙伴们学习的热情十分之高,以至于我们不仅没几天就组起了开始计划的32人,甚至很快就显著地超过了这个人数。也因此,我们将原计划的8周的研讨会延长到了15周,前前后后涉及的paper大概有30多篇。同时让我们还略感惊讶的是,许多参与活动的同学水平非常得高,甚至有不少同学以一作身份在系统相关领域的顶级会议(如OSDI, SIGMOD, VLDB, ASPLOS等等)上发表了数篇论文,也有不少同学是各大名校的在读博士生或准博士生,当然像我这样的普通的系统学习者也不在少数。而大家都很认真地准备自己的presentation,保证了本次活动的高质量举行。总之,这次活动大获成功,相信认真参加活动的各位同学应该也觉得有所收获。\n15周是一段很长的时间,且研讨会撞上春节、劳动节这样的节假日的时候都会暂停一周,所以这次活动前后横跨了几乎有半年之久。这样长的时间里,每周都要去阅读论文准备研讨会,并参与研讨会的交流与讨论,这不是一件容易坚持下来的事情。我个人是从头到尾每周的活动都参加,并且每次活动之前都认真准备(谁让我是大部分场次的主持人呢\u0026gt;_\u0026lt;),有时候真的非常忙的时候,还得费劲挤出时间来准备研讨会,我当时还和朋友们吐槽“这活动咋还没结束”。不过吐槽归吐槽,这样每期的认真准备也大大开阔了我这个系统领域初学者的视野,学到了非常多的东西,这里也要感谢各位参与的同学的付出Orz\n这次活动的成功,我想也一定程度上验证了这种学习形式的有效性,我们也鼓励其他同学组织类似的活动来帮助各自的学习~\n最后,也是最重要的是,本次活动的所有资源都已开放在网上,包括每期的阅读资料、录像、课件等等,涉及的内容从FPGA到操作系统内核再到虚拟化, 从分布式系统到机器学习系统再到系统中的机器学习,还包括程序自动分析、计算机网络、LSMT、新硬件、serverless等等,可以说覆盖的内容非常得广,具体资源\r详见此处,且录像都是中文的。也希望我们公开的这些资源能帮助到各位系统领域的学习者,为中文社区做一份贡献~\n","date":1624195177,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1624195177,"objectID":"f24101d200747b5e799028908916d88d","permalink":"https://conanhujinming.github.io/post/paper_reading_seminar_summary/","publishdate":"2021-06-20T21:19:37+08:00","relpermalink":"/post/paper_reading_seminar_summary/","section":"post","summary":"系统论文阅读研讨会完结撒花与总结","tags":[],"title":"系统论文阅读研讨会完结撒花与总结","type":"post"},{"authors":[],"categories":[],"content":" 原文发于\r这里。\n前篇为\r校招找工作总结。\n本文旨在分享自己硕士毕业一年以来在工作上、学习上、找工作上的经历与思考,希望能对一部分同学有一定的启发作用。同时需要强调,本文全文均仅代表个人观点,限于个人的水平与经历有限,许多观点不免片面甚至是错误,欢迎指正。\n 在写前一篇校招总结的文章的时候,我怎么也没想到,自己会在硕士毕业半年后就主动辞职。\n这还要从第一份工作的经历开始讲起。\n \r初入职场:期待与现实之间的鸿沟 \r保持学习与成长 \r决定辞职 \r体验授课生活 \r关于未来的思考 \r社招之路 \r字节跳动抖音 \rPony.AI小马智行 \r快手MMU \rDolphinDB智臾科技 \r社招总结 \r总结 初入职场 初入职场:期待与现实之间的鸿沟 说实在的,在第一份工作开始之前,我是颇有些期待的。我第一份工作的行业是很有些“神秘色彩”的“高逼格”的高频交易行业。不得不承认,我在进入这个行业之前是不太了解这个行业的,所以对于这个行业是做什么的、工作内容是什么都不怎么了解,仅凭一些与业内人士简短的交流就略有些略草率地做出了决定。不过这倒也容易理解,当时的我仅仅对于自己想从事的工作内容有了初步的思考(算法还是开发),但对于自己想从事的行业仍没有清晰的思考。况且纵使当时开始了这方面的思考,我擅长的终究只有排除法,只有亲身尝试过,才知道自己适合不适合。\n言归正传,我抱着期待入了职,开始了在这家公司的工作(当然,出于保密要求,我不会透露任何具体工作内容相关的信息)。但是,我的喜悦之情只维持了一小段时间,我很快发现这里的工作内容绝大多数时候是在实现一些(在我看来颇为无聊的)业务逻辑,而我其实更感兴趣的是底层的系统架构和性能优化。这还不是最致命的,最致命的是我并不觉得我每天所做的事情会对社会有什么贡献。说来惭愧,在工作之前,迫于生计,我一直忙活着从一个里程碑奔往另一个里程碑,高考、刷GPA、考研、读研、找工作\u0026hellip;\u0026hellip;很难有时间静下心来好好思考自己内心所追寻的究竟是什么。而且即便偶尔放慢脚步认真思考,限于校园里的经历,仍然得不出什么靠谱的结论。社会是另外一所学校,它很快用我的亲身经历告诉我自己,我渴望做对社会有贡献的工作,但是在这里的工作内容却让我很难感受到自己在为社会做贡献。\n使情况更糟糕的是,这里的工作并不容易,而我又是一个认真做事情的人,就算我不喜欢不认可这边的工作内容,我仍然会努力去把我的任务完成好,这就使得我更加痛苦,每天在自己内心的斗争中努力挣扎着工作。这种痛苦很是折磨了我很长一段时间。那换一份更感兴趣更认可的工作呢?我才毕业这么点时间就辞职参加社招,这会不会难度很大啊,我内心犯着嘀咕。就这样,我日复一日地挣扎着,直到半年过去。\n保持学习与成长 很幸运的是,我深知自己在计算机基础知识上的薄弱与匮乏,因此在工作之后,我仍然保持着之前养成的学习习惯。在刚工作的半年里,我主要学习了以下几门课程/资源:MIT 6.NULL,MHRD游戏,Stanford CS144和MIT 6.S081。值得一提的是,我时常因学习这些课程而感到兴奋不已,以至于常常debug到很晚;这样的兴奋与白天工作的无聊形成鲜明对比,这更坚定了我对自己工作方向的选择。关于这些资源的学习经验和心得,我基本都写成了对应的文章,这里再简单总结一下。\nMIT 6.NULL,\r我的文章在此。这是一门非常好的课程,主要介绍了众多编程时常用、好用的工具。我尤其推荐刚入计算机领域不久的同学学习一下,也许能够大大提高自己的工作效率。对我来说帮助最大的应该是对dotfile的管理和自动化部署、以及zsh的一些好用的插件。\nMHRD游戏,\r我的文章在此。这是我的好朋友\r@comzyh推荐我的游戏。这位好友在计算机系统、体系结构、计算机网络等众多方面都有非常深的造诣,是我认识的同龄人中工程能力最强的之一,尤其在广度方面堪称一骑绝尘。当时我俩是室友,有天我就请教他有没有计算机体系结构的学习心得可以分享给我。他告诉我说他也不知道自己怎么学的,“不过我觉得了解整个计算机体系结构的历史发展对于学习是有很大帮助的”,于是那天晚上搬了个小板凳在我房间讲了一晚上的计算机体系结构发展史Orz 第二天早上,他突然想起来说还有MHRD这款游戏,“我觉得这款游戏对于学习计算机硬件的原理有很大帮助,你去玩玩看吧”。于是我就人生头一次地下载了传说中的steam,并购买了游戏玩了起来。应该说这是一款非常优秀的游戏,真正做到了寓教于乐,不仅让我一定程度上地了解了计算机的硬件搭建的原理,更让我很大程度上克服了对硬件的恐惧。我现在还在期待着这款游戏传说中的续作。\nStanford CS144,\r我的文章在此。计算机网络对我来说可以说是最难学的计算机基础课程了,我完全是因为我没找到一门特别完善的公开课程资源。美国的诸多名校似乎都没有开放该课程的课堂录像,而这对我的学习来说常常是很重要的。当时找来找去,只找到了CS144这门课程是有授课视频的。然而这些授课视频是当时Stanford提供的MOOC版本,我(以及很多同学)看了之后都觉得不太适应。好在这门课现在开放的课程作业(Lab)质量还是相当不错的,是让手写一个简易版的TCP。在学习这门课程之前,我对TCP的理解基本上停留在对中文教材上相关内容的背诵阶段,什么三次握手四次挥手之类的,说实在的与八股文无异;但在完成这门课的课程作业的过程中,我实实在在地较深入地理解了为什么TCP协议要这样设计、以及许多TCP协议中的细节。对TCP我已不再感到恐惧和头疼。\nMIT 6.S081,\r我的文章在此。这门课程对我来说是有一些特殊意义的,因为这是我和我的小伙伴们第一次尝试组队刷课。毫无疑问,6.S081的作业设计是我上过的课程最好的之一,它们让我具体而又切实地去了解了操作系统的实现原理。以进程、线程和上下文切换(context switch)为例,以前问我相关的问题,我虽然也能够侃侃而谈,但那更多的是停留在一些中文教材上的概念,或者是一些面经中的所谓“答案”;换言之,我能说出一些相关概念,但我从未真正地“理解”它们。而6.S081的其中一次作业则是让我们去结合已有的代码,实现简单的线程/协程切换。这次作业涉及到的代码不过100多行,却让我忍不住感叹“原来一个最简的线程/协程实现竟然可以这么简单,原来上下文切换是这么一回事”。在学这门课之前,我面试的时候还是略有些害怕操作系统相关的问题的,因为我知道一旦深挖了,就会暴露出我基础不扎实的事实;但是在学了6.S081之后,我甚至会颇有些期待面试官问相关的问题。这就是一门好的课程给我带来的改变,6.S081绝对是我毕业以来让我收获最多的一门课程。也为两位老教授一把年纪了还亲自操刀写lab的代码而感到敬仰,希望自己到60岁的时候也还能像他们一样。\n《恰同学少年》,\r我的文章在此。等一下,这不是介绍计算机学习的文章吗,怎么突然出现一部红色电视剧?这是因为我想把我各方面的成长的经历都分享出来,而这部电视剧,是我毕业以来成长的非常重要的一部分,它很大程度上影响了我对职业生涯的考虑与选择,也很大程度上影响了我的人生观与价值观,当之无愧的是我毕业以来对我影响最大的“学习资源”。这部电视剧从毛泽东同志决定考取湖南第一师范讲起,讲述了毛教员、蔡和森、杨开慧、向警予、陶斯咏等一批志同道合的优秀青年的学习生活故事。除了几位主角的学习生活,还讲述了当时在一师的一批优秀教师(如杨昌济、孔昭绶等)立志教育救国,“欲栽大木柱长天”的宏伟志向与相应行动。看着恰同学少年、风华正茂、书生意气、挥斥方遒的他们,看着志同道合不懈追求真理的他们,看着以改造社会为己任、立志救国的他们,我忍不住开始思考,自己想要过一个什么样的人生呢?现在的道路能让我过上这样的人生吗?继续这样走下去,未来回首往事的时候,我是否能够不因自己虚度年华而悔恨呢?我应该做些什么,才能过上我想要的人生呢?我又能为这个国家和社会做些什么呢?\n决定辞职 乔布斯多年前在斯坦福的毕业典礼上有一场\r很著名的演讲,那场演讲里几乎所有内容我都非常赞同,不过可惜的是我在两三个月前才偶然看到那场演讲:如果我能早看到一些,或许对我做人生选择会有更大的帮助。在那场演讲中,乔布斯说了这样一段话:\n 如果你把每一天都当作是生命的最后一天\nIf you live each day as if it was your last\n总有一天,你会是对的\nsomeday you\u0026rsquo;ll most certainly be right\n每天早晨我都对着镜子问自己\nI have looked in the mirror every morning and ask myself\n“如果今天是我生命中的最后一天\n\u0026ldquo;If today was the last day of my life\n我还会做我今天要做的这些事吗?”\nwould I want to do what I am about to do today?\u0026rdquo;\n如果连续很多天答案都是“不”\nAnd whenever the answer has been \u0026ldquo;No\u0026rdquo; for too many days in a row\n我就知道我需要改变了\nI know I need to change something\n 我没有乔布斯那么夸张,但我也偶尔会想,如果我的寿命只剩下十年了,我还会继续做今天要做的这些事吗?\n而自工作以来,连续很多很多天,我的答案都是不。\n我知道我需要改变了。\n我不能长时间一直做我觉得没意思也没意义的事情。\n我很痛苦。\n下决定的那天晚上,我一个人从公司里出来。饥饿迫使我去便利店买了份饭团,于是拿着它一边走着一边啃。虽然已是夜晚,陆家嘴仍然是灯火通明。我背着书包,左手拿着饭团,右手拿着水壶,看着这灯红酒绿的繁华都市,看着这人来人往的热闹街头,看着这些鳞次栉比的摩登大厦,明明它们近在咫尺,我却觉得离它们很远。\n因为我知道,我不属于这里。\n第二天下午,我找领导,提了离职。印象比较深的是有位领导问我说“才毕业半年就辞职,不担心之后找工作的难度吗?”我说,如果一个方向,我不想继续做它十年,那我就不想做了。挽留无果后,公司非常干净利落地给我办完了离职手续,当天晚上就送我离开了公司。\n体验授课生活 离职之后,适逢当时有个去大学里授课的机会。熟悉我的人都知道,我是一直很想有讲课的机会的,所以我毫不犹豫地就抓住了这个授课的机会。关于这次经历的心得,我整理在了\r这篇文章里,而连带着其他在教育方面的探索则整理成了\r这篇文章。这次特殊又有趣的授课经历带给我的思考和收获是我之前想象不到的,除了让自己进一步地扎实了自己的机器学习基础(因为要给学生们讲懂),更是带给了自己许多技术与知识以外的思考。\n在最后一堂课上,我非常“中二”地当堂背了一段《少年中国说》。我说:“各位同学,往小了说,机器学习、深度学习还有很多问题没有解决,我们不知道怎么解决,也许没人知道怎么解决;往大了说,我们这个国家、这个社会、甚至是这个世界,都还有很多问题没有解决,我们更加不知道怎么解决,现在谁都不知道该怎么解决,也许你们未来就有人会去解决其中的一部分。少年强则国强,去创造属于你们自己的未来吧。”\n下课之后,我一个人在校园里静静地散着步,虽然那时候还是寒冬腊月,但那天的阳光十分温暖和煦,晒得人暖洋洋的。\n虽然这次机会没给我带来多少金钱与物质方面的回报,但看到学生们求知的眼神、看到他们对我努力讲课的认可、看到他们在听了我的讲解之后由困惑到明晰的表情,我感到欣喜而又快乐。我更加明确了自己未来的道路,我知道,做(在我看来)对社会产生贡献的事业,这就是我想做的事情。\n关于未来的思考 在找工作之前,我纠结着之后做什么行业,还是在国内读个博士。于是我联系了几位实验室毕业的优秀师兄聊了聊职业规划,这里也感谢各位师兄百忙之中抽出时间来回答我的问题。最触动我的是一位师兄说的话:“其实读博也好工作也罢,最重要的还是要做自己觉得有意思有意义的事情。”那段时间我也找了些国内读博的机会,不过最终还是选择了继续工作。\n社招之路 终于讲到自己的社招经历了。到了课程快要讲完的时候,我就开始联系各家公司开始面试。去之前秋招不同,这次我几乎没怎么投递公司,而是从之前挖我的公司中挑出了自己有一定兴趣的公司来面试。最终我面的公司部门有:字节跳动抖音数据策略团队、Pony.AI小马智行、快手、DolphinDB智臾科技、还有几家量化公司(比较好奇他们在同样问题上的解决方案)。由于量化公司的保密性,这里就不再介绍了,而是主要讲讲其他四家公司的面试经验和心得。\n字节跳动抖音 最早大概是2020年的11月,HR在领英上勾搭我,由于我一直忙着其他的事情,就没有开始他们的面试流程,直到2021年1月多的时候,才继续跟进他们的流程。我面试的团队是一个叫“数据策略”的团队,主要是利用机器学习、优化方法等方式来实现更高的用户增长。例如春节瓜分红包,这么多红包的金钱,该如何分配才能最大化有效的用户增长呢,这个项目就是他们部门所负责的事情。这个团队原先是全部在北京的,后来决定在上海也组建一个团队,故联系我面试。\n其实面试也没有很多可以说的事情。几场面试都有按照流程地让我做了几道LeetCode题,题目也都是一些非常经典的题,没记错的话应该都是top 100 liked这个标签下的题目。面对这种难度的题,我自然都是很快地写出bug-free的代码。除此以外以外,还问了我之前做的一些项目,尤其是正式工作的项目。大家还比较喜欢问的就是所谓的“场景题”,即描述一个他们在真实场景下碰到的问题,问我的解决方案会是什么。比较有趣的是,有两场面试的面试官,我在最后的提问环节问他们那几个场景问题,他们实际在生产中是怎么解决的,他们说基本上和我描述的差不多XD 还有一件很有趣的事情是大家基本都没问我机器学习、深度学习的基础知识的问题,可能是看我有这方面的授课经历,就觉得没必要再多问了。印象比较深的是几位面试官都看上去有些疲惫,可能是因为春节降临,他们的活很多压力很大吧。\n这个部门让我感觉最有诚意的地方是,HR和leader问我之后想做的方向,我说我开发和算法都想做一些,能不能都做,他们一开始说不行,只能选择一个方向做,这当然是很合理的;但是最后他们开会讨论并且给我发offer的时候,却告诉我说如果过去的话,算法与开发的工作我自己任选,二者的比例也自己调控,这个结果还是让我颇有些意外的。最后也给我开了一个相当高的薪水和评级。不过由于种种原因,我选择拒了offer。\nPony.AI小马智行 与抖音类似,小马也是在上海新建了一个office,团队在慢慢地扩招,HR也是很早在领英上联系的我,我拖到了1月多才回复。印象比较深的是HR一开始电话联系我的时候,问我:“你是不是以前打竞赛的啊?”我说:“不存在的,我从没参加过竞赛。”她说:“那你是不是刷了很多题啊?”我说:“也还好吧,没有特别多。”心里还想着她为啥会问这样的问题。结果她接着问:“那你之前是怎么进的Google啊?”我差点笑出了声,原来是因为这个原因才问我这几个问题。于是我回她:“因为我强啊。”(笑)\n后来就安排我开始面试。这次面试的开发岗位,所以除了做题和项目以外,基本上全都是与系统开发相关的面试问题。后面还安排了一轮系统设计面。感谢自己学了MIT 6.S081,面试全程没碰到什么自己觉得有难度的问题。还有比较有趣的是给我的定级一涨再涨,可能是觉得我的面试表现还不错吧\u0026gt;_\u0026lt; 最后一轮面试是小马的CTO楼天城、也即传说中的楼教主来面我。我虽非竞赛选手,但也听说过不少楼教主的事迹。我原以为楼教主会是那种“恃才傲物”的天才形象,没想到他本人相当地接地气,剪了个平头戴着副黑框眼镜,面试刚开始的时候有一搭没一搭的和我聊一些生活上的事情。之后出了一道数学与编程结合的题目,然后是几道场景题。最后我们一起聊了聊对无人驾驶这个行业现状与未来的看法。没经过他本人同意,这些内容就不分享了。\n不过由于种种原因,我选择拒了offer。\n快手MMU \r德兵师兄是我们实验室传说级的博士师兄,早在我还在校园的时候就听了不少他的传说,听说他现在在快手MMU担任多模态智能创作负责人,于是就联系了他投递了一波。面试流程与抖音相仿,基本就是算法题+项目+场景题,估计也是因为我的履历,没怎么问我机器学习基础的题。我同样表示了同时做算法与开发的想法,他们也很爽快地同意了。最后一轮面试是德兵师兄面我,除了技术以外,我们也聊了很多对未来行业发展和技术发展的看法。德兵师兄的确名副其实,做事情非常地扎实,是少见的对技术细节研究得非常透彻的团队负责人。最后快手开了一个非常有诚意的offer。不过我因为种种原因,还是选择了另外的offer。但是德兵师兄真的是一位非常靠谱的leader,如果是对CV/NLP/多模态/智能创作感兴趣的同学,可以联系他[email protected]\nDolphinDB智臾科技 要说自己为什么会投递甚至最后还选择了这么一家对很多人来说颇有些“名不见经传”的公司,还得从较早的故事开始讲起。\n我很幸运地有一些好朋友,我们常常会交流讨论学习、技术、学术以及生活等方方面面的问题。其中有一位好友xj在腾讯做数据库,他和我的交流尤其得多。印象最深的一次是2020年6月的时候他在做mysql的并发写入优化。这个问题是说mysql现在在高性能服务器的存储设备下,常常没法跑满带宽,这很大一部分原因是软件跟不上,mysql里的锁太多了,xj当时就在做锁的一些优化。我记得他做了一两天后,在群里说:“啊好难啊,我搞定不了了,要炸了。”我们刚开始安慰他,发一些萌萌的安慰人的表情,这时候他又补了一句“但是好有意思啊”Orz 类似的学术和工程上的交流几乎每天都会发生。在这样的影响下,我渐渐也开始对数据库领域有了一些好奇与了解。\n自离职之后,我就开始思考下一步要做什么方向。高频交易自然是不适合的;纯机器学习的算法岗也不合适,我还是更想做开发。但是究竟做哪一块的开发呢?我拿出一张纸,在上面开始写下自己期望的东西。我期望从工作中获得什么呢?我写下了以下几点:\n 从事的行业和工作内容要有意义,对社会有贡献。最好是那种能帮助国家突破卡脖子技术的领域。 从事的工作内容要有意思,我得喜欢,最好甚至是能够让我感到激动人心的(exciting)。这样的话我就希望其中的工程味道比较重。另一方面,我个人喜欢做自己能够解释的工作、能够知晓从里到外每一个细节的工作,也就是说,当一个系统表现效果好(work)的时候,我能很清楚其中的原因,并且能够清晰地做实验来验证;当一个系统表现效果不好(不work)的时候,我也能用实验和逻辑来解释清楚原因,找到问题所在,并且去解决问题,让系统性能提升。这样的话,深度学习相关的工作就不适合我了。 如果是一个我之前比较陌生的领域,最好是有熟识的靠谱的人能够带我。 我希望这份工作能给我带来持久的、我所期望的成长。而这个领域最好是我觉得自己能够再做至少十年的领域。 我希望是不要求加班的工作岗位,也即能够做到工作与生活的平衡(work-life balance)。因为对于公司老板来说,他们对你的期望几乎永远是为公司盈利,而你自己的期望可能是成长,这两者有些时候是矛盾的;当这二者矛盾的时候,我希望至少还能有自己的工作之外的时间来成长。我绝不希望自己停下成长的步伐。 收入较高,能够支持我赡养没有缴纳五险一金保障的父母。这点比较容易,只要我还是继续当程序员的话,是肯定可以满足这点要求的。 有点讽刺的是,这些需求,尤其是第5点,在国内的工作环境下是很难达到的。那如果一定要划掉一个,我会划掉哪个呢?我想了很久,觉得还是要具体情况具体分析。\n那么有哪个领域可以满足我的这些需求呢?我突然想到我那位在腾讯工作的好友xj。于是我写下了数据库这三个字。的确,从事数据库方面的研发,是可以满足前四点和第六点的。于是我当时就给xj发了条消息,我说,要不你去哪儿工作,我就去哪儿工作吧,以后就跟着你混了。\n当时他还在腾讯工作,我说那我就去你的组吧。虽然这需要我划掉上面六点中的第五点,但是有些时候只能做一些牺牲了。结果事情变化得很快,没多久他就收到了阿里云的邀请。这下我可就犯难了,这倒不是完全因为阿里的工作环境和氛围可能不适合我,还因为我知道我的简历去投阿里云数据库组的社招,很可能连表刷(简历筛选)都过不了。我找了在阿里的同学帮我问了一下,果然和我说他们leader觉得工作经验两年以下的社招不考虑。而且纵使过了,阿里的工作生活平衡是比腾讯还要再糟糕不少的,这让我心里不禁犯了嘀咕。我和他说,容我再考虑考虑。\n好在世事时常柳暗花明又一村。xj在读研之前曾经在一家叫DolphinDB的时序数据库公司实习了相当长的一段时间。我们之前也聊起过多次他在那边实习时做的许多有意思的工作。2021年年初的时候,DolphinDB邀请xj回去工作,xj就和我说了这件事情。我当时就回他:“他们还招人吗?你去的话,我也去,认真的。”随即就把我的简历发给了xj。\n于是DolphinDB很快就开始联系我。HR很好奇我的经历(我还没碰到过一个不好奇的),问了问我这么选择的理由,我解释清楚之后,他们很快就安排好了和我的面试流程,邀请我去office进行线下的面试。\n虽然我因为xj的缘故,毫不犹豫地就想选择这家公司作为我职业生涯的下一站,但坦白说,此时我对这家公司还是不甚了解,无论是氛围文化也好、还是技术背景也罢、还是最重要之一的是领导的水平与风格,我都不清楚,所以这几轮面试,不仅是他们对我的考察,也是我对DolphinDB的考察。或者说,实际上,面试本身就是候选人与面试官的双向选择。对我来说,面试的体验是极大程度上影响我对于一家公司的观感的,技术好性格好的面试官会让我好感大增,反过来水平一般或是态度傲慢或是显得异常疲惫的面试官(或者是兼而有之Orz)则会让我打退堂鼓。有句话说“面试官是一家公司招人的门面”,这句话绝没有夸张的成分。所以很自然的,我会把在DolphinDB的面试看作是一个很好的提前了解潜在的未来同事的机会。\nDolphinDB的面试官们也果然没有让我失望。首先是HR与我聊了聊过去的经历与未来的规划。HR非常专业,也没有任何要彰显自己存在感的意思。接下来是研发主管的面试。主管从一些小问题切入,深入地与我探讨了系统编程相关的问题。之后主管问我对数据库有没有什么了解,我说我只有对levelDB有一定的了解,于是主管和我深入探讨了在时序数据库场景下应用LSMT时需要注意的问题和可优化的地方。非常有意思的是,我和xj加入公司后,到目前为止做的最大最重要的一个项目物联网(Internet of Things, IoT)存储引擎,正是基于LSMT设计和开发的 XD\n最后一轮面试,是公司的创始人、CEO兼CTO 周小华 Xiaohua/Davis Zhou 来面试我。之前每次和xj谈到Davis的时候,他都会赞不绝口,我也因此很好奇他究竟是怎么样的人。Davis本硕在上海交大就读,博士在美国Drexel University就读,博士期间\r发了很多顶级的信息检索、数据挖掘的文章。博士毕业后,他在美国多家金融公司先后就职,后于2016年回国与另外两位创始人一起创立\rDolphinDB智臾科技。DolphinDB是一款完全自研、拥有完全自主产权的国产分布式时序数据库,拥有强大的计算引擎和存储引擎,支持每秒百万级数据写入,在万亿级规模下支持数据毫秒级查询和秒级计算分析(突然有种广告的感觉是怎么回事,总之欢迎感兴趣的同学了解)。\nDavis进了面试的房间,和我握了个手,就开始了与我的面试交流。说是面试,但与其说是他面试我,更有点像是他在和我交流公司的现状以及未来发展,询问我对公司的期望,看看我们双方是否能够满足对方的期望。Davis首先问我对于公司的期望是什么。这是一个正中我下怀的问题,我立刻将前面提到的那几点需求描述了一通。这里要说明的是,我以前认为在面试中这样诚实地说出自己的期望是不合适的,因为有可能这家公司不符合这样的期望,最后就不发offer了;但我后来觉得既然我不缺offer,不如说得直接一些,也免得去了公司之后发现期望与现实落差太大而离职,那样对双方的代价还要大得多。总之,我很诚实地和Davis说了我的全部期望。Davis很高兴地告诉我说他认为DolphinDB可以满足这几点的:\n 从事的行业和工作内容要有意义,对社会有贡献:时序数据库在物联网和金融领域均有广泛的应用。而这其中,金融中的银行等机构与物联网中制造业、研究院、水电煤国企等都是对国家非常重要的战略性机构。前些年的技术卡脖子,让国家政府意识到不能再这样下去,因此提出了去IOE的口号,希望在这些机构都能使用具有完全自主知识产权的基础软件(如数据库)。而这些领域应用高性能的时序数据库,还能够实现一些以前很难实现的功能,如核电站的实时异常检测等,这些功能的实现对于国家与社会显然是具有重要意义的。而且,在我国物联网领域,由于我国的人口规模,很多场景面临的难题是现在市面上没有一款软件能够解决的,所以在DolphinDB做开发,不仅仅是“去IOE”(指脱离对IBM, Oracle, EMC三大基础软件外企的依赖),更是要去做到一些之前没有产品能做到事情,去突破最前沿的数据库难题。 从事的工作内容要有意思,我得喜欢,工程味道要重而且能够从内到外理解每一个细节:数据库可以说是完美的符合这些要求,而在技术方面,分布式时序数据库显然也是站在最前沿的。 最好是有熟识的靠谱的人能够带我:xj就可以带我。 我希望这份工作能给我带来持久的、我所期望的成长:数据库这类基础架构的开发能力磨练的是最核心的开发能力,自然可以带来持久的成长。 我希望能够做到工作与生活的平衡:公司工作时间965,而且公司认为这样的制度是更能帮助员工的产出的,因为员工需要锻炼身体来保证强健的体魄,需要下班之后自己学习额外的知识来获得技术上的成长,需要陪伴家人等等。 收入较高,能够保障我的父母:这个自不必多说。 于是Davis和我一起讨论了未来公司的一些规划,以及如果我来的话愿意做哪方面的工作。令我非常惊讶的是,Davis是公司的CEO\u0026amp;CTO,有非常多的事情在忙,但从和他的交流中,我能很明显感觉到他还在一线上写非常多的代码,甚至仍然是代码库的最主要的贡献者。而且不夸张地说,问到DolphinDB的几乎所有实现的细节问题,他都能了如指掌地回答出来。这真是非常令人印象深刻!因为在国内的大环境下,技术管理层不写代码的情况实在是太普遍了。当然我不是想说孰优孰劣,只是我更想和写代码的CTO甚至是写代码的CEO一起工作。除了扎实和雄厚的技术功底以外,Davis对市场的判断和对技术架构的视野(vision)也让我叹为观止。写这篇文章的时候,距离我的面试已经过去了快5个月,而这段时间市场的发展基本上与当时Davis和我描述的一致。在面试最后,Davis当场就给我发了offer,这反而让我有些紧张,我说:“你不需要再考察一下我的技术能力吗?我们都没怎么聊具体的技术。”Davis笑了下,说道:“你的履历以及xj对你的评价就足够说明你的能力了,况且刚刚和你的交流中我也能感受到你各方面的能力。虽然你之前不是做数据库的,但我对你在这边的发展没有任何顾虑。”\n之前曾经看过一篇沈向洋的文章,其中他提到了Jim Gray对他说的关于程序员生涯的一段话。Jim Gray说(此为意译):“程序员的生涯是由一个个项目组成的,这些项目的好坏就定义了你的职业生涯的成功与否。所以,要选择好每一个项目,做好每一个项目。“我又想起来我在Google的Host和我说的一段话,他说:”人在选择工作的时候,有的时候很难看清一家公司一个部门一个行业的未来发展。所以,选公司,不如选人,至少一个熟悉的靠谱的人,是可以看清的。”DolphinDB就是我此次选择的项目,Davis和xj就是我此次选择的人。\n于是最后,我就和xj一起加入了DolphinDB,工作至今。从我加入公司到现在也差不多有三个月了。这三个月里,我们的主要工作是一起开发了基于LSMT(Log Structured Merge Tree)的新的IoT存储引擎,新的存储引擎主要是针对物联网的大规模场景的,典型的场景可能是有千万台设备(如千万个电表)每秒都会产生一条数据,在支撑这个级别的数据量写入的前提下,新的存储引擎同时要支持毫秒级的点查(即查询某设备在某段时间内的数据),以及要高效地支持其他类型的数据查询与数据分析系统(OLAP负载)。这个项目非常有挑战性,但同时也非常得有意思,我在这中间学到了很多。除此以外,我也负责了一部分计算引擎的开发工作,做了一些计算函数的实现与查询优化,这些同样是很有意思也很锻炼工程能力的项目。经过这三个月的工作,我很确信,这就是我想做的工作。除了工作内容以外,公司的同事也非常的nice又好相处,技术主管和CEO Davis可以说是我处过的最好的领导之一。总之,这里的工作完美地符合了我的期望。\n社招总结 整个社招过程中,对我帮助最大的当属MIT的6.S081课程,它让我的操作系统基础比以往任何时候都要扎实,而这样扎实的“地基”,使得我在面对几乎所有来自面试官在这个方向上的“狂风”都可以自如应对、岿然不动。我很庆幸自己即使在工作之后也没有停下学习和成长的脚步,也庆幸自己之前对自己基础不扎实的清晰认识与这段时间对基础的认真打磨。\n除此以外,还有一个体会颇深的是面试中的“气场”。面试中个人应该保持一个什么样的气场呢?我想这个问题见仁见智。就我个人而言,我的气场往往是“自信而求是,扎实而敏锐”,所谓自信,是说自己对自己所做的项目、所学的知识具有应有的自信,绝不畏畏缩缩唯唯诺诺;所谓求是,是说自己知道的就是知道的,不知道就是不知道,绝不不懂装懂;所谓扎实,是说自己对自己的项目与所学的知识了解到应该了解的每个细节,而不是夸夸其谈金玉其外败絮其中;所谓敏锐,是说自己能够灵活应用自己的知识来解决新的问题,能够利用自己解决的问题来系统地分析问题、找到其中的关键点。当然了,这样的气场的背后是我多年时间勤勤恳恳的学习,这是无可替代的。而据我观察,我这样的气场配合上我的能力,就可以大大提升面试官对我的评价,我想这也是为什么有些公司面试我的时候,对我的评级会一涨再涨了。当然了,我仍然深知我现在的知识与能力在真理面前仍然不值一提,我仍然有数不尽的东西需要去学习;但我也知道,我的能力已算不错,我已具备较扎实的基础和有一定体系的解决问题的能力。\n最后一个体会就是,看到一些公司给自己开出的非常高的offer,我深知这很大程度上是因为自己幸运地选择了一个在风口上的行业。前方还有无数的知识等待我去学习、还有无数有趣有意义的问题等待我去解决,绝不能骄傲自大、固步自封。前进、前进,永不止步!\n总结 工作半年就辞职找工作,这本是一件非常致命的事情,因为工作经验不多,但又没了校招应届生的身份,同时一些公司可能还会担忧我是不是自身存在什么问题。但是回过头看,我无比庆幸自己当初辞职的决定,这也许是我做过的最正确的决定之一。\n同时要感谢这个过程中一直支持和帮助我的各位朋友与师长。大家总是能在我需要的时候给我以支持。\n也希望我的这些经历和思考能对一部分读者有所启发。\n最后以乔布斯演讲中的一段话作为本文的结束:\n 工作将占据你生命中很大的一部分\nYour work is going to fill a large part of your life\n只有相信自己所做的是伟大的工作,你才能获得快乐\nand the only way to be truly satisfied is to do what you believe is great work\n而伟大的工作就源自你的爱\nAnd the only way to do great work is to love what you do\n如果你还没有找到\nIf you haven\u0026rsquo;t found it yet\n继续寻找,不要止步\nKeep looking and don\u0026rsquo;t settle\n全心全意地寻找\nAs with all matters of the heart\n当你遇到它时,你就会明白\nYou\u0026rsquo;ll know when you find it\n就像那些美好的爱情\nAnd like any great relationship\n随着岁月的流逝,愈加醇美\nit just gets better and better as the years roll on\n所以,继续寻找,绝不止步!\nSo keep looking, don\u0026rsquo;t settle\n ","date":1622385609,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1622385609,"objectID":"a7e43c1bb316fbe064ffcaba256d08ff","permalink":"https://conanhujinming.github.io/post/thoughts_of_hunting_jobs/","publishdate":"2021-05-30T22:40:09+08:00","relpermalink":"/post/thoughts_of_hunting_jobs/","section":"post","summary":"继续寻找,绝不止步","tags":[],"title":"硕士毕业半年的茫茫社招路","type":"post"},{"authors":[],"categories":[],"content":"前言 我在之前的\r一篇文章中谈过我对大学教育的看法,在讲到保持身心健康的时候,我推荐了一门课程,或者说是一门学科,叫《积极心理学》。在过去的一段时间内,我刚好有机会实现了对一些精神专科医院的走访、心理咨询师的走访、和对杭州部分大学、高中、初中的走访。在走访中,我也了解到,由于社会压力的增大(以及去年疫情的隔离),过去几年内社会上不幸得心理疾病、精神疾病的人的数量明显增加,且越来越显出青少年化的趋势,“有60%-70%都是青少年”。这样的形势显然是异常严峻的。\n更加严峻的是,我国对于心理疾病、精神疾病的认识似乎还处在比较“谈虎色变”的阶段,许多人(包括青少年的家长)并不了解心理与精神疾病是什么,更别说是有勇气承认自己(或是孩子)生病了并选择去医院就医。况且,我国的优质心理、精神疾病的治疗资源极为紧缺,这就使得本已严峻的形势雪上加霜。\n针对这种情况,我个人的观点是,合理的治疗极为重要,但疾病的预防也是非常重要的。这篇文章就再来推荐一下我认为对预防心理与精神疾病有很好效果的一门学科,积极心理学。主要来简单介绍一下这门学科是研究什么东西的,学了与实践之后会有什么作用,并推荐一些优质的学习资源,希望能够对一些读者起到帮助。\n当然,我这里要强调一句,我本人并不是学心理学专业的,对于积极心理学的了解仅限于一个普通的学习者的程度,所以这篇文章很可能会有一些错误,还请懂行的大佬轻拍,也请对积极心理学感兴趣的同学参考最后的推荐资源去用更权威的资料来了解这门学科。\n积极心理学是什么? 就我个人理解而言,积极心理学是研究如何让人变得更加快乐的一门学科。许多人认为,一个人是否快乐,这似乎是不可学得的。很多人生而乐天或者悲观,而另外一些人的快乐则似乎很大程度上由环境所影响。的确如此,一个人的快乐程度的确受到先天、后天环境等众多因素影响,但幸运的是,积极心理学的研究证明了一个人的快乐程度还可以由后天个人努力“习得”。用哈佛心理学教授Tal的话来说,就是”它是可学得的 (it is learnable)“,而这句话在我看来,就是积极心理学中最重要的一句话。因此,就算我们目前是一个不太快乐的人,我们也可以而且应该拥有这样的心态来学习和实践积极心理学。\n那么积极心理学是如何做研究的呢?简单来说,积极心理学的研究者会找寻一些”非常快乐的人“,去研究他们为什么能够这么快乐,探寻背后的原因。当研究者有一些想法之后,他们会设计严谨的心理学实验,这通常是找一组实践组和一组对照组,在他们的身上应用自己的想法,并验证想法的有效性。因此,积极心理学是一门严谨的科学,其所提倡的一些让人变得更快乐的方法都是有严谨的实验证明的,这与一些空口白话的鸡汤或者伪科学是截然不同的。\n那么学习与实践积极心理学会有什么作用呢? 这个问题很容易回答,就是能够让你自己变得更加快乐。请注意,这里说的是变得更加快乐,是说你这个人整体的幸福度能够提高。这并不是说学习了积极心理学之后,你就不会再有烦恼、不会再悲伤与忧愁了,那是不可能的,因为你毕竟是人,而不是神。这说的是,你的整体幸福度能够提高,在碰到悲伤的事件的时候也可能不像以前那么难过。\n那么积极心理学是能让自己突然变快乐的黑魔法吗? 当然不是,这世上没有魔法。我这里可以简单列举一些积极心理学研究得出的对提高个人幸福程度的方式:\n 每周3次及以上的有氧运动,每次运动时间最好大于30分钟。\n 微笑,多多微笑。\n 写日记。\n 培养健康的爱情与社交关系。\n 养成良好习惯\n\u0026hellip;\u0026hellip;\n 大家可以看到,这些都是一些“老生常谈”的话题,甚至很多同学可能会表示:“就这?”没错,就是这样。积极心理学研究的并不是什么黑魔法,而且很多研究结论甚至是我们都知道的东西;但是对很多人来说,往往是“听了很多大道理,却还是过不好这一生”,对于积极心理学也是一样,让自己变得更快乐的最重要的一点就是,要相信自己能够变得更快乐,然后去实践这些方法,要有意识地去改变,因为如果你不去改变,那么最终就什么也不会改变。而且这样的改变大概率不是一蹴而就的,而会是慢慢地、一步一步地变得更加快乐的。也许有些不做改变的人最后会感慨,“积极心理学也不过如此,果然没啥用啊!”也希望大家记住,快乐是自己的,追寻快乐也必须也只能是靠自己。\n那么怎么去学习积极心理学呢? 我最推荐的是哈佛大学Tal Ben教授开设的该项课程,这门课在当时还多次破了哈佛大学的选课记录,成为最受学生欢迎的课程。Tal在2004年的课程是有全程录像的,其地址在\r这里 。这门课我是自己看过不止一遍的,抛开内容不谈,Tal本人的人格魅力与授课魅力也绝对是超一流的。\n除了这门课程之外,Coursera上也有几门积极心理学课程,是我的心理咨询师朋友推荐给我的。不过我都没看过,所以也不敢保证质量,这里也一并给出,供大家参考吧:\n \r悉尼大学 Positive Psychiatry and Mental Health \r宾夕法尼亚大学 Positive Psychology: Martin E. P. Seligman’s Visionary Science \r宾夕法尼亚大学 Positive Psychology: Applications and Interventions 祝大家都能追寻到属于自己的快乐与幸福~ 在追求幸福的路上,你我都不孤单。\n","date":1621089822,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1621089822,"objectID":"7cd708f1535eab16a4d297f003bf28ce","permalink":"https://conanhujinming.github.io/post/positive_psychology/","publishdate":"2021-05-15T22:43:42+08:00","relpermalink":"/post/positive_psychology/","section":"post","summary":"推荐一门课程、学科和领域,积极心理学","tags":[],"title":"追寻快乐的人生:积极心理学课程简介","type":"post"},{"authors":[],"categories":[],"content":"这篇文章主要是推荐一个我前段时间无意中看到的视频:Marty Lobdell—Study Less Study Smart, 油管链接,\rB站链接演讲者Marty是美国Pierce College的心理学系的教授,他当年读书期间就钻研出来自己的一套学习方法,并用这套方法取得了全A/A+成绩。Marty认为长时间却低效的学习带不来较多产出,反而容易让人产生挫败感,而科学地高效学习则可以让人快乐又有成就感地实现学习目标。这个一小时的视频就给出了他认为最重要的一些关键点。总得来说,Marty所建议的技巧与我多年摸索出来的技巧基本一致,只恨自己没有当年早早地看到这个视频。这篇文章简单概括一下Marty提出的几点。当然,我强烈推荐去看Marty的演讲,他讲得比我这边写得清楚、有趣得多,我这里只是简单地介绍与推广。\n劳逸结合,每工作一段时间(如30分钟)就休息一下 这个技巧现在已经相当知名了,一般称作“番茄工作法”。其原理相当简单:人在相当长地工作一段时间(如30分钟)之后,注意力和精力会显著下降,这时候就算继续学习、工作,效率也会很低,只是白白地浪费时间;而这时候如果休息5分钟,则注意力可以显著地回升到一个可以继续高效工作的水平。这其实也就是为什么学校课程的安排要在45分钟的授课之后安排10分钟左右的休息了。除此以外,在自己忙活完一天的学习之后,也可以犒劳一下自己,让大脑形成这样一个正反馈机制,下次就更愿意专心学习了。\n创建一个专门的学习区域,并养成在那里学习的习惯 这点我自己就深有体会。我以前特别喜欢靠在床上看书,且不提这种方式对脊柱和颈椎的伤害,单说学习效率而言,我每次一坐到床上就会开始犯困,然后所谓的看书最后就会变成睡大觉。这个现象不单单揭露了我的懒惰,实际上也是有一些科学原理在里面的。人的大脑和身体会对不同的环境培养出专属的“形态”:就好像迪迦奥特曼在碰到敏捷的敌人要变身速度型、碰到力大的怪兽要变身强力型一样,人也会对自己的学习区域、睡眠区域等地方培养出专属的形态。一旦我坐到床上,我的大脑和身体就自动识别出来这是我平时睡觉的区域,那么是时候切换睡眠形态睡大觉了。这样的话,我的学习效率自然是低得可怜的了。因此,Marty建议大家去创建一个专门用来学习的区域,并且一旦学习,就在那个区域学习。如果家里没有书房的话,他也提供了一个小小的建议,就是买一盏台灯放在书桌上,然后用某种专门的台灯颜色来表示自己要变身成学习形态了——实验证明,这个看似简单又有点好笑的小技巧是能实实在在地提升学习效率的。\n知道视觉辨认(recognition)和回忆(recollection)的区别,看了课本之后合上用自己的语言复述一遍 这里说的其实是一个很有意思的现象。譬如我背四六级单词,背诵良久之后,我终于背下了Abandon是抛弃、放弃的意思,我喜出望外,觉得自己英语大成之日已然不远;但实际上可能只是因为我记住了这本单词本的第一个单词是抛弃、放弃,如果换一本单词本,abandon是第三个单词,那我可能就认不出来了,这种情况就叫做视觉辨认(recognition)。而我们追求的其实是不依赖于这个单词在单词本上的位置而真正地记下了这个单词。那怎么确认自己达成了这个目的呢?如果是单词的话,那么可以打乱顺序(借助APP)再背一遍;而如果是其他的知识如数学、计算机等,则可以合上课本,用自己的语言再复述一遍这部分课本讲了什么东西,直到自己能够准确地复述出来,这才确认自己是真的懂了。\n获得足够的睡眠来帮助记忆 这个也是一个老生常谈的话题了。人在睡眠的时候,大脑会做很多乱七八糟的事情,来帮助把白天的临时记忆给存储下来,固化成长期记忆,就类似于把计算机内存中的数据给存到硬盘上一样。所以,如果想要比较好地记住东西,那么就从拥有足够的睡眠开始吧。除此以外,高质量的充足睡眠还有数不清的好处,甚至可以说这是人的“超能力”之一。所以无论如何,让自己拥有充足的、高质量的睡眠吧!\n记了笔记之后,再花些时间来理解自己记了什么 这个是说很多同学在课堂上会疯狂记笔记,然后下课之后就夹着笔记离开教室了;而Marty则建议再多花些时间来“理解”自己的笔记。孔子说过一句类似的话,“学而不思则罔,思而不学则殆”。也就是说,仅仅机械地去学习,那么可能会是收效甚微的,更好的方式则是在学习的过程中,自己也要主动地去思考和理解,这样才能产生更深刻的认识,甚至是提升自己的“元学习”能力,即下次去学新的东西的时候,效率会比之前更高。\n组团学习,把自己学到的东西给别人讲懂 说到这个,不得不提一下现在很流行的“内卷”。我是非常反对内卷的,每次看到许多聪明优秀的学生将时间精力浪费在无谓的内卷中,我就感到非常可惜。相反地,我非常提倡内卷的反面,即组团学习、共同进步。组团学习的好处实在太多太多了。我之前写的一些文章让一些同学感慨说我周围的朋友都是大神,其实我们刚认识的时候也许也并不算多么厉害,但是我们这几年一直组团学习、共同进步,且不说现在实力如何,但比起几年前我们刚认识的时候应该说已经有了极大的成长,这在一定程度上要归功于我们一起在组团学习。这里简单列举几点组团学习的好处:\n 互相激励。很多人比如我就是非常懒惰的,如果自己一个人学习的话,往往最后就变成摸鱼玩游戏或者躺床上睡大觉了,而如果与朋友组团学习,则我们会互相激励好好学习,大家都会变得更努力。 共享资源。一个人自己能够接触到、发现的学习资源是有限的,但多个人一起,相当于每个人都能享受到所有人接触的学习资源。比如我们就会经常互相分享高质量的课程(甚至是一起刷)、有趣有意义的演讲、觉得有价值的书等等。 讨论问题、互相教授知识。对于被教授知识的同学,那自然是能学到更多的东西;而对于教授的一方,也常常会通过讨论的形式更深刻地理解了知识,甚至经常会发现自己之前理解错误的地方(这种学习方法也叫费曼学习法)。 \u0026hellip;\u0026hellip; 总之,我强烈推荐大家反对内卷,组团学习,共同进步!\n对教科书使用SQ3R(Survey, Question, Read, Recite, Review) 这个比较复杂,这里就不展开说了,请大家参考原视频。\n使用助记符来帮助记忆 Marty建议用一些个人的助记符来帮助记忆。坦白说,这个我是学不来,这里就不展开说了。我反而认为视觉化(visually)地联想对我的记忆会比较有帮助。\n总结 我最后再补充一点Marty没提到但我认为对提高学习效率很重要的点,就是养成良好的锻炼习惯。这个也是老生常谈的话题了,这里就不展开说了。最后想说,在学习这条路上,勤奋和努力是不可替代的,但是我们可以用一些技巧,来更高效地利用自己的勤奋和努力。Marty提出的这几点是我认为很有价值和效果的技巧,因此强烈推荐大家花一小时看一看这个视频。同时也要说,不是每个技巧都适用于所有人,因此也建议大家在实践这些技巧的同时,也可以自己摸索出更适合自己的技巧。最后祝大家学习快乐~~\n","date":1619955557,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1619955557,"objectID":"c9a08bee4ca3554e2a12acac1d4cb053","permalink":"https://conanhujinming.github.io/post/the_art_of_learning/","publishdate":"2021-05-02T19:39:17+08:00","relpermalink":"/post/the_art_of_learning/","section":"post","summary":"分享一些能够提高学习效率的技巧","tags":[],"title":"高效学习的几个技巧","type":"post"},{"authors":[],"categories":[],"content":"本文原标题为《一起来通关CMU 15-445数据库系统导论吧~》。前几日深刻学习了某些卖课广告的风格,故想出了这个标题。(受启发于@迟先生的\r这篇文章\n\r15-445 Introduction to Database System可能是数据库领域最出名的一门课程。这主要是因为是这门课的授课老师\rAndy Pavlo多年来一直坚持将这门课几乎所有的资源都开放出来供全世界所有对数据库感兴趣的人学习。虽然在2020年由于一些政策的原因,Andy没能将授课视频公开出来,但是仍然可以轻易地在\rB站上或者\rYoutube上找到这门课2019年的全套授课视频。而且,Andy还提供了2020年project在GradeScope上的评测接口,\r详情见此。因此,即便是自学的同学,也几乎可以完全享受到这门课除了助教以外的所有资源,这对于数据库爱好者和学习者来说无疑是无价之宝~ 这里也向Andy多年来对数据库教育的贡献表示最崇高的敬意Orz\n这里顺带讲一讲Andy的八卦。Andy可以说是计算机知名教授中最有梗的人之一,人称搞事大王。他的梗太多了,以至于这里不得不分列几点:\n Andy的课程有自己的BGM,甚至还有专门的DJ。这个大家去看视频就会见识到了。 Andy是一个乐队武当帮的超级粉丝。他在第一节课最后说了一大堆奇怪的话,大意是“对于你们来说,这学期最重要的是知道A、B、C、D、E这些人”。一开始我听了之后感觉莫名其妙,后来才知道这些人都是武当帮的成员。亮点来了。期末的时候,Andy在试卷上出了一道题,内容是写出这个乐队成员的名字,分值是100分,全部写出来才能拿到(终于知道为什么认识这些人是最重要的了LOL)。然后全班没有一个人写对的。Andy为此还专门发了一条推特:“这是我教学生涯中最尴尬的一幕,竟然没有一个人答对!“ Andy在课上说(翻译):我告诉你们,这世上我只在乎两件事情,第一是我的老婆,第二是数据库,其他的我一点都不在意! Andy在学期中间让学生投票决定他的新发型。 \u0026hellip;\u0026hellip; 应该说,Andy不仅在学术和教育领域有着极高的成就,在玩梗上也是独树一帜。\n八卦讲完了,那么回到正题,这篇文章的目的和之前的系列文章一样,都是号召大家组队刷课。我个人认为15-445是一门比6.S081更需要组队刷的课,因为这门课的测试用例是没有开放给学生的,而且这门课的project由于每年都是新出的,所以在文档描述方面以及设计方面不可避免地不如6.S081那样历经多年打磨的lab成熟,而自学的话又没有助教可以询问,所以很容易陷入一些没意义的坑而浪费大量时间。同样,每一位加群的同学都应该以独立通关15-445的project为目标。这里的独立,不是说大家不能交流,而只能一个人埋头苦干;恰恰相反,交流是非常重要的。这里独立指的是:\n 不能阅读其他人的代码实现,自己的代码必须自己完成。 不能找其他人帮忙debug。 可以交流思路、碰到的问题,但不应该提问一些应该自己解决的问题。例如:有没有人能帮我看一下我这段代码哪里有bug等等。 为了尽量保证每一位入群的同学都是冲着独立通关15-445来的,入群有一个简单的条件,即必须自己先独立完成第一个project,而第二个project至少要拿到80%以上的分数。实际上project0(c++ primer)和project1(buffer pool manager)与后面的project相比都比较简单,属于热身性质的project。我个人认为这样的入群条件能更好地维护学习交流群的单纯性。\n另外,为了保证交流群的氛围,这边也简单写一些规则,如果不愿意遵守的同学就算啦:\n 请不要阴阳怪气他人。 请不要参考他人代码或请他人debug,应该要独立完成Lab。 请不要或尽量少无意义地水群,15-445学习交流群应该供学习交流15-445使用。 欢迎大家在群里提问,**但提问者在获得了满意的回答之后,必须将回答自觉地整理到群内提供的piazza页面,以方便后来的学习者。**因为之前6.S081群里面很多同学光提问不整理,导致有很多重复的提问,所以这次专门规定这一点。如果不主动整理的话,将会被踢出群\u0026gt;_\u0026lt; 另外强调一下,请遵守Andy的要求,不要公开自己的作业代码,如放在GitHub上。 之前不熟悉C++的同学,可能做project0会遇到一些困难,因此这里提一下这个project需要了解的C++知识:\n 类与继承 虚函数 模板 stl里的智能指针,这里的话特别是unique_ptr std::move语法 我注意到project1的一个坑,这里也给出来,避免大家再次踩坑:\n UnpinPageImpl里如果page_id不在page_table,那么要return true而不是false。实际上这个函数的描述是正确的,但我个人认为这个行为有点反我的直觉。 想到其他的坑点会再补充。 好的,那么我就先写到这里,感兴趣的同学请达到入群要求之后加群交流~群号为878405016,加群的时候请附上自己在gradescope上的leaderboard name~~并且在加群之后的24小时内主动把截图发给群主,否则将会被踢出群\u0026gt;_\u0026lt; 这边也强烈建议大家加一下课程的\rDiscord channel,里面也有很多很好的讨论~\n谢谢大家啦~~\n","date":1618928074,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1618928074,"objectID":"666a490b5498a326158c6f1c3e7e15e4","permalink":"https://conanhujinming.github.io/post/cmu_15_445_intro_to_db/","publishdate":"2021-04-20T22:14:34+08:00","relpermalink":"/post/cmu_15_445_intro_to_db/","section":"post","summary":"来一起通关15-445吧!","tags":[],"title":"CMU 15-445:知名教授历时多年打磨,数据库神级课程限时免费!","type":"post"},{"authors":[],"categories":[],"content":"简介:这篇文章是在我上次写了\r信静的故事,有位同学分享在评论区里的。这篇文章的作者的经历非常曲折而传奇。他先是考取了中专,而后回到自己毕业的初中当了数年初中老师。结果因为自己曾经的同学与当时的同事的陷害,被逼无奈离开自己工作的初中,开始了一段时间的流浪生活。之后作者决定自考本科,在考上本科之后又决定考研到浙大光学,于是成为浙大99级的光电研究生。最后,作者申请到了伯克利的光学PhD,并前往伯克利继续求学。这篇文章就写在作者读PhD的第一年,是一篇自传性质的文章。我看了这篇文章之后深受触动,尤其是看到作者的一些经历的时候也联想到了自己一些的相似遭遇(如被陷害不得不与校长闹崩、自己一个人在宿舍时的情绪崩溃,还有流浪时睡火车站等),也从字里行间感受到作者的求是精神与永不向挫折低头的少年意气。\n原文是发在飘渺水云间(88,当年的浙大校内论坛)上,由于我看到转载的网站的排版十分糟糕,故我重新整理了一下排版转载至此,希望也能对其他同学有所启发或激励。\n ——往事随风飘飘\nopto以拙文献给所有关心和帮助过我的人\n0. 序 像我这样平淡了半生,并且也许将平淡一生的人,居然不知天高地厚想写一个自传似的东西。姑且不管他人怎么瞪眼睛吹胡子,就连自己都觉得有点滑稽。只是由于多年教书的职业病后遗症,比较爱卖弄嘴皮子,并且经常有玩弄文字的冲动。身在异国他乡,平时想找个人聊天都比较难,想打电话还得考虑别人是否有时间有闲心聊,郁闷得要紧,想找个地方自作多情卖弄风骚。 一直觉得BBS是适合我这样时常无聊的人折腾的地方,所以也就不管三七二十一,决定揭开自己的伤疤,回忆一下尘封已久的往事。这些发酵过的农民菜坛子里的东西味道多半不太适合儒雅之士,也不适合那些聪明的贤达。如果那些跟我一样当过贫苦农民、在火车站卖过稀饭、或者和民工一起睡过街边的人看后能和我一样有些许的感慨,我就心满意足了。是为序。\n1. 童年 童年留下来的印象只有两个,饥饿和父亲的早逝。 那些和我一样出生在70年代初的贫困农村家庭的兄弟姐妹应该还记得那时的生活是什么样子。父母整天在生产队里干活,分得的粮食却根本无法满足一家5口的需要。经常在想当年母亲为什么坚持要把我生下来,只是一直没有勇气问。母亲生我前几个小时竟然还在生产队出工,按照她的迷信说法,我是天生注定的苦命。每次听她说起这个,我都无言以对在她面前,我只能收敛起我狂放而浮躁的夸夸其谈,保持沉默以示认同,同时在心底发出强烈的没有目标也没有结果的抗议。家里时常揭不开锅,除了营养不良,我的童年几乎没有什么我还记得的东西。时至今日,我也还没有养成吃零食和送人礼物的习惯,因为在我的记忆中,这些都是富人的事情。那时最大的礼物可能就是春节时姨妈或舅舅等长辈每人给的一毛压岁钱,所以每到除夕就兴奋得睡不着觉,想象着那些花花绿绿的小纸片揣在怀里的幸福景象,和母亲一起“守田埂”(可能是迷信的传统吧,好象说除夕之夜睡得迟,第二年的田埂便不会被洪水冲跨),偶尔还会有几个糖果作为奖赏。幼儿园对我们这种真正的穷人来说只是一种奢侈的地方,幸好当时上学基本上相当于免费(当时一学期的学杂费好象不到两元钱),我在7岁那年幸运地进了村里的小学。感谢父母的英明, 我没有象我的另一些儿时的伙伴那样成为文盲。\n父亲在\u0026quot;病床\u0026quot;上睡上一年多后,还是撒手去了。那一年我才9岁, 刚好农村土地下放有点期望过好一点的日子的年头。到今天我也不清楚他究竟死于何种病症。当时全村只有一个\u0026quot;赤脚医生\u0026rdquo;,连最基本的药都找不到,更不用提什么医疗设备了。而城里的医院,当时似乎只是\u0026quot;工人阶级\u0026quot;和\u0026quot;人民的奴仆\u0026quot;们才能出入的地方。当我嫩弱而瘦小的膝盖跪在父亲的灵堂前时,我更深地体会到了\u0026quot;人生来就是不平等的\u0026quot;含义。我默默地接受人们投来的可怜我的眼光,突然知道了父亲的烟枪打在身上的痛原来是一种幸福。当我戴着孝布去看他最后一眼时,我多么希望他能从那个木箱子里站起来重重地在我头上敲上几烟枪啊!!!可是此时的他却那么地安详,他那粗暴的脾气竟然就这样消失得无影无踪。我很快就知道了,消失的,还不仅仅是他粗暴的脾气。\n当吊唁的人们散去时,母亲的泪已经流干了。面对四壁空空的茅草屋,我却哭不出来。泪,只能往心里流!此后的日子无须多说,我还记得很清楚的一幕是:背一个跟自己差不多一样高的筐跟在母亲后面割高粱穗,回家用簸箕搓出还没成熟的高粱籽,再和母亲一起推石磨做高粱羹。\n2. 抑郁少年 日子就这样不紧不慢地过去,到了小学五年级。同班的一个女生的妈妈是学校的老师,想让她提前一年去考中学。不知从什么地方来的激情,一时冲动我也决定跳级考试,还跑到毕业班去上了两天课。我的两个老师当然不愿意我考上,因为那样会影响他们的升学率。结果毕业班的老师碍于面子只好把我赶出教室。当我拿到镇里最好的中学的录取通知时,他们已经无可奈何了,路上碰到还是满脸笑容地祝贺。只是我并没有觉得这是值得高兴的事,因为我知道母亲拿不出录取通知书上要求一次付清的¥25学杂费。但是母亲又英明一次,决定借钱让我赶在截止日期以前报名。当时哥哥已经在外打跟着一个木匠师傅当学徒去了,母亲觉得等他过年回家时这笔债就不是什么大问题。于是我有了一生中第二次刻骨铭心的经历,当时的一幅幅场景,和父亲葬礼上的镜头一起,成为我近二十年来时常回味的电影剪辑,让我细细体会人生。\n那是一个酷热无比的盛夏午后,镇中学报名截止的前一天。赤脚的我跟在母亲后面,在几近40度的高温烧烤下,去生产队里\u0026quot;有钱人家\u0026rdquo;(相对于当时穷苦农民而言)借学费。走了一家又一家,问了一户又一户,却没有人愿意把钱借给一个一贫如洗,带着三个孩子的寡妇。当我腹中和手中都空空如已地回到我们的茅草屋时,我已经分不清身上哪些是汗水哪些是泪水了。那些不可一世的鄙夷的表情,在我的脑海中定格为永恒。\n可惜我太不争气,用千辛万苦才从亲戚家借到的学费,换来的是第一学期三门课不及格。由于没钱买学校食堂5分钱一份的菜,虽然学校离家三公里, 我和附近一帮年龄相近的伙伴每天中午都回家吃饭。我们在碎石和泥土铺成的公路上,每天走四趟,天晴时呼吸漫天的灰尘,下雨时带着一身的泥浆。于是和这帮哥们有了阶级感情,天天在一起鬼混,要么在上学在路上打牌,要么在回家的路上去偷别人的水果。母亲从来不管我的学校的成绩之类的事,她觉得她尽到责任了,我要怎么做是我自己的事。并且那时附近也没有几个读书跳出龙门的先例,母亲相信命,所以不侈望我能有什么出息。只是希望我不要象她和父亲好样成为文盲,并且等我长大种菜卖时要算得清。第二学期有所好转,打牌依旧,但上课时开始真了,所以课程全部及格。上学的路上帮着哥哥和母亲将他们准备好的菜搬到镇上,周末帮着带哥哥的小孩。哥哥在外面跑了两年,认识了一些\u0026quot;狐朋狗友\u0026rdquo;,这帮人虽然没读过多少书,但在我们那种偏远的农村,还算见过世面的人,也算是有\u0026quot;学识\u0026quot;了。这帮人经常在我家进出,对我多少还是产生了一点影响,使我知道了外面的世界很精彩。于是跳出龙门的想法开始发育了。\n但哥哥嫂嫂明确说过不会让我上高中,所以当时唯一的希望就是上中师中专。在那个时候的农村甚至小城市里,最好的学生都想考这种现在请都没人去的学校,考不上才去上高中。初一暑假,跳出龙门的决心已下,并且找了几个志同道合的同学准备\u0026quot;共同奋斗\u0026rdquo;。我还不计前歉帮一个小学时扭伤我胳膊还不赔医药费的家伙,因为他当时也和我\u0026quot;志同道合\u0026quot;了,让我班主任老师接受他从另一个比较差的学校转到镇中,条件是多交¥80什么什么费。这位先生中考没有如愿,只好去念高中,后来师专毕业成了我的同事。他来上班时我已经在单位算是有点资格了,帮了他不少忙。可惜此君不但不报恩,反倒在半年后给我来了个马后炮,使我彻底放弃了那个工作,离开了那个鬼地方。现在看来倒也不是什么坏事,这些是后话。 总的来说,初中的三年过得很抑郁,与哥哥的年龄差距太大,基本没有成年男人和我交流,给我人格上影响,所以我身上除了遗传的一点父亲的性格暴躁的东西外,没有我们那个家族的男性特征。除了与很熟悉的人在一起,表现得非常的孤僻和害羞,据当年的女同学说,我在路上碰到她们都要脸红,更不用说跟她们说话了。初二开始全面改邪归正,不再跟那帮玩友打牌,不再和他们一起跑去看电影(那时农村有什么大事时,经常在晒场上放露天电影以示庆贺)。我把压岁钱买了一些纸自己做成笔记本认真记录不懂的东西,买了一些电池和小灯泡以备晚上母亲熄灯后好在被窝里看看书。初三以前家里没通电,母亲点油灯很省,只让火苗燃得很小,后来用电灯家里也基本上只用15W的,并且晚上必须早早熄灯, 我就用我的自制小电筒对付母亲过分的节省。\n由于受\u0026quot;学好数理化走遍天下都不怕\u0026quot;的影响,平时文科根本就不学,所以成了\u0026quot;跛脚鸭\u0026rdquo;。特别是英语,因为以前中师中专入学考试不考,我完全就放弃了,最后中考也只得了59分,幸好当年只计算20%,影响不大; 数理化则考了一个等差数列(98、99、100)。最终我以全校应届生最高分如愿考入县师范学校, 作为镇上最好的中学,全校120个人考上中师中专的只有9个。我成了附近每一个靠 \u0026ldquo;读书跳出龙门\u0026quot;的人,有\u0026quot;铁饭碗\u0026quot;了。\u0026ldquo;铁饭碗\u0026quot;这三个字在当时的农村, 还算份量不轻。我想这是我这一生做过的事中对母亲最有精神意义的了,周围的人忽然都对她尊敬起来,包括那些当年以鄙夷的眼光斜视着我们母子的\u0026quot;有钱人\u0026rdquo;,她的精神也似乎开始变得很好。并且对母亲而言,我后来考研上浙大和考G&T出国对她已经没有多少意义,因为她觉得我在家乡工作是最好的,并且她也不知道读研究生和出国究竟是什么东西。当我三个月前离开她时,我只能给她说我到美国工作,可以多挣点钱,我无法给她解释清楚花几年时间读PHD的意义。\n总而言之,当我拿到师范学校的录取通知书那天,天空似乎突然变得明亮起来,生活似乎不再那么灰暗,特别看着守寡为了几个孩子辛劳多年的母亲脸上的笑容时感觉特别好。走到每个地方都有人和我打招呼,对我微笑,一下子觉得自己腰杆比以前直,觉第一次进城竞赛时穿的屁股上贴了一个大圆的裤子也不再难看了。现在看来,这是多么的自以为是和阿Q啊!!!\n3. 无知青年 可悲的是这种阿Q式的自我感觉良好一直持续了多年。 没有任何人给我浇冷水,我就陶醉在这种以为是的成就感中,在师范学校里开始过着麻木的生活。那时人实在很小,相当于大家上高中的年龄,又孤陋寡闻,成了所了名符其实的井底之蛙。我个人觉得,在收费这一点上,那时国家的教育政策比现在不知道好多少倍。中学的学费很低,而中师和中专的补贴基本上够比较省的学生生活了,更不用说当时上大学有多么的幸福!我当时的补助是每个月¥28的菜票,外加30斤粮票,再用开水票跟女生换点粮票和菜票基本上就不向家里要钱了。非常感谢那些和食堂的职工经常打架的师兄们,他们使当时食堂的饭和菜的量能够得到很好的保证。在这种天天有肉吃,又有大量的自由时间的环境里,我这个受穷受难十几年的小青年开始\u0026quot;腐化\u0026quot;了,到高年级时相对于当时的条件简直就是玩起了小资。80年代中期,写诗是一件很时髦的事;而我们的文学老师作为当时一个刚从大学毕业的文学青年,整天跟我们吹嘘海子的诗和《河殇》这类的东西。我对诗、书、棋、琴、画和运动的爱好始于此。看看我发表的第一首诗的题目就知道年少的我多么的滑稽了:《我们相爱于墙上》,其实那时连女孩子的手都碰过,更不要说约会之类的事了。那时我很推崇印象派和抽象派,这首诗也是印象派泛滥的产物。后来也写过一些比较现实的东西,还记得有一首发在校报上的诗叫《农民的儿子》,不过总的说来,那时玩的这些东西都很幼稚。倒是在书法上有实质性的进步,从初中时经常被抨击的\u0026quot;鬼画符\u0026rdquo;,到后来参加全国书法比赛得一个安慰性的奖励,我已经很满足了。棋和琴的水平更不过尔尔,直到现在,象棋和围棋的水平都不敢卖弄,而琴则没有超出师范毕业时用吉他自弹自唱一首《大约在冬季》的水平,风琴和画则更是早就还给老师了。唯一保留下来的是运动的爱好,几天不动就脚痒痒。还好,师范的课程要求面很宽,除了英语,从哲学心理学教育学到数理化生到语文逻辑体音美劳都得学,只是学得都很简单。小资之外,我的总成绩在全年级180个人中从来没掉出过前三。当时的理想就是做一个好老师, 所以似乎没有什么前途好担忧的。\n可我还是在不知不觉中就卷入了一起所谓的\u0026quot;政治事件\u0026rdquo;。当年学校罢课有好几次,其中最大的两次是89年在全国性的风潮中那一次和几个流氓追到学校打年青老师。90年五四,本来下午要放假,可是那个为了我们准备全省联考安排的数学老师要让全班补课。上午最后一节课是体育课,在训练时一帮男生就商量着说大家都不去然后跟老师撒谎说大家都不知道,当时几个班一的负责干部都在起哄,我也就跟着随大流。结果有一个因为曾经偷东西被处分的男生为了尽早取消处分出卖了大家,就他一个人去了,并且如实汇报了体育课时大家说的很多话。学校以\u0026quot;纪念89事件为的恶性事件\u0026quot;为名,将我和另外几处班委干部捉到学校办公室\u0026quot;审\u0026quot;了一个通宵,要我们\u0026quot;交代\u0026quot;问题。虽然后来写一个反省不了了之,可以我们几个所谓的负责人的操行都没能得优,这也成了我三年中唯一没能拿一等奖和三好生的一学期,并成了我毕业保送大学的唯一障碍。我对政治的反感始于此,虽然我很关心政治问题,但自己绝不参与。\n此后经常一个人跑到离学校不远的山上喝闷酒,并且开始\u0026quot;思考\u0026quot;一些没有答案的所谓的人生问题,诸如人生的意义是什么?什么是幸福?我想要过什么样的生活?三十岁时我会是什么样子?时光就这样流逝,正如在这里灌水时青春流逝一样,我自己浑然不觉。转眼就实习了,保送大学没希望了,老老实实先到小学做\u0026quot;人民教师\u0026quot;去。实习的一个月过得很爽,我们11个实习生和学校的领导和老师关系搞得很热乎,还跑到校长家去帮他插秧(校长夫人在农村)。我们轮流回家自带肉和菜之类的东西,学校食堂统一免费做,每天下午放学后就和学校的老师打球,小日子过得红红火火。正好自己平时很喜欢的一个MM和我在一个实习组,那种感觉不用我说大家都可以想象。加上小学生在实习老师面前都很听话,那是我教书生涯中感觉最舒服的一段时光。实习结束时,学生们抱着一包包礼物送行,我这个一向比较冷酷的大男孩居然也和那些小孩子们一起哭了。\n带着幸福的眼泪和满分的实习成绩回到学校,感觉教书育人的日子其实还真的不错呢。那时候哪里知道,有时候现实的生活和模拟的生活差距是很大的。几年后当我得知那个我喜欢的MM嫁了一个暴发户的初中都没毕业的儿子时,我除了麻木地听着最爱的老崔的\u0026quot;一无所有\u0026quot;和何勇的\u0026quot;姑娘姑娘,漂亮漂亮….\u0026ldquo;外,不能有任何反应。 我这个弱智的小青年,自以为写得飘飘洒洒的的装帧精美的书法作品似的情诗可以战胜金钱,以为自己忧郁感伤的吉他伴奏的男低音可以抗衡权势,自以为……\n当我渐渐在现实中清醒过来的时候,才发现自己用心良苦的书法情诗只不过是一张废纸,自己沙哑如破弹簧的嗓子制造的只是噪音……这就是当年的无知青年!\n4. 生活的课堂 现实生活的课堂才是真正学知识的地方,因为这种知识通常不可能在教材中找到,能够真正传道、授业还解惑的活生生的老师,我还真没遇到过,能够比较好的授业就已经不错了。 不管多么的无知和幼稚,18岁的我完全独立了, 从三年前155cm40kg瘦小如非洲难民且不善言语的小男孩变成了171cm60kg灵活如猴子活跃如麻雀的可爱青年, 回到自己毕业的中学开始误人子弟,从此没在家里要过一分钱。虽然一开始就三个月没发工资,虽然只能住在一间空荡荡的漏雨的土房里,心情还是比加州的阳光还要亮丽。初入社会和真正地独立生活的新鲜感强烈而持久。一开始学校的两个领导似乎都不太高兴我的来临,因为他们各自盘算着要我的同学中他们喜欢的人。也许他们是正确的,因为我那两个同学后来都在我开始流浪前就当上了另外两所学校的校长,事实也证明了他们的\u0026quot;领导\u0026quot;才能。\n毕业的时候哥哥不在家,母亲又不懂分配中的人情世故,虽然我在师范的成绩是Top3/180, 我知道这些东西并不起决定性作用,只好自己去挖掘一些\u0026quot;关系\u0026rdquo;。搞定后,我第一次离开泸州跑到宜宾找舅舅买正宗的五粮液以示谢意。呜呼,无知的小青年竟然也知道用此等卑劣手段谋利。稍微感到宽慰的是,最终我还是凭着自己教书方面全面的实力征服了领导和同事,后来竟然让我连续上大家都明争暗抢的毕业班。第二年我就分到了当时学校单身职工最好的套房,虽然只是一室一厅加橱卫,比起那间一下大雨我就担心墙会被冲跨而睡不着觉的土坯屋,简直就是天堂了。\n第一个月做饭就算坏了三口锅,成了当时镇上的一大笑话。当时用\u0026quot;蜂窝煤\u0026rdquo;,做饭只能在土坯屋外,每天下课后把米放在锅里后我就在土坪球场上去消耗自己的还没用完的体力。有时玩得起劲就忘了锅里的事,饭烧糊了自己也不知道,严重的一次锅被熔成了一团。另外两次烧坏锅则是那帮淘气的学生做的好事,乘我不在家时把我盖好的炉子打开。赶集时母亲经常会给我送一些菜和她认为家里比较好的东西,让我改善生活。虽然那时我只有¥87.5的工资,物价之低足以让我在小镇上过比家在农村的哥哥好得多的生活。不过我无法阻拦她,在这种事情上她的固执比的的固执还要强几个数量级,也许是她只遗传了一小部分给我的缘故吧。我只是把学生们放在和自己同等的地位,毕竟我也才从那里毕业三年,又有好多学生的父母都是熟人或者他们的哥哥姐姐是我同学,所以我和学生们的关系非常要好。他们经常跑到我的土坯里来喝水要茶或是借书问问题,打球总要拉上我上场或是当个裁判,办板报总要找我去指点和写几个漂亮的标题。没想到自己的友好很快就给自己带来了麻烦。有一天校长亲自登门造访我那地面上都长了青苔的土坯屋,搞得我受宠若惊;我被善意地告知有人造谣说我和学生过于亲近,建议我保持和学生的距离。天啊,一心一意想做个好老师,教育学和心理学书上都说和学生们保持良好的关系可以树立积极的教师形象,提高教学效果,却被这样当头打了一捧。幸好有人帮我证明那个谣言中的学生是我亲戚,否则我自己真不知道如何处理这种事情。于是我重新启用自己冷酷无情的面孔,上课很少有笑容,下课也不和学生们掺和在一起,以为这下应该没事了吧。没想到过了两个月又有一班主任说她班上一个学生辍学是因为被我吓走了。事过之后,经过别人的点拨,我才渐渐明白其实是自己当时锋芒毕露,又不懂一些人情事故,个别对我心怀鬼胚的别有用心的人想打击我。于是我开始学习在任何人面前都表现得谦逊和稳重,不要开口就把一些不该说的话说出来了,要用间接的隐晦的方式表达自己的欲望和不满,要……\n可是我无法改变自己骨子里的一些东西,可能是母亲的基因在起作用,说话总是直来直去,喜怒哀乐溢于言表,学不会象我的有些同事那样在领导面前明明是红色也偏要说成是领导喜欢的蓝色。我不去斤斤计较那点奖金,我不在乎能不能得到升迁。由于这种始终如一的爽快,我和领导及大多数同事的关系还是处得比较和谐。日子一长,同事们的言传身教使我慢慢染上了一些那种小地方的恶习。不思进取,无聊时就喝酒、打牌和赌钱。我知道母亲对赌钱深恶痛绝,一直死守着这道关口,绝不卷入。喝酒尽力去培他们,打牌不赌钱我就参与,打球下棋只要我有空就来,吹牛更是乐在其中。我一生的黄金时间就这样被挥霍!!!其实自己也时常对自己感到不满,可是一直没有勇气跳出这个泥潭。现在看来,当时自己已经几乎不能自制,很难拒绝朋友或同事的\u0026quot;邀请\u0026rdquo;,通宵吹牛不知道有多少次,下棋来赌喝酒达旦也不是一回两回,醉得死去活来的情景现在还历历在目。平时自己一个人能安心练字或弹琴的时候都很少,白天一个人时基本上都泡在噪声如雷的Rock\u0026amp;Roll中。这种状态下的保留下来的成果就只有一堆废纸, 一些自以为是诗和小说的充满\u0026quot;激情\u0026quot;的草稿和一些仅供自己欣赏的书法作品。值得庆幸的是我还没有完全放弃自己做一个好老师和拿一个本科文凭的\u0026quot;理想\u0026rdquo;。有时夜深人静时还看看书。就在这种混混的状态下,终于在工作四年后拿到一个中文(自考)和一个物理教育(函授)的专科文凭。这在那种单位已经是破天荒了。虽然这四年没学到什么书本上的东西,但奠定了后来想认真读书时的基本条件。\n糟糕的事(在看来也许是好事)不经意间在第四年发生了。自从我住进校长隔壁的小套间,我就觉得校长夫妇对我非常关心。他们经常在我从农村的老家或是出差回到学校时盛情邀请我和他们一家人共用晚餐,他们的小女儿也正好在我教的班上,我也经常耐心地给她补习功课。如果我离开学校的时间比较长,通常会把钥匙留在校长家,这样他们有客人时可以用我的房间。总之,我们当时的关系让我觉得非常得意,不用拍马屁也可以处理好和领导的关系,真是一大快事。\n第四年,我从高中考入师专的同学成了我的同事。此时学校已经不提供住房,他们租的房子离学校又有一段距离,我的寝室就成了他们办公、休息和做饭的地方。其中前面提到过的那位曾经\u0026quot;志同道合\u0026quot;的先生更是把我本已凌乱的房间来了个彻底搅拌,当我从成都函授学习一个月后回到学校时,我几乎已经忍无可忍了。我用一种比较委婉的说法让他把所有的东西从我的房间搬出去。我很快就知道我也许做错了。当学校领导层的同志找我谈心,告诉我他们例会讨论的话题时,我彻 蹦溃了。我居然成了学校领导层例会的中心话题,我那位被我赶走的同学向校长报告说我曾经推心置腹地说过校长想把他大女儿嫁给我被我拒绝了!!!当然其中很多具体细节都是我出去流浪归来时知情人告诉我的,此时校长已经换人。我可以理解校长同志当时怒火中烧的感受,那种在下属面前相当于被当面羞辱的感受。我知道我没有任何解释的余地,虽然我可以对天发誓我没有说过那种弱智的话,因为我突然想起几个月前我的初中老师兼同事和我一起在校长家喝醉后在我房间里和我\u0026quot;谈心\u0026quot;时关心我的人生大事时的情景,关怀备至地问我觉得校长的大女儿怎么样。我突然明白其实校长一家对我的关心也许不是一般的领导关心群众,不是一般的长辈关心后辈,不是一般的同事关心同事,那个老师也并不是真的醉,不是老师关心学生,而是一次用心良苦的安排。而我,依然幼稚如旧的我,两年中竟没有感觉到半点异常,并且不加思索地向自己\u0026quot;喝醉\u0026quot;的老师说:\u0026ldquo;我还年轻,不急不急。\u0026rdquo;\n我知道我没办法再在那个地方呆下去了,整个95年暑假我都在痛苦地作思想斗争,何去何从?虽然早已经对那个单位满意,虽然自己也想出去闯一闯,可让我就这样含冤放弃几年青春换来的一点东西,放弃我的学生,放弃满是血汗的职称和在小圈子里的名声,放弃近在眼前的三室两厅的住房,放弃自己曾经引以为荣的工作,对于当时的我,并不是容易的事。我无法向母亲解释我放弃的理由!我无法向自己交代四年的青春!我最终还是选择了放弃,并且选择了一个看起来很极端的方式。我先在暑假快结束时搬出了校长隔壁的套间。然后在秋季开学后的第一次全校老师大会上,我故意指责校长工作中的一些失责,然后开始和他拍着桌子对骂,直到把事个大会吵散伙。其实只是想给我们都提供一个台阶,因为我知道在这件事中他也是无辜的。这样我堂而皇之的走,他也可以有一个抨击我的理由。虽然是自己一手导演的戏,回到自己的房间我还是无法再控制自己,眼泪如决堤的洪水,一发不可收拾。我抱着一堆刚刚收到的和别人合写的中学物理教学参考书,任泪水奔流,直到所有的书都浸透。这是成年后第一次,也是到目前为止的最后一次彻底的宣泄。在自己的泪水过后,我感到自己又向成熟迈进了一步。\n生活是我一生最好的老师。\n第二天,在我生日的时候,我收拾起一个小小的牛仔包,写了一封简短的信托人转交母亲,然后离开了那个让我曾经牵肠挂肚地方,一路上默默地唱着:我挥一挥衣袖,不带走一片云彩。除了两个铁哥们,我没有对任何人说。我不敢回家向母亲说我的打算,我不敢去向学生告别,因为我知道,如果我站到讲台上,我的泪水又会 豪某稍 。我无法向那些天真无邪的孩子解说我对人生的感受,还是让我故作坚强的背影留给他们吧,所以,我在他们刚刚下课走出教室的时候,让我的背景从他们眼底从容地滑过……想起他们,我的泪水竟又不听使唤地往外涌,就象他们涌到我寝室来吵闹时一样,不听话……\n那一天,我又写下了如下的文字:\n站在历史的车轮之上张望\n忧伤已经死亡\n复活季节的到来\n漫长。于我歌唱\n写下一些毫无情节的印象\n人群如断线的风筝\n遗忘了自己的方向\n在浩浩荡荡的洪流里追波逐浪\n理想的旗帜之下欲望膨胀\n茫然站在历史的车轮之上我东张西望\n历史的一条裤腿 在寒风中\n飘扬。先哲的嗓音依然洪亮\n轻轻地,我退出舞场\n到一个荒凉的地方,种植思想\n4. 流浪生活 就这样带着一身的憔悴来到了重庆流浪。选择重庆也许只是潜意识里觉得姐姐在那里,万一不行了不至于饿死街头。所谓世事难料,是我在重庆的流浪生活的一个很好的注解。我向姐姐姐夫撒谎说,自己停薪留职出来边打工边读书来了。他们虽然也没受过多少教育,毕竟在大城市里呆了十来年了,只是用疑惑的眼光看了我一会儿,倒也没说什么。可是象我这样一个穷山沟里出来的满脑子诗书理念的教书匠,要找个觉得满意的工作,谈何容易!于是一边找工作,一边开始在重庆火车站卖稀饭。几天下来觉得其实收入还真的很可观呢,一天可能净收入¥50-100,比起当时教书几百快钱一个月, 简直可以算高薪了。可以好景不长,姐姐提供的锅碗等家当,在一次城监的扫荡活动中被统统装进了警车。我的伤口上刚刚长出来的一点希望,就在警车的笛声中被收割了。\n祸不单行,姐夫刚好又跟他的单位的头头搞僵了,失业在家。晚上喝洒,不知道是他喝醉了还是我喝醉了,老觉得他的话中带话,似乎说我在那里依赖着他。我无言以对,只能慢慢口味酒中的苦味,心里想着,这就是生活。从此对比较苦食物尤其钟爱,如苦瓜、啤酒和苦丁茶。晚上又跑到火车站去,不是去卖稀饭,因为我已经决定寻找自己独立的空间了。那一晚和民工们睡在车站,旁观着他们苦中取乐的各种把戏,似乎又明白了很多道理,幸福不是我想象的富人才有的专利,如果我改变一下自己的心态,也许情况就不一样了。\n第二天到 称 坝的一个职介所去找工作,穿上了西装,系上领带,还在头上弄了一点摩丝,随身带了两个毕业证、自己发表的诗、小小说、书法比赛的获奖证明和两幅书法作品。没想到这些无聊时玩的把戏,竟然在我人生最失意的时候派上了用场。一个重大的开公司的教授正好到中介公司来招一个办公室的助理,一看我的打扮和带的东西,马上决定要我了。虽然只给了¥500的工资,提供吃住,公司又在大学里面, 我毫不犹豫就接受了他的条件。只是我没有想到,这成了我这一生中继考上师范后的最重要的转折点。\n公司的办公室的提供的宿舍(其实就是学生宿舍)都在重庆大学里,于是我开始天天呆在大学里,吃住行玩都与\u0026quot;天之娇子\u0026quot;们共用着学校的种种实施。这是一段虽然短暂却不失美好的时光。教授在电气工程系还算有点名气,我也通过他认识了不少一直让我敬仰万分的教授和大学生。我在公司的职责说白了就是当文秘,负责客户的函件处理的第一个流程,给老板起草信件和公司宣传材料和规章制度,接待来访的客户……虽然公司只有几十号人,办公室里的活却还真不少。用现在时髦的话来说,那是一个高科技公司,公司的产品大都是基于教授的几个专利。于是我有机会接触那帮技术人员,这是生平第一次目睹并参与科学和技术创造财富,基本奠定了我接下来几年绝地反击的思想基础。我开始全面放弃多年来自我培养的中国传统文人式的那些兴趣和爱好,晚上有时间就跑去听听自己还算比较熟悉的数电和模电之类的课,因为我不想老在办公室干打杂的活。\n这段时间完全重建起了我的自信和对生活的激情。在与\u0026quot;天之娇子\u0026quot;们接触的过程中,收获很多,同时也把他们在我心目中\u0026quot;神圣\u0026quot;的地位还原到了比较合理的认识。我认识到其实我并不比他们笨,如果我象他们一样,在读书这一点上应该不会比他们差多少,于是我开始自我安慰,又开始有了一点阿Q的精神,只是此时的阿Q已经不再是年少时狂放无知的阿Q了。我是一块不起眼的鹅卵石,虽然生活将我的棱角渐渐磨去, 但剩下的部分却也因此而变得更有韧性和强度,变得更加内在。\n就是在这样的背景下,Z走进了我的生活。Z是重大经济系的高材生,可能是我一生中比较了解的女孩子中最聪明的一个。我不得不承认我对她是一见钟情,她给人的清水出芙蓉般的感觉在三分钟内就击溃了我用冷漠树起的防线。虽然明白自己只是一个来自农村的民工,只是一个空有诗人气质没有诗人才气的流浪着的小青年,但我还是无法抑制来自内心深处的那种触电的感觉和冲动。于是我开始隔三差五地跑到她寝室外面去找她,这是我一生中第一次大胆主动出击博取女孩子的欢心。我用自己那点可怜的工资买她喜欢的吉他、书和CD,并且史无前例地特别在意自己的外表和形象。我生平第一次为了自己喜欢的MM走进了花店,小心翼翼放地把自己得意的书法作品兼情书系在包装纸外。\n情书写得很简短明快,正如她的风格:\n日子悄无声息地重叠。我毕生的信念,在那个阳光明媚的下午坚定起来。月色如银,我看见那朵并不艳丽的梨花渐渐绽放,秋日的脚步在眼光里逐渐有力。晶莹的露珠,小心翼翼地降落,在花瓣上散发清香。沁人心脾的清香,源源不断…… 所有的伤与痛就这样悄然而逝。背负雪花或月影,我看见夜里的花朵成为一帧风景,我是风景外那根遍体伤痕的枯藤,凝固的姿势微微前倾。\n一句话,我一头潜入了爱河,并使出混身的解数拼命地在爱河中搏击。为了陪她看《Gone with Wind》,我对她撒谎说自己没看过,其实已经是第三次温习了。我偷偷从公司跑出来去帮她买早饭却被老板碰了个正着。我打肿脸充胖子,打的陪她到鹅岭公园欣赏山城有名的两江夜景……只是我没有想到,爱河的水性与自己多年来熟悉的池塘是如此地截然不同。当我这个从五岁起夏天就天天在池塘中\u0026quot;踩水\u0026quot;的游泳迷在爱河中被水呛得天昏地暗的时候,我才知道就算我一次潜水能达100米,我在爱河中也只能被淹死。\n是的,我太没有自知之明了,以一个农村出来流浪的穷教书匠的资格,竟然找了个\u0026quot;天之娇子\u0026quot;里的一个\u0026quot;天之娇子\u0026quot;做GF!经历了那么多,怎么还象小孩子一样天真和幼稚呢?!\u0026ldquo;让它随风去,让它无痕迹,所有快乐悲伤所有快乐统统都放弃……\u0026quot;,当我后来听到这首歌时,我真想问问伍佰是不是专门为我写的。是的,当她开始找种种借口不再接受我的约会时,当我只是为了看她一下在她寝室外撑着小雨伞苦等着故意回避我的她时,当她终于用她可爱的樱桃小嘴亲口对我说出\u0026quot;我不适合你,我想出国\u0026quot;八个字时,当我魂牵梦绕的婀娜的身影在我的视网膜上不能再激发出任何细胞信号时,任凭秋风秋雨抽打着我本已沧桑单薄的心。第二天,我没再去公司,打了个电话向老板辞职。一个人来到菜园坝火车站,来到那个我曾经卖稀饭的地方,我想看看那些曾经让我明白了些许人生道理的共同落难过的民工哥们。只是我的心中,已经有了他们觉得crazy的想法 …..\n傍晚,我再一次在菜园坝下面横渡长江,让长江的滔滔江水冲走我所有的怯懦和卑微……\n5. 寒窗苦读 横渡长江后,我开始计划如何实现我的朋友们觉得\u0026quot;疯狂\u0026quot;的目标。其实我当时的目标并不高,我只是想考一个国内\u0026quot;名牌\u0026quot;大学的研究生,一种当时觉得非常神秘和神圣的东西。\n我回到老家和工作单位签了一个停薪留职的协议,因为我知道考研还得要单位签字,我的档案还在县教育局。这一次我向学生们作了一个交待:我也要读书了!然后回到重大继续听一些有兴趣的课,了解考研的要求,一边向我正在脱产学英语的哥们请教如何把我中考得59分后再也没学过的英语提高到考研的水平。\u0026ldquo;天方夜谭!\u0026ldquo;后来我考上浙大以后那个哥们跟我说他当时的第一反应,幸好他当时没有直接打击我刚刚新生的灵魂。\n我听从他的建议找了一套高中英语教材,开始学习从来没有认真学过的E文。 同时考虑自己应该选择什么专业认认真真读个本科。最后放弃了已经考几门的中文本科,选择了计算机应用,一个刚刚开始进行自考的专业。\n96年暑假,做了一段时间家教后,我离开了重庆,这个让我在我一无所有时收容了我的城市,这个美女如云的城市。是啊,美女如云,云在天上,不可得矣!刻骨铭心!此后在成都的两年是我一生中最充实的两年。住在电子科大附近的破房子里,旁边的厕所散发出来的味道让我保持着高度兴奋的状态,与苍蝇为伴,与蚊子共存。白天到成电的图书馆和\u0026quot;天之娇子\u0026quot;们一起自修,晚上和周末去计算机系听课,因为我选择的自考专业是由成电计算机系主考。不过我很快就对大学教授们的教书水平不敢恭维了,说句不好听的话,以很多教授的教学水平,到中学肯定被下岗。当然好的教授也有,只是似乎已经成了一种稀缺资源!所以我去听课的目的倒不是听他们讲解知识,只是想知道那些正宗的大学生到底学些什么东西,以此才能决定我要学些什么东西,并且与他们交往让我了解到很多大学和考研方面的信息。\n最大的问题在于英语,因为我连高中课本中的很多问题都搞不清楚。曾经还寄期望于在成都脱产学英语专业的哥们,我还记得为了去上他的外教的课在几近零度北风呼呼的冬天早晨骑一个小时自行车在成都二环上飞奔的情景。有一次冲得太快,破自行车的刹车不灵,被一辆大卡车挂了一下,摔得头破血流。事后仔细分析了一下自己的实际情况,觉得其实听老外上课对我的目标并没有多大帮助,并且也体会到其实我那学英语的哥们也帮不了多少忙,单词还得自己记,阅读还得自己练,于是放弃了这种劳命的方式。\n狠下心靠自己后,虽然也时常被自己可怜的记忆能力打击得失去信心,总是在修整几天后重新开始新一轮轰炸。我觉得当时学英语的状态可能有李阳式的疯狂,虽然那时我并不关心听力和口语。几个月后终于明显感受到了自己的进步。97年秋季考四级,在放弃听力的情况下得了76分。看到成绩时我虽然并没有觉得很兴奋,因为那时的我已经非常麻木,但心中慢慢不再是十五个吊桶打水――七上八下了,我看到了努力所带来的希望。当我就这样自己疯狂地学完上海外语教育出版社的那一套\u0026laquo;大学英语\u0026raquo;的精读,泛读,快速阅读和语法后,在放弃听力的情况下, 98年6月的六级考了一个和四级时差不多的分数。\n就这样在成都苦苦挣扎了两年。这两年中,除了运动外,我终止了所有的业余活动,全身心地投入到学习中去。成都的大街小巷中有我做家教归来的憔悴的身影,府南河旁有我身无分文时徘徊苦闷的脚印,教室里有我困得无法抗拒时在寒冬中以书为枕以衣为被直挺挺躺在课桌上睡觉的丑态……\n自考的课程进展很顺利,如期在98年夏天完成了所有要求的课程和所谓的毕业设计,拿到了计算机应用的本科文凭。毕业设计时很幸运地碰到了计算机系当年考入浙大的一个\u0026quot;师兄\u0026rdquo;,他在我决定考研报考的学校时给了我很多鼓励和帮助。当时自己可能在潜意识里觉得自考低人一等,还是觉得报考\u0026quot;外校\u0026quot;有点信心不足。并且我已经认识了好多成电计算机系的教授,了解成电计算机系考研的重点和出题特征,对考上成电的还是颇有信心。但我无法抑制自己进名校的欲望,这位师兄是当时唯一支持我考外校的人。是啊,我也理解朋友们的担心和关注,以我自考的学历,想进名校,无异于痴人说梦!\n但我还是又一次让我的朋友、亲戚和家人大跌眼镜。 98年9月我回到了那个我曾经放弃了的单位,重新开始误人子弟。对大部分\u0026quot;关心\u0026quot;我的人,我只对他们淡淡一笑:\u0026ldquo;在外面混不走了,还是回来好。\u0026ldquo;我知道他们的心中有的在嘲笑,有的在同情,也有的以掷祸。\n但我相信我已经基本成熟了,走自己的路吧。当时重新拿起毛笔,在自己的笔记本上写下了一首自勉的诗,其中一句是:\u0026ldquo;以退为进暂将息,终有他人侧目时。\u0026rdquo;\n选择回去教书的原因是,我在成都实在穷得没办法了。我想要一个安静的环境准备考研,我不想每天吃了午饭还不知道晚饭在哪里,我需要安慰一下多年不曾问及的母亲……\n只是母亲不知道,一年以后,我就又飞到了更远的地方。\n在经过一个周的奔走和求人后,我终于拿到了县教育局出示的同意报考研究生的介绍信,但只同意我报考师范院校。拿到报名表后,我还是在第一志愿里填上了浙江大学-光学工程的字样,选考的是计算机系的专业课。当时对专业的决定很草率,看了几篇介绍光计算的文章,一时心血来来潮,自以为学了计算机再学光学,以后就可以将两者结合起来啦,梦想着做中国的第一台全光计算机呢!所以我这个人总还是有些孩子气,有时总在想一些不切实际的东西。我想很少有人体会到我当时考研时的压力,我已经破釜沉舟了,已经为考研付出了大多的东西,而自己身边又没有半个同道的人,更没有自己这样的先例可以参照,我压要就不知道浙大的考题是什么样子,更不用说象在本校的学生一样有复习课上并知道复习的重点了(幸好这些我都是进了浙大后才知道的,否则当时还真不敢来报考浙大)。每天上完课改完作业忙完必要的应酬打打球做饭洗衣后就把自己关进屋子里,奋战到凌晨三点。有时早上8点之前又得起床上课, 起不来就让学生科代表来叫我。可能学生们从其他一些老师中知道我的故事被感动了吧,对我非常宽容和理解,连班上最调皮的学生在我上课时都比较规矩听话。终于在考试前几天收到那位师兄寄来的往年的考题,却很快就发发现有好多题都不会做,那时候已经太晚了,不管三七二十一,向城里的考场一路奔向。考研时第一晚完全失眠,早早起来对着镜子笑了又笑,还是觉得自己很憔悴,终于看到一个自己比较满意的笑容后,走上了人生第一次如此盛大的考场,算是弥补了没参加过高考的遗憾。当时太激动了,填写考号时连续三次填错,那个监考老师以诡异的眼光看了我半天,好象觉得我这个人智力是不是有问题!第二晚吃了安眼药,还是只睡着了两三个小时,不过人始终还是高度的兴奋状态。\n考完后回家老年,总有很多\u0026quot;关心\u0026quot;的人问及考试,触动我最敏感的一要神经。我总是只能淡淡一笑,作无所谓状,其实心里那个焦躁啊,只能让天知道!经过三个月漫长的等待,终于看到了自己两三年来疯狂的成果。考试成绩远远超过我的期望值,我居然考了396分。后来帮过我的那个师兄告诉我, 我的成绩在当年1000多考CS专业课的人中大概在13名吧,并且英语成绩好象是当年浙大最高的两三个人之一,我知道这对于各位大牛来说,简直是不值得一提的小儿科。但我真的太满足了,虽然考试并不意味着什么。\n从96年3月开始自学高一教材到99年1月考试,能有这样的结果,应该算是我两年的血汗没有白流吧。再度阿Q!\n6. 梦圆浙大 虽然我尽力想比较客观的叙述自己经历过的一些琐碎的事,但大家都知道我们的脑袋只能是一个自适应非线性滤波器,随着自己的环境和心态的变化,这个滤波器也许是低通,也许是高通,也有可能是带通,甚至还有各种无法预测的噪声。所以我无法保证绝对的客观,但求不会引起太大的误解。\n我不知道当时是不是有范进中举的感觉,但我至少没有象范进那样到街上去发泄自己的兴奋。因为在那个集中了我平生大部分故事的地方,人们的眼界和心胸,我不知道如何评价。虽然我一向不太在乎别人如何对我评头论足,但我的老家还在哪个地方,并且这个家庭因为我这个不信邪的儿子成了那一带还算有点名气的家庭。我不想有太多的闲言碎语在我母亲耳朵旁边绕来绕去,因为母亲自己是一个很唠叨的人,我更需要保持沉默。在多年的挫折和抑郁中,我已经学会保持外表冷漠内心狂热的状态,让所有的锋芒在体内熔化成一种可以沉淀的东西。说实话,只有当我来到浙大以后,当我第一次踏上那条聚集了太多故事的有名的堤上看着梦寐以求的西子湖时,我才又象小孩子一样当着太阳的面天真无邪了一把。在那个我用5年最黄金的青春换取人生经验的地方, 我依然是人们眼中那个有点怪异的青年,晚上寝室灯火通明,白天时常关门睡觉,人长得象老鼠,行为也象老鼠。只是喝酒和打球的时间比以前多了一点。\n当我兴冲冲地拿着印有\u0026quot;浙江大学\u0026quot;字样的调档函去县教育局提档案时,我再一次领教了那帮小官僚的势利和虚伪。我连续三天从镇上坐三个小时车去县城才找到那个自以为是个人物的人事科长,结果他和我拖着官腔,让我缴纳Y10000的培养费,理由是我本科毕业后没有工作满五年。如果我当时年轻几岁,我可能会象当年在师范和同学打架时那样抡起椅子就给他盖到头上。但我还是只能在心底骂他祖宗八代,同时挤出笑脸和他论理。我时常饥寒交迫,依靠打苦工做家教和向朋友借钱才完成一个本科,那两三年我没在单位领取一分工资,居然让我缴所谓的培养费!!!他还搬出所谓的文件让我看书看,我当时差点就把那堆盖着大红章有各种来头的文件一把扔到对门的厕所里去。\n我只好再次求人,当天晚上去市里费尽周折找到师范时只教了我一年不到就调走的老师,他当时是县教育局局长。虽然老师的脸上已经不再象当年讲台上那样一直保持合理的微笑,但他还是很关切的问询了我的情况,并立刻给那个科长打了个电话。当我在旁边隐约听着听筒里科长大人奴才一样唯唯听命的声音时,我的心在痛!!就是这样的人,把握着国家机关的权力,在这个打着\u0026quot;育人\u0026quot;的牌子的国家机构里,形象地教育着我们如何\u0026quot;做人\u0026rdquo;。\n第二天,当我再次走进他的办公室里,看着他满脸笑容清理我的档案。当我从邮局里寄完\u0026quot;机要\u0026quot;走上街头时,我知道我已经是一个浙江大学的学生了。从踏入社会算起,整整八年,我终于从一个十八岁的无知青年变成了一个二十六岁的心灵上千疮百孔的学生。虽然已经对国家的初等教育体系彻底失望,但我还是对高等教育充满了希望。向往着我在官方教育杂志上看到的中国高校排名榜上赫然列在第三的象牙塔。我知道这个地方曾经有过竺可桢、苏步青、王淦昌、谈家桢等国家科技真正的精英,曾经被人称为\u0026quot;东方剑桥\u0026rdquo;,梦想着耽听院士渊博纵横的讲解,协助教授做引人入胜的研究。我总是这样一个比较天真的人,把一切东西都想象得很美好。 怀抱着这些美好的梦想,在那个炎热的下午,我来到了美丽的杭州,来到了求是园,走在绿树成荫的校园里,看着满脸微笑的浙大人,空气是那么的清新,天空是那么的蔚蓝,阳光在树叶上欢快地起舞,虽然刚刚坐了48个小时的车,我似乎已经不再有热和累的感觉。\n多年的辗转和流浪之后,终于又有了一个宁静、安稳而美丽的居所,似乎又有了一点刚入社会时的分到自己的房子时的感觉。到了一个舒适而安定的环境,人不知不觉就开始变得懒散而无所事事。我很快就成了学校里\u0026quot;93\u0026quot;学社的成员,只是此\u0026quot;93\u0026quot;非彼\u0026quot;九三\u0026quot;矣,而是所谓早上九点和下午三点才到实验室,在BBS上灌灌水,在ICQ上聊聊天,有的还打打游戏,然后到食堂吃饭的研究生的集合。当然,在BBS和网上花的时间也不是全部白费,虽然很多东西被作者滤波后已经严重失真,但至少可以让我知道某些存在。正是在Oversea, 我知道了onlyou,persian, shygun, christiana等等等等.一大堆牛人的ID,也认识了一大堆知名和不知名的朋友。正是Oversea上前辈们的一言一行,和班上几个同学的行动先例,让我认真考虑是否应该把眼光投向大洋彼岸。\n7. 再度疯狂 当三个月后选导师时,我已经基本上了解了光电系里的情况,没有人做我报考时一心想做的光计算方面的研究。整个重点实验室象样的课题一年也没几个。后来发现其实事个学校、整个国家都差不多。国家的所谓的科研经费不知道哪里去了,教授们大多只能自己想办法维持实验室的生计,曾经在我心目中如此如此神圣的教授的头衔,对我而言突然间变得不再那么有意义,原来他们的生存存状态也和普通人一样! 刚进学校时还想直接攻读读博士,很快我就放弃了这一想法。当时也听说了同学rainy本科时因为想出国放弃保研的事,但我还是无法下定决心考G\u0026amp;T出国。我一方面尽量了解一些国外的消息,一方面重新考虑自己究竟要过什么样的生活。研一基本上就在这样的徘徊和矛盾中过去了,虽然很早就买了\u0026quot;红宝书\u0026rdquo;,却一直没背到20页之后。 经过无数的失眠和痛苦的权衡决策后,得到的结论是:试一试吧。\n可能是多年后折腾自己潜意识里想寻找一个港湾,我的确喜欢在大学里过学生生活,没有社会上那么多明争暗斗,说话可以无所顾忌,吃饭睡觉都很有规律。同时我这个人也的确有很强好奇心,总是对新鲜的事物很有兴趣,总是想过一过与众不同的生活。在我决定出国的时候,自认为对欧美的研究生培养体制和在海外的中国学生的生存状态已经有了比较多的了解,觉得自己也许可以适应他们的模式。反正在学校闲着也是闲着,我觉得考GRE可以训练自己日渐衰退的记忆力,考TOEFL至少可以训练自己的听力,就算出国不成,也没有什么坏处。当我把想出国的决定告诉一直还算比较理解我的几个哥们时,他们一致投了反对票,虽然有的说的比较间接和含蓄。不过他们的意见已经对我的决定没有任何影响力了,我已经成了一个顽固不化分子,对家人和朋友的意见认真聆听,只是听而不信。\n不过这一次的疯狂主要是在想法上,在行为上早已经没有了当年在成都时的锐气,那些锐气已经在浙大研究生们悠闲的环境中慢慢蒸发了,也许人在环境变好以后总是这样吧,自己也搞不清楚为什么睡觉时间比以前多了一半还是困,为什么无法抑制自己在BBS上无聊地逛来逛去。我甚至有很多时候都在懒得去上课。有点地位和名气的教授们都是让手下的博士之类完成自己的教学任务;教授们对上课的态度基本上是应付了事,从教育学心理学的角度来考虑过如何上课并认真准备的教授少得可怜,照本宣科和不知所云的情况也不是少数;一百多个历经各种考关筛选出来\u0026quot;寄托着国家的希望\u0026quot;的精英挤在一个教室里上课,听不清讲解可能是我耳朵不太好,但以我当时双眼1.3的视力都看不清黑板,我宁愿找个地方自己看看书了事。坦白地说,当时在浙大一个学期用于学习的时间不及我当年在成都饥寒交迫时一个月的学习时间。我不是想把自己的不务学习正业归咎于学校,我只是想客观地说明当时自己的真实状况。我知道浙大本科的学风在全国也是屈指可数的,并且很多研究生也保持着本科的优良传统。只是可能我自己辛辛苦苦考进浙大后期望值太高,当一个人的理想与现实有差距时,期望值越高摔得越痛。所以后来在申请学校时把期望值放在了比较低的位置。\n我就是在这样堕落的情况下准备的G\u0026amp;T。虽然听说过新东方的威名,周围也有好多人去了这个地方,只是我太不喜欢他们那种拼命鼓吹和灌输的风格,除了老师的激情外,似乎 也比浙大的课堂好不了多少。也可能是自己太穷,总之我没去北京为\u0026quot;玉米糊\u0026quot;们作大的贡献,只是买了几本他们的书,也算是为\u0026quot;出国经济\u0026quot;的繁荣昌盛尽了一份力。00年暑假开始正式准备G\u0026amp;T,当时也曾几度热血来潮制定9月考G、10考T和11月考SUB的宏伟计划,只是最后全部计划都因为自己的一个懒字而付诸东流。研二正式进了实验室,开始时没有确定正式的课题,导师让我做一个单片机控制的照相机快门自动测试仪器。我一边画电路图做电路板和采购各种元件,一边继续学习\u0026quot;红宝书\u0026rdquo;,通常是在实验室呆半天,在图书馆或教室里呆半天,晚上在BBS上灌水,当然那个时候还没有起用现在这个ID。过了两个月,发现实验室的活和自己的\u0026quot;红宝书\u0026quot;都没什么进展,于是放弃了先考G的计划,报了01年1月的托福。\n其实托福考的实在是比较弱智的东西,我想一个正常学习英语后顺利通过了6级的人,稍微准备一下就可以了。不过由于当时自己学英语时急功近利,从来没练习过听力,也没去注意过单词的发音之类的东西,所以在对中国学生来说最难的听力这一关上,我到浙大时的起点基本为零。我不知道有多少人第一次做托福听力时比我更沮丧,50个题我只做对了19个,并且还有几个是胡乱猜。由于知道实验室的两个师兄都直到准备推荐信才和导师说自己要申请出国,我一直不敢和导师说自己要考G\u0026amp;T,后来发现这是一大失策,其实两位导师都非常宽容和理解学生的选择,只是我自己当时没有勇气去打破师兄们的先例而已。为了应付ETS,我在实验室里呆着的时候只能说是\u0026quot;身在曹营心在汉\u0026rdquo;,根本无法净下心来调试电路。加上自己不是做工程的材料,一学期下来那个仪器还是没有完成。因为没买到车票,考完托福又在学校呆了两天,晚上走到空无一人的苏堤上,看着对面楼外楼和湖滨一带的灯红酒绿和歌舞升平,脑袋里空白一片,迷茫又开始侵入我如柴的骨架,不知道以后的人生之路究竟在什么地方。浙大这种牛人聚居着的地方,时常让我为自己太普通的智商水平和太差的学术根基感到自卑,怀疑自己究竟有没有做学术的能力,到现在这种自卑和怀疑更甚,因为周围有太多的聪明绝顶的人。大年三十登上回家的火车,看着一个个四川民工满脸无所忧虑的笑容,突然觉得自己是不是庸人自扰,生活其实就是简简单单吃饭穿衣,想那么多前途忧那么多国家累不累啊?! 于是在家里安安心心过了一个年,一改往年尽力不去亲戚家串门的习惯,连母亲都觉得奇怪。\n过完春节回到学校,心里变得更加坦然,虽然还是继续准备考G,准备期间却常常是晚上12点睡觉,早上9点起床,11点去打球,下午又睡到2点过。记得那时还在准备考研的总能给我们寝室带来笑声的可爱的bstar师弟还时常善意地笑话我怎么一天到晚都在睡觉。总能我是班上唯一一个在浙大两年半天天坚持睡午觉的人。晚上还是一如既往地做一个不散的幽灵在BBS上喝水或是灌水。结果可想而知,实验室的活还是原地踏步,考试也准备得稀里糊涂。大概考试前三个周吧,觉得实在不行了,不能把一千多大洋的报名费白送ETS吧,才心里惶惶不安地到导师家里去和他商量请假的事。真是感谢导师的支持,否则当时考试的成绩会更让我申请时没有信心。\n5月11日考完G回到杭州时,才知道拿到offer的师兄已经在上海登上去底特律的飞机了,只能傻呆呆地一个人到西湖周围逛了一圈。然后和室友们一起骑自行车去莫干山玩了两天,回来拎着个相机想法设法拍点照片做做实验,就以最快的速度凑灌水文章寄给学术期刊,同时在BBS上关注着01年的飞友们传达出来的种种消息,并开始考虑自己的申请策略。说句实话,我那些所谓的论文其实根本就没有多少实质性的东西,唯一可以自豪是的绝对不是别人论文的克隆版或是修订版,至少idea还算是自己没有在别人的文章里看到过的东西。让我惊异的是国内所谓的一级刊物上发表文章是如此之容易,如果就以这种指数来评价研究生、教授或者是学校的科研能力和学术水平,只能说是国家教育和科研体系的彻底失败!很快我写这种灌水文章的兴趣就大减,当我已经完成了当初向导师许诺的任务的200%时,我觉得再凑这种文章还不如去考个SUB,因为自己心中的光学圣地Arizona和Rochester都要求或是建议考SUB。现在看看今年医学的Nobel奖得主当初10间埋头研究几乎未曾发表过文章,我不得不为自己发表第一篇劣质文章时沾沾自喜的丑态感到羞愧。但是在这个奇怪的社会中,人们往往需要无可奈何地用这种东西来证明自己,让别人和国家认可自己,否则无法生存。如果以这种标准来衡量爱因斯坦,我想他可能连应聘浙大的特聘教授都拿不到offer。他不会发表大量的文章,更没有能力挣钱来换业绩点,而只会傻乎乎地梦想着坐在光子上去遨游宇宙的奇妙之旅,只会在Princeton的街头头不梳脸不洗被小孩子们认为是无家可归的流浪汉。但是这个世界的本质竟然就是量子化,当这种量子化从物理世界被移植到社会机制中时,我不知道究竟是人类的进步还是不幸。但我只能接受现实,我只能在这个爱因斯坦不愿意承认的一切都充满不确定性的随机场中飘来飘去,无法确定自己将来的确切的轨道方程。一切都有可能发生也有可能不发生!\n01年的Oversea聚会时,在座位上虔诚地仰视着一个又一个前辈,洗耳恭听他们酸甜苦辣的故事。当我发现那个上法语课时经常坐在我前面的留着披肩发的小青年原来就是Oversea名声赫赫的onlyou时,觉得特别滑稽,原来是他!回到9舍又是一个惊奇的发现,那条去MIT的牛牛原来就住在一层楼上离我不到10米远的地方,我怎么以前就从来没看到过这个斯文而秀气的小伙子呢?!此后洗脸上厕所有幸碰到我都用景仰不已的眼神想从他身上得到点什么。开始为自己过去两年间在浙大满腹牢骚却不干实事的所作所为反省,牢骚可以发,事还得靠自己做!申请的过程琐碎而繁杂,却又没有多少值得一提的东西。在一大堆要来的材料里挑来拣去却不知道究竟哪个更可好,不知道哪个更适合自己。那段时间再度经常感到苦闷和彷徨,总是想和别人喝酒和聊天。现在仔细想想,当时班上的cometo、rainy和Nature三位同学估计都被我烦得受不了了,只是不好发作而已,呵呵。班上几位同学的鼓励和帮助以及室友们的支持,在我申请过程中起了不可低估的作用。寝室的几个兄弟都是想在国内大展宏途的牛人,但在我考G\u0026amp;T和申请的过程中宽容着我的不良习惯,并不断的鼓励和帮助我这个诡异的家伙,到现在我还欠着申请时我们的怪才huangh资助的¥2000,因为我走的时候他已经在欧洲幸福地on business。特别是一起申请美国学校的rainy, Nature, Jelimi和feline,更是给了我莫大的帮助。我们经常在一起交流信息,相互提建议,以至于bstar师弟又禁不住要\u0026quot;嘲笑\u0026quot;我们在搞什么阴谋出国集团。\n11月考完SUB,又去了一次天台的挂职锻炼单位做做样子。正在为申请费费尽心思时,导师给我提供了一个去西博会给一个香港公司请的瑞士摄影师和德国模特儿当摄影助理的机会。虽然那时PS还没完成,我还是见钱眼开,欣然接受。那是我进浙大以后过得最劳累的几天,特别是中间有两天是一年一度的招聘会,早上起来还要收拾打扮一番,呼啦啦跑到招聘会场往那些看着顺眼一点又要招“光学工程”的单位桌子上丢一份简历,9点前打车赶到火车东站附近的饭店去接老外到世贸楼,然后就跟在那个干起活来不吃午饭的摄影师屁股后面跑上跑下又要当翻译又要当苦工一直干到晚上收工,陪他们吃完晚饭回到学校时差不多已经是晚上10点了,还要继续自己的申请事宜。还好结束时那个老板比较满意,出乎意料多给了我几百快钱作奖赏,还让我把身上所有发票都报销掉,八天时间挣了¥1800大洋,又解决了5个学校的申请费。不过这几天奔波彻底打乱了自己初步形成的申请计划,只好放弃了选好的12月15号以前截止的几个学校。看着Oversea上一帮人已经寄完材料讨论offer了我还在修改PS,只好手忙脚乱地寄出了第一批学校的材料。事后发现中间犯了N多弱智的错误,诸如把申请学校的地址写错材料被退回,漏掉了学校要求的表格,PS中的语法混乱不清,等等。经常有人问我的PS是如何写的,其实基本上就是这篇文章前面有利于体现自己个性的东西抽取出来写成英语而已。虽然我的PS错误连连,但我还是相信基本上是独一无二的,并且基本上是自己对生活真实感受和对自己未来的初步想法,没有故作呻吟,也没有现在这种夸夸其谈。\n1月份终于寄完了大概共20所学校的材料,从美国到加拿大到欧洲再到新加坡和香港,如钓鱼时一样遍撒诱饵,当然这样的后果显而易见,诱饵的利用率很低。当然主要还是我无法评估自己的状况,自以为这样全方位的分布可以提高命中率。接下来就又如同三年前等考研成绩一样从一月等到四月,虽然已经没有了当年来自生存的压力,虽然觉得offer不是我的唯一,毕竟自己已经付出了时间、精力和金钱,还是想有一个比较满意的结果。我跑到南京去参加香港科技的面试大谈特谈自己的想法后傻头傻脑地告诉教授我在申请美国的学校,然后只能等着被拒;跑到上海参加法国N+1计划的面试,教授在对我的奋斗经历表示了一番赞赏后委婉地说我年龄太大,他们主要针对本科毕业生,TNND怎么不看看我的申请材料再通知我来面试,还好后来还算给了我半奖;然后又是在上海,在SMA的面试过程中被一个中国纺大毕业的和我的研究方向完全类似的教授狂扁我没有机械和制造的基础,TNND我做机器视觉和图像处理不懂机械和制造有什么关系,谁让你们的招生目录上全是误用光学工程专业的词汇;……在三月份的offer高潮的到来之前,班上所有女生都有offer了,有的还有两三个,只有我和Jelimi两个一封又一封地收拒信。当Louisville那个曾经口口声声说我背景很强推荐我拿学校的fellowship的教授有了更满意的人选后冷冰冰地踢了我后,当我已经拿到Cambridge、John Hopkins、Dartmout、Rice以及申请时最向往的的Rochester和Arizona 等学校的13封拒信等着毕业走人时,居然在3月15号左右收到了Berkeley的一个admission.虽然只是admission, 对于去年连找工作也处处被人打击的我来说却无疑是雪中送炭。正好那时答辩完了闲得无聊,为了准备上班当程序员看了几天Java和VC后觉得心有不甘,想想再多接受几次教授的打击也无所谓,于是决定再来套套词。当时一直没和任何人说自己拿了这个admission, 只是考虑如何把套词做得周全一点。\n这一次我没有直接写信给教授,我选择了曲线救国,先从小秘那里开始。小秘只是回信说她也不知道有没有钱给外国学生,把我的信转给系主任了。我马上给主任写了一封信,得到的答复是:\u0026ldquo;还要等committee开会讨论决定呢,你先等着吧。\u0026ldquo;然后就不断地发email,以表示我对他们的研究的确是很有兴趣。经过一番交涉和等待,主任于一个周后说系里没钱了,只能给我10000美元奖学金,让我自己再想办法凑20000美元/年*5年的钱,并建议我联系联系看看有没有教授愿意资助。于是搜遍所有教授的网页,最后选中了一个网页上写着图像处理和光学等研究方向跟自己的背景最吻合的教授。信发出后一个周没有消息,当时基本上绝望了,这种学校的教授,谁会理我啊!又 过了两天,却意外收到主任的信,说那个教授对我有好感,只是他的钱可能不够,让我现联系其他教授。当时不知如何是好了,怕套了其他教授不成这个教授也不理我了,郁闷了好久;最后还是没套其他教授,我选择了从一而终。\n4月1号开始到公司上班去了,坐在那里培训时哪里听得进,天天等着中午吃饭时间去网吧收信写信。我问主任是否可以先给一年的钱,如果表现好再给后面几年,并且王婆卖瓜式地吹嘘自己的Teaching experience, 希望能给我一个TA。 这时主任才给我说了实话,他们已经发完了offer,要求415前答复,如果有人不去就给我了,让我be patient;这就是传说中的Waiting list了。当时以为Berkeley的offer不要的人太少了,也就不抱什么希望了,安心上班吧。没想到 教授突然写信问我是否对他的一个研究方向有兴趣,我以为他有钱了, 一问才知道还是没有确定,他只是想在休假前和我讨论一下。为了继续跟教授联系,只好硬着头皮去查他说的那个研究方向到底是怎么回事,因为他想让我做的project以前我根本不知道是怎么回事。当时得到两个网友的热情帮助,在他们的建议下去书店找书,花了一整天找了杭州几大书店都没找到。最后找一个网友在湖滨的图书馆借了一本相关的书,在网上搜索了几篇相关的文章,大致看了一下就给教授表决心了。\n就在这个时候,4月13号晚上,在我们班出国一帮的精神领袖rainy的实验室里,我终于收到了我的第一个offer。 虽然学校名不见经传,但在imaging这的方向上在美国却是业界知名的研究机构,并且有Nasa, Kodak和Canon等的大笔资金注入,钱是大大的有。并且第一年完全不用干活,相当于fellowship,我觉得很满足了,从苦海中彻底解救出来。没想到有时候福也不单行,第二天Berkeley的那位和谒可亲的主任来信说给我offer的可能性have increased dramatically, 只是要等教授度假回来才能最后决定。我知道肯定是有人拒了他们的offer了,于是心中天天就想着这事了,盼着教授早点结束他的享受之旅。现在我才明白,因为这个系每年都有不少医学背景的人申请,而他们如果拿到Harvard, JohnHopkins, UCSF 和Washington等医学牛校的offers时,拒掉Berkeley是情理之中的事情。也许不知情的人觉得UCSF太差了,但这个学校在美国医学界的地位之高,绝对超出中国学生的想象。这个学校据说以前是Berkeley的医学院,后来独立出去了,所有专业基本都与医学相关,并且只有研究生院,没有本科,过去十来年中就有三个Nobel医学奖获得者,神经科学更是经常排名第一。\n总之,就这样凭着死皮赖脸加勇敢,在和系主任和教授进行了大概60封email的拉锯战后,靠别人拱手送给我的机会,我幸运地成了Berkeley的School of Optometry下的一个交叉学科Vision Science今年招收的PHD中的两个国际学生之一,而另一个国际学生,则是一个在这里做了一年访问学者的以前学生物的法国姐姐。有趣的是,我的教授现在成了这个学科的主任。当我看到他们当时晚上一两点给我发的email的时候,当教授到机场接我并带我去旧金山几个有名的地方观赏的时候,当他周末带着我和他全家去Hiking的时候,当我在学校里碰到他们时他们总是一脸灿烂的笑脸主动问询我的生活之类的事的时候,当六十多岁的教授和我们学生坐在一起象小孩子一样认真学习他不懂的东西的时候,当他花两个小时和我一起调试程序的时候,我才真正明白为什么美国大学能够成为很多中国学生向往的地方。虽然实验室的条件不一定就好多少,虽然生活是如此的艰难,但除了偶尔发发牢骚以缓解心理的沉闷,在学习和科研上实在是没有什么好埋怨的。\n此后又断断续续收到3个半奖,Waterloo一个我曾经发信多次都不理我的教授问我还想不想去的。希望月底到旧金山开会碰到时她已经忘记了我的名字,否则坐在她当chair的分会场里时不好受。接下来就在公司如坐针毯等着落户口好办护照,写几个比较简单的API程序。\n没想到莫名其妙档案在路上寄失踪了,正常情况下一个周就可以到的\u0026quot;机要\u0026quot;两个月都还没寄到。只好自己从系里开始骑着同学送的自行车一环环去查,在学校那个邮政办公室里等了整整等了半天才拿到那个\u0026quot;机要\u0026quot;号码,然后饿着肚子追到省机要局和高新区人才交流中心。在人才交流中心折腾了两天他们才在一个垃圾箱里找到了我和班上另一个同学的档案。当那个工作人员面红耳赤地给我解释时,我真是哭笑不得!如果我没是因为要办护照去查,说不定我们两个的档案哪天就进了垃圾堆,这可是政府看得和命根一样重要的东西啊!\n后面的事就很顺利了,自己跑到派出所落好户口,开好证明,到市公安局申请护照。比较惭愧的是办护照时给公司撒谎说自己女朋友在美国读PHD,我要做F2过去,否则就红杏出墙了,还让同学给了一个在美国的MM的姓名和地址以填在护照申请表上以增强真实感。签证前始终觉得心里不踏实,怕VO问及我的历史时我无法在几分钟内跟他/她解释清楚而被拒,没想到VO根本不在乎历史问题,五分钟后有惊无险通过。不过今年还是有两个到这里的全奖在北京三次被拒,据说这边系里领导亲自跑到北京美国大使馆说情都没搞定。具体情况不太清楚了。人生的不确定性,我等奈何?!\n8. 美国印象 开始写这篇文章的时候正好是我到这里后三个月整,并且刚考完过来后的第一个final,考得极其失败,于是面壁思过,觉得自己这三个月太过于悠闲了,把心底那个好久没有清理过的地方翻出来晒晒太阳,也许可以使自己能清醒一点,不至于以后太丢浙大的脸。\n其实我对美国根本说不上有多少认识,信口开河,不免有失偏颇。我只是想把文章写完整而已。小日本的飞机晚点三个小时,经过十几个小时的冷冻后,终于在机场见到了Prof StanleyKlein,为了便于我辨认,穿的T-shirt上印有学院那个滑稽的带着眼镜的熊的标志,一脸的笑容,问我在飞机上睡得如何,我只好假装睡得很好民,其实只睡着了一两个小时。由于自己没有准备长袖衣服留在行李箱中,尽管加州的阳光非常明媚,下飞机后还是冷得直打抖,赶紧钻进他的车,前往San Francisco城里。\n在城里逛了一阵,教授居然迷路了,想找个中国餐馆却不知道Chinatown应该如何走了。只好让我开始学习适应美国生活,找了个西餐馆将就。硬着头皮把他向我推荐的一个什么饼吃完,还得装出非常满意的样子,因为我不想在第一天扫他的兴。我这个土包子看来要适应美国的生活还得经受一番训练才行。此后出去吃饭,只要是我一个人不到万不得也坚决不进西餐馆。可是为了和实验室的鬼子拉拢关系,每个周还是出去和他们一起吃一次饭,打一次游戏。师兄是Iran移民,早年毕业于UC Davis,搞了几年基因后来跟着老板做脑成像,一年前他休学在硅谷开的一个搞计算机图形的公司破产,又回实验室重操旧业。小秘去年毕业于这里的哲学系,在知道此君学历前一直以为他是学理工出生的,因为时常看他从PC,Mac和Sun Workstation一直玩到Linux,不得不承认美国人使用计算机的水平。让我最满意的是我已经把他们培养成了每天喝中国茶的有了共同语言的\u0026quot;兄弟\u0026rdquo;。\n这一带满街都是华人(以此包括数量占绝对优势的ABC们)和中国餐馆,据说Berkeley有30%的亚裔学生,其中当然是华裔占了多数。所以每次与鬼子们打交道时他们总是把我当成Native English Speaker看待,不过多说两句后我的可怜的口语就让他们明白弄错了,才把语速慢下来。总的来说,美国人还是比较友好的一个民族,整个社会也不是我想象的那样混乱,刚开始时经常晚上10 点过后才坐地铁回家,也没发生过什么事。只有一回在中国餐馆看到一个黑人抢钱,很快就被一群警察带走了。\n教授的敬业精神是最让我感动的一点,看到学院的前任院长七八十岁了还靠两个本科生当助手搞科研一年发表几篇有份量的文章,就知道为什么国内那么多向\u0026quot;世界一流进军\u0026quot;的高校这么多年就出不了一个Nobel奖,为什么那么多全球有名的高智商民族的精英最后都一无所成。虽然我也很恨小日本,但日本人在敬业精神这一点上是绝对是我们应该学习的模范,今年的两个Nobel奖也许就可以说明一些问题。上次与教授一起到Stanford做实验的路上对我说起课题的事时说:\u0026ldquo;我现在最担心的是日本在这个方向上超过我们。\u0026ldquo;我们中国人要真正赢得其他民族的尊重,真正得到我们中华民族应有的地位,还得靠我们自己实实在在努力,而不是靠宣传和吹嘘就可以实现世界强国的梦想。又犯了老毛病,扯得远了;只是我的民族自尊心太强,每每和鬼子争论都被问得哑口无言,心中无比感慨,不吞不快。我真的希望美国超市里那些made in china的衣服、食品和小电器,有一天能被高附加值的高技术商品替换为了能方便坐凭学生证免费的公交车,一个月前搬了一次家,现在和一个ABC小弟弟和一个从上海交大毕业在新加坡工作了六年在USC的CS呆了一年转到这里统计系来的大哥住在一起。小弟弟是我们的校友,三年前CS毕业,现在在UC总部工作。他属于ABC中不鄙视大陆学生的少数,时常主动开车带我们去Chinatown购物,解决了我最大的生活问题,有时还给我讲解一下电视上出现的一些我不懂的东西。可惜他不识汉字,也不会讲普通话,交流起来老觉得不顺畅。最有意思的是和房东一起的时候,他和房东只能说广东话,他和我只能说英语,而房东和我只能说普通话,这就是美国社会中三类华人的代表。大哥属于异常发奋的好学生,一般是凌晨三点睡,经常早上八点前就去上课,我对他的景仰之情,无法用\u0026quot;滔滔江水\u0026quot;四个字能形容。每天起床看着空荡荡的房间,不得不埋怨自己丧失了斗志变得跟猪一样。所以这几天一直在反思,为什么环境变好一点了自己就变得懒散。 所以我想以后出现在Oversea的时候不再那么多了。\n9. 结语 虽然时常有\u0026quot;帘卷西风,人比黄花瘦\u0026quot;的感觉,虽然时常也闷得心慌跑到BBS上来灌水,虽然时常要忍受着饥饿洗菜做饭,我还是觉得生活是美好的。不管将来能做点什么,只要自己能够真实地存在,夫复何求! 每个人都有自己的生活方式,只要自己过得快乐,没有金钱、美女和权势也无妨。\n再次感谢所有关心和帮助过我的人!感谢Oversea各位虫虫这几天的捧场使我能支持写完! 虽然也曾写得自己以泪洗面,能够得到大家的支持,觉得通宵达旦的辛苦是值得的。真心祝愿各位能够过上自己想要的生活!\n就用自己多年来一直百听不厌的一首歌中的两句词结尾吧:\n云里去,风里来,带着一身的尘埃,心已伤,情已冷,泪已干;悲也好,喜也好,命运有谁能知道,梦一场,是非恩怨,随风飘。\n往事随风飘飘……对洒当歌强乐还无味\n衣带渐宽终不悔\n为谁消得人憔悴\n","date":1617453430,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1617453430,"objectID":"feda94c5cb1308a24eaef3717652449c","permalink":"https://conanhujinming.github.io/post/the_story_of_opto/","publishdate":"2021-04-03T20:37:10+08:00","relpermalink":"/post/the_story_of_opto/","section":"post","summary":"往事随风飘飘","tags":[],"title":"(转)OPTO的奋斗史:从中专到伯克利PhD","type":"post"},{"authors":[],"categories":[],"content":"接上次的文章,这次介绍的是 MIT 6.042J Mathematics for Computer Science\n也许可以翻译成计算机中的数学,或者计算机应用数学,其内容与一般说的离散数学比较接近。\n在介绍这门课之前,我先讲讲标题的故事,这个故事是关于数学大师陈省身先生的。2002年8月的国际数学家大会(ICM2002)在北京举行,时年91岁高龄的陈省身先生也参加了这次大会。大会期间,大会的主办方邀请陈省身先生题一句词送一句话给当时参会的少年儿童,分享自己看待数学的观点,并激励大家。陈省身先生没有多想,就在纸上一挥而就了四个字:\n陈省身先生认为,这是最能代表他对数学的看法的四个字。\n然而不幸的是,在国内现在的数学教育体系中,同学们往往感受不到数学的乐趣。无论是教材、还是课堂,数学课似乎总是”莫名其妙提出某个定理-\u0026gt;证明之-\u0026gt;莫名其妙提出下一个定理-\u0026gt;证明之“这样一种循环,让人觉得枯燥乏味。这样的教学结果,会让同学很多时候只能死记硬背一些定理、证明等等,而不能形成自己对数学的理解,更不用说是自己的数学体系了。结果,不仅数学学得不扎实,还可能会失去对数学的兴趣,甚至是对数学产生恐惧。然而数学不仅仅是一门学科,还是一个非常重要的工具。学不好数学,掌握不好这门工具,说是贻害无穷也不足为过。\n说回标题,我个人认为,数学,或者至少是基础的数学(如微积分、线性代数、概率论与数理统计、离散数学等),是可以而且教得非常好玩的。当然,这是一件很难做到的事情,比如说我自己就没有在现实中听过这样的课程。因此我个人对于一门数学课的最高评价,就是”这门课真好玩“。这次推荐的这门课程MIT 6.042J,在我看来就是一门好玩的课程,甚至可以说是我最喜欢的数学课程。\n这门课程主要讲述了计算机中常用的一些数学知识,包括归纳演绎、集合论、数论、图论、计数、概率论、递归等等,包含的内容非常多。更重要的是,授课教授Tom Leighton利用非常高超的授课技巧、多种多样的授课道具和精巧的知识组织,使得这门课程的学习变得有趣又简单。这里举一个我印象深刻的例子。有一次课是讲级数。一开始,教授拿出了一些同等大小的木块,然后让学生们从讲台上的边缘开始叠小木块,使得叠起来的小木块能够尽量远地离开讲台,同时又不能翻下去。并且,教授让学生们和TA团队比赛,看谁搭得远,如果学生更远,他就输给学生100美元。最后的结果是学生团队和TA团队搭建的木块离讲台边缘同样远。这之后,教授开始分析这个数学模型,最后利用级数来证明,木块能够离开讲台的最远距离是一个很小的定值。这样的数学授课形式新颖又有趣,让人印象深刻。而这样的课堂在这门课程中比比皆是,真是让人叹服。\n除了这一点以外,我从这门课程中学会的非常重要的一点是数学证明时的思维路径。举一个我第一次听到的时候觉得惊为天人的数学证明的例子。组合数中有一个定理是\n$$ C_n^k=C_{n-1}^{k-1}+C_{n-1}^{k} $$ 国内的教学一般是怎么去证明这个公式的呢?就是拆开,各种化简,最后证明等号左右两边相等。完事证完了之后,并没有觉得自己学到了什么,而且下次要用还会忘了这个公式的形式,还得去翻书。Tom Leighton在这门课上是怎么证明这个公式的呢?非常简单。我们要从$n$个物体中选$k$个物体,假如我们任意指定一个物体,那么从$n$个物体中选$k$个物体,则可以分成两种情况:\n 选这个物体。那么我们就需要从剩下的$n-1$个物体中选$k-1$个出来。所以有$C_{n-1}^{k-1}$种选法。 不选这个物体。那么我们就需要从剩下的$n-1$个物体中选$k$个出来。所以有$C_{n-1}^{k}$种选法。 所以,从$n$个物体中选$k$个物体,就是这两种情况的选法之和,证毕。Orz\n除了这类有趣的证明之外,我还从Tom Leighton身上学到的关于证明的一点是:数学证明在看公式推导的时候,一定要知道推导的目的是什么。通常来说,推导的时候都是带着motivation(动机)去推导的,希望把形式转成某个样子(比如我们更容易解的一种形式),而中间的各种变化,都是在为这个目的服务。\n总之,我认为这门课程是一门非常好玩又非常有用的课程,强力推荐大家学习这种好玩的数学课,不仅能够扎实数学基础,更能培养对数学的兴趣。不过美中不足的是,Tom Leighton似乎比较忙,所以有接近1/3的课是他当时的博士生TA来代上。这位博士生上得就一言难尽了\u0026hellip;\u0026hellip;最后导致他上得部分我都直接去看教材了\u0026hellip;\u0026hellip;希望以后会有Tom Leighton自己一个人上课的录像公开出来吧。\n","date":1608182125,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1608182125,"objectID":"a13abc9952593ed448896bf50ad0702b","permalink":"https://conanhujinming.github.io/post/mit_6_042j_csmath/","publishdate":"2020-12-17T13:15:25+08:00","relpermalink":"/post/mit_6_042j_csmath/","section":"post","summary":"推荐一门好玩有用的数学课程","tags":[],"title":"MIT 6.042J 计算机中的数学:数学好玩","type":"post"},{"authors":[],"categories":[],"content":"今天在给同学们讲东西的时候,发现他们之前没学过矩阵乘法的四种表述形式(或者说四种观点?),于是给大家简单地讲了一下这四种观点。其实矩阵乘法的不同视角是非常有用的,尤其是行组合的观点和列组合的观点,不仅在很多公式推导的时候非常好用,而且也更能帮助大家从更本质地角度来理解矩阵乘法的意义。\n回想起来,国内多数学校多数老师的线性代数的教学我认为是存在非常大的问题的(这样是不是有点太一棍子打死所有人了)。从这门课程的教材中就可见一斑。国内的教材常常从行列式开始讲起,让人一头雾水地栽进疯狂计算的大坑。完事算了半天,也不知道行列式这玩意儿的意义究竟是啥,只知道好像可以用来按照某种机械地方式解方程。之后呢,教材就从行列式开始“引入”矩阵,然后开始给一些乱七八糟的定理和结论,什么伴随矩阵啥的。学生们则根本抓不住要点,不知道这些东西的意义是什么,有什么作用?学得是一头雾水(当然我怀疑很多老师自己也是一头雾水)。最后机械地把整本书学下来,但仍然感觉抓不住这门课的精髓,只觉得数学好难好抽象好难懂好难学啊。考试之前突记刷刷题背背定理证明啥的,也能考个不错的分数,然后就将其抛之脑后了。结果到了大二大三后续课程的学习中,甚至是到了研究生阶段的学习过程中,却往往发现这玩意儿无处不在,但自己又常常看不懂各种推导,痛苦得不行。归根结底,我觉得这种现象还是由国内的教学问题所引起的。\n在这种情况下,我极为推荐大家用一门课程来正本清源一下线性代数:\rMIT的18.06。这门课由数学家Gilbert Strang讲授。Gilbert Strang的讲授非常清晰且富有insight,绝对能让你对线性代数的理解焕然一新。我印象最深刻的就是矩阵乘法的四种形式,以及矩阵的四种空间了。学了之后,感觉线性代数并不晦涩难懂,反而变得具体有意义且有趣了。按我自己学习的经验来看,这门课的学习对很多其他课程的帮助绝对可以说是让我受益无穷。值得一提的是Gilbert Strang教授同样是一位学术成就很高的数学家,然而早已功成名就的他,至今仍以接近80岁的高龄在教学一线上讲课,仍然每年执教这门课程,并在努力改进课程与教材内容。相比之下,国内的一些学校无论是课程质量本身,还是部分老师对待教学的态度,也许仍然需要好好追赶啊。师者,所以传道受业解惑也。所谓大学,当教书育人、为学生传授知识与帮助学生塑造健全的人格与价值观。一味地求仕创薪可不行啊。\n附:关于这门课程,知乎上已经有了很多推荐和讨论了。去年清华大学将线性代数教材换成了Strang写的18.06的教材在知乎上还引起了大量讨论。其实在此之前,就有一些国内的老师(如北大、复旦、上交的部分老师)已经在用这本教材上课了。对于清华的这种行为,我只能说,请加大力度。\n","date":1608175568,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1608175568,"objectID":"342c9849c9f886a3488273c27df5fd9d","permalink":"https://conanhujinming.github.io/post/mit_18_06_linalg/","publishdate":"2020-12-17T11:26:08+08:00","relpermalink":"/post/mit_18_06_linalg/","section":"post","summary":"推荐一门线性代数课程","tags":[],"title":"MIT 18.06:线性代数易懂且有趣","type":"post"},{"authors":[],"categories":[],"content":"\r周信静是我最好的朋友之一,也是我最敬佩的同龄人。我早就想写写文章讲讲他的故事,但由于各种原因,始终未能动笔。适逢前段时间他成功申请到了MIT的CS PhD(计算机博士),遂趁此机会讲讲他的故事,或者说是讲讲我眼中的他吧。\n初识信静:安静又狂热的技术极客 说实在的,与信静的相识颇有几分偶然。当时是2017年春季,那时我们都刚参加完浙大计算机学院的研究生考试。为了准备考研复试的机试,当时我天天埋头苦刷PAT。而我刚开始屁颠屁颠地刷PAT甲级题目的时候,就已经有一位同学早早地刷完了的所有题目。ID“无敌大饺子”在PAT的排行榜榜首上孤高地挂着,个性签名“:)”透露成一股绝世高手的气息。当时我就好奇,这位“绝世高手”究竟是何许人也。某次考研群里讨论问题的时候,信静现身回答了几句,我敏锐地注意到了他的QQ昵称就是“无敌大饺子”。怀着巴结大神的忐忑不安心情,我申请了信静的好友;他很快通过了。然而那时候我的水平还太次,并未达到能与他交流的程度,所以只是怯怯地打了个招呼,就没再进一步交流。\n后来我们考研复试要确定实验室。彼时的我还有些迷茫,不知道该投递哪个实验室。于是我想,不如问问大神的意向吧。信静告诉我说他应该会去数据库实验室。于是,抱着跟着大神走的想法,我也同样投递了数据库实验室。后来我们都很轻松地拿到了数据库实验室的offer。他没有任何犹豫就选择了接受,而那时的我还并不懂他对数据库的热爱;而我则犹豫纠结了很久,最后也选择了数据库实验室。\n2017年暑假,我们与其他两位比较熟悉的考研同学商量,打算在入学之前就提前组一个宿舍。于是我和信静前往学校办理宿舍手续。在土木科技馆的门口,我们见到了彼此的第一面。信静高高瘦瘦,身材与我颇有几分相似,一身都是运动装束。见到我之后,信静腼腆又羞涩地笑了笑,打了个招呼,”你好,我是周信静。“我上前和他握了个手,”百闻不如一见啊,我是胡津铭,以后就靠你带我了。“随后拍了拍他的肩以示好。他被我拍了之后有些不适应,往边上让了一小步,又略有些尴尬地笑了笑说,”互带,互带。“\n之后我们在校园里边逛边聊。我一开始试图找一些共同话题,如动漫、电影之类的聊聊,但信静面对任何话题都是只说三两句,搞得我像追求女生时尬聊找话题的男生一般。无奈之下,我只能问他最近在干嘛。谁料这一下就打开了他的话匣子,他告诉我他最近在一家数据库创业公司实习,并开始滔滔不绝地讲他在那边做的工作,诸如什么重写hash map(哈希表)比STL快几十倍啦,什么Raft、PAXOS啦。这众多名词的突然袭来打得我是措手不及。他就这样脸色微红、语气略有些急促地开始讲那些数据库技术,手指不停地笔划,告诉我这些工作有多么得激动人心,而这与刚刚羞赧的、不善言辞的他判若两人。看着这样的他,我突然生出了一种感觉:这家伙以后可能是会改变数据库领域的。\n再识信静:低调逆袭的奋斗者 虽然很遗憾最后因为一些原因我们没能成功组成宿舍,但是开学之后我们还是会常常讨论一些学术问题。我俩的背景颇有些不同:我本科是毕业于航天专业的,所以计算机基础很是缺乏,因此我当时更倾向于好好补一些基础;而他本科则是正统科班出身,基础很是扎实,而且他有强烈的做research的意愿,因此会大量地去看paper、提idea与我讨论、并做实验尝试。在与他的讨论中,我常常被他深不见底的数据库、系统的知识储备所震惊。现在回顾起来,当时初入科研门槛的我们其实提出了不少有意思的想法。比如我们在2017年的时候就预见到了机器学习会在数据库/系统领域有广泛的应用,甚至我们在课堂演讲的时候还说了这么一句话“任何需要决策的地方、调整参数的地方,也许都可以使用机器学习”(when there is a decision needed, there is potentially ML needed)。我们也尝试了一些机器学习应用在系统上的想法 ,不过很遗憾的是,那时候我们并没有比较好的实验条件与机器,这些想法最终都没能变成完整的工作。\n如果仅仅是这样的话,那信静在我心中只是一位基础扎实、动机强烈(highly self-motivated)、刻苦勤奋的很强的朋友罢了。真正让我震惊的是无意中得知的信静之前的故事。\n有次我们在讨论算法题,信静随意说了一句自己之前有一些ACM经历。我闲着无聊,想搜搜看他之前的ACM成绩。这一搜不得了,无意中搜到了这样一条推送:\r不忘初心 笃行致远——记软件技术122班毕业生周信静 。我这才惊讶地得知原来信静不止是从杭电辛苦地考上浙大计算机的,他甚至之前还是专升本到的杭电!震惊之下,我把这条推送发给了信静,表示了自己的膜拜与佩服之心。谁想到信静转而说出了让我更震惊的事情。信静尴尬一笑,说自己小时候不懂事,也没啥人管,天天就知道乱玩。到了初三的时候,职高来他们初中宣传,一忽悠,信静就一冲动,放弃了中考而选择了去职高。结果在职高读到第三年,他突然醒悟,觉得自己不想就这样度过一生,于是开始奋发图强,努力学习。无奈积重难返,且偏科严重,后来仍然只有考上一所大专。信静并没有因此而绝望,而是进入大专之后,继续维持着之前努力的势头,积极学习高质量的公开课,最终完成了专升本和考研到浙大的逆袭。职高-\u0026gt;大专-\u0026gt;专升本-\u0026gt;考研到浙大!我实在无法想象信静背后是付出了多少努力,才能走出这样的道路。\n附:这里有信静在大专二年级时写的一些项目:\rraft-core。大家一看代码就知道他当时的水平了。诚实地说,现在的我仍然距此仍有相当距离,很难想象当时的他付出了多少努力。\n与信静的科研合作:永不放弃的坚定前行者 又过了一段时间,由于一些原因,我转出了原来的实验室。由于信静所在的数据库实验室已经基本没有同学做数据库(都去做机器学习了),故信静仍然常常来找我这个不做也不懂数据库的人来讨论想法(idea)、实验和写作方面的问题。某天晚上,信静突然非常激动地跑到我的寝室,和我说他新想出了一个想法。这个想法是针对一种新的存储硬件NVM的(Non-Volatile Memory,非易失存储)。这个想法的动机(motivation)是来源于NVM的一个特点:NVM的读很快,具有接近DRAM(Dynamic Random Access Memory,动态随机存取存储器,即我们平时所说的内存)的速度,但是写比DRAM慢很多。这样的特点使得NVM上的写在很多时候成为了一个瓶颈,因此这篇工作就希望能够降低NVM的写的频率。使用的方法启发于以前一篇数据库领域的论文。那篇论文设计了一种混合多阶段索引(hybrid multi-stage index)来减少写操作。启发于此,信静设计了一个双阶段(dual-stage)的索引来减少NVM上的写操作。(关于这篇论文详细的说明可以参考\r这篇文章)信静有些忐忑又有些期待地看向我:“你觉得这个想法怎么样?靠谱吗?做出来能中顶会吗?”我很肯定地告诉他:“我觉得非常靠谱,做出来的话应该能中。”信静欢欣雀跃地说:“我也这么认为!那我就去实现了!”\n在这项工作中,还有一些让我印象深刻的事情。在与以前的相关工作进行实验对比的时候,我们发现之前的工作基本都没有开放源代码(开源)。数据库、系统方面的论文实现是极其复杂且困难的,常常会耗费巨大量的力气,因此如果之前的工作有开源的话,那就会大大减少复现的代价;否则的话,则可能要花大量的精力在复现论文上。信静抱着试试看的想法给作者们写了邮件,想看看能不能要到源代码,这样就可以省下大量精力。遗憾的是,所有最新的相关论文的作者都表示无法提供源代码,但是有几位作者表示,如果信静复现论文的过程中碰到问题的话,他们愿意提供帮助。“这怎么办呢?要不就比较一些老一些的但是开源了的工作?”我问信静。“不行,这样的话,实验结果就缺乏说服力了。不提供代码就不提供代码吧,我自己来实现!”信静坚定地回复我。后来,信静就凭借自己惊人的工程能力,将所有需要对比的工作都复现了出来。\n这项工作在做了半年之后进行了第一次投递,投递在VLDB2020(VLDB是数据库领域最顶尖的两个会议之一)上。不幸的是,第一次审稿(review)结果出来,审稿人(reviewer)的意见都比较负面,主要的批评在于工作的实验是在NVM的模拟器上做的,审稿人觉得这不太具有说服力,希望能在真实硬件上做实验。审稿人写道(此为翻译):“如果是以前也就罢了,那时候Intel没有提供硬件给外界使用,那不得不用模拟器。现在Intel已经提供硬件了,那么没理由只是在模拟器上做实验。”“哼!提供个啥!明明只有和Intel有合作的企业才能拿到。”信静很委屈地和我吐槽。我当时和信静说,实在不行的话,就再投下一个会议吧,我想总有审稿人愿意接受模拟器上的实验结果的吧。信静不服气,觉得不能就这样放弃。后来他自己想办法联系到了阿里的一个数据库的组去实习,并与实习的组商量好,在实习期间把这篇工作的实验给做了。在真实硬件上重新做了实验之后,信静再次将这篇论文提交到VLDB。审稿人看到这样的改进之后都非常高兴,纷纷给了接收(accept),这篇工作就这样中了。\n信静想办法拿到真实NVM硬件做实验的这件事情让我意识到了自己和信静的一个巨大差距的地方:信静是能够打破限制(break the box)来解决问题的人(problem solver),碰到没有NVM硬件这样的限制,他会想办法打破限制;而我则是一个只敢在限制内行动的人。\n三识信静:沉默着扛起所有压力的男子汉 接下来要说的这件事情,应该说是信静人生最曲折最悲惨的一件事情,却也是最让我震惊而敬佩他的一件事情。\n2019年暑假的某天晚上,我问信静VLDB的审稿结果出来了吗。信静突然回我说:”我回家了,我爸因病去世了。”\n信静的父亲是因为食管癌而去世的。信静告诉我说他父亲是在信静研究生入学前几天查出来食管癌晚期的,而像他父亲那样的病人,平均生存周期一般是不超过半年的,他父亲能坚持一年半多,家里人已经很知足了。我说你这几年怎么都不和我们说这事儿。他觉得也没啥好说的,说了也帮不上什么。我眼中彷佛看到了当年收到确诊噩耗的信静:他也许先是当场愣住了,没想到一直安分守命的他们会遭遇这样的天灾;而愣了一会儿之后,他握紧拳头告诉自己,自己已经是一个顶天立地的男子汉了,能够也必须扛起家里的负担了。尽管家里很穷苦,他也没有和任何其他人去说这件事情,也许是不希望大家不必要地去可怜他;他只是自己默默地找了个远程实习,一边读研一边赚钱给家里提供医药费的支持。他什么也没有说,什么也没有抱怨,沉默地扛下了所有压力。男子汉所谓顶天立地,不外如是。\n离开校园后的科研:时间是海绵里的水 在那之后,许是上天不忍心再捉弄信静了,他的运气终于好了起来。DPTree的论文被接受了。而之后,这篇论文的一位审稿人 Joy Arulraj (他是佐治亚理工的助理教授)因为信静的出色工作而主动联系他寻求合作。在得知了信静还没有攻读博士后,Joy还主动找了funding(资金支持)并邀请信静去佐治亚理工读博。\n到了秋招,我们都要找工作了。我和信静都非常希望能和彼此做同事。我先拿到了一家高频交易公司的offer,而后信静也非常希望能拿到这家公司的机会,我们一起当同事,但很遗憾这家公司秋招时候的系统开发岗位只有1个名额,不再继续面试信静。无奈之下,信静只能再去寻找其他大公司的数据库组的机会。后来我率先拿到了腾讯云数据库内核组的offer,之后介绍信静去面了这个组,信静也没有辜负大家的期望顺利地砍下了SSP。这本是我们成为同事的绝佳机会,然而我已经先答应了那家高频交易公司,而我向来是言出必行,故而也就未选择去腾讯与信静共事,现在想来还非常后悔和遗憾。\n信静毕业去了腾讯,在那个组做了许多很不错的工作。更厉害的是,信静还利用业余时间与Joy合作做科研。那时候,信静工作日的白天上班,晚上和周末挤时间做科研。我们同届的几位朋友基本上都因工作忙得焦头烂额,挣扎在厂子里日复一日的搬砖之中,而他却能在将工作任务完成得非常出色的同时,还做了一项顶级的科研工作,真是令人敬佩。他们的这项工作\rSpitFire最终发在SIGMOD2021上(SIGMOD是数据库领域最顶级的两个会议中的另外一个)。\n博士申请:百二秦关终属楚 读博是信静多年的梦想。我刚认识信静不久的时候,他就问过我了不了解申请美国大学博士的事情。他问我说有没有认识去CMU(卡耐基梅隆大学,美国计算机排名前四的大学)计算机系读博的同学。当时我告诉他说,这个级别的大学极难申请,浙大一年也不一定能有一位申请成功。说实话,那时候我和信静的交流还不多,对他的了解和认识都不够,心里还觉得他有些“好高骛远”,甚至是“不知天高地厚”;现在想来,当时的我是燕雀不知鸿鹄之志了。到了2020年的时候,我才知道为什么信静当时会问CMU的事情了。实际上,信静入门数据库的时候,用的是CMU的\rAndy Pavlo开放在网上的公开课程\r15-445和\r15-721;Andy的课程让他产生了对数据库的强烈兴趣,并一直持续至今,也让当年的信静产生了对CMU的憧憬与向往。值得一提的是,信静的SIGMOD2021的论文,三作就是Andy,不得不让人感慨命运的神奇。\n2020年年底,信静开始申请美国的博士机会,并且只申请了几所顶级学校,我也一起帮他参考了一些文书方面的工作。在申请的学校中,信静出人意料而又情理之中地拿下了MIT计算机系的PhD offer,并选择去MIT就读。说出人意料,是说考虑到信静的故事背景,他也许是唯一一个从职高大专走到MIT PhD(或同等水平的学校)的人,就我所知是前无古人,后会不会有来者我也说不准;说情理之中,是说以我对他的实力和秉性的了解,他能拿到MIT的offer我毫不意外,甚至可以说这也只不过是他的一个新起点,他的征程才刚刚开始。目前,MIT的数据库实验室已经有三位教授向信静抛出了橄榄枝,这其中就包括数据库领域现存的唯一图灵奖获得者\rMike Stonebraker,而Mike已经有好几年没有招学生了。\n生活中的信静 我与信静的交流颇多,甚至我们现在还是室友——他从腾讯离职以后,我们与另外一位好朋友三人一块合租。生活中,信静最令我印象深刻的当属他的勤奋。除了每天的锻炼身体以外,我几乎很少看到信静在做学习、工作以外的事情——而他最大的热爱就是在数据库与计算机系统上,几乎将全部的时间与精力投注于其上。前两天,我们三人在家里聊自己业余时间有什么兴趣爱好,当我们纷纷说出自己爱好的时候,信静却微笑着说:“对我来说,数据库就是我的兴趣爱好。”而且,由于信静多年以来一直坚持跑步,他也拥有强健的体魄,这更支持着他数年如一日般地专注学习。可以说,信静是我熟悉的人中最为勤奋的一位。这里顺带一提,就我个人观察到的情况而言,可以说计算机领域多数情况下就是这样一个领域,天赋在其中的作用或许不算多大,而努力与勤奋才是最重要的。我从未见过一个勤奋努力并使用正确学习方法却学不好计算机的人,也没见过任何一个“聪明”但却不勤奋努力但却能学好计算机的人。一分耕耘,一分收获。\n除此以外,信静还是一位非常温柔善良的青年。记得2020年有一天晚上,我在上海某医院看病。由于某些原因,我个人的行动能力出了点问题。信静知道之后二话不说,从家里赶到医院,全程陪着我看完了病,并送我回家,确认我平安无事之后才离去。印象最深刻的还是信静刚到医院时,从包里掏出了两根(有点压坏了的)香蕉和一个苹果。我说你这是干嘛。信静说,怕你饿了,给你带点水果充饥。我笑了笑,说,还好你带的不是橘子。\n不过,很高兴的是,信静近日脱离了我们的单身队伍,从此业余生活终于不再是一味的数据库了(笑)。\n结语 信静出生于浙江一个贫困的小岛。尽管早年他对读书没任何兴趣,因而进了职高大专,但他后来奋起读书,立足杭州,放眼世界,最终惊人地拿到了MIT CS PhD的offer,他的奋斗历程毫无疑问是极其励志的。更难能可贵的是,除了他出色的技术水平与学术研究水平以外,信静还是一位非常温柔、善良、诚恳、坚毅、果敢的青年,尽管生活在很长的一段时间内并未温柔地对待他,但他仍然对生命充满着热爱。抬头仰望星空,低头脚踏实地,这是对他的最好写照。他是我永远的学习榜样。\n最后,希望所有出身贫寒的孩子,都能抬头看天,向着自己的梦想奋斗、努力;希望所有以前荒废了时光,现在却想“浪子回头”的同学都能相信自己,踏实勤奋地去学习,你永远想象不到未来的你会有多强大;希望所有出身“低下”的同学都能不再自卑,为自己的经历感到自豪;希望所有心中有梦的同学,都能脚踏实地而又勇敢地追寻自己的梦想。\n谨以此文表达我们的这些希望。\n","date":1607587791,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1607587791,"objectID":"cc81746ea113974bf9c5394f543d6aec","permalink":"https://conanhujinming.github.io/post/story_of_xinjing/","publishdate":"2020-12-10T16:09:51+08:00","relpermalink":"/post/story_of_xinjing/","section":"post","summary":"[周信静](https://zxjcarrot.github.io/)是我最好的朋友之一,也是我最敬佩的同龄人,讲讲他的故事。","tags":[],"title":"讲讲信静的故事:从职高到MIT计算机博士录取","type":"post"},{"authors":[],"categories":[],"content":"看到最近的浙大动科女博士自杀事件,不禁一声长叹,这样的事情发生得实在是太多了。他们本是天之骄子、是初升的朝阳、是国家顶尖的学子、是社会的未来和希望。他们中许多人怀着对科研殿堂的憧憬与向往,怀着对冲击人类知识边界的期盼与渴望,也怀着对声名在外、头衔满目的导师的崇拜与仰望做了选择,却一头撞在残酷的现实面前,发现科研并不如自己所想的那般神圣,而导师也不像自己所想的那般为人师表。他们在剥削与压榨之下苦苦挣扎却又苦不堪言,他们中的一部分靠自身能力做出成果、成功毕业,一部分因为压力与压榨出现心理问题,还有一小部分甚至因此选择轻生。他们,就是在渣导压迫下生存的博士们。\n老师是一个多么神圣的词,教书育人、为人师表、诲人不倦、百年树人、春风化雨\u0026hellip;\u0026hellip;我们有很多很多形容师德的词。一位好的老师对于学生教育的影响是巨大的。但是反过来,一位师德败坏的老师对于学生的影响也是毁灭性的。而研究生,尤其是博士生的导师,对于博士的影响几乎可以说是无出其右。想一想,绝大多数高校的博士生们的毕业都需要导师签字,那么得罪了导师之后,博士们还想不想毕业了?那么转导师呢?诚然,高校的确是有提供转导师这样的选项,可如果原先的导师不同意放人,那新的导师也不敢接收呀:谁会为了一位也许素未平生的学生而得罪自己可能要共事几十年的同事呢?那么直接退学呢?这个代价对绝大多数博士来说可能是巨大的,因为一旦退学,就意味着过去几年的努力与忍辱负重都随之而去,而自己可能只能拿一个本科学位。在这样的背景下,博士往往就成为了导师手心里的蚂蚁,任其拿捏,导师想让博士做什么,博士为了毕业,也只能忍辱负重,乖乖照做。当博士的生存境况几乎任由导师掌控,那也就只能寄希望于导师的师德优良了。\n究其原因也非常简单:导师的权力过大,却又没有相应的监督机制。权力没有监督,就很容易导致权力的滥用。\n那么如何引入针对这种权力的监督机制呢?我想还轮不到我这个小人物来给出什么有建设性的意见或者是建议,相关部门和机构应该很清楚怎么监督。我这里仅从个人经历出发,给各位同学一些我认为可能有帮助的建议。\n在选择导师之前,一定要了解清楚导师 一定一定要想法设法去了解清楚自己的未来导师,尤其是人品、师德方面的情况。可以想办法去网上检索信息,去\r这样的github项目或者\r这样的推荐网站上获得一些信息;而更好的办法是能想方设法地去接触一些靠谱的在导师处就读的学长学姐(已毕业的可能更好)了解情况 ,甚至是自己去实验室观察、体验一段时间,看看导师对学生的态度是怎么样的,大家是不是比较开心等等。\n被压迫的同学要团结 如果不幸落入渣导手下,如果能走则尽量走;如果走不了,那么希望一个实验室的学生们能团结起来,至少可以互相鼓励、互帮互助、互相关注心理健康等,甚至可以进行一些反抗等\u0026hellip;\u0026hellip;强烈建议同学们不要背叛自己的阶级,而帮助渣导一起压榨剥削同学(还真听说过这样的例子)。往道德方面说,这是不仁不义;哪怕功利点说,这也无非是充当渣导的走狗,而且很可能哪天就被当弃子一般抛弃,而与自己的同学朋友的关系可能是能维持一生的。\n寻求多元化的价值观 最近有一篇很火的文章《绩点为王,中国顶尖高校年轻人的囚徒困境》,大概是说现在国内高校年轻人十分内卷,大家都为了GPA等“硬性指标”绞尽脑汁、焦头烂额;而尽管很多同学都已经拼尽全力,却仍然感到十分焦虑,对未来感到迷茫。我个人认为,导致这种情况的一个重要原因,就是如今相对单一的价值观。(单一的价值观则往往来源于单一的评价指标,而归根结底,可能还是教育资源的不足)\n这种价值观不是仅仅在一个地方体现,甚至可以说我们自己就在这样的教育下长大。小学的时候要努力考到好的初中,初中的时候努力考到好高中,高中的时候努力考好大学,大学了又要好好刷GPA\u0026hellip;\u0026hellip;也许从小就接受教育“要赚大钱、要出人头地”等等。我不是要反对这样的价值观不好。只是过于单一的价值观更容易酿成悲剧。从小就一直是成绩拔尖的天之骄子,到了本科或者博士之后“泯然众人”了,甚至于退学了,在这样的价值观的压迫下会不会更容易产生心理问题呢?\n\r《恰同学少年》第四集中讲了杨昌济先生给一师的学生上的第一堂课,这一堂课的内容就是修身:\n\t何谓修身,修养一己之道德情操,勉以躬行实践,谓之修身。古人云,修身齐家治国平天下,也就是说,修身,是一个人,一个读书人,一个想成为堂堂君子之人,成才的第一道门槛\u0026hellip;\u0026hellip;你们会问,什么是修身的第一要务呢?两个字,立志。\n立志,也就是树立自己的志向,这是认识自我的重要一步。我个人认为,人们不仅应该关注自己”针对外界的成长“,即所谓的名校、高GPA、金钱荣誉等,同时也应该关注自我内心的成长,而认识自我,就是其中重要的一环,是应该贯彻人的一生的一件事情。终其一生,我们应该思考自己的志向是什么,自己的优点与弱点是什么,自己向往的是怎么样的生活等等。那么,大家不妨问问自己,眼下周围所盛行的相对单一的价值观,真的是自己想要的吗?(学cs的同学,如果是打算找工作的话,我强烈建议不要死盯着GPA,来刷名校的网课与lab吧!)\n有条件的话,坚持锻炼 根据我个人经验,锻炼/健身可以很好地帮助个人调整状态、缓解焦虑情绪,也能帮助缓解焦虑带来的失眠等症状。而且,生活如此艰辛,那么更需要我们有一个健康的体魄来迎接挑战。本人有过几次心理状态非常糟糕的时期,所幸有朋友们带我健身,这才能挺过去。关于健身,推荐参考施瓦辛格的《施瓦辛格健身全书》,我跟着这本书前后练了一年左右(中间因为疫情停了半年),体重从60kg不到涨到了70kg左右。\n应对焦虑的一些方式 这里给出一些与处理焦虑相关的TED演讲,供大家参考。(不好意思都是youtube链接,还请见谅)\n\rWhat makes a good life? 什么是快乐人生的秘密?:如果问你这个问题,你会怎么回答?有些人可能会说是钱,有些人可能会说是荣誉,有些人可能会说是地位。这个演讲讲述了哈佛的一个长达八十年的研究,研究的结论是: good relationships make life better,好的关系造就快乐人生。所以,找一些志同道合的好友吧!一起分享生活的喜悦与苦涩,分享学习进步的开心,分享思考的点点滴滴,分享爱情的欢欣与失恋的落寞。与自己的家人成为好朋友吧!告诉他们你爱他们。当然,最重要的可能是,要找到适合的伴侣。\n\rThe Secret of Becoming Mentally Strong. 内心强大的奥秘:内心强大的人是如何面对挫折却又百折不挠?他们是如何应对焦虑的呢?Amy Morin从反方向指出,对自我的”病态“认识是阻止很多人变得内心强大的重要阻碍,并给出了一些建议。\n\rHow to cope with anxiety. 如何应对焦虑剑桥大学的Olivia Remes做了一系列关于焦虑的研究。她首先指出,并不是所有焦虑都是对人有害的,有些焦虑情绪实际上是在保护人自身。同时,他们也研究发现,生活贫困的人相比生活富裕的人更容易出现焦虑问题。进一步的研究发现,并不是所有生活贫困的人都会出现焦虑问题:实际上,有一部分生活贫困的人有一些略有些与众不同的应对措施,而这些措施使得他们更不容易焦虑。这些措施包括:\n Feel like you are in control of your life. 感觉自己”像是“在掌控自己的生活。 Keep this in mind: anything worth doing is worth doing badly the first time. 任何值得做的事情,都值得第一次做得很糟糕。第一次论文写得很差?没关系,论文是值得写的,所以它值得第一次写得差。第一次演讲讲得很糟糕?没关系,演讲是值得讲的,所以它值得第一次讲得差。第一次面试表现糟糕?没关系,面试是值得面的,所以它值得第一次面得差。同样记住,practice makes perfect,万般磨练,方臻化境。从第一次的糟糕中吸取教训,会帮助下次做得更好。 Forgive yourself for any mistakes you think you might make. 原谅自己所犯下的错误。有的时候,越优秀的人,越不容易原谅自己犯下的错误。“啊!要是我当时论文这一段这么写就好了!”或者是”啊,如果我当年那门课没考这么差就好了“诸如此类。然而,研究表明,这样的想法更容易导致焦虑,而焦虑则会使得之后更容易犯错。更好的做法也许是原谅自己,吸取教训。 Having a purpose and meaning in life. 找到自己人生的追求。 还有个找不着了:这个ted演讲大概是说,阻止一个人走出低谷的,不一定是这个人有哪些情绪上的好习惯,而恰恰是有哪些情绪上的坏习惯。实际上,一个情绪上的坏习惯,有可能就会拖拽着一个人久久走不出情绪低谷。因此,演讲者建议大家好好思考一下有哪些情绪上的坏习惯,并着手一个一个去改进。\n\rThe skill of confidence 自信的技巧:这个演讲首先告诉大家自信是极为重要的。而更为重要的是,自信是一个技巧,是可以通过一些方式来磨练的。Ivan Joseph给出了一些磨练自信的技巧,其中最重要的一个是:Stop negative talk to yourself. 不要自己给自己心理暗示,告诉自己不行。\n\rHow to make stress your friend 如何和压力做朋友:这个演讲是最有意思的,因为演讲者给出了一个有趣的研究观点:压力对人的身体有伤害,而这个现象,只会存在于那些相信压力对身体有伤害的人身上。听上去是不是很像一句古话,”信则有,不信则无“。还有一个非常重要的观点是,当人出现紧张、压力、焦虑反应的时候,如心跳加速、呼吸急促等,不要太害怕,告诉自己,这是身体在为应对挑战做准备。\n另外还有很重要的一点,与朋友们多多交流。我自己感觉当自己压力很大很焦虑的时候,与朋友们的交流能够极大地缓解我的焦虑,哪怕只是和大家吐吐槽、闲聊等等。也不要太担心自己会让朋友们不高兴,大家往往都是很好的人。况且,生活会有如此多的波折,所以更需要互相扶持才能顺利地度过难关。在这里也特别感谢我的诸位亲人朋友们对唠叨的我的担待Orz\n如果感觉心理出现问题,及时求助 中国人的传统文化似乎有些讳疾忌医,而在心理方面似乎尤其如此。一方面可能是不愿意承认自己心理也许出了问题;另一方面也许是怕其他人知道嘲笑;还有一些同学可能是觉得心理问题与疾病挂不上钩。其实大可不必如此。首先,心理问题严重到一定程度的时候则的的确确是疾病,就像感冒发烧一样。如果是发烧,那么人们往往会去看病,也许会吃药甚至挂点滴;心理问题也是一样,同样需要去咨询与治疗,必要的时候甚至需要服药。其次,我相信周围的同学朋友亲人们知道之后并不会嘲笑,而会有很多朋友很温暖地提供一些力所能及的帮助:你不是一个人在战斗。最后,让专业人来做专业事,严重的心理问题,外行人是很难解决的。\n因此,我强烈建议自己怀疑有心理问题的同学及时做心理咨询、请求心理援助、甚至是就医。各大学校都有提供心理援助的方式,例如浙大的同学们可以在\r这里预约心理咨询等。\n活着,就有希望 记得以前某个夏日的午后,随手拿起余华的《活着》开始阅读。读着读着,就被里面人物之命途多舛所深深震撼:人生为什么会有这么多的苦难?但是更令我触动的还是福贵经历了这么多苦难之后,最后与一头老牛相伴时走在路上唱着歌的场景。很多人的人生的的确确会有许多苦难,但是没有什么比身体、比活着更为重要的。生死之外无大事。就像《飘》的结尾里,斯嘉丽只身一人回庄园时的背影所说,“不管怎么说,明天又是新的一天”。如果读研/读博的生活真的苦不堪言,那么可以考虑休学甚至是勇敢退学、从头再来。同时,也要有自信,就算自己眼下过得不如意,自己的学术生涯有些耽误甚至要退学重来,但自己一直勤勤勉勉、认真刻苦,也许眼下会有波动与起伏,但最终自己一定会收敛到自己这样的努力所对应的期望上的。\n最后以一首我以前在别的地方写的打油诗结尾吧~\n Let it go with the wind\nAmong the road I should sing\nTomorrow is another day\nWith the hope I should say\nAlthough someone makes me ill\nI would like to keep me still\n 就让往事随风而去\n继续一路哼着小曲\n明天又是新的一天\n无限希望就在眼前\n纵使未被温柔对待\n我将仍对生活充满热爱\n祝大家都能拥有健康快乐的生活~\n","date":1600582695,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1600582695,"objectID":"928ee807c2f2138b3a6fb67b22a07efe","permalink":"https://conanhujinming.github.io/post/cope_with_anxiety/","publishdate":"2020-09-20T14:18:15+08:00","relpermalink":"/post/cope_with_anxiety/","section":"post","summary":"发表一些浅薄的看法,分享一些也许有用的建议","tags":[],"title":"关于浙大动科女博士自杀事件的感想","type":"post"},{"authors":[],"categories":[],"content":"(标题是一个危险的致敬)\n\r6.828 Operating System Engineering是MIT久负盛名的一门操作系统相关的课程。这门课程有多牛呢?举个例子,以陈海波老师为首的上海交通大学IPADS实验室可以说是国内最强的操作系统相关实验室之一,而陈海波老师等人在他们读博的时候(早在2005年左右)就完成了6.828课程的学习,甚至还以6.828的JOS系统为基础开发了Corey操作系统,并发表了一篇ODSI2008论文Corey: An operating system for many cores,该论文也是陈老师至今引用最高的论文。而后,IPADS老师也基于6.828的资源,在上海交通大学软件学院开设了多年操作系统课程。\n然而,在此之前,这门课程一直是参杂着操作系统的知识学习与前沿research内容一同教学。这样有一些问题:对于打基础的本科生或低年级研究生,前沿research的研究似乎有些难度过大而又不那么必要,而打扎实基础更为重要一些;对于高年级研究生与博士生,他们又往往早就有扎实的基础,再过一遍这些基础也许会有些浪费时间。因此,MIT今年决定将其拆为两门课程,分别是6.S081(Introduction to Operating System)和6.828(也许是Operating System Research Seminar),而让两门课程分别适配不同的受众人群。新的6.S081对于意图补基础的同学无疑是一门更为合适与smooth的课程。更重要的是,今年这门课程决定开放课程视频!(大家再也不用看同学偷偷录的山寨视频了)顺带一提,今年是极为特殊的一年,MIT大量开放了课程的视频,如6.824、6.826、6.828等等,这对于广大学习者无疑是一个福音。大家直接在\r课程主页上就能看到全部的课程资源,还包括视频,惊喜不惊喜~~\n顺便讲一个有趣的八卦。6.S081一位授课教授\rRobert Morris是互联网蠕虫病毒的发明者。当年Morris是康奈尔大学的一名学生,写了个小的实验程序即蠕虫病毒玩,据说他是想用蠕虫病毒“测量互联网的规模”。但是他又怕被抓,就选择了在MIT释放了蠕虫,以掩盖他是来自于康奈尔的事实。结果这个病毒造成了巨大的损伤。Morris受到审判,并被定罪违犯了1986年的《计算机欺诈及滥用法案》(他也是第一个适用于该法案的人)。经过上诉,他被判3年缓刑、400小时社区服务及10,000美元罚金。Morris也许是处于内疚(大雾),后来就去MIT担任教授至今。\n八卦讲完了,那么来说说我写这篇文章的目的是什么。在我之前的一篇学习CS144的文章中我有提到自学网课的一个大问题是没有TA以及同学可以交流。所以当时建议大家自学网课的时候也可以找一些小伙伴一起学,搞一个“虚拟课程”甚至是“虚拟大学”。这篇文章的目的就是组织一个6.S081 Fall 2020的学习交流群。交流群的目的是供大家互相督促、鼓励,并交流学习经验与心得,以及互相帮助,避开一些lab里存在的坑,大家一起来通关6.S081~换言之,每一位加群的同学都应该以独立通关6.S081的Lab为目标。这里的独立,不是说大家不能交流,而只能一个人埋头苦干;恰恰相反,交流是非常重要的。这里独立指的是:\n 不能阅读其他人的代码实现,自己的代码必须自己完成。 不能找其他人帮忙debug。 可以交流思路、碰到的问题,但不应该提问一些应该自己解决的问题。例如:为啥我过不了这个case呀?有没有人能帮我看一下我这段代码哪里有bug等等。 为了尽量保证每一位入群的同学都是冲着独立通关6.S081来的,入群有一个简单的条件,即必须自己先独立完成前两个Lab的内容。实际上Lab1和Lab2与后面的Lab相比都比较简单,属于热身性质的lab。我个人认为这样能更好地维护学习交流群的单纯性。\n另外,为了保证交流群的氛围,这边也简单写一些规则,如果不愿意遵守的同学就算啦:\n 不准阴阳怪气他人。 不准参考他人代码或请他人debug,应该要独立完成Lab。 不准或尽量少无意义地水群,6.S081学习交流群应该供学习交流6.S081使用。 我注意到前两个Lab里已经有一些坑,这里也给出来,避免大家再次踩坑:\n 在开始lab之前,先按照\rtools 配环境。如果是使用ubuntu的话,我个人推荐用ubuntu20,这样可以免去自己配toolchain的痛苦;而如果是更早的ubuntu系统的话,那么需要按照页面上的指点自己build toolchain。另外使用apt-get安装的QEMU的版本估计是不够新的,如果版本号低于5.1.0,那么也需要自己手动build QEMU. 最后验证安装的时候,如果不是自己手动build的toolchain的话,可能不是按照官方说的用riscv64-unknown-elf-gcc之类的,而是其他的一些命令,具体可以在/usr/bin或者/usr/local/bin 下查看 。对于验证安装,我个人建议先确定qemu版本,再尝试在xv6运行make qemu,如果能够正常进入,应该就没有问题了。 之后阅读\rguidance 注意一个坑点是make qemu-gdb的部分,在另一个窗口跑gdb或者riscv64-linux-gnu-gdb可能都不一定有用,也许是gdb-multiarch或者是 riscv64-unknown-elf-gdb 具体同样可在/usr/bin或者/usr/local/bin 下查看。可以自己试试哪个会work\u0026gt;_\u0026lt; 如果你要用xv6的某些自带的函数,发现它们不像你想得那样工作,那么请大胆地去看源码,也许它们的实现的behavior和标准库的是不一样的\u0026gt;_\u0026lt; 并且,要敢于而且主动地去看xv6的源码,甚至可以说这些Lab的目的就是帮助你熟悉了解xv6的源码的。 如果你的机器(像我一样)很烂,在某些case上可能会碰到timeout的问题(纯粹是因为机器太烂),那么可以把gradelib里默认的timeout调大一些\u0026hellip;\u0026hellip; 想到其他的坑点会再补充。 好的,那么我就先写到这里,感兴趣的同学请独立完成前两个Lab之后加群交流~**群号为603579009,加群的时候请附上自己完成前两个Lab的github repo地址~~**谢谢大家啦\n","date":1600356050,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1600356050,"objectID":"2091272389825c1e2dce84bfe53fd49b","permalink":"https://conanhujinming.github.io/post/mit_6_828_together/","publishdate":"2020-09-17T23:20:50+08:00","relpermalink":"/post/mit_6_828_together/","section":"post","summary":"MIT 6.S081/6.828学习交流小组征友","tags":[],"title":"二十八画生征友:一起来通关6.S081/6.828吧~","type":"post"},{"authors":[],"categories":[],"content":"半年前我曾经写过一篇长文,主要是关于自己的面试、学习CS心得。这篇短文给出一个我认为比较合理的自学CS的路线,以供参考。\n个人推荐首先学好英语,同时跟美国名校有视频的课程,并完成作业。这套方法是偏学院风的,比较适合时间比较多的学生。\n如何学好英语?可以参考\r这篇文章。\n需要说明的是,我的学习方法是比较偏学院风的,不适合时间不多的同学;而且这些资料也有一些门槛,所以这套学习路径可能只适合一部分人吧。注意以下推荐的课程都是我认为很好的课程,每一块内容挑选1-2门对自己胃口的课程就足够足够了,然后看视频、看reading材料**并完成作业。**这些课程有些我写了点简单的介绍文章,一并附上;还有些课程的介绍文章会在未来有空的时候写。不过我还是强烈推荐自己找到课程主页,看一下课程大纲,且课程资源都在课程主页上。至于课程视频,在B站或者Youtube上都有。\n下面是路线推荐:\n 首先建议从计算机导论课程开始。推荐MIT的6.001或者Harvard的CS50或者Berkeley的CS61A都是可以的。 之后建议学数据结构与算法。纯粹数据结构的话,Stanford的CS106系列是不错的,再包括算法的话MIT的6.006和6.046(进阶)都很好。学了之后也可以定期刷点leetcode。Berkeley的CS61A和CS61B当然也非常好,还有Coursera上的Princeton的课程。Stanford和UIUC也都有很好的进阶算法课程。 操作系统:推荐CMU的15-213和Berkeley的CS162,都是有视频有lab的好课。进阶的话推荐6.828(小伙伴都说很好,我还没做)。 组成原理、体系结构: MIT的6.004, CMU的15-213有一些,Berkeley的CS61C也非常好。有一个很有趣的游戏MHRD也不错,可以参考\r这篇文章。 MIT的6.null,实用工具介绍,可以参考\r这篇文章。 计算机网络:Stanford的CS144,lab很棒,可以参考\r这篇文章。 基本上学了第一门导论课程之后,就会知道自己接下来想学/需要学什么了,也可以参考\rMIT的CS本科的课表。\n我列出的这些课程的资源在网上都有,也基本都有视频。想要学好的话,作业一定要做。当然也有很多很好的课程这里没给出,大家可以自行发现,或者参考\rgithub项目awesome-courses(这个项目近期更新得不是很多了)\n之后看走开发岗还是算法岗路线。走开发的话,可能还要学数据库(CMU 15-445)、分布式(MIT 6.824)、软件工程(MIT 6.031) 等等;走算法的话,就从吴恩达的Coursera课程开始,然后Stanford的CS229或者CMU的10-701,然后Stanford的CS231n\u0026hellip;\u0026hellip;想走工程道路的话早日实习,有机会参加高质量的github项目开发;想走科研的话找靠谱老师跟着做,或者去发论文导向的靠谱的组实习;想去美国读phd的话找机会去参加暑研\u0026hellip;\u0026hellip;\n关于编程部分,也推荐看看Norvig的这篇文章:\rTeach Yourself Programming in Ten Years\n关于这么多课真的能自学下来吗,以及要多久,可以参考\r这篇文章。太长不读版:视课程难度与个人基础,一门CS课一般需要150小时-300小时的有效学习时间,因此请自己计算。\n学下来能拿到什么样的offer?我只是偷懒地完成了以上部分课程的一大部分内容,大概拿到了10多个offer,且基本都是硕士能拿到的很top的offer了。所以全部学下来的话应该至少能拿到比我多比我好的offer吧~~\n祝大家自学CS之路顺利、开心~Happy Learning, Happy Coding!\n","date":1598619967,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598619967,"objectID":"5b64fa705b220c11c5ce5b613f9a4051","permalink":"https://conanhujinming.github.io/post/how_to_learn_cs/","publishdate":"2020-08-28T21:06:07+08:00","relpermalink":"/post/how_to_learn_cs/","section":"post","summary":"你渴望力量吗?","tags":[],"title":"自学CS路线、资源推荐","type":"post"},{"authors":[],"categories":[],"content":"计算机网络是CS极为基础和重要的一门课,但却一直是我的心病之一,其原因在于我并没有认真地学习过这门课:我对计网的了解基本局限于考研时拿着某本国内教材死记硬背的那点知识。这么重要的课程,我却掌握得如此不扎实,这一直让我非常惶恐,所以读研之后也一直有一些想法去补一下。但是自己实在是太懒了,且读研期间也几乎没有接触到什么需要用到相关知识的地方,故而就一直像鸵鸟一样,对自己的菜视而不见。然而学习终究是没有捷径可走的,当初欠下的终归是要还的:这不,我现在的工作内容就有很大一部分是需要与网络打交道。求生欲终究还是战胜了自己的懒惰,我这才终于下定决心补一补这部分的知识。\n如之前的文章所述,我在补这些CS的知识的时候,比较喜欢找一门有视频的名校(通常是四大)课程跟着上一遍。搜了一圈,我发现四大中只有Stanford的\rCS144是有\r视频的,虽然这个视频版本是多年前的MOOC版本而非课程录像。除了视频以外,我认为自学课程最重要的一点就是这门课是否有很好的Assignment/Lab。我一看,这CS144的Lab是用C++自己实现一个TCP。就它了!于是就开始了CS144的学习。\n可能是因不适应两位教授的授课风格,看CS144的视频总是让我犯困(我甚至在某个失眠的夜晚打开了CS144的授课视频,然后成功治好了我的失眠),再加上我之前还是多多少少知道一些计网的皮毛知识,我终于决定不看授课视频而直接上手完成Lab。不得不说,Lab的设计还是非常不错的。前5个Lab从byte_stream开始,一步一步地指导你实现出一个能真实使用的TCP,总得来说有趣而又有用,且难度也不算很大。不过由于我太懒,再加上中间有一段时间非常忙没时间去写,前后拖了一个月才终于完成了前面几个实现TCP的Lab。后面两个Lab涉及到的知识似乎暂时没什么需求,只能说“下次一定”了。\n夸完了之后,也补充一下我认为CS144 Lab中存在的一些坑点。毕竟这个Lab系列只使用了一届,还不是特别完善,相信之后也会每年根据学生的反馈改进的。坑点大概有以下这些:\n 有一些设计的选择细节并没有在PDF里给出,我有的时候需要去看test case才会知道Lab希望怎样去设计。不过也许这些内容在上课的时候会提到。另外这也暴露了自学网课的一个问题:没有TA以及同学可以交流。所以大家自学网课的时候也可以找一些小伙伴一起学,搞一个“虚拟课程”甚至是“虚拟大学”。 Lab2和Lab3的test case不够多,导致错误或者是与Lab期望的设计不符的实现也能通过全部的test case。然后在Lab4里,这些问题会全部暴露出来\u0026hellip;\u0026hellip;结果就是在做Lab4的时候完全不能信任自己在Lab2和Lab3里的相应实现,这样也大大增加了debug难度。 Lab4里有两个test case即fsm_ack_rst和fsm_ack_rst_relaxed期待的行为是完全相反的。实际上在官方的FAQ页面上给出的状态机是与fsm_ack_rst期待的行为一致,但Lab4默认启用的却是fsm_ack_rst_relaxed\u0026hellip;\u0026hellip; 官方提供的VirtualBox Image中的GDB是有bug的,在cmake_build_type=Debug生成的binary上不能正确地打断点。在Lab4之前我还能靠肉眼调试,但是Lab4实在是肉眼调不动了,不得不寻求解决方案。后来问了一位之前也做过这个Lab的清华大佬,他告诉我说他用的是LLDB。我就赶紧换了LLDB,这才能愉快的进行调试。顺带一提,这位大佬在GitHub上有自己\r完成这门课程和Lab的笔记,也是值得参考的Orz 我室友后来也来做这个Lab了,据他说开了-O0之后GDB就能正常工作了,但我自己之前尝试的时候这样还是不能正常工作。 不过瑕不掩瑜,这门课程的Lab无疑是非常好的材料。扎实地掌握TCP的最好办法也许就是自己去写一个能用的TCP,写完之后对各种细节就会掌握得扎实很多,对背后的设计思想也会有更深的理解。真是眼红美国名校的课程资源啊,也希望国内的高等教育能迎头赶上吧。(如果我去当高校的授课老师,我就和CS144这类课程的授课老师沟通,基本照搬这些名校的授课内容再根据实际情况做一些小改变,简直就是不送包赢)\n不多废话了,我要去和几位大佬同学商量下一个课程该上啥了。\n","date":1596934117,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1596934117,"objectID":"51a7120d063ccbe18b53106b40e4e665","permalink":"https://conanhujinming.github.io/post/cs144_tcp/","publishdate":"2020-08-09T08:48:37+08:00","relpermalink":"/post/cs144_tcp/","section":"post","summary":"研究表明,能自己实现TCP的人,很少会学不懂它","tags":[],"title":"CS144: 什么,你学不会TCP?那就来自己写一个吧!","type":"post"},{"authors":[],"categories":[],"content":"几天前下班回家的时候心血来潮,想玩玩单机游戏,但又不知道该玩什么,就问朋友们有没有推荐的游戏。室友 立马给我推荐了这款游戏MHRD,说我玩了之后肯定会爱不释手,一玩到底。我问他这游戏是玩啥的,他只是神秘一笑,说玩了就知道了。我对于他的提议向来是言听计从,就装了steam买了这款游戏,怀着好奇的心情打开了它。\n刚打开这个游戏,我就从画面和声音中意识到事情并不简单。游戏的开机画面是一个黑底白字的画面。开始之后,首先跳出来的是“microhard is booting”,随后是ROM的加载提示,与之相伴的是软盘加载的次扎次扎的声音,与夸张的风扇转动声:我眼前仿佛跳出了一台来自上世纪70年代的庞大的机器怪兽。“这什么玩意儿?”我错愕道。随后,游戏加载完成,并提示我是microhard公司的一位工程师,现在公司正计划开发一个名为cpu的组件,公司相信cpu会成为一个具有划时代意义的重要发明。不过目前公司手头上只有一些能模拟NAND电路的基本组件,所以公司需要我从NAND开始,一步一步搭建出AND, NOT, XOR等其他基本组件,再逐渐完成Mux, Demux, PC, RAM, ALU, Decoder等其他更高阶的组件,直至最后完成CPU的开发。\n“我这是玩游戏还是上课呢?”我向室友抱怨。室友嘿嘿一笑,说:“你这种跨专业的人应该好好补一补这些基础知识。我想来想去,感觉也没有比这个游戏更合适更有趣的方式了。不要慌,不懂就问我。”由于已经掏了钱上了贼船,本来只想好吃懒做玩点游戏打发时间的我只好硬着头皮继续玩了下去。\n想不到游戏设计得非常合理有趣,点一下,玩几天,玩得根本停不下来。我按照游戏的指示一步一步走下去,竟然相对顺利地一路过关斩将,甚至直捣黄龙,将最终Boss Decoder和CPU一剑斩于马下。虽然中间有一些组件的设计让我抓耳挠腮、苦思冥想,但经过仔细思考之后还是成功给出了可行的设计方案。每次成功完成一个组件的设计,都会产生不小的成就感。而经过了这一趟精心设计的旅程,也的的确确让我对计算机的底层实现有了更深的理解。\n值得一提的有几件事情:\n 每个组件的实现方式是不唯一的,有的实现方式需要的NAND数量多一些,另一些则需要得更少一些。只是给出一个可行方案,和给出最优方案的难度差距是很大的。我虽然已经通关了游戏,但很多组件都不是最优的方案,之后还得再去研究改进。针对每个组件,游戏会告诉你,你的好友中最优的方案用了多少NAND,以及世界上所有玩家最优的方案用了多少NAND。需要注意的是,世界的最优方案的NAND数量很多时候没有参考意义,因为他们是面向test case编程的。\n 有一些组件的设计工作量巨大但又比较枯燥,于是microhard公司雇了个实习生来搞定这些。看到这里的时候我不禁笑出了声:这也太真实了。\n 个人认为最后Decoder的test case是有一点问题的,玩游戏的小伙伴到时候可以留意一下。\n 最后想说,寓教于乐,让学习充满趣味又能确确实实地掌握到有用的知识,这在我看来无疑是教学中的最高境界之一。非常期待游戏制作商号称会出的续作,猜测可能是写流水线之类的。而我的室友也笑眯眯地凑过来给我推荐下一个“副本”了。\n","date":1593919433,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1593919433,"objectID":"7563ee703c4e32410f136070f577945c","permalink":"https://conanhujinming.github.io/post/mhrd/","publishdate":"2020-07-05T11:23:53+08:00","relpermalink":"/post/mhrd/","section":"post","summary":"一款学计算机数字电路的有趣游戏","tags":[],"title":"MHRD: From NAND to CPU","type":"post"},{"authors":[],"categories":[],"content":"本文较长,大约会有万字左右,这里提供一个目录给大家各取所需~\n \r本文简介 \r综合英语能力的提升方法 \r写在前面 \r阅读 \r增加词汇量 \r长难句 \r阅读原著 \r语法 \r听力 \r精听 \r泛听 \r口语 \r纠正发音 \r积累语料 \rShadowing \r演讲的能力 \r心态 \r写作 \r积累语料 \r改文章 \r翻译文章 \r托福雅思等考试的准备方式 \r雅思备考 \r雅思写作 \r雅思口语 \r托福备考 \r托福阅读 \r托福听力 \r托福口语 \r托福写作 \r针对面试的英语口语 \r写在最后 本文简介 英语是一项极为重要的个人能力。其作用至少体现在:\n 许多优秀的学习资料是用英文承载的。如今互联网非常发达,许多高校也经常会在网上公开自己的课程与学习资料,而这些学习资料往往都是没有中文翻译版的。纵使有翻译版本,其翻译质量往往也不忍直视。如果英语不好,那么就很难利用这些优秀的资源,那学习质量就可能大打折扣。\n 英语对拿下许多外企的offer非常重要。许多外企的工作语言就是英语,在这些外企工作,你常常需要阅读、书写英语,甚至需要用英语口语和同事交流。\n 在一些工作场合中,顾客也许是来自其他国家的,那么就需要使用英语与他们交流。\n 英语是许多考试(例如高考、考研)中的关键一项。\n 如果希望出国学习甚至工作,英语是不可缺失的一项能力。\n\u0026hellip;\u0026hellip;\n 这篇文章前半部分先简单总结一些我个人觉得比较有用的提升英语综合能力的方式,供大家参考。文章的后半部分简单分享我(多年前)参加英语考试(主要就是托福)的备考经验,也供大家参考。由于我上次专门学习英语已经是16年考托福的事情了,学习方法忘了不少,且受限于个人能力等,这篇文章中一定会有不恰当或者不通用的学习方式,还请大家谅解。\n总得来说,英语的能力大致可分成四类,分别是阅读、听力、写作和口语。下面将简单介绍我提升各项能力的学习方式。\n综合英语能力的提升方法 写在前面 英语的这些能力其实也是由各项子能力组成的。像阅读,就可以分为词汇量、长难句理解等能力。程序员在优化程序的时候,往往会先用profiler(性能诊断工具?)判断出程序的性能瓶颈在哪里,再针对瓶颈进行优化;学习(英语)的时候也是一样,也可以先判断一下(针对自己的需求)自己的瓶颈在哪里,然后先提升自己的痛点。例如,如果阅读的时候,常常碰到不认识的单词,那词汇量就是瓶颈所在,要背一背;如果阅读的瓶颈是一些长难句读不懂,那就要针对长难句理解进行优化。\n另外我的个人经验是,学习语言的过程虽然多数时候比较枯燥,但由于英语很有用,所以这些枯燥是值得忍受的。另外,语言其实是比较容易学习的一项技能,只要找到适合自己的方法并且投入时间,一定是会有产出的。反过来,除非是在一个全英文的环境下能够耳濡目染地提升自己的英语,否则的话,如果不投入时间,那么再好的方法也不可能有效果,nothing replaces hard work. 语言的学习离不开练习,所以针对阅读,最重要的就是多看;针对听力,最重要的就是多听;针对写作,最重要的都是多写;针对口语,最重要的就是多说;针对托福雅思,最重要的就是刷真题练习。本文之后的部分就不再强调练习的重要性了。再说一句,我比较提倡学习的时候尽量去建立正反馈,但很遗憾我自己没总结出来比较有趣的学习英语的方式,甚至我的一些学习方式是比较痛苦的。所以我的经验不一定适合大家,也欢迎大家补充更好的或者其他不同的学习方式。\n学习英语的时候,如果能有一个比较好的环境的话,效果会好很多。如果没有的话,就只能自己努力创造、模拟一个这样的环境,比如和小伙伴用英文聊天讨论问题等等,虽然可能会有点尬\u0026gt;_\u0026lt;或者是用类似本文提到的自学方法。至于报班,这个因为我没报过,不敢多说。不过我后面会提到,有一些比较野鸡的机构的班、课程最好还是不要报,浪费钱浪费时间浪费生命。\n最后的一个指导思想是,学习英语的时候常常需要使用各种材料(如阅读、听力材料扽等),一定要学会选择适合自己的材料。材料的难度最好是自己要费一些力气能搞定,但又不是完全搞定不了的水准,太难或者太简单的材料都不合适。当然,我这里列出来的基本上都是自学英语不出国不报班的学习方式,如果各位能出国学习、生活,那我建议就无视我这些方法,直接去野生的英语海洋里闯荡吧。\n阅读 增加词汇量 词汇量对于阅读能力至关重要。这方面对我启发比较大的是杨鹏的《17天突破GRE词汇》。这本书的名字虽然浮夸了一点,但里面传达的思想与学习方法我认为是很有价值的。我总结起来就是“每天背诵的量大,粗记,重复”。这本书很短小,也许只要一两个小时就能看完,建议大家自己去看看。背单词的时候个人不建议精背,即一个单词掌握一大堆意思用法什么的,而建议粗背,即大概知道最最常用的几个意思就够了。试图背得精的结果往往是记忆效率极低,背了后面忘了前面,效果也往往不如用同样的时间粗略地记忆更多的单词。个人感觉四六级词汇是必背的,然后考啥试就背啥词汇书,差不多有个一万左右的词汇量就足够应付大部分情况了。\n长难句 长难句是指一些语法结构复杂且很长很难理解的句子。在阅读英文、尤其是参加托福、GRE等考试的时候,这类长难句常常会成为阅读瓶颈。在高中的时候,碰到这样的长难句,老师一般会教我们拆解句子语法结构来帮助理解;然后在实战中碰到长难句,使用这样的拆解方式不仅耗时,效果也未必多好。这里同样推荐杨鹏的书《GRE\u0026amp;GMAT阅读难句教程》。杨鹏认为,攻克长难句的方式应该是平时没事看看长难句,拆解语法结构等帮助理解,直到自己的”脑容量“适应了这种长难句为止。这样,在实战中碰到长难句的时候,就可以像对待普通句子一样解决它们。\n我个人的经验是,如果要参加GRE这样的考试,那一定要练一练长难句。否则的话,其实不一定有必要。\n阅读原著 阅读英文原著是比较有趣的学习英语的方式。例如,我强烈建议学习数学和计算机的同学阅读各种经典英文教材,而不是翻译版或者是国内的挫教材。还可以阅读一些英文文学名著,例如《小王子》、《傲慢与偏见》、《动物庄园》、《1984》等等。注意要选择适合自己水平的书来阅读。如何选择呢?随便举些例子,例如自己应该能较为轻松顺畅地看懂80%以上,并且生词出现的频率一页不超过5个之类的。在阅读文学名著的时候,碰到不认识的单词可以先尝试猜,如果是比较影响理解或者出现频率比较高的单词就查询一下。查询的时候记得要安装有英英解释的词典。如果是阅读教材或者学术著作,那碰到不认识的专业术语的话是一定要理解清楚是什么意思。\n有很多人推荐阅读《经济学人》之类的材料,我个人的经验是《经济学人》难度较大,效果还一般。如果自己对时政很感兴趣的话可以看看,否则的话可能还不如看看新概念英语三四的文章之类的,还更感人一些\u0026gt;_\u0026lt;\n阅读原著是比较全面地提升英文阅读能力的方式。除了可以提升词汇量和锻炼对长难句子的理解以外,最不可替代的可能还是锻炼对大量的英文文字信息流输入的适应能力,或者抽象地说,是扩大自己对英文文字的”脑容量“吧。\n语法 自打高中以后我就再也没有看过语法相关的东西了,除了看那本GRE长难句的时候\u0026hellip;\u0026hellip;基本上阅读全靠语感。如果高中的时候英语语法学得不错,那我觉得可能就没有什么必要再去专门学英语语法了;否则的话,听说赖世雄的语法书还不错,可以考虑用用看。\n听力 精听 这个可能是这篇文章里提到的学习方法中最痛苦的一个方法了。在刚开始练习英语听力的时候,找适合自己的听力材料(如果音频对应的文字都看不懂,那就赶紧换简单的吧),然后用听写,也即光听音频,努力把内容写出来,直到听写到完全听不出来剩下的内容为止。之后去比对音频的文字,看看自己听错的是哪些地方,并分析原因。是词汇不懂?还是连读没听清?还是口音?对我来说这是一个蛮痛苦又枯燥的学习方法,一段5分钟的音频常常需要半小时以上才能听写完成。尤其是最开始的时候没找到合适的听写工具,往往要听一句手点一下暂停,手写下来之后再点播放听第二句\u0026hellip;..后来找到了一些相对好用的辅助工具,情况才好转一些。这里也简单说一下自己用到的工具,一个是\r可可英语的网站 和手机APP。APP是支持自动断句的,不过不知道APP现在还维护不\u0026hellip;\u0026hellip;另一个是一个叫Aboboo的软件,也是支持对音频的断句等对听写重要的功能。然后可以一边听一边尝试把全文用键盘打出来,效率应该比手写要高。\n我在\r之前的一篇文章中有提到过,学习的时候,获得监督信息修正自己的不足之处是很重要的,听写就是一个可以获得监督信息的方式,让你知道自己听不懂英语的原因是什么,并针对性练习。比如,比较常见的听不懂的原因就是各种连读,而对连读的理解经过对应的练习之后是可以大大提高的。\n当然,除了这样粗暴地去英语音频的海洋中磨练自己的听力,还有一些方法也可以搭配使用。例如,可以锻炼自己的听力词汇量,就是听单词的发音写下对应的意思。还可以专门去了解英语的音标对应的发音,以及一些英语特殊的发音方式,如连读、intonation等等;这方面可以与口语一起练,例如有本书叫《American Accent Training》,就可以看一下,大概了解美音的连读与intonation等;还有赖世雄的《美语音标》(我强推的书)也非常建议过一遍。\n泛听 泛听主要是为了锻炼自己对大量连续的英文听力信息流输入的脑容量,以及适应各种不同的口音等。这个同样是找一些自己喜欢的材料去听,例如可以遮住字幕看动漫、英剧、美剧甚至是看电影等。\n口语 口语和听力常常是可以一块练习的,这里就放一起说一下。\n纠正发音 强烈建议练习口语之前先纠正自己对音标的错误发音。这个过程其实花不了多少时间就可以达到不错的效果。这里强推赖世雄的《美语音标》,只需要20块钱,当场下单,两天就能过一遍。网上还有一些比较不错的视频教程,会有老师给你演示舌头摆放的位置、发声的方式等等,也挺不错的,这里就不作专门推荐了,有兴趣的话可以自己搜索一下。记得发音的时候要录音录下来,自己再去听和比对,以获得监督信息来改进发音。当然,如果你有钱请外教或者厉害的老师给你纠正口语,那就无视我的这些建议吧\u0026gt;_\u0026lt;\n积累语料 可以积累一些常用的单词,尤其是逻辑衔接词;也可以积累一些常用的用法、句式等等。 我自己没找到比较好的通用的语料集合书,这里就推荐一下慎小嶷的托福、雅思口语书中的语料,感觉挺不错的。顺带一提的是,我记得以前看过某知乎巨高赞回答,推荐了一本什么《托福口语小伴侣》之类的书,还推荐看《摩登家庭》还是啥美剧去练口语,说实话我践行过,感觉没什么效果。\nShadowing 这个是我比较推荐的练习口语的方法。总得来说就是选择适合自己的材料,然后落后于音频一点时间(例如一开始可以落后一个单词、水平高一些了就落后三四个单词之类的)跟着音频去说,同时试图去模仿音频的语调,甚至可以尝试去模仿音频当事人的情绪状态等等,类似于一种配音的感觉。手上还可以拿着音频的文本,如果不知道音频在说啥了,可以瞄一眼看看\u0026gt;_\u0026lt;\nshadowing是一种可以同时锻炼听力和口语的方法,且对口语而言是一种比较综合地锻炼方式。一方面可以磨练自己的连读、intonation等等不使用shadowing则很难锻炼的能力,另一方面则是可以锻炼自己对大量口语长时间输出的能力。很多同学不太敢开口说英语,或者就算说也是断断续续、瞻前顾后,且说不了大段的口语;这一方面固然有能力的问题,另一方面也有对说大段口语的不自信与不适应,而shadowing则可以较好地让大家适应大段口语的输出能力。\n进阶阶段,可以听一段5分钟的音频,然后自己尝试用自己的话语来复述一遍。这是一种对听力和口语能力要求都比较高的一种方式,但也挺有效果的。注意,在水平还不是很高的时候,复述的时候要录音录下来,复述完去听自己的录音,找寻其中的发音问题、连读与intonation可优化的地方、逻辑不清楚的地方以及语法错误等,并留心纠正。不录下来,永远不知道自己的口语有多垃圾。\n演讲的能力 这里单独再说一下给演讲的能力。这里说的演讲的能力不仅仅是英语演讲能力,也包括中文演讲的能力。个人感觉国内的学生往往对这方面的能力不是很重视,而美国的学生对这方面则非常重视,如MIT本科生有一门必修课就是关于沟通与演讲的。其实这方面的能力也是蛮重要的。关于演讲以及口语,我要强调的一点是要重视语言的逻辑性,可以多多使用一些衔接词来增强自己口头表达的逻辑性。这里再推荐MIT的一门开了40多年的小课程\rHow to Speak,一小时左右,强烈建议大家看看。\n心态 语言尤其是口语,存在的目的主要就是为了沟通。很多同学因为害怕犯错或者被耻笑什么的,不太敢用口语和别人沟通,或者不太敢把自己想的说出来。其实大可不必。语言是沟通的工具,但不要让语言学得不好成为阻止你沟通的原因,那就本末倒置了!有想法就大胆说,某个单词、用法一时想不起来就换个方式说;还可以利用手势、眼神等肢体动作以及白板手写示意等其他方式来帮助表达。在需要你沟通的时候,如何把自己的想法清晰地表述给别人应该是唯一目的,不要因为觉得自己口语不好就放弃沟通。\n最后厚颜无耻地放个\r视频链接来说明一下自己的口语能力。当然了,我的口语绝对不算是大神,无论是发音口音、还是用词句式甚至语法方面都有极多可以改进的地方。这个视频主要是想说明口语的目的主要还是作为沟通的工具。同时也给学英语的同学一些鼓励吧,像我这样没出过国没报过班纯靠自学的穷学生,花一些时间进去,也可以做到连说一小时英语不停,并且其他人也都能理解我的口语~\n写作 这方面其实我觉得自己没什么发言权,不过也斗胆简单说一下吧。\n积累语料 可以积累一些常用的单词,尤其是逻辑衔接词;也可以积累一些常用的用法、句式等等。 我自己没找到比较好的通用的语料集合书,这里就推荐一下慎小嶷的托福、雅思写作书中的语料,感觉挺不错的。(有没有感觉这段话有点眼熟)\n改文章 中国有句老话,大概是”好文章是改出来的“,英文写作也是一样。我个人建议,一开始写练习文章的时候,要尽力去把文章改得好一些:尽量没有语法错误(写完可以用grammarly之类的check一遍),文章的架构要合理,主题句鲜明,文章逻辑清晰容易读懂,论述合理详实等等等等。多改文章,把文章改好,每改好一篇文章,这篇好文章的写法会深刻地印在你的脑海当中,成为你英文写作的一部分。尤其是写学术论文的同学,一定要认认真真地改好文章,第一篇论文改个10遍20遍起步。这里再专门说一下文章的逻辑性,很多人的英文文章写得不好,不一定是英语不好,可能是写作本身就缺乏一些逻辑性。个人认为,语言方面略次的文章尚可以理解,逻辑错乱的文章则是无可救药的。所以我建议在最开始改文章(尤其是学术论文)的时候,可以而且应该精雕细琢每一句前后的逻辑衔接是否顺畅合理。这样改过几次之后,这种逻辑性就会成为你能力的一部分了,你就可以自然而然地写出比较有逻辑性的文章了。\n翻译文章 还有一种方法是可以找那种有中英对照文字的材料,对着中文材料翻译成英文的,再比较英文原文,看看别人的写法、用语好在哪里,并学习。这是一种可以获得监督信息的锻炼写作的方式。不过这种方式主要是培养词汇量、语料、句式等等,对于写作的思维与逻辑性的培养则有些不足,还是要与写文章改文章结合起来一起用。中英对照的文字材料就推荐新概念英语三四了。\n最后贴一个\r我之前写的一篇博客,总结了我认为学术论文写作中的一些要点,并推荐了几门英文写作书,供大家参考。\n托福雅思等考试的准备方式 关于应试英语,其实主要也是有两点。其一是提升自己的综合英语能力,这些在上面以及说了很多了;其二是提升自己对这门考试的应试能力。在这第二点上,我觉得最重要的就是刷真题,熟悉并领会题型、出题思路与套路;除此以外还要总结一些应试技巧。\n本文的这部分就根据我自己的经验简单说一些准备托福雅思的准备方法与一些我觉得有用的应试技巧,供大家参考。\n先说一下我参加这两门考试的经历。我在2015年二月左右参加过一次雅思考试,当时准备得比较赶,主要是想考出个成绩申请CSC的交流项目出国见见世面。不过可惜后面因为来自学校的不可抗力,即便拿到了offer和CSC的机会也没出成国,导致我至今没出过国\u0026gt;_\u0026lt;也许可以考虑上一下非浪的船享受一下出国的权利了。当时大概是前后用了两三周的时间,刷了官方的OG和十几套真题,然后就上考场被锤了。最后总分是7分,阅读、听力、口语、写作的分数分别为8.5、7.5、6.5和6,分数比较挫,大家轻喷。托福的话应该是2016年5月的时候参加了一次考试,彼时能力与考雅思的时候相比已经有了一些进步,然后大概也是两三周左右的时间刷了二三十套TPO,最后总分110,阅读、听力、口语、写作的分数分别为30、27、24和29。无论是托福还是雅思,我的分数都远远称不上大神,但也还算是一个不错的分数了。两次考试都能在不长时间的准备时间里一战就考出一个还不错的分数,也有一些备考、应试心得,在这边和大家分享一下。\n要强调的一点是,任何技巧都是建立在实力的基础上的。我能够利用较短的备考时间考出一个还不错的成绩,归根结底是我的英语能力本身就比较扎实,而我培养自己英语能力的方法已经在前面给出了,这里以及下文就不再赘述这些方法了,而仅仅谈论一些针对托福/雅思的方法与技巧。在有实力的基础上,配合一些针对性的备考方法与应试技巧,运气还可以的情况下就可以考出不错的成绩了\u0026gt;_\u0026lt;\n雅思备考 我个人感觉,雅思是比较容易准备的考试:过一遍OG,刷几本剑桥真题基本上就差不多够了。由于我准备雅思的时间很短,分数也不高,这边就一块说一下自己的雅思准备方法了。雅思的阅读和听力总得来说是比较简单的,刷刷真题,注意paraphrase,基本上就问题不大了。而雅思的口语和写作,又是比较考察个人的真实实力的,用很多应试技巧、模板也很难取得超过自己实力的分数。这也是为什么我说雅思的备考总体比较容易:在有实力的基础上,稍微准备准备,听力阅读就可以拿高分了,而口语写作再怎么准备也基本上就是那个分数\u0026gt;_\u0026lt;\n雅思写作 我雅思的写作分数是比较低的,这边就大概谈谈我的看法。首先推荐慎小嶷的《十天突破雅思写作》这本书。慎小嶷的十天系列书都写得不错,基本上就是每”天“掌握一块内容。不过要注意的是,要把这本书完全搞定,十天是不可能做到的,除非是每天10小时甚至24小时搞写作,例如书中的某一“天”说的是“我们今天来背单词吧,下面是常用的1500个单词,大家今天背下来吧~“\u0026hellip;\u0026hellip; 雅思的小作文的模板味道比较重,可以参考这本书的模板、句式、架构来准备与练习。有条件的话,自己写的文章可以找靠谱的人帮忙改改。值得一提的是,我当年考试的时候雅思作文是需要手写的,所以一手漂亮的字也许会有优势。而我的字就很丑\u0026hellip;\u0026hellip;\n雅思口语 当时的雅思口语考试是比较有特色,会安排一天的时间与一味考官面对面地聊一聊。在准备雅思口语的时候,我同样推荐慎小嶷的《十天突破雅思口语》。除了书中提到的东西之外,还要记得一点,只要是面试,给面试官留下的印象就会非常重要,所以可以尽量营造出一种非考试的氛围,与面试官谈笑风生,这样也许也能赢得一些语言能力之外的印象分。另外,在准备口语考试的时候,要积累一些素材。所谓素材,是指,例如一道口语题目可以是”谈谈你喜欢的一本书“,那么这个题目对应的素材实际上是可以提前准备的。而多准备一些素材,那么考试的时候问你的问题就有可能落到某个你准备过的素材上,你就可以应付得比较轻松了。我看过一本新东方的《新托福口语真经4》,里面推荐的一个方法挺有意思的,就是建议背诵一些”万能素材“,即一些可以应付多个问题的素材。举个例子,一个素材可以是介绍你喜欢的一个篮球明星。那么这个素材可以应对的问题有:请谈谈你喜欢的篮球明星;请谈谈你喜欢的明星;请谈谈你佩服的人;请谈谈你向往的人等等等等。但是雅思的口语因为是有真实的面试官的,所以面试官可以追问一些其他follow-up问题,然后就有可能发现”奥原来你之前表现出来的是背诵和准备的实力“\u0026gt;_\u0026lt; 不过背诵素材是很重要的,我认为是准备托福/雅思口语的最重要的方式之一。多背几个素材(比如10多个),那么就算碰到你没有准备过的问题,你肚子里有背过的素材,往往也可以组合背下的句式等来帮助应对了。另外记得练口语的时候要录下来自己听一听,分析不足。\n托福备考 与雅思不同,我认为托福是比较需要花时间准备的考试。这有几个原因:1. 托福的听力是比较难练的。2. 托福的口语与写作是可以通过练习取得超过自己真实语言能力的分数的。准备托福考试的最好的方式就是在具有不错水平的基础上,多刷TPO找感觉,总结和锻炼一些应试技巧。当然,在做题之前最好先看看托福的OG。\n托福阅读 我觉得托福阅读还是比较简单的。如果缺乏词汇量,那么可以用本文前半部分给出的方法去背托福的词汇。托福的阅读题基本上就是一边做题目一边顺着文章往下读,也没什么特别难的地方。\n托福听力 个人认为对大多数人来说,在没有大量练习的情况下,托福听力是比较容易翻车的。我还是比较建议在听材料的时候用自己的方式去记一些简单的笔记。理想的情况下,后面题目涉及到的考点应该都能落在听材料时记下的笔记的范围内;但实际上这不是很容易做到的,往往需要刷一些题,获得一些”题感“,能相对敏锐地感知到”哦这里好像是容易出题的地方“并记下来。\n托福口语 托福的口语由于是机考,其实是有可能获得一个超出自己实力的分数的(虽然我考得也不高)。这里同样推荐慎小嶷的《十天突破托福口语》,虽然这本书和他的雅思口语那本书重复率很高\u0026hellip;\u0026hellip;\n独立口语部分再次推荐新东方的那本《新托福口语真经4》,并参考那种方式自己背诵一些比较好的”万能素材“。在回答问题时,也可以尝试自己脑子里分一个线程注意自己的语法错误,发现了一些语法错误的时候可以自己修正。\n我当时练口语的时候,还有一个平台叫亦鸥,那上面有不少大神会分享自己的经验与技巧。尤其是托福的综合口语部分,其实是很可以应用一些技巧的。很多技巧我已经不记得了,这边大致提几个还有点印象的吧。\n 当时有一道题是会有A与B进行对话,往往是A碰到了一个困境,有两种选择方案,但都不是完美的,然后问你的建议是什么。你需要建议其中一种方案,并给出两个还是三个理由。一定要选择容易说出合理理由的方案来说,而不一定是自己内心真正的建议。这里的技巧大概有两个。一个是如果自己想不出什么好的理由的话,可以把材料中提到的这个方案对应的好处提炼成一个理由来说,但一定只能提炼成一个,否则的话理由部分就没多少自己原创的东西了,分数可能就不高了。另一个技巧是其实有一些万能理由,比如提到某个方案啥啥都好,就是贵,那理由就是“钱乃身外之物,以后都可以赚的,不重要”;提到某个方案怕相关人员不同意,那理由就是“人都是可以沟通的,好好沟通肯定没问题“等等\u0026hellip;\u0026hellip; 还有一道题,大致是先给你一篇来自学校的通知让你看,然后后面会有一段对话,对话往往是两位学生喷这则通知,偶尔也会是两个人同意这则通知,然后对话中会给出喷或者同意的理由。然后让你结合文章,概括学生的态度及原因。这里要注意的技巧就是,学生基本上都是针对通知的论点进行喷或者同意,所以阅读通知的时候要记录下通知的论点,并在听的时候要心中有数。自己在说的时候,也要结合着说。这里举一个小例子,例如两位学生看到一则学校的通知,大致意思是疫情期间不允许学生出校门,并给出学校这么认为的理由。而学生往往就会针对这些理由进行回击。在用口语回答的时候,就可以说“学校声称把学生关在学校是为了学生的安全,避免被校外人士感染,但是校外人士却可以自由进出,不受阻拦,如果有可能把病毒带到校内,那禁止学生出校门就没有意义了”,这就是一个比较好的结合通知与学生的理由进行论述的例子。这就是个例子,如有雷同纯属巧合。 还有一道题,是给一篇文章,介绍一种学术概念,然后会有一段教授的音频,对阅读中的学术概念结合具体的例子来详细说明。与上面一题类似,教授的论述是针对文章中的论点的,所以在阅读文章的时候一定要留意论点,在听音频的时候也要留意教授是如何针对论点来论述的。而在自己口语答题的时候,就可以先给出某个论点,在讲述来自教授的详实例子。例如某个学术概念可能关于把学生封闭在校园里过久,则可能引起一些心理问题,我们姑且称之为疫情综合征。文章中可能就会描述为何会容易得综合征,例如第一个论点可以是因为学生一直被关在一个狭小的地方,所以容易产生被禁闭感。教授就可能举这样一个例子,”某位世一大同学进学校之后就不能再出去,由于一直待在学校里,他产生了某种被关押在特殊地方的错觉,这对他的心理有所影响“。而在口语回答的时候,就是先回答”第一,把学生一直禁闭在学校里容易产生禁闭感。教授给出了一位世一大学生的例子blabla”。这样就是比较好的回答。再次强调,这就是个例子,如有雷同纯属巧合。 这里再提两个小技巧。在综合口语部分,要注意尽可能地paraphrase,即用不同于阅读材料/听力材料中的句式与表述方式,而不是重复材料中的话。另一个技巧是,在听完听力记完笔记之后,如何把笔记在几十秒的时间内组织成有结构的回答呢?一个方法可以是去思考哪些点可以放在一个句子里说,并用笔把放在一个句子里说的点圈在一个圈里,这样不仅能帮助自己梳理思绪、材料与逻辑,一会儿回答的时候也会做到心中有数,回答更有结构性。 托福写作 托福写作其实是我托福考试中的一大亮点,毕竟我以不算很强的写作水平取得了29分的高分。首先同样推荐慎小嶷的《十天突破托福写作》,虽然其内容基本上与他的雅思写作雷同\u0026hellip;\u0026hellip;托福写作同样分成两部分,一部分是综合写作,另一部分是独立写作。下面分别讲讲。\n综合写作是一个套路性非常强的题,锻炼好应试技巧并有适当的练习,就可以取得一个很好的分数。具体地说,综合写作是给一篇文章阅读,而后给一段教授谈论同一个话题的听力材料,听完听力之后,让你写一篇文章结合阅读材料,说明教授的观点与理由。绝大多数情况下,教授都是针对阅读材料的每一个论点来diss的,所以在阅读的时候要留意与记录论点,并听材料的时候留意与记录教授是如何diss的。除此以外,综合写作完全可以套用模板。模板类似于:\n 文章谈论了xx话题。演讲者也谈论了相关话题,然而,与文章观点不同,演讲者认为是xxx的。在演讲中,他给出了三个理由来支持他的观点。 第一,即使文章声称blabla,演讲者在演讲中指出blabla。这是因为blabla,也就是说blabla。显然,演讲者的理由有利地反驳了文章的观点 其次,(然后用另一套句式说一下上面一样的话,只不过理由与示例换掉)。 再者,(然后用另一套句式说一下上面一样的话,只不过理由与示例换掉)。 总之,演讲者用aaa,bbb,ccc三个理由有利地反驳了文章的观点,说明了他的xx观点。 大概就是这么个套路。然后多练练,考试的时候在不犯语法错误情况下多写点,比如写个350词左右,再注意paraphrase与句式多变,拿个高分是很容易的。\n独立写作的套路相对没那么强,建议大家参考慎小嶷的书。我这边就简单谈论几个小技巧吧。第一,可以背一些万能开头,到时候考场上直接把万能开头套进去,写开头的时候自己也可以思考一下后面怎么去写。第二,可以用一些简单的模板,这种模板主要是包括一些逻辑词来撑起文章的结构,但切记模板占据的字数不应该多。第三,有的时候需要举例子说明观点的时候,可以结合自己的背景举例子甚至是编造一些例子。例如我是学计算机的,我就可以举/编造一些我们领域大牛的事迹来支撑我的观点;我喜欢看篮球,也可以举/编一些篮球明星的例子。这样的好处是这些例子相对冷门,考官看了不容易感到厌烦;同时因为冷门,你编造了考官也不知道是真是假。最后,在不犯语法错误情况下多写点,比如写个600词左右。\n有条件的话,可以找靠谱的人帮忙批一下作文。为什么强调靠谱呢?我在考前两天写了一套题的作文,在某个知名平台上申请了免费批作文。该平台的老师给了我综合写作24分,独立写作21分的评价。结果两天之后我考了29分\u0026hellip;\u0026hellip;\n最后,不管是综合写作还是独立写作,最好能留一点时间检查一下简单的语法错误(三单、时态之类的)以及typo。托福的写作是敲键盘写的,要多练练敲键盘打字,甚至可以买考场同款键盘来练。\n针对面试的英语口语 在我们学院的就业分享会上,有位同学问了我这个问题;在我的上一个帖子里也有同学问到,我这里就再写一遍。\n总得来说,首先要在平时尽量去提升自己的口语实力。这个在前面已经说过了,就不再赘述。然后可以提升针对面试的英语能力。具体地说,大概有以下几点:\n 查找对应公司的面经,看面经题目,尝试用英文回答。 你会发现在这个过程中很多技术单词你不会,去查并且记忆。 重复1多次。有条件的话找朋友进行模拟面试。 按照我上一个帖子的学习方式,即用MIT等名校的英文课程学习,也蛮能提升这方面的能力的。课堂上老师常常会问问题,可以暂停自己用英文回答。上完课之后可以用英文简单复述课堂上讲了什么,并录音找茬。 面试的时候,不要因为害怕犯错或者被耻笑什么的,不太敢用口语和别人沟通,或者不太敢把自己想的说出来。其实大可不必。语言是沟通的工具,但不要让语言学得不好成为阻止你沟通的原因,那就本末倒置了!有想法就大胆说,某个单词、用法一时想不起来就换个方式说;还可以利用手势、眼神等肢体动作以及白板手写示意等其他方式来帮助表达。在需要你沟通的时候,如何把自己的想法清晰地表述给别人应该是唯一目的,不要因为觉得自己口语不好就放弃沟通。(这就是前文口语中的心态部分) 写在最后 语言的学习过程未必是有趣的,但语言尤其是英语的作用,至少在现在这个时代还是非常重要的。而使用一些合适的方法,则可以切实地提升自己的英语能力,而不是花了大量时间进去却不见效果。本文提到的所有方法都是我自己行之有效的方法,而行之无效的方法我也试了很多,这里就不再给出了。要指出的是,这些方法不一定适合所有人,甚至不一定适合大多数人,大家可以根据自己的喜好、使用的效果来选择或是调整学习方法,因时制宜、因地制宜。最后祝大家都能如愿以偿地提升自己的英语能力。各位同学,大家努力呀,我们下一篇文章再会。\n","date":1590140363,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1590140363,"objectID":"2fd5b0e8f19e5dec601d6a9661d8c338","permalink":"https://conanhujinming.github.io/post/learn_english/","publishdate":"2020-05-22T17:39:23+08:00","relpermalink":"/post/learn_english/","section":"post","summary":"分享我个人认为比较有用的提升英语的方法","tags":["自学","英语学习"],"title":"自学英语的经验分享","type":"post"},{"authors":[],"categories":[],"content":"几个月前就开始看MIT的这门课程:\r6.NULL: The Missing Semester of Your CS Education 。后来因为开始工作了比较忙,自己又懒,一直拖到昨天才把这门课看完。看完之后,赶紧抽空写了这篇小文章来介绍这门课程。实话实说,看了这门课程,我现在就是后悔,十分后悔:后悔自己没有早看到这门课程。我甚至认为这门课程非常适合作为多数学CS的同学的第二门CS课程,即在上了一门CS导论课程之后就学这门课程。下面斗胆简单介绍一下这门课程。\n首先,这是一门出发点颇为有趣的课程:其他的CS课程往往会介绍一些更为“高级”或“理论”的内容,例如操作系统、数据库原理、机器学习深度学习等等,然而却几乎没有课程介绍一些极为“实用”的知识,即如何使用一些好用(能大大提高生产力)的工具,如terminal、编辑器editor、tmux、profiler、数据处理工具(如awk, sed, grep, perl)等等。而作为学生,大家(至少我)要么是靠同学、师长、同事推荐听说到这些工具,然后靠网上一些质量未必很高的tutorial去自学;要么是靠缘分去碰到这些工具;有的时候运气好点,会自己调研到好用的工具并学习。但总而言之,因为缺乏这方面的“系统化”的教育,大家往往需要走很多弯路才会培养出一个比较完善的武器库。更重要的是,当武器库中缺少某种武器的时候,我们甚至会认为碰到的某个任务是无法完成的,而这个任务实际上可以用针对它的“恐龙克星”轻松搞定。而6.NULL这门课的作用,就是教你一些常用且好用的武器,让它们成为你武器库中的一部分。\n其次,这门课对各种工具的介绍相对简洁,并没有非常深入地介绍各个工具。具体地说,由于课程时间有限,课程上主要是告诉你这些工具是做什么的、能实现什么样的事情,并给了一些简单的使用示例,而如果你想要去深入地了解这些工具,课程的notes则提供了一些资料供你阅读。在我看来,这样的教学方式是十分合适的,能够在相对有限的课堂时间内尽量多地介绍一些有用的工具。而也许对很多人来说,对这些工具的使用场景有一个初步的印象就已经足够。这之后碰到需要用这些工具的问题时,之前留下的印象便能够让你反应过来“奥这里是不是用之前看到的xx工具就可以搞定啊”,然后去找寻工具的文档、教程来现学现用,这种learn by doing的学习效果往往也是最好的。当然了,课程同样提供了一些简单的习题来帮助你学习这些工具。\n再者,我非常认可几位instructor的观点:作为一位程序员,我们也许会花几百甚至几千小时在terminal、 editor等常用工具的使用上,因此花几个小时或者几十个小时去熟练掌握这些工具的使用是极其有价值的。如果你是一位刚开始CS学习历程不久的同学,那么我强烈建议你过一遍这门课程,这并不会需要很多时间(也许20、30个小时?)。而即便你已经有了一些CS方面的经验,我也强烈推荐扫一眼课程网站上的内容介绍,如果有哪块自己不是很熟悉的,可以快速地过一下,说不定就会有收获呢?\n最后,b站上也有搬运的课程视频,不需要科学上网也可以轻松观看,大家可以自行搜索~ 同时在这里也表达一下对Youtube自动生成字幕的强大的震惊,要不是有自动生成的字幕,我实在是听不懂某位instructor的英语Orz 深度学习真的很强大Orz\n","date":1589029736,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1589029736,"objectID":"cc5560384985af710e3bc59ddd06e9c6","permalink":"https://conanhujinming.github.io/post/missing_semester/","publishdate":"2020-05-09T21:08:56+08:00","relpermalink":"/post/missing_semester/","section":"post","summary":"6.NULL课程观后感","tags":[],"title":"6.NULL:恨不相逢“未嫁时”","type":"post"},{"authors":[],"categories":[],"content":"本文本想取名叫《DolphinDB研发副总监亲授,实用的机器学习课程限时免费!》,或者《今年这个行情,大家还是多做一手准备吧\u0026hellip;》,或者《孤身一人,发表顶会paper》,想了想还是没启用这几个标题。另外我知道我的机器学习水平不算多强,只是想分享一些知识,还请大家轻喷。\n\r课程暂时的主页 后面主页会迁移到\r晴问算法\n这门课程是关于什么的? 网络上有大量优秀的机器学习课程。那么为什么要费心去学习这门课程呢?原因是本课程的侧重点与其他课程不同。具体来说,本课程是关于机器学习的基础知识;不同算法的优劣分析与见解;机器学习的最佳实践。另一方面,我们不会太关注机器学习的理论部分;相反,我们为对理论部分感兴趣的读者提供一些资源,例如其他课程或教科书章节的链接。\n教科书 感兴趣的读者在每节课后, 可以阅读这几本教科书的相应章节:\n [PC] Pattern Classification (2nd Edition), by Richard O. Duda, Peter E. Hart, and David G. Stork, Wiley-Interscience, 2000.\n [PRML] Pattern Recognition and Machine Learning, by Christopher M. Bishop, Springer 2006.\n [ESLII] The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.), by T. Hastie, R. Tibshirani \u0026amp; J. Friedman, Springer 2009.\n [MLAPP] Machine Learning: A Probabilistic Perspective, by Kevin Murphy, The MIT Press, 2012.\n [DM] Data mining: concepts and techniques, by Jiawei Han, Jian Pei, and Micheline Kamber. Elsevier, 2011.\n [DL]Deep learning, by Goodfellow Ian, Yoshua Bengio, and Aaron Courville. MIT press, 2016.\n Supplementary readings will be available online.\n 课程安排 注意前八次课已经上完了,有录像,详细可以到B站上看\n今年也会从头开始重新讲一遍课程。\n Week Time Topic Video Reading Lecturer 1 6/8 周六. 课程综述与简介 \r英文 中文 [PC] 1; [ESL] 1\u0026amp;2; [PRML] 1 胡津铭 2 待定. 机器学习问题的定义 \u0026amp; 泛化 \u0026amp; 度量 \r英文 \rGoogle Course 胡津铭 3 待定. Bayesian Decision Rule \r中文 \rDomingos\u0026rsquo;s excellent paper; [PC] 2 胡津铭 4 待定. Naive Bayes \u0026amp; Linear Regression Methods None [PC] 3 胡津铭 5 待定. Bias-Variance \u0026amp; Overfitting \r中文 [ESL] 4.5.1, 12; [PRML] 4.1.7, 7 胡津铭 6 待定. Linear Classification Methods \r中文 [ESL] 4.5.1, 12; [PRML] 4.1.7, 7 胡津铭 7 待定. kNN \u0026amp; Decision Tree \r中文 [PC] 5.1~5.5 胡津铭 8 待定. Ensemble Methods: Bagging \u0026amp; Boosting \r中文 胡津铭 9 待定 Ensemble Methods: GBDT \u0026amp; XGBoost 胡津铭 10 待定 Neural Networks \u0026amp; Deep Learning \rCS231N 胡津铭 11 待定 Clustering \u0026amp; Dimension Reduction \u0026amp; Visualization 胡津铭 胡津铭 12 待定 Frequent Pattern \u0026amp; ML in Practice 胡津铭 13 待定 ML in Practice: Tools \u0026amp; Data \u0026amp; Feature Engineering \rGoogle Course ML Advice 胡津铭 之后学啥? 这里我们列了一些相对更进阶的课程。请记住,如果你想学得好,请完成一些作业。\n\rCoursera Machine Learning: 吴恩达的课程. 比较适合从这里开始。\n以下三选一:\n \rStanford CS229 Machine Learing: There are videos in Youtube and Bilibili (2018 version).\n \rCMU 10-701 Intro to ML:There are videos in Youtube (2016 version).\n \r实用机器学习 李沐大佬的课程\n 由于以上课程基本都没有公开的lab,或者是用matlab来写,所以作业部分,我推荐以前我们在浙大开的课程的作业。具体可以加本课程的qq群获取。\n对于深度学习来说,我推荐以下课程:\n\rStanford CS231n:Deep learning for CV. 深度学习从这里开始.\n\rStanford CS224n:Deep learning for NLP.\n\rBerkeley CS285:Deep Reinforcement Learning.\n\rTransformer Unit:Transformer专题。\n\rFrom Zero to Hero:Andrej Karpathy的课程\n最后一句 欢迎加入我们的QQ群:973186098 群内会给出每次课程的腾讯会议地址,也可以讨论课程相关的问题和建议。如果你想加群,那么请认真学习课程(听课+完成作业)。当然,请大家友善交流。谢谢大家。\n","date":1587303411,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1587303411,"objectID":"1b15239b5c69f2f3b0f9a887b613f61f","permalink":"https://conanhujinming.github.io/post/ml_in_practice_crash_course/","publishdate":"2020-04-19T21:36:51+08:00","relpermalink":"/post/ml_in_practice_crash_course/","section":"post","summary":"This is the website for the course Machine Learning in Practice Crash Course.","tags":[],"title":"Machine Learning in Practice Crash Course","type":"post"},{"authors":[],"categories":[],"content":"今天是硕士毕业的日子,长达接近二十年的求学生涯终于要暂时告一段落了。在疫情的影响下,这次的毕业没有任何毕业应该有的气息:没有笨拙的硕士服硕士帽,没有拍这拍那的毕业照,没有枯燥但又颇有意义的毕业典礼,也没有朋友们的依依惜别。本科毕业的时候,一位朋友告诉我说:“离别的时候要用力、再用力一点,因为再次相见往往比你想象中要长,这就是我们离别的意义。”当时我听了她的建议,很认真地与朋友们做了道别之后,踏上了回到杭州的火车,开启了一段新的旅程。然而这次的离别却来得出乎意料,大家都还没做好离别的准备,离别就这样在沉闷的疫情氛围下悄悄而至。原以为只是普通的相见竟成为了毕业前最后的匆匆一面,从此再难见到各自不戴口罩的面容。\n回顾自己的硕士生涯,可以说这是一段跌宕起伏、难以置信的旅程。在这期间我经历了许多颇有些匪夷所思的事情,回顾起来竟还有些不真实感。我经历了多次研究方向的转变,从本科的航天开始转成了CS,然后依次做了爬虫、SR、知识图谱、人脸识别、多标签分类、OCR和前端,而最后却又出乎很多人意料地选择了金融行业的系统开发。这样的多次转变,即使是我自己看来都觉得有些任性妄为。但是这或许就是年轻的好处:只要足够勇敢,年轻的时候总是有做选择的资本的。除了研究方向的变化以外,我也多次在research和工程之间来回切换,最后自然是一事无成。不过要谈起硕士阶段的收获,我想最大的收获应该有两点。第一,我自己的成长。这个成长不仅仅是CS技术本身的进步,还包括了自己学习的方法、思维的习惯、交流沟通的能力、解决问题的能力等,更包括了自己性格上的成长以及对自己人生追求的思考,我想这些成长毫无疑问会是自己一生中宝贵的财富。第二,认识到了许多志同道合的朋友和让我尊敬的师长。非常非常感谢我的导师蔡登老师多年来对我的支持与帮助、指导与栽培,无奈自己愚笨且懒惰,未能达到蔡老师水平的万一。也非常非常幸运地遇到诸多朋友,大家一直不嫌弃我的恶劣性格与糟糕的技术水平,在生活上和学业上都给了我巨大的帮助。可以说,当我回首硕士往事时,我认为我不因虚度年华而悔恨,也不因碌碌无为而羞愧。\n接下来就要开启一段全新的、甚至是比求学生涯更加长久的旅程。New adventures of Jinming! 想想就让人心潮澎湃。不知道这又会是怎样的一段旅程呢?\n光阴似流水,不一会,课毕放学归。问君此去几时来,来时莫徘徊。各位,少年强则国强。将来治国平天下,全靠吾辈。大家努力啊,同学们,明天再会。\n","date":1585568531,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1585568531,"objectID":"a1f03181e0e6163d1766e4d17524ced7","permalink":"https://conanhujinming.github.io/post/master_graduate_thoughts/","publishdate":"2020-03-30T19:42:11+08:00","relpermalink":"/post/master_graduate_thoughts/","section":"post","summary":"剑在手,问天下谁是英雄","tags":[],"title":"硕士毕业感言","type":"post"},{"authors":[],"categories":[],"content":"大约在两个月前,一位朋友找我帮他的妹子写一段对机器学习不同水准的分级,并描述不同等级的人具有的特点。于是我就勉强瞎写了一通,发在这里。当时写的是英文版的,这里就懒得翻译了,直接贴过来了。\n \rSome Claim \rBasic Knowledge/Foundation of Machine Learning \rLevel 1 \rLevel 2 \rLevel 3 \rLevel 4 \rEngineering of Machine Learning \rLevel 1 \rLevel 2 \rLevel 3 \rResearch of Machine Learning \rLevel 1 \rLevel 2 \rLevel 3 \rLevel 4 \rLevel 5 \rLevel 6 \rLevel 7 Some Claim Personally, I think it is not trivial to group people in machine learning area into different levels. Here I only try my best to give some rough levels.\nIn machine learning area, I think there are some different types of knowledge. Thus I would like to list these different type of knowledge and try to give levels corresponding to these different types of knowledge. Note that these levels are not necessarily designed/proposed for self-learner. For machine learning guys, there are roughly two types of career directions, i.e. engineering and research. The necessary techniques for these two directions can be very different from each other. Some may be very good at enginnering but know few about research and vice versa. Of course there are some experts who can be a master of both directions, but these people only take up a small proportion. Also I want to clarify that I do not want to list levels corresponding to very junior people. It is not necessary to do this.\nBasic Knowledge/Foundation of Machine Learning Level 1 They are familiar with frequently-used algorithms such as SVM, GBDT, DT, NN, and etc. They know the formulation of these algorithms. They can understand many parts of the proof and derivation of these algorithms, but they may not be able to derive these algorithms independently. They also may implement many algorithms themselves, but with the help from other code/other guys, and also with the skeleton code written by TA :) Typically they can get a score over B in a good machine learning course.\nLevel 2 They can understand many frequently-used algorithms. They are able to derive many of them independently. Also, they know the trade-off/advantages/disadvantages of these algorithms. They may be able to implement many algorithms independently (maybe with the help of books) with the skeleton code. They can get a score of A in a course.\nLevel 3 They can understand most of the frequently-used algorithms. They are able to dervice almost all of them independently. They are qualified to teach other people about these knowledge. They are able to implement most algorithms independently. They can be a strong TA or even lecturer for a good course.\nLevel 4 They are able to write very good textbooks.\nEngineering of Machine Learning Level 1 They have at least Level 1 basic knowledge of machine learning. They are able to write machine learning codes with many packages such as sklearn, xgboost, lightgbm, tensorflow, pytorch, and etc. However, they do not have a good understanding of features, applications, and when and why some models work and some do not. When the models do not work, they do not know how to debug it.\nLevel 2 They have at least Level 2 basic knowledge of machine learning. They have a good understanding of features, data, and the scenarios. They know how to develop a simple but fast solution for a problem (maybe leading some people), and also how to improve the current solution. When the models do not work, they know how to debug it, i.e. they are able to diagnose where the problems are in systematically. They are also able to estimate the time for developing machine learning solutions for a specific problem.\nLevel 3 They have at least Level 2 basic knowledge of machine learning. Usually, they can write very good codes. Moreover, they can lead hundreads of people to develop giant machine learning solutions for some very difficult problems.\nResearch of Machine Learning Level 1 Sadly, in the deep learning era, they do not even have to get an Level 1 basic knowledge of machine learning. They are able to write some rubbish papers, which may be published in some rubbish journals/conferences :( Their research is useless both for research and application. Their papers are confusing, and the ideas may even be copied from other papers.\nLevel 2 Sadly, in the deep learning era, they do not even have to get an Level 1 basic knowledge of machine learning. They are able to write incremental and sometimes not so incremental papers and may get them published in top conferences/journals. However, their research is usually useless both for reasearch and application, and the research is even irreproducible. The writing of their papers are not bad, though.\nLevel 3 They have at least Level 1 basic knowledge of machine learning. The ideas of their paper make sense. They are able to get their papers published in top conferences/journals frequently. However, their research is usually useless both for research and application, but the research is even reproducible. The writing of their papers are good.\nLevel 4 They have at least Level 2 basic knowledge of machine learning. Their papers are sometimes published as oral papers in the top conferences. Their research is sometimes useful both in research and application. Their papers may be cited frequently by the other authors.\nLevel 5 They can make impact and even influence the direction of the research. Their papers are frequently published as oral papers in top conferences, and even best papers sometimes. Many professors in top-tier universities are in this level.\nLevel 6 They can propose some paradigms that are very popular for a considerable time in their area. Some professors in top-tier universities are in this level.\nLevel 7 They are able to create some areas.\n","date":1585393957,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1585393957,"objectID":"1a8cb6ffb12566a5304291d91763a525","permalink":"https://conanhujinming.github.io/post/level_of_machine_learning/","publishdate":"2020-03-28T19:12:37+08:00","relpermalink":"/post/level_of_machine_learning/","section":"post","summary":"受朋友之托,瞎写了一段对机器学习不同水准的人具有的特点的看法。","tags":[],"title":"机器学习分级","type":"post"},{"authors":[],"categories":[],"content":"这两天有同学和我一起讨论在写作中需要注意的事项,我们总结出了七个简单的写作法则。注意我们讨论的主要是议论文、科技文写作;而抒情记叙散文等可能会有不同的原则。我们将下面七个简单的法则概括为7C法则。\nConcrete and Concise 具体而简短有力 文章的内容要具体,文字要言之有物,不能泛泛而谈。这个内容指的不仅仅是文章的主旨,还包括每个段落,每个句子,甚至每个词。有同学举了一个很好的例子,例如\u0026quot;do the construction\u0026rdquo;,这里的do就是一个无意义的词,不如直接用动词\u0026quot;construct\u0026rdquo;。\n同样,写作的文字要简短有力,所有文字均为文章主旨服务,这与内容具体(以及下文提到的cohesion)往往是一致的。\nCohesion 内聚性 文章要有内聚性,即每个段落都是为文章主旨所服务的。段落要有内聚性,每个段落应该只有一个主旨,且一个段落的主旨往往在开头,即topic sentence,而之后的句子均要为此服务。每个句子也应该有内聚性,例如一个句子不应该讲述两件不同的事情,除非有意为之。\nCoherence 连贯 文章要有比较好的衔接性。譬如,每个段落之间应该有一定的逻辑衔接关系,而段落之中的句子也应该有衔接关系。当英文写作水平不够的时候,这种衔接往往可以用一些衔接词来加强、强调。\nConsistent 一致 文章的主题应该一致,譬如文章的内部不应该有完全相反的结论(除非本身就是survey或者review)。文章的正式性应该一致,譬如一篇文章应该通篇为正式文体(formal),或者半正式(semi-formal),或者非正式(informal);所选用的词、表述方式等均应该与对应的正式性保持一致。除此以外,文章内对同一事物的提法也应该保持一致。\n在论文写作中,要注意论文的notation, evaluation, introduction等均应该与前人的工作保持很大程度上的一致性,不可自己随心所欲地写作。\nClear 清晰 写作应该清晰易懂。具体到日常的文章写作,就是要考虑到读者的背景,用读者能够理解的文字来说明事物;讲述事情的时候尽量不要有内容缺失、不要有逻辑上的断层等;段落句子之间注意衔接与层次感,并学会使用主题句(topic sentence)和总结句。具体到论文写作,还需要让论文的各个元素都出现在最应该出现的地方,而不应该让读者自己去猜测或费力寻找相关的元素;图表的说明文字(caption)应该要自我包含(self-contained),即不需要看正文也能知道这个图表表达的意义等等。\nCritical 关键/批判 作为议论文/paper,应该对已有的观点、方法进行合理的批判性的讨论,并引出自己的观点/motivation。同时,这个观点/方法应该是具有一定意义的,而并不是完全无意义(trivial)的。尤其是科技论文paper的写作,如果缺少了批判性的讨论,那就很难说服读者(reviewer)这项研究是具有价值的。\nComplete 完整 写作应该具有完整性。作为日常的议论文写作,这是指文章应该较好地阐述写作背景以及完整地阐述自己的观点,并给予相应的支持。作为论文写作,完整性则是说这篇文章总体上应该self-contained,最好让大同行能够在不怎么需要去翻阅参考文献就能大概理解这篇文章的工作。另外,paper也应该完整地完成了abstract/introduction中声明(claim)的研究目标,也即给出了完整的对应于本文研究动机(motivation)的方法(approach),以及有相对完整的实验评估与分析等等。因此,paper中也切忌overclaim,否则这篇paper就会因为未能完成自己的研究目标而变得不完整。(虽然现在非常多的paper都会overclaim,然后也可以中Orz)\n总结和英文写作书籍推荐 上面给出了我和几位同学一起讨论出的适用于议论文写作和科技论文写作的7条简单的法则。可以看到,这7条法则不是完全独立的,而常常是相辅相成的,这是因为它们的目的都是让文章的阅读者能够更轻松自然地读懂文章。另外需要指出的是,这远远不是一个完整的列表,也不一定是必须遵守的金规玉律,而仅仅是我们讨论出来的相对同样的指导法则(guideline)。也欢迎各位读者提出自己的观点,或者是补充这个列表。\n最后推荐一本关于英文写作的小书:\rThe Elements of Style。这本小书号称英文写作圣经,而且只有100页左右,很值得一读。不过作者的taste有些过于严格,各位也要因时制宜,因地制宜。另外写paper的话,在掌握了general的写作技能之后,还应该去模仿、研究优秀的paper的writing。\n同样很有名的英文写作的书还有\r《On Writing Well》,但因为我太懒了,一直没看,所以也不知道怎么样Orz\n","date":1583500232,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1583500232,"objectID":"fe8cbb6c9babde574028d40421dd63f4","permalink":"https://conanhujinming.github.io/post/paper_writing/","publishdate":"2020-03-06T21:10:32+08:00","relpermalink":"/post/paper_writing/","section":"post","summary":"适用于议论文、科技文写作的七个法则:concrete and concise, cohesion, coherence, consistent, clear, critical, complete","tags":["写作","英文写作"],"title":"写作的7C法则","type":"post"},{"authors":[],"categories":[],"content":"写在20年初的校招面试心得与自学CS经验及找工作分享 我于大三(15年下旬)开始自学CS,并在去年(19年)参加了校招的实习与春招,很幸运地拿到了10来家公司的offer。在这里分享一下自己总结的面试心得与技巧、自学CS的方法与资料、自学CS的历程以及找工作的历程。当然,本人水平有限,且观点局限于个人经历,故有些说法难免会有不妥甚至不正确,欢迎指正。\n全文接近4万字,可以根据目录各取所需。\n \r面试心得 \r声明 \r编程部分心得 \r一个非常简单的例子 \r练习白板编程 \r问清题目 \r与面试官确认函数签名 \r设计简单的测试样例 \r与面试官确认思路 \r抓住面试官给的提示 \r确认边界处理 \r代码中使用可读性高的变量名和函数名 \r写代码过程中保持与面试官交流 \r写完代码后主动测试 \r主动给出算法的复杂度 \r讨论算法的trade-off \r计算机基础部分心得 \r面经的使用 \r抓住面试官想问的点 \r说出自己的insight \r结合自己的使用经验阐述 \r项目部分心得 \r简要介绍项目背景 \r介绍项目的approach \r指出项目中的困难点和解决方案 \r论文部分心得 \r简要介绍自己research的背景 \r像做talk一样介绍一遍自己的论文 \r其他部分 \r把握提问的机会 \r模拟面试 \r面试大忌 \r不懂装懂 \r狂傲不羁 \r远远达不到面试官对自己的期望 \r心态 \r最后 \r番外篇:找工作的流水账与心路历程 \r背景介绍与CS学习历程 \r我总结的学习方式 \rCS学习历程 \r找工作之前的准备 \r刷题 \r面经与面试技巧 \r模拟面试 \r日常实习 \r做research \r找实习 \rGoogle \r拼多多 \r摩根士丹利 \r头条 \r阿里 \r腾讯 \r微软 \rOptiver \r百度 \rAirbnb \rHulu \r实习经历 \r入职 \r项目初期进展 \r进抢救室 \r恢复实习 \r总结 \r秋招 \r百度 \r腾讯WXG \r阿里 \rOptiver \r腾讯数据库内核 \rGoogle \rOffer选择 \r一些学习资料推荐 \r数学 \rCS导论 \rCS实用课程 \r数据结构与算法 \r操作系统 \r组成原理/体系结构 \r计算机网络 \r编程语言 \r软件工程 \r机器学习 \r深度学习 \r尾声 面试心得 2019年春招和秋招,我在中国进行了多场面试,其目的是找一个暑期实习职位和找秋招的正式工作。这是我的个人心得总结。\n我实习和秋招都已经面了数家国内的一线大厂(包括腾讯/阿里/头条/百度/拼多多等)和数家外企(包括Google/Microsoft/Hulu/Airbnb/Morgan Stanley等),收到过一次拒信。经过一段时间的面试准备与几次面试经历,总结出了一些个人心得,仅供参考。本文的前半段给出了一些我认为比较通用的技巧与心得,以供参考。本文的后半段介绍了自己跨专业学CS的一些经历以及自己找工作过程的流水账,并简单讲述了与找工作期间的心路历程,也可作为自学CS与择业的一个简单参考。\n声明 所有的面试技巧都是建立在一个基础之上:面试者已经具备了相对合格的实力。2018年下半年我在一家创业公司实习,秋招时也面试过一些候选人。在我看来,面试者如果自身基础不扎实、实力不够合格,那看所谓的面经、学习所谓的技巧也意义不大:合格的面试官可以非常轻易地通过一些follow-up问题问出面试者的真实实力。面试技巧和面经固然有意义,但学习技巧和了解面经,只能帮助有实力的面试者更大程度地发挥出自己的实力 。学习没有捷径可走,nothing replaces hard work. 希望每一位面试者都能尽早明白这个道理。\n另一方面,我身边确实有一些这样的同学:他们相当有实力,但是却因为种种原因无法在面试中展现出自己的全部实力。事实上,不同的企业有不同的面试文化,比如Google的面试官希望面试者能成为一个他愿意一起工作的同事,字节跳动的面试官也许希望面试者是一个数学、算法、coding、工程都不错的全面人才,这样的人才更可能成为一个“能解决问题的人”。但是,作为面试候选人,我们其实没必要去针对各家公司的文化对症下药:应对面试应当有一些共通的要点。在我看来,面试最关键的一点在于面试者要意识到这不仅是一场测试,更是一次需要充满着沟通与交流的谈话,让面试官认为他/她愿意成为你的同事,希望每一位面试者都能尽早明白这个道理。\n除了上面提到的我认为至关重要的两点以外,面试还有一些其他相对通用的面试技巧和要点。我这篇文章旨在总结一些这方面的东西,希望能够帮助到这样的同学。\n编程部分心得 在面试过程中,面试官常常会给出几道算法问题,需要面试者提供思路或写下代码。在大多数公司的面试中,这一部分的表现都非常重要,而对一些外企来说,这部分的表现是具有决定性的(甚至是唯一重要的表现)。对于这部分的准备,首推\rLeetCode等网站,这里不再赘述。再提几句话,对于一些重视算法问题的公司如Google, hulu, airbnb, 微软, 头条等,不要抱着可能撞到原题的心态去准备,很难撞到原题的,对于这些公司,你需要做的就是反复练习提升自己的能力,而且由于题目较难,需要有较多的训练量。而另一些不是很重视这类问题的公司像阿里、腾讯什么的,则刷一些常见的题目就很可能撞到原题了,而且难度一般不大。因此,根据target公司的不同,可以有不同的准备方式。下面将列举一些其他在面试中我认为比较关键的点。\n一个非常简单的例子 这里先给出一个非常简单的问题,下面的关键点将结合这个问题来阐述。该问题为,计算一棵二叉树的高度。 简单的实现如下:\nint getHeightOfBinaryTree(TreeNode* root) {\rif (!root) return 0;\rint left_height = getHeightOfBinaryTree(root-\u0026gt;left);\rint right_height = getHeightOfBinaryTree(root-\u0026gt;right);\rreturn max(left_height, right_height) + 1;\r}\r 练习白板编程 面试的编程部分往往是白板编程:面试官要么要求在一个类似于Google Doc的地方写代码,要么就是干脆在白纸上写代码。这种情况下coding的体验与平时使用IDE的体验是完全不同的。以Google Doc为例,许多人(比如我)一开始甚至很难写出能编译的代码,更别说一遍写出bug-free的代码了。同时,没了IDE,debug的难度也会大大增加。而在白纸上写代码的难度则还要更进一步。适应白板编程的方法也很简单,只需要足量的练习即可。\n问清题目 问清题目至关重要。如果你对面试官的编程问题理解得不清晰,那你应该立刻问一些能帮助你理解的问题。例如:数据范围是多少?这个数组的大小范围是多少?能不能给个样例?如果输入是这个,那输出应该是什么等等。在上面这个简单的问题中,可以问的一个问题是,二叉树的高度是什么(据我所知,高度的定义并非所有教材都一致)?\n许多面试官在面试的时候,会故意先抛出一个模糊的问题。实际上,他们希望面试者能够经过一些询问理解问题。在这个过程中,面试者能够展现出自己对问题的分析能力以及沟通的能力。前者的重要性参见编程珠玑第一章:明确问题,战役就成功了90%。后者的重要性在于,问清题目的这个交流过程与面试者入职之后与同事讨论问题的形式非常类似。显而易见,一个能够很难沟通的面试者也很难成为一个很好沟通的同事。\n如果没有问清题目,那会发生什么事情呢?在最坏情况下,面试者可能会花大量时间去解决一个完全错误的问题,面试结果也可想而知。或者运气好些,碰到了一个比较nice的面试官,给一些提示告诉面试者已经进入误区了,但这样不仅会浪费不少珍贵的面试时间,更会降低面试官对面试者的评价。我在面一家公司的时候,面试官给我出了一个题,这个题听上去比较困难,需要用到动态规划才能实现。我当时想,在面试开始阶段就给出一道比较困难的题,这对我来说也太不友好了!于是我询问了一句”数据的范围是什么呢?“面试官告诉我,数组的范围都是0-10的整数。这样的话,这个问题就变成了一个只需要6行代码就可以解决的贪心问题。如果我没有问清这个问题的话,面试的难度显然大大增加。\n与面试官确认函数签名 确认了题目之后,我认为合理的做法是先和面试官确认函数签名,也即输入是什么参数,输出是什么参数等等。这一步的代价很低,而且相当重要。第一,这可以告诉面试官,你对函数签名的设计相当重视,而这一点在实际应用中很有价值。第二,这可以进一步帮你确认自己理解了题意。一个合理的函数签名可能就类似于LeetCode题目里的函数签名。上面代码中的签名就是一个比较合理的签名。\n设计简单的测试样例 写完了函数签名之后,可以针对函数签名简单地设计一组测试样例(如果面试官之前给了样例的话,也可以直接用面试官给的样例作为测试样例)。设计测试样例地主要有三个目的:一是进一步帮助确认自己对题意的理解没有出偏差;二是告诉面试官自己对测试十分重视;三是提醒自己编码完成的时候测试自己的程序。\n与面试官确认思路 在自己有了一个思路之后,一定要和面试官确认这个思路是否合理。你可以给面试官解释你的思路为什么合理,面试官可能会和你讨论其中的一些要点。这样做有几点好处。第一,在解释的过程中,你的思路也会变得更加清晰(面试官充当小黄鸭)。第二,这也展现出你对沟通的重视性。第三,可能也是最重要的一点是,如果你的思路不正确,nice的面试官会提示你甚至直接指出错误所在,这样你至少不会在一个错误的思路上耽误太多时间。切忌有了思路之后,不与面试官交流直接写代码。尤其需要指出的是,如果你的思路对数据有什么假设,或者需要修改输入数据,那一定要和面试官确认这样的做法是合理的。\n如果你认为这个问题与某个经典的问题思路一致,或者可以用到某个经典的算法,那么就直接点出来。例如计算二叉树的高度,实际上是一个后序遍历,那么可以直接点出来。\n抓住面试官给的提示 有的时候一道题难度比较大,候选人一时想不到最优的思路,或者目前提出的思路是错误的,那合格的面试官可能会给一些提示帮助候选人思考,这时候候选人一定要抓住面试官给的提示。以上文给的例子为例,如果候选人想不到思路,那面试官可能会提示:“你觉得一棵树的高度与它的左右子树的高度可能有什么样的关系?”这就提示候选人可以用递归的方式来解决问题。抓住提示是很重要的:一方面,面试官给的提示很可能可以帮助你想到正确/最优的思路;另一方面,这其实也是双方能够进行不错的沟通的体现。\n确认边界处理 在开始写代码以前或者是写代码的过程中,一定要思考代码的边界条件。最典型的边界条件有:数据是否会溢出?指针是否可能为空?链表是不是可能存在环?数组的长度是不是零?输入的数据会不会完全不符合题意的要求?在示例中,边界条件就是当结点指针为空时,高度应该是0。当你察觉到边界条件存在时,就可以询问面试官处理方式,或者直接告诉面试官你认为什么样的处理方式是合理的。对边界条件的处理在开发软件时也异常重要。忽视了一个边界条件,就会对程序鲁棒性造成极大的影响,可能直接造成巨大经济损失甚至是人员伤亡。\n代码中使用可读性高的变量名和函数名 在写代码的时候,尽量使用可读性较高的函数名和变量名。例如,要计算二叉树的深度,函数签名可以为int getHeightOfBinaryTree(TreeNode* root)入参就叫root(而非node)。递归时,左子树的高度的变量名可以叫left_height 。诸如此类。这样操作的主要目的也是让面试官看到你良好的编码习惯。\n写代码过程中保持与面试官交流 实现算法的过程中,切忌闷头狂写而不与面试官交流。实际上,在写一些关键代码的时候,你完全可以告诉面试官你在实现什么功能。同样如前例计算二叉树深度,那你就可以告诉面试官,int left_height = getHeightOfBinaryTree(root-\u0026gt;left) 是在计算左子树的高度(良好的函数名和变量名其实也让这行代码不言自明),而int root_height= max(left_height, right_height) + 1 则是根据左子树和右子树的高度计算当前根节点的高度。\n当然了,在这个简单的示例中,交流或许显得不是那么重要,但是在一些复杂的问题中交流可能会非常重要。例如,示例的follow-up是请不用递归实现同样的功能,或者更进一步,请用常数空间实现同样的功能。在这样的问题中(代码可能长达数十行),交流就至关重要了。面试官需要和你交流来理解你的思路与状态,你同样需要交流来理清思路。这种写代码过程中的交流也是正式工作时非常重要的能力。当然了,这样的交流也不必过于频繁,否则也可能影响自己的编码状态。\n写完代码后主动测试 在你写完代码之后,不要急着告诉面试官你已经写完了。最好先手动跑一个/数个简单的样例。注意跑这个样例的过程要让面试官可以看见并轻易地理解,这常常是需要一些练习的。例如,我在Google Doc上跑样例的做法是,在屏幕上写出中间变量的当前取值,然后用鼠标光标告诉面试官现在程序跑到了哪一行代码,当前各个变量的取值是多少等等。主动测试的好处有很多。第一,这告诉面试官你很重视测试,而测试在实际生产中是非常非常重要的。第二,一个简单的样例常常可以找出不少类似于typo这样的小错误。第三,如果你的样例给得不错,那你甚至能够借助这个样例找到程序中的bug并纠正它,这总是要好过面试官发现并告诉你程序中存在着bug。主动测试时,你也可以确认你的程序可以很好地处理边界数据。\n我自己在面一家外企的时候,主动测试的习惯就给我带了很大的回报。当时我写了一段不算复杂的程序(约20行左右),可是因为情绪紧张,程序中包含了一个相对隐蔽的bug。写完之后,我习惯性地跑了一个简单的样例,这花了我大约3分钟的时间,但却让我注意到了那个bug。我赶紧修复了这个bug。到了面试的提问环节,我问面试官本场面试中我表现最好的一点是什么。他告诉我:”是你通过一个样例发现了你的bug。实际上,在你写出了那段代码的时候我就注意到了这个bug,当时我在犹豫要不要提醒你。而你随即开始了测试并找到了这个bug。“这场面试的结果是,在面试结束半小时左右我就收到了通过面试的消息。\n主动给出算法的复杂度 在写完代码之后,应当主动分析自己算法的时间与空间复杂度。一方面,这样可以展示自己扎实的算法基础。另一方面,这也可以告诉面试官自己有这方面的意识。当然了,如果复杂度分析的有误,那这个分析也可能会成为一个减分项。\n讨论算法的trade-off 有些时候,题目的解法可能存在一些trade-off。最常见的就是时间-空间的trade-off,当然有时也会有一些其他的trade-off。如果意识到了这道题目存在trade-off,那么可以主动地与面试官聊trade-off,让他/她知道你的思考过程与选择。\n计算机基础部分心得 面经的使用 计算机基础部分的内容包括数据结构、操作系统、编程语言、计算机网络等等。这部分的准备很大程度上是需要一些扎实的基础的,再配合一些面试公司的面经。有些同学想仅仅靠看面经就应付过去,我可以说大多数情况下是不太可能的。有经验和水平的面试官可以轻易地通过几个follow-up问题来判断出来这名候选者是不是靠面经回答出来前面的问题的。当然了,面经对于这块内容仍然是非常有价值的,但阅读面经的时候要注意,并不能仅仅看一下某道题目的答案就够了,而是要看这个题目考察的是哪一块的知识,这一块知识自己有没有遗忘的、生疏的、不扎实的,如果有的话要去做相应的准备。面经是告诉你这家公司面试的时候喜欢问哪些知识,而不是告诉你他们喜欢问哪些特定的问题,虽然有的时候有些高频问题确实可能在你的面试中出现。\n抓住面试官想问的点 有些同学被问到一些自己会的基础知识的时候会特别激动,想抓住这个机会表现自己,就会事无巨细地回答一波。我个人认为,如果是基础知识的话,其实不用回答得特别详细,说出一些面试官想问的关键要点就可以了。有时候不一定能判断出来面试官想问的要点,这也不要紧,就说一些自己认为是关键的要点,然后等着面试管继续问follow-up就可以了。这里举一个简单的例子,如果面试官问进程与线程的区别,那么简单地说线程是调度的最小单位,同一个进程的线程共享地址空间,容易有线程安全问题;进程是多数资源分配的最小单位,所以进程的地址空间都是独立的,资源安全问题相对较少。回答到这个份上就差不多够了,然后等面试官继续问follow-up,而不需要去解释为什么线程会有安全问题等。之所以建议这么做,是因为对于有些公司,面试时间是有限制的(例如Google, hulu等),所以面试时间是很宝贵的,你应该用这珍贵的时间去展示自己的优势,而不是说一些绝大部分人都懂的trivial的知识。当然了,有经验/不nice的面试官可能会打断你,问他自己感兴趣想问的东西,但如果你运气不好恰好面试官没啥经验或者不喜欢打断人,那这样浪费宝贵的时间是很可惜的。\n说出自己的insight 如果针对某个问题有自己一些独到的见解,或者是这个知识在很多教科书上可能看不到,很多同学也不一定知道,那么在回答问题的时候说出自己的这个insight,当然前提是自己的说法是有道理的。这里举一个简单的例子,比如一个面试问题是,可以用什么数据结构来实现队列。回答可以说是链表,接着可以补一句但是链表实现队列的性能不一定很好,因为链表节点的地址空间不是连续的,对cache不友好(小问题:那么如何改进这一点呢?)。这种知识其实是有一些经验的人或者基础扎实的人都知道的,不算是什么难点,但作为应届生,能直接说出这一点还是可能会让面试官觉得这个候选人基础不错。\n结合自己的使用经验阐述 如果在某些基础问题上自己有一些实际经验,那么可以结合自己的经验来回答,这样会让面试官觉得这个候选人不仅基础扎实、经验丰富,而且学以致用、分析问题的能力也挺强的。\n这里举一个简单的例子,比如面试官问hash table处理冲突有哪些常用的方式,各有什么优缺点。那么可以回答常用的有线性探测和拉链法两种。如果自己有相应的经验,那么就可以结合经验谈谈优缺点,例如线性探测在实际使用的时候常常需要空间开得比较大,hash table的装载因子需要维持一个一直比较小的状态(比如25%-50%这样),否则的话性能就会很差,因为查询和插入都会频繁地进行长距离的线性探测。而拉链法对空间的利用效率就会比较高。在提供足够的空间的时候,按经验线性探测会比拉链法快很多,比如之前做了个项目,在满足空间条件的时候线性探测会快7倍左右(这是在结合经验谈),原因是线性探测比拉链法对cache更友好(这是基础知识)。\n类似于这样的回答方式,可以让面试官留下一个很好的印象,认为这位候选人的整体素质也非常出色。\n项目部分心得 简要介绍项目背景 如果面试官是很熟悉这个领域、这类项目的人,那么你可以make some assumptions,即不需要做多少背景介绍。否则的话,还是建议简单谈一下自己项目的背景是什么。这是因为在不同的背景下,同一种功能的实现常常会有不同的选择。这样的背景介绍能帮助面试官更好地理解这个项目,以及大概理解一些实现的选择。背景主要包括场景、问题定义、需求、自己负责的部分扮演的角色等等。\n介绍项目的approach 介绍完项目背景后,需要简单介绍一下自己这个项目的解决方案。解决方案主要是使用了什么技术、什么工具、怎么样的实现等等。需要注意的是,介绍解决方案的时候最好要结合场景一起说,否则会缺乏一些说服力。\n这里仍然举个简单的例子。例如做深度学习的落地,深度学习框架选用的是腾讯的ncnn,那么最好说一下因为场景是嵌入式arm设备,且没有显卡,在这种场景下,ncnn做了很多指令级的优化,速度会更快。\n指出项目中的困难点和解决方案 针对项目中的困难点要特别认真地谈论一下,需要介绍为什么这个点是个困难点,解决方案大致是什么样的思路,为什么要这样去设计解决方案,最终达成了一个什么样的效果。如果一个候选人能展示出准确的痛点、瓶颈分析能力,并且能提出合理的解决方案的能力,那我相信面试官对他的评价会大大提升。\n这里同样举一个简单的例子。例如做数据库实现,项目中有一个问题是数据库太大,不可能放到内存里,但如果都放硬盘的话又太慢,这是项目中的一个困难点。解决困难点的关键是同时利用内存的速度优势与硬盘的容量优势,设计一个存储分层模型。做实验观察到90%的针对数据库的查询仅集中在10%的数据上。那么解决方案可以是设计一个冷热分离的模型,仅仅在内存中存储一些热(即查询频繁)的数据,而将冷(即查询频率很低)的数据存在硬盘上,同时设定一定的策略定期做冷热数据替换。经过这样的设计之后,数据库的查询速度提升了30倍。\n论文部分心得 简要介绍自己research的背景 与项目不同,很多冷门的research的背景面试官往往是不了解的,所以常常需要做相对详细一些的背景介绍。\n像做talk一样介绍一遍自己的论文 在面试之前,可以先自己精细地准备一下论文的介绍。假设这个面试官对这个领域不熟悉,如何才能让他在较短时间理解这个研究领域,大概明白领域的痛点,并理解你的论文的思路、解决方案与重要性呢?\n其他部分 把握提问的机会 大多数面试的最后一个环节,面试官都会问:“你有什么想问我的吗?”要抓住这个机会问一些问题:一些好的问题是可以让面试官印象非常深刻的;并且面试官很多是一家公司中比较厉害的员工,也是同行业同方向的资深从业者,问他们问题是有可能切实地学到一些东西的。而且由于这是面试的最后一个环节,会对印象分有比较大的加成。举一些算法岗方向的简单例子:\n 您觉得算法岗的从业者的核心竞争力是什么?(对行业现状与自己发展方向的关心) 您对我有什么建议吗? (对自己发展方向的关心) 请问您的部门目前主要是在做什么方向的? (对技术的好奇,对部门的关心) 那您在做xx项目的时候会不会遇到xx问题呢?您觉得解决这个问题的核心在哪里? (这个问题对能力的要求就比较高了,如果能问出有价值的的话是非常强的加分项) 我在做算法的时候,有的时候效果不work,会有点不知道怎么去debug。您能分享一些您debug算法的经验吗?(展现出自己确实有一些这方面的经验,会思考自己做事的时候存在的问题并寻求改进措施,并且展现对知识、技术的热情) 请问您的部门在平时做算法方面的研究的时候,会用哪些方法来保证程序/算法的正确性?(对测试的重视,并且对实践中重要的东西有一定的认识) 模拟面试 强烈建议在面试之前找人模拟一下,并让对方给你一些反馈。这样能够大大降低紧张感,熟悉面试流程并提高面试表现。当然了,还有一个重要的方式就是多多投递,先拿一些自己不target的公司练练手,磨练自己的心态与面试技巧。\n面试大忌 我也曾当过几次面试官,也参加过一些面试并了解过其他人的面试情况,这里简单说几条面试大忌,一定要避免犯的错误。\n不懂装懂 对自己不懂的东西(甚至是没有十成把握的东西),一定要诚实地说出来,千万不要不懂装懂。我把这一点放在最前面,是因为我作为面试官以及平时与人讨论技术的时候,就非常讨厌别人不懂装懂。面试官的水平往往比你高很多,一下子就能判断出来你是真懂还是装懂。所以,碰到自己不懂或者没把握的问题,我建议直接告诉面试官说这个问题我没把握,不是很懂。但如果你有一些思路的话,可以接着说“虽然我不太懂,但是可以试着说一下”,这就可以变成一个展示你解决问题分析问题能力的机会了。而如果你的分析思路很合理,得出的结论也大差不差,那甚至可以很大程度地提升面试官对你的评价。\n狂傲不羁 面试的时候,人要有自信,但是态度一定要平和并且尊重面试官,切不可恃才傲物、狂傲不羁。有一些公司会非常看重这一点,如果你给面试官留下了不好沟通的印象,那往往是一票否决。但面试的时候,偶尔也会碰到面试官不是很懂犯错误的情况(比如国内的一些大厂),这个时候你最好是平和地去与面试官讨论,如果他坚持不肯认错,那你也不要去较真,否则的话可能你面试就挂了。有一种情况是可以去与面试官较真的,那就是你完全不在乎这家公司的offer,这时候你可以放开了较真哈哈哈。另一方面,当你面试一家公司或者一个组,碰到面试官不懂装懂又不肯认错的时候,你也得考虑一下这个组是不是值得你去。\n远远达不到面试官对自己的期望 在面试之前,面试官往往会根据候选人的Profile而对候选人心里有一个大致的期望值。在面试的时候,面试官会根据候选人的表现评分,而这个评分实际上有很大一部分是与对候选人的期望值有关。如果一个候选人的Profile很好、简历里吹得天花乱坠,那面试官对这位候选人的期望值就会很高;结果面试的时候一问细节三不知,远远达不到面试官对候选人的期望。在这种情况下,面试官往往会给一个非常差的评价。这种case或许比较极端,但候选人面试展示的水平(以阿里的的评级为例,假设是A)与自己的Profile(假设是A+甚至阿里星)不match是相对常见的现象。这时候,面试官甚至有可能给候选人一个比候选人真实水平还差的评价(譬如B+)。这也是候选人为什么要对自己简历上的东西了如指掌,能够做到即使被狂轰滥炸也能谈笑间应对的一个原因。其实上文所提到的,当面试的时候被问到自己不会或者不确定的问题的时候要先诚实地告诉面试官,之后再靠自己的common sense、逻辑思维以及其他的一些知识来推理出一个相对合理的答案。这也是一种对面试官的期望值的管理。先诚实地告诉面试官来降低他对自己的期望值(譬如降低为B+),然后再展现自己其他的能力超出这个期望值(譬如展现出A的水平),面试官说不定反而更容易appreciate你的表现。\n心态 面试总会有运气成分与偶然性,放平心态,不要因为害怕被拒就不敢投递,也不要因为患得患失而在面试的时候十分紧张。在面试中尽量让自己自然、轻松。当然,一些轻微地紧张有时是可以让自己发挥更好的,但是要适度,切不可紧张过头。面试中即使有些内容答得不好,也不要当场就心态崩盘,要沉着应付。当自己没有什么思路的时候也不要太慌,可以试着从基本的地方开始分析。例如做算法题,可以分析一些toy example,有时候能获得一些思路。回答CS基础题、system design等题目也可以从基础的地方开始分析,甚至是与面试官一起一步一步得出结果。我自己在参加一次面试的时候,一道算法题问清楚题目就花了10多分钟,然后10多分钟没有思路,同时面试官还在给我施加一定的压力。要知道面试总共就45分钟,这样的表现属于非常糟糕的了。所幸我当时稳住了心态,利用一个toy example得到了正确的思路,写出了bug-free的代码,最后还是让面试官相当满意。\n最后 需要说明的是,每个人都有自己的面试风格,很多面试官也会有自己的喜好,所以没有一套universal的面试方案。本文提到的一些技巧什么的,主要是我自己总结出来适用于自己的风格与方案,读者完全可以根据自己的实际情况与面试时候的感受来调整。举个例子,本文提到的编程部分心得,主要是针对Google这样的公司的算法题部分。我自己也有过一些面试经历,面试官非常不喜欢候选人在写代码的时候与他交流,甚至会在你写代码的时候自己去做别的事情 :( 这时候你最好就乖乖闭嘴,把代码写出来即可:) 因此,也希望各位因时制宜,因地制宜,结合实际情况来进行面试。最后祝大家都能有满意的offer~\n番外篇:找工作的流水账与心路历程 本文的这一部分将以流水账的形式简单讲讲学CS这几年来的一些经历,以及找工作的流水账与心路历程。\n背景介绍与CS学习历程 我总结的学习方式 在学习CS初期我走了很多弯路,相信了一些不合理(或至少是不适合我)的所谓“编程入门指南”。之后经过自己的摸索,到现在总结出了一套适合自己的学习方案。这里首先给出我的学习方案以供参考。使用这个学习方案还需要不错的英语水平,以后我有时间的话也许也会写一下自己学习英语的经验与心得。\n一个CS领域的学习过程大致可以分为以下三个阶段。当然,有的时候不同阶段是可以迭代地进行,例如开始科研之后发现自己还缺少了某些基础知识,那可以再进行基础知识的学习。同时,在学习中,很重要的一个指导思想是要获得监督信息与正反馈。三个阶段如下:\n 如果想学某门课程知识,那就找国外名校(主要是MIT/Stanford/CMU/Berkeley)有课程录像的对应课程,假装自己真的在上课一般地按照课程安排上课、看阅读材料并完成作业。完成作业是极其重要的,因为在这个过程中你会获得大量的监督信息,来指导你发现自己哪些地方学得不扎实;而如果仅仅看视频与阅读材料的话,常常会产生自己已经学懂了的错觉。另一方面,许多编程的作业完成之后也可以带来成就感与正反馈,支持着自己的学习动力。\n 之后,找自己感兴趣的领域。根据是做开发还是做算法,做研究还是做工程,第二阶段可以分成两种不同的方式。\na) 做工程:找一些适合练手的项目,自己实现与重构,并对照他人的实现方案。实际上如果第一阶段认真完成了好课程的作业的话,那么已经算是完成了很多练手的项目了。\nb) 做科研:了解这个领域的经典方法与最新方法,并复现这些方法,做实验比较结果,同时以论文的要求写报告分析结果,这个其实基本上就是国外很多课的project。复现好的论文是极其重要的,因为复现可以获得监督信息。在真正入门一个领域之前,人们常常会产生自己已经读懂了论文细节的错觉,实际上如果你没有能力复现一篇论文,你就不能说自己已经完全读懂了这篇论文。另外,论文中往往不会给出全部的细节,但这些细节并不trivial,需要你在复现论文的过程中自己发现体会。尤其是在系统相关的领域,论文中一句带过的设计细节往往也蕴含着insight,而这在你复现的时候会有更深的体会。另外,复现论文也能带来一些正反馈。复现完论文做实验的报告也是很重要的,这个整理的过程会逼迫你去进行一些更深层次的思考,整理的实验结果也可以供以后随时查阅。\n 同样,第三阶段也可以分成两种不同的方式。\na) 做工程:可以考虑在GitHub上找一些好的开源的项目,读源代码,并且帮助社区进行开发。有条件的话,可以去实习。\nb) 做科研:之后就是阅读论文、跟踪最新的成果、提出想法并撰写提交论文了。\n 需要指出的是,这套方案不一定适用于所有人,仅仅是我摸索出来的适合自己的方法。这里再多说一句,在整个学习的过程中,一定要多提出问题。例如刚开始阅读一些经典论文的时候,可以逼自己去提出5个与论文相关的问题,而且一定是那种自己提出来之前不知道答案的问题,再试着自己解答。中国人造词说学问学问,只有学没有问的话是一定不够的。\n这里再简单说一下如何找到合适的课程。我一般直接找MIT/Stanford/CMU/Berkeley(四大)的有视频的课程。MIT的课程很多在\rOCW有收录,可以在OCW里直接搜索。更常用的方式大概有两种,其一是在Google上搜学校名字+课程的名字找到课程主页,然后就可以跟这门课程了。例如想学操作系统,就搜MIT Operating System即可。第二种是在Youtube上搜学校名字+课程,很多有录像的课程可以这样搜到。除了这些名校的课程以外,很多MOOC的课程也是值得一看的。这里再简单给出我对各大院校/MOOC课程质量的评价:\n主要的MOOC平台有Coursera, Edx和Udacity。Coursera算是三大mooc平台做得比较成功的了,课很多,有好课也有一般的课,鱼龙混杂。课程类型偏学院风。Edx我以前看的时候是平均质量最高的,但那时候完全不商业化,课很少,学院风。Udacity课也不错,挺多的质量挺高,课程是工业风。MOOC的好处是针对自学的人有优化,但坏处是课程难度普遍较低,适合零基础入门的时候用。四大院校的真实课程的难度与质量往往会高好几个档次。其中MIT的课程质量在我看来是最高的,公开的课程也多。Berkeley的也不错,但是公开的课程相对少。CMU的课程质量也还可以。Stanford的课程的讲课质量感觉可能会低一些\u0026gt;_\u0026lt;,因为很多是PhD TA上课,感觉比很多经验丰富的Professor还是有一些差距。如果实在找不到有视频的课程资源,那也只好不看视频,直接看课件、reading材料和写作业了。这样往往吃力一些,效果差一些,但也能学到不少东西。\nCS学习历程 这段非常冗长,可以直接跳过。\n我是根不正苗不红的浙大CS小硕。高考填志愿的时候,突然有一些家国情怀,选择去西北工业大学航天学院学习航天,立志航天报国,也正是因此自己的计算机基础异常不扎实:( 本科的时候与CS相关的课程只有一门C++程序设计,自己学得也算是班上最认真的之一了,还刷了100来道POJ来巩固。当时任课老师劝我参加学校的ACM集训,我却中二地认为coding这种事情只不过是实现航天的工具而已,就没去参加,错过了一个亿。后来到了大三开始接触一些系里一些项目以及七七八八的事情的时候,我突然意识到他们做的航天项目和自己想的不太一样,航天系统里的人也与自己想得不太一样,遂萌生退意。\n于是开始自学CS。因为周围没有认识学CS的人,就去看知乎上大家的推荐,大家都推荐从SICP和CLRS入门,于是我就去看SICP和CLRS并努力做习题,而且当时太年轻,看的还是翻译版的。看到后面怀疑自己完全就是弱智,别人的入门书我怎么就学不懂呢\u0026hellip;其实有几个原因,一方面是这两门书挺难的,不见得适合入门;另一方面是翻译版翻译得也不是很好。可以说自己刚开始学CS的时候走了不少弯路。后来看到Coursera上有开Princeton的Algorithm课,就去把那个课跟了一遍,完成了习题。这时候才终于感觉原来自己还是能学会一些东西的:) 又把Edx上MIT的6.001x跟完了,还看了一些Harvard的CS50课程的内容,这时候终于感觉自己算是开始学CS了。\n那门课跟完之后,AlphaGO的事情开始刷屏。因为自己之前对围棋有些兴趣,也自学了一些,知道李世石是什么水准的棋手,于是就关注了AlphaGO与小李的比赛。本以为小李会轻松击败AlphaGO,没想到AlphaGO把小李吊锤了一通,很是震撼又让人感到excited,有一种看到世界的大幕缓缓拉开的感觉。也是在那时听到了人工智能(AI)这个词,觉得哇好高大上又有趣,就萌生了做AI方向的想法。\n然后就去找了《Artificial Intelligence: a Modern Approach》看。结果又是一本垃圾翻译书,国防科大的一些老师翻译的,我怀疑我用Google Translate都能比他们翻译得好\u0026hellip;后来我终于开窍了,买了本影印的英文版看。这本书写得挺有意思的,容易读懂又不失深度,就是太厚了有1000多页,读了我很久,读到后面晕乎乎的。当时看了最有印象的几段有:启发式搜索A*,书上我记得还将围棋归在这一类,说AI围棋距离人类职业水平仍有较大距离,短时间内很难得到人类顶尖水平:) ;用一阶逻辑从数据与规则中学习新的规则(也就是规则学习),当看到这样的程序证明了许多数学定理,有的证明甚至比原始证明更优雅的时候尤其激动与兴奋,不过后来真的开始学AI/ML之后发现这已经完全是个dead area;机器人使用强化学习来学习走迷宫和闯关游戏;用MM做NLP,HMM来做POS Tagging等等。不过要说明的是,这本书以现在的眼光来看已经有些过时了,而且里面大部分的内容与现在的研究、应用领域关系不大,不是特别建议阅读了。\n看完那本书后,调研发现大家都在做机器学习(ML),就开始自学一些ML的知识。大三的暑假先从Coursera上Andrew NG课程入门,这门课是一门挺不错的课,我跟完并完成了习题,学习的过程中觉得ML真有趣又有用。然后开始读一些相关的书,先看了Tom Mitchell的那本《机器学习》,这也是一本挺不错的教材(虽然我又看的翻译版,晕乎乎的),不过也有些过时了。看完之后注意到周志华老师有本新出的《机器学习》,还有本出名的书是李航的《统计学习方法》,我就去买了这两本看,不过也只是很快地扫了一遍 。周志华老师的书写得还是挺认真的;李航的书的话我觉得太干了,不适合用来学习,适合用来复习。草草过了一遍两本书之后,又看了张学工老师的《模式识别》,不过后来发现这本书的内容与《Pattern Classification》非常接近,还是推荐直接去看PC。之后开始看《Elements of Statistical Learning》 (ESL)。但是ESL对当时的我来说有点太难了,很多都看不懂。而且我发现自己线性代数的基础似乎不够扎实,就先学了MIT的18.06,再继续去看ESL。值得一提的是,MIT的18.06是一门非常好的课,很适合作为对自己线代知识的拨乱反正,消除一些国内垃圾教材带来的坏毛病。学完之后继续看ESL,胡乱看到unsupervised learning之后,开始写research proposal申请日本的大学。\n这里要说一下,我之前一直比较向往能出国学习,但是美国的master实在太贵了,家里没钱上不起,CS PhD我又不可能申得上,我就转而准备申请日本的学校。日本的学校学费很便宜,一年也就2w人民币左右,东京的话生活费一年在8w左右,但是日本的master很多能申请到奖学金,至不济也能打工赚钱。我本来想走他们的G30计划,这是一个不需要日语成绩只需要英语成绩,并提供全奖的项目,结果那个项目那年因为日本扩充军费而没有资金了\u0026hellip;\u0026hellip;为此我还自学了一段时间的日语去考了N1,也考了托福(110)。日本的教授在申请中往往具有绝对的权力,说要你就要你,所以陶瓷在申请日本的大学中极为重要。陶瓷的方式往往是写一个研究计划书,发给教授,教授会判断你的基础、能力、vision等等。总之,我在大三的暑假学了一些机器学习知识之后就开始写research proposal了,当时还不懂深度学习,写的是半监督学习,主要是对以前的半监督学习(self-training, co-training那套)的工作的简要介绍,并写了一些自己浅陋的看法。现在看来,那时候的水平自然是非常差劲,对机器学习并没有形成一个整体的认识,也没有自己的insight;research上完全没有上路,对领域未来发展的看法自然也是错漏百出,不值一提。暑假结束之后,9月初的时候调研了很久教授的信息,看了一些他们最近的工作,并找了三个不同大学的教授发了套磁信。不过非常幸运的是三个教授都给了比较积极的回复,进行了一些交流后,其中两个教授直接表示愿意提供funding :) 我想我当时吸引到他们的可能是本科还可以的GPA,以及出色的语言成绩?\n这时候家里出了一些变故,然后我的姐姐也告诉我说自己想出国的想法给父母造成了很大的压力和负担。经过了一晚上的仔细思考,我决定放弃出国准备考研浙大,主要原因是浙大离家比较近,照顾家里的事情也会方便一些。但是我不确定自己能不能考得上研,毕竟准备时间很短只有3个月左右,我也没有什么CS基础。第二天起床之后,我借了同学的考研真题做了一下前一年(2016)的数学卷和英语卷,数学的话卷面大概120分左右吧,英语的话除掉作文翻译大概是扣了5分左右。当时就感觉3个月左右就努力突击专业课,应该有机会考上。遂写了邮件告诉日本的教授们自己因为一些原因不打算去了,并买了一些考研的书开始准备考研。\n准备考研的过程是漫长且枯燥乏味的。除了中间有5天回老家参加姐姐的婚礼以外,我每天都能保证9-10小时左右的有效学习时间。我的时间分配策略很简单:大部分时间(也许70%-80%)都投入到专业课的学习上,花一些时间在政治上,数学则定期做一套真题,而英语则一点时间都不花。总得来说这个策略是合理的,当时的失误之处在于学习专业课的资料选择问题。我觉得需要针对考试准备,就使用了国内的教材进行学习,事实证明这个选择是非常错误的,我不仅学得很吃力,最后专业课考得也很低,而且计算机基础也不是很扎实,后面还是花了大量的时间用四大的课程去补。总之呢,就这样日复一日地学习与上课。值得一提的是,我们专业大四上仍然有很多会点名的专业课:) 我在课上就一直看政治的内容,也因此有些课分数考得很低,让我本科的GPA最终变得很难看。终于,考研的日子到来了,我并不很紧张地上了考场,发现我考位左右两个考计算机的同学都弃考了。考场上觉得专业课是真的难,其他的科目都普普通通。按部就班地考完之后,就开始了漫长的等待成绩的生活。在等待成绩期间,我开始刷浙大的PAT,即考研的上机考试,主要是按照胡凡学长的《算法笔记》刷。一开始我还不是特别认真,一天大概只做两三个小时的机试题吧,剩下的时间去学一些其他的东西,例如Stanford的CS229。后来考研成绩出来了,我发现自己的初试成绩排名不靠前,这样如果机试考得很低的话就有可能考不上研了。为了让自己的机试成绩尽量高,我把每天刷题的时间提高到了8-10小时左右,这个状态维持了一个月左右,把历年PAT题目(大概100多道?)来来回回刷了两三遍,这才有了一定的信心。机试的考试来临了,我在西安交通大学的考场参加考试,考场里总共也就10来个人。题目非常简单,应该是历年最简单的一次。我顺利地秒完所有的题目之后,就交卷出场了。\n之后就是准备考研面试与找导师了。我并没有认识在浙大计算机学院的同学,只能在网上搜一些相关资料并咨询一些前几年考研的学长学姐,按照他们的推荐联系了几名老师。当时联系的老师们基本都给了回复,约我前去实验室面试。我有一些机器学习的基础,除了本科不是CS这一个致命伤以外其他的条件也不算很差,所以也收获了一些offer。同一个时间,考研的复试面试也来了,我并不紧张地参加完了学院的面试,并取得了大概是前三的面试成绩吧。最后经过一些时间的考虑,参考学长学姐的意见和网上的一些帖子选择了一个实验室的老师。\n选导师结束之后我回到了本科学校,开始做毕设,毕设课题是在一个叫NAO的机器人上做一些与机器学习相关的事情。因为选择的实验室看上去似乎与数据库相关,我就找了Stanford的CS145课程(没有课程录像)的课件看了一下。这门课程的学习经历让我意识到课程的录像是非常重要的,在此之后我找课程学习的时候一定优先挑选有课程录像的课。学了点数据库之后,我补了点概率论的知识(Harvard Stat110),然后开始学习Stanford的CS231n课程。这门课让我首次接触到deep learning,感受到计算机视觉CV(学习)的有趣之处以及deep learning的强大与玄学。我比较认真地看完了视频并做完了课程作业之后,决定毕设做一个机器人上简单的目标检测(object detection)。内容设定为机器人通过手眼相机检测到目标之后,根据目标位置抓取目标。由于当时根本没有显卡,只有一台i3的小破笔记本,我挑选了YOLO v2 tiny作为检测的骨干网络,并且使用了Github上的一个基于TensorFlow的YOLO项目。显然我的计算资源不支持我从头训练网络,我只能找了一个pretrain的网络finetune。当时那个YOLO项目还不支持finetune,我就自己看TensorFlow的文档瞎改代码,改出了个支持finetune的版本。然后自己收集了一些图片,标注了一些数据之后开始finetune。由于机器太差,区区百来张图片的finetune就让我费劲了力气:单组参数的finetune大约需要48h才能完成训练,而且训练过程中电脑会非常卡。我大概花了两周的时间才终于训出了一个勉强可用的网络。在此期间由于电脑不能用,我买了本《Information Theory, Inference, and Learning》开始看,也做一些里面能用笔算的习题。训完了网络之后,我在机器人做了一些实验,并录了一些demo,然后写完了毕业论文。暑假学车,利用空余的时间学了几门课,记得有Stanford的CS41 Python Language,还有MIT的6.006 Intro to Algorithms。\n需要说明的是 ,直到这个阶段,我对学习/CS/机器学习/做研究都还没真正的入门。现在回忆起来已经有点模糊了,但我大致记得当时的学习并不“主动”,纯粹是“被动”地理解书上写的内容、公式推导和代码等等。现在我认为真正的学习应该是非常“主动”地去进行,看书、论文的时候要对框架和motivation有一个清晰的把握,知道/理解算法这样设计的目的是什么,并要相对频繁地去ask some questions,批判地进行阅读与消化。但可惜当时的自己还差得很远。另一方面,自己习题、coding做得太少,没有获得足够的监督信息,自以为自己学懂了,但其实只学了点皮毛。好在那时候还算是通过一些课程的作业获得了很多正反馈,支持着我的学习热情。\n我一开始对能够进入浙大计算机学院是很有一些激动的心情的,也破天荒地去积极认识了很多同学,还认真制定了课程计划等等。但开学之后,我发现研究生的课程质量比我想象中差了很多。好在\r蔡登老师的\r机器学习课程让我感觉非常好,我认为蔡老师的授课水平和这门课的作业都是world-class的。可惜我运气不好,没能选上这门课,而且蔡老师怕TA压力太大,不给增加课程容量。我一开始就只能蹭课听,坐在最前面,学得很认真,课上蔡老师的问题也总是积极地第一个回答,最后竟然让蔡老师破例地为我签了条子,选上了这门课:) 托这门课的福,我的机器学习基础扎实了很多,这门课也取得了不错的成绩。值得一提的是,这件事情也成了后来我成为蔡老师学生的契机。我还担任了这门课接下来的三任TA,在此期间我与另一位TA一起将之前的MATLAB作业改写成了Python的作业。后来这门课要扩充一倍的新内容,我还与蔡老师一起设计了新的课程内容,并狗尾续貂地再出了四份对应新内容的作业。只做了这么一点微小的工作,非常惭愧。\n其他还有两门课给自己留下了一些印象。一门是潘纲老师与章国锋老师合上的《计算机视觉》。课程project我做的是preserve information in style transfer,大概就是说image style transfer中会丢失很多信息,于是就引入了一些正则项来保留部分原始图片中一些可能有用的信息。这个project是与室友一起做的,一开始做得很挣扎,主要原因是自己的Laptop上transfer一张图片就要一个晚上,所以做实验非常缓慢。后来得知实验室有一张1080Ti,就与实验室同学轮流使用。这也是我第一次亲眼见识到显卡的强大:竟然能在几分钟内就完成一张图片的style transfer,太强了!后来课程做pre的时候,两位老师建议我们可以把工作整理一下投一篇paper,但我俩觉得肯定中不了好的会议,就没去写。第二门课是钱徽老师的《凸优化引论》,这门课印象深刻的主要是教材:Nesterov 的《Introductory Lectures on Convex Optimization》。这本“Introductory\u0026quot;的教材让我久违地感受到了被支配的恐惧,里面各种反(我的)直觉的推导看得我头大,也没有任何motivation说明,而是那种苏联式教材的典型风格:就是硬推。钱徽老师说这本学懂之后,看paper会比较轻松。我抱着对他的信任一顿硬啃,后来竟然渐渐学懂了一点。课程作业是挑几篇paper看,我挑了几篇Zeyuan Zhu的paper看,发现竟然还真能比较轻松地看懂\u0026gt;_\u0026lt; paper大概是说SGD对数据梯度的估计会有一些variance,这些variance在训练后期会导致训练的不稳定,并推导了一些方法降低variance,感觉也挺有意思的。不过后来自己还是因为数理基础不扎实,没敢继续做理论方向。\n后来开始接触了一些自己实验室的项目之后,感觉不是很感兴趣,就与实验室下另一个组的一位同学cc一起合作搞一些超分辨率(SR)相关的工作,经常跑到他那边去合作。后来我和那边的老师商量,想换到那边的组去。我想大家都是一个实验室名下的,应该可以成功。那边的导师去找我原来的导师聊,结果失败了。我原来的导师也很不高兴我去自己实验室的频率太低,把我训斥了一顿。后来我只能放弃与那个组的合作,在自己组里认真干活。但最终因为方向不感兴趣、缺少显卡等原因,我选择了转出原来的实验室,这里也非常感谢原导师对我意愿的理解与尊重。后来很幸运地,蔡登老师愿意接收我作为他的学生,也许是认为我在他的课上表现还可以吧哈哈。\n我在实习之前的学习经历就到此为止。前期因为没人指导,自己也没有很好地判断力,很愚蠢地相信了很多知乎上的答案,后来才慢慢有点上路了,总结出了一些适合自己的学习方案。这个学习方案在前问已经给出来了,此处不再赘述。\n最后在这里小小地宣传一下我们组。组里的蔡登老师与何晓飞老师都是学术顶尖、人品很好的老师。何晓飞老师现在创业做无人驾驶了,我与他接触不多;但我与蔡老师交流很多,有一起讨论review过大概几十篇paper吧。蔡老师学术水平极高,读博期间就发表过非常多很有影响力的论文(虽然现在那些topic已经不是很热门了),也经常能一眼看出组里同学许久也看不出来的问题要点;有很好的学术准则,绝对不会抢夺学生的成果,也坚决不参与学术圈一些拉帮结派的事情;人品非常好,很为学生考虑,对我的请求从来都是有求必应\u0026gt;_\u0026lt;;还是一位很照顾家庭的好男人和好父亲。总之,蔡老师不仅是我的学术导师,更是我的人生榜样;在我眼中他是一位真正的计算机科学家,也是一位脱离了低级趣味的高尚老师。能成为他的学生是我的幸运。组里的同学们也都基础扎实,且很努力,产出也不少。组里2019年大概有发了15篇左右的CCF A类的paper,学术实力有目共睹,且蔡老师要求组里每篇发表的paper原则上都要公开代码在组里的Github账号\rzjulearning下,并开放issue欢迎随时challenge,这也说明组里的工作至少都是扎实可复现的工作。\n找工作之前的准备 刷题 我在找实习和找工作之前刷了一些LeetCode题目以做准备。找实习之前大约是刷了400道左右,到找工作之前大约是刷了700多道,具体可以移步\r我的知乎回答。不过由于我不是竞赛背景出身,不够有天赋,刷题也不是全都认真地独立完成而常常参考discussion,我直到最后也没能达到可以轻松做出绝大多数hard题目的水平(周围的很多朋友都可以轻松秒杀),这也给我面试一些对算法题要求很高的公司(例如hulu等)带来了一些不确定性。\n面经与面试技巧 我面经倒是看得不多,基本上只有看过Google和Optiver的面经。原因是我运气比较好,在找实习初期(2月底3月初)就拿到了实习dream offer Google,而在秋招初期(9月初)就拿到了秋招dream offer Optiver,游戏开局就爆了神器;所以之后的面试都比较无所谓,主要是抱着聊天的心态参加面试的。至于面试技巧,主要是根据自己的经历总结出来的。当时并没有找到这样的文章供我参考\u0026gt;_\u0026lt;\n模拟面试 找实习之前幸运地获得了Google官方提供的模拟面试(mock)机会,通过mock直观地感受到了Google面试的形式与风格等,对后面拿到Google的实习offer有很大的帮助。后来在Google的实习的时候,公司很贴心地给每个实习生都安排了四次mock,这四次mock也让我学到了很多东西。除此以外就没有进行过mock了 \u0026gt;_\u0026lt;\n日常实习 加入蔡老师的组之后,我一开始是在何老师的无人驾驶公司飞步实习。实习期间受宠若惊地担任了不少重任,例如一开始独自一人地做一个产品的某个算法模块(包括数据采集(与标注)、算法选型、模型训练调整、开发代码、测试、部署等)。值得一提的是,为了降低自己标注数据的负担(大概标了几万张分类图片),也自己想了一些合适的采集数据的方式,并设计了一些半自动标注的算法,大概能够降低95%的工作量吧;又开发了一些简单的标注工具,才终于让我survive the labeling task。后来还担任了某个产品的开发主力(甚至很多时候是唯一开发人员\u0026gt;_\u0026lt;),同样担任了数据收集、算法选型、模型训练调整、开发代码、测试、部署等等。在这段为期5个月的实习中我学/锻炼了非常多的能力,为我后面找工作也奠定了一些基础。\n不过实习期间,我发现自己应用机器学习的水平并不很好:我虽然了解大多数常用的算法的原理,但当deep learning模型不work的时候我往往会不知从何下手debug。尤其是做第一个项目的时候,模型在测试集上能够达到很好的精度,但算法上线之后效果很差,会有很高的虚警率。我当然知道这是因为自己收集的训练集与测试集过于单一,均无法很好地代表线上场景,但当时确实不具备收集更完善的数据集的条件。无奈之下,只能选择利用类似迁移学习的方式从一些有一定相似性的数据集中学习一些信息,效果虽有提升但仍然很差。后来尝试调参数、模型,但都没什么效果(我也知道不可能有效果\u0026gt;_\u0026lt;,你永远不可能解决数据上的问题,调参只是为了给leader一个交待)。最后为了用户体验,只能从阈值与告警策略着手,调整了很久的阈值与告警策略,并做了尝试自适应的阈值、bad case的判断与特殊优化等等。做第二个项目的时候,模型的训练倒是相对顺利,因为是已经相对成熟的应用领域了,倒是大部分的工作是写文档开发测试部署等等。总之,经过这段时间的实习,我发现自己其实不太喜欢收集数据、标注数据、调参调阈值调模型这样的工作,更重要的是我很惶恐于那种我不知道这个deep model为什么不work,不知道从何入手debug的感觉;也惶恐于不知道这个deep model怎么就work了,到底是因为什么而work的感觉。与之形成对比的是,我发现自己做开发的工作感觉还挺有意思的。这也是我第一次萌生转行做开发的念头。\n印象比较深的还有将算法deploy到塞林斯的板子上的时候碰到的两个bug。我是组里最晚往板子上deploy算法的人,所以被leader催得比较厉害。deploy完,我测了一下算法的结果是否正确,结果发现结果是完全错的,就开始了debug。leader催我在两天内搞定,我能力不足,只能加班来弥补。第一天debug的晚上发现应该是塞林斯官方的交叉编译器的浮点运算有bug,就汇报给了leader,leader不相信。后来另一位围观的小伙伴帮忙弄了一个minimal复现的程序(记得是sin(pi/2)=0.08之类的),才终于说服了leader。最后我们给塞林斯官方写了邮件,官方回复承认了bug的存在,并说一时半会儿解决不了。然后小伙伴Z找了个开源的交叉编译器解决了问题。这个bug告诉了我一个道理:要勇于challenge,有的时候编译器真的会有bug。但是浮点运算正确之后,程序的结果还是不对。第二天又debug到晚上1点多,发现bug是OpenCV版本带来的问题。具体地说,服务器上当时的OpenCV是2.4.9,而deploy环境的OpenCV是2.4.8。我在2.4.9版本里使用了一个操作似乎是scalar times matrix,这个操作在2.4.9里能给出正确结果,然而2.4.8的OpenCV只支持matrix times scalar(不确定,有可能把这两个记反了,总之是2.4.8只支持一个顺序,而我的代码在2.4.9里开发的,写的是另一个顺序)。更过分的是,OpenCV的2.4.8还重载了scalar times matrix这个操作,然后返回了一个错误的结果(似乎是直接return 零矩阵)。最后还是小伙伴Z过来帮我用gdb一步一步看汇编代码发现的。Z把我们一顿喷:“为什么不用最新的版本?小版本的更新说明之前的版本一定是有bug的!”然而我早就提议用更新的版本了\u0026gt;_\u0026lt; 这个bug告诉我一个道理:广泛使用的库中也可能一些很弱智的bug,一定要用最新版的。(实际上我碰到了OpenCV 2.4.x版本的很多bug)\n在飞步实习期间要特别感谢我的实验室同学Z。Z是我身边技术最强的朋友之一,无论是技术深度还是广度都是我生平罕见得强大。Z虽然并没有在公司实习,但在我实习期间他偶尔会来公司carry我一把。Z给我的帮助非常非常大,例如帮我一起解决了那个编译器的bug,带我一起完成了第二个项目的系统方案设计等等。后来Z也选择吃了我的安利,与我一起加入Optiver,成为浙大第三个应届拿到Optiver offer的人\u0026gt;_\u0026lt;\n这里再说一句题外话。我在实习期间因为要用C++,但自己以前用的基本上都是C++中的C,所以又找了些资料学了一些C++。特别推荐一个C++的学习资料,\rStanford的C++课程CS106L的Course Reader。这本书讲的C++虽然有些过时,主要是C++11之前的一些东西,但仍然能够从里面学到非常多重要的C++思想(如封装、继承、抽象、多态、const的重要性等等)。对我来说,C++是一门不容易学好的语言,许多人推荐的C++ Primer和C++ Primer Plus会将我淹没在语法细节的海洋中。但是这本Course Reader不一样,作者会从很多motivation/design的角度来讲述C++,并给出了很多motivation example,况且作者的写作水平也很好,写得很有趣\u0026gt;_\u0026lt; 如果你和我一样没什么学C++的天赋,发现其他的书学起来很困难,那么不妨试试这本。稍稍遗憾的是,这本书自10年之后就没有更新了。\n最后总结一下,在这段实习让我学到了挺多东西的,对我后面找实习和工作都起到了很大的帮助。我之前从来没有在公司待过,更别说做工程产品什么的了,这次实习让我体会了一把工业界的感觉。刚开始写产品开发代码的时候是诚惶诚恐的,就我这垃圾代码也能当产品?做个demo还差不多。但后来也算是适应了这种惶恐的心理。另一方面,我一开始是独立负责产品线上一个大的算法模块的所有内容,后来有一段时间更是几乎独立开发了一个产品,因此对于算法工程师所必须的一些能力有了比较好的锻炼。第二个项目的产品最后还成功交付出去了,成为了公司的(第?)一笔营收,甚至听说现在那块业务还成为了公司的一项重要业务。\n做research 交付了第二个项目之后,我开始想做一些research,就选择回了实验室专心做research。这里主要有两个原因:其一是我想体验一下做research的生活,来帮助决定以后是否读博走学术道路;其二是听说算法岗的job market现在已经是神仙打架,甚至知乎上有人说“没有顶会paper可能就直接表刷了”。当然,根据我后来自己找工作的经验,我觉得这种话纯粹是危言耸听的。就我的经历而言,大家会更看重coding的能力、基础是否扎实、是否具有解决问题的能力以及是否具有不错的沟通能力等等。相比较而言,在job market上,顶会paper很多时候只是能justify个人能力而已,况且以现在ML会议的现状而言,能不能(短时间内)中也是挺看运气的。如果真的有某家公司招硕士算法岗要用顶会paper来表刷人,那我觉得可以考虑一下这家公司是不是真的值得投递了。\n这里再简单讲讲我做research的一些经历。需要说明的是,我做research的能力并不强,也没什么拿得出手的成果,所以仅供参考。最早想做research的时候是本科,那时候非常中二,希望自己能花多年时间在一个领域上,以达到专家的水平,甚至能推动领域的进步。在学了CS231n的课程之后就开始思考做research的idea,主要的想法是找一些目前还没应用deep learning但可能可以应用的领域。硕士入学期间(2017年5月-9月)总共想了三四个idea,现在看来回顾起来还是有一些有趣的。第一个idea是想用deep RL来做启发式搜索的评估函数,不过这个没有设备支持只能放弃。后来看paper感觉AlphaGo Zero的思路与这个有些类似。第二个idea是在学6.006的课的hash部分时候想到的。Prof说hash function往往是一个比较complex的function,我就想那能不能用deep learning来做hash呢?但自己闭门造车,一直想不到合适的监督信息,就放弃了。过了一年才知道有个领域叫deep hash,是用deep learning来代替LSH中的hash function,来做近似最近邻检索的,而早在16年就已经有deep hash的paper了。第三个idea可能是我最接近能做出来的一个idea了。当时的idea是想用神经网络来近似B-tree。我做了一些实验,感觉效果不错,但是一直困扰在一个点上:神经网络的输出的上下限是不确定的,万一query的数据的输出超出了训练时候的上下限的话就不知道怎么处理了。后来2017年12月的时候看到Jeff Dean发了一篇paper《The Case for Learned Index Structures》,我看了之后,发现他们的assumption是query的数据都在train中出现过,这样就不会出现上下限的不确定性问题了。而如果要去update这个神经网络模拟的B-tree,他们就选择重新训练整个模型。应该说他们的想法是更加合理的,因为直到现在似乎也没有人做出不需要retrain的learned B-tree。当时看到这篇paper的时候我非常激动,觉得有人和自己想到一块去了,而且还是一位大牛,这说明了自己的idea还是有一定靠谱性的。于是我还很兴奋地在数据库的课上分享了这篇paper\u0026gt;_\u0026lt;\n应该说,我在硕士之前做research的路子是很有一些问题的,这个问题主要在于我的野心太大,常常想做一些以自己的能力/资源不大可能做出来的research,简直就像很多民科想证1+1=2或者P != NP的人一样可笑。当时也没有人来指导自己的research,就拿一台i3小破笔记本自己一个人瞎想瞎折腾。后来有一位朋友和我说,他认为PhD需要培养两个重要的能力:其一是能够大致判断自己能否做出一项工作;另一点则是能够大致判断工作的impact。PhD应该在自己能够做出来的工作中,挑选impact最大的去做。而我当时显然就不具备判断自己能否做出某项工作的能力。\n研二的时候回到实验室开始做research,一开始和导师商量,打算做deep learning与manifold learning的结合,算是semi-supervised learning的一种吧。当时觉得这个工作最大的困难点在于如何用mini-batch去做manifold learning中graph的更新。一些已有的相关工作(如cvpr16的《Joint Unsupervised Learning of Deep Representations and Image Clusters》)基本上是都用一些iterative的方式来训练和迭代的。后来想了一段时间,觉得还是先从相关领域的paper复现开始做起吧。然后就开始复现semi-supervised learning的paper。大概有尝试复现了7、8篇吧,发现都无法复现出他们的效果,反而复现的baseline能比他们的baseline高5-10个点左右。终于在复现一篇领域大牛(无人不知的那种)的paper的时候复现出了paper claim的效果,结果复现他们的baseline比他们paper claim的自己的效果还要好\u0026gt;_\u0026lt;\n经历了一些失败的复现之后,向一位刚中了AAAI的小伙伴C请教了一些经验。C安利我做他们的领域,我听了他们的工作之后,当天晚上突然想了一个比较偏data mining的idea。第二天就写了代码实现一下,发现效果特别好。当时非常激动,觉得随便一弄效果就这么好,这要是认真调调岂不是要上天,结果那天的结果就基本上是最后调出来最好的结果了\u0026gt;_\u0026lt;然后匆匆写了一篇paper,submit到了IJCAI上。结果被reject掉了。AC评价说觉得是一个简单但是有效的工作,但是漏引了两篇10多年前idea相似的paper,我一看才知道原来10多年前就有人做过了相似的工作了,被拒得挺没有脾气的。后来这篇paper又submit到了AAAI上,有一位reviewer给了非常低的分,理由是认为data mining这类approach早就out-dated了。我后来也觉得这篇paper确实很难投中,就扔掉不管了。总得来说算是一段有些失败的research经验吧。\n除了自己做的research工作以外,我还与导师一起讨论review了很多paper,注意到有些会议里的review真是招呼满天飞,不禁感到有些失望。就开始思考自己究竟是否是真正想做research的人。最后得出结论,我想做的是真正实用的顶级的research,但我显然远没有那个能力,只得作罢。硕士期间的research经历基本就到此为止了。\n最后在这里安利一个沈向洋老师在华中科技大学给的talk: “How to do research”,里面分享了很多有用的方法。不过里面有些点我也不是特别同意(虽然我完全无法与沈老师相比),譬如他说做研究,应该有3年做不出来的觉悟。我觉得对大多数普通的PhD来说,这么长时间拿不到正反馈可能是会压力很大且非常痛苦的\u0026gt;_\u0026lt;\n找实习 先写一些简单的总结体会吧:\n 能找内推尽量找内推。一方面是有些公司可以免掉笔试避免自己翻车,另一方面是有内推人的话在很多公司可以帮忙查询进度什么的,比较方便。 多看公司的面经了解风格。不同公司考察的重点、风格可以有很大差异,一定要提前了解公司的面试。 简历上的内容一定要非常熟悉。这个没啥可说的了。 面试官真的是一家公司的门面,极大地影响我对公司的印象。 剩下的要点都在前面tips部分提过了,这里不再赘述。 实际上,我实习的第一个offer就是自己的dream offer Google,本来打算就此结束找实习了,把时间用来补CS基础上。陪妹子参加了一场拼多多的面试,与面试官聊了聊他们在做的事情以及难点与痛点的时候,竟然受到了一些启发,有了个idea(虽然这个fancy的idea最后没有work)。于是决定多投递多面试,与各家公司的面试官多聊聊。每家公司的面试官往往是公司里水平比较不错的人,尤其是最后一面技术面的面试官更是技术leader甚至是技术Boss,平时想要与他们聊天的机会可不容易获得。但是面试这样的事情能够让他们自动送上门来聊天,何乐而不为呢?\n在这样的想法下,我投递了阿里,腾讯,头条,百度,微软,hulu,airbnb,摩根士丹利。需要特别提一下的是Optiver。对Optiver的投递其实是比较巧合的。三年前ZJUCS有一位硕士学姐应届去了Optiver,我认识那位学姐的几个学弟,学弟们对学姐是极其推崇,各种膜拜。我想,这么厉害的学姐会选择的公司,那肯定也非常厉害,于是就这样投递了Optiver。当然要说明的是我并没有对Google以外的公司有做什么面试准备,也没继续刷题,因为我早就确定了要去Google实习了。而其他公司给我发了offer之后我也是立刻拒掉,避免耽误其他同学的机会。下面按时间顺序简单谈谈各家公司的面试。\nGoogle 流程:两轮电面,主要是问算法题。\n过程:找实习时候的dream company就是Google了。平时有空的时候会做一下Google的kickstart比赛,并因此拿到了去Google参观的机会,参观完更想去Google了。于是投递了Google的实习。当时自己想去Google上海做开发SWE,同时Google的算法岗ML SWE也只在冬令营中产生,也没办法投递。运气不好的是当时Google的面试与IJCAI会议的ddl基本上重合,所以当时是做research赶paper与刷题准备面试同时进行。Google的面试安排相对较早,大约是在2月底吧。有趣的是,由于我在填Google的表的时候写了中英文面试均可,结果HR小姐姐就给我安排了两场英文面试Orz 而且都是晚上11点半或者早上7点这样的事件Orz 第一面似乎是位印度的Googler,结果因为一些原因鸽了我。第二次一面是一位新加坡的Googler,结果又因为被浙大的邮箱坑了进不去Google的视频会议。第三次一面试终于顺利完成,面试官是一位纽约的小哥哥,题目并不难,我很轻松地写完之后我们闲聊了一会儿。二面是一位上海的Googler,题目挺难的,而且给的压力不小,差点就崩了,好在我还是稳住了心态顺利地做了出来。面试完半小时左右就收到HR小姐姐的消息通过了面试,此时我还没从面试的地方走回宿舍\u0026hellip;\u0026hellip;后来过了Google的Hiring Committee,进入Team Match后竟然也很快(不到半天)地就被捞了起来,还有点受宠若惊。捞我的人(也就是我后来的Host)希望我能去北京做ML SWE,我想应该是看中了我的ML背景吧。我问HR小姐姐我的项目内容,小姐姐给我发了俩,说不确定是哪个,其中一个内容大概是自动化地针对手机设备压缩网络,我比较感兴趣;另一个项目看上去是与TensorFlow相关的,感觉也不错。同时注意到自己的Host是Berkeley的PhD和美国一所大学的professor,还发现那个组的创建人是李飞飞。在与妹子商量后,就接了这个offer。可以说第一个offer就是自己的dream offer,非常幸运和激动。\n拼多多 流程:笔试+HR面 + 两轮onsite技术面\n过程:投递的是算法岗。拼多多在3月中旬的时候在浙大附近租了个酒店,在那里进行了现场的面试。HR通知我们早早地过去,然后在那边等着排队,记得自己等了挺久的。先进行了HR面,主要是问我对公司的工作时间什么看法,我当然是回答996不在话下,不然我可能就要当场被赶出去了?之后一面技术面问了一道数据结构的coding题。一面的面试官有些傲慢,一开始还弄错了一个地方怼了我一会儿,后来我只能耐心纠正他的错误。之后问了些机器学习基础与项目的问题。这位面试官让我对拼多多的印象非常糟糕,后来也就直接拒了offer,秋招也没有投递。二面技术面倒是感觉不错,问了一道很难写的链表题目,我比较轻松地写出来之后同样问了机器学习基础与项目的问题。面试完过了一两周吧,晚上10点半接到offer call,直接拒掉了。\n摩根士丹利 流程:全英文,笔试+电面+两轮onsite技术面\n过程:投递的是C++开发岗。3月底大摩突袭打电话电面,全程英文面试,问了很多数据结构、操作系统与计算机网络的基础问题,最后问了一道system design的题。之后约了4月下旬的onsite面试,我与妹子一块参加。结果因为一些原因(起晚了)到达现场迟到了,非常不好意思。到达现场之后尴尬地发现除了我和妹子之外的所有候选人都穿着正装Orz 现场先做了一点笔试题,交了之后hr小姐姐就带人去面试。面试也是全程英文面。两轮面试问的都是数据结构、操作系统、计算机网络与system design的题。两位面试官给我留下的印象都不错,谦逊和气,水准也不错。一位面试官当时问我有了哪些offer,我就诚实地回答了一下,面试官非常惊讶地问我\u0026quot;Then why do you come to Morgan for an interview?\u0026ldquo;我说自己想稍微了解一下金融的情况。大摩也是在面试完大约一两周后来了offer call,我拒绝之后并说明了自己的去向,HR说那我们继续保持联系。\n头条 流程:笔试(内推可免)+3轮视频面+HR面\n过程:内推的是头条产品的推荐算法岗。4月初进行了前两轮技术面。头条很喜欢考算法题,两位面试官都问了很难的算法题,当时比较困状态不好,艰难地写出来之后又问了一些数学基础、机器学习基础和项目的问题。二面结束5分钟后接到电话约三面。过了两天进行了三面,这次的题倒不是很难,写了两道之后面试官问了一些操作系统、编程语言的问题,最后问了我一个场景设计题。面完5分钟后收到offer call。最后还是拒绝了。\n阿里 流程:笔试(内推可免)+3轮电面+1轮交叉面+HR面\n过程:内推的是阿里搜索推荐部门的算法岗。4月初的一个晚上一面,面试官是内推我的师兄,我觉得可能怕被骂防水有点矫枉过正,问了足足70分钟的问题,主要是算法题(很简单而且不用写代码)、机器学习基础、深度学习基础与项目问题。过了两天进行了二面,也是算法题(很简单而且不用写代码)、机器学习基础、深度学习基础与项目问题,面试官有问一些开放性的问题,还蛮有意思的。过了一周左右进行了三面,基本上只问了项目问题和开放性问题,后来知道那个开放性问题竟然是他们投kdd的paper\u0026hellip;\u0026hellip;然后过了挺久的,在安徽参加valse的时候突然接到电话,原来是阿里的交叉面(即另一个部门的人来面试我),问了机器学习基础和项目的问题,还问了深度学习框架的一些实现细节(不知道为什么问我这个,但还是回答了出来)。总得来说技术面试体验还可以。又过了一周,晚上9点半,接到阿里HR的电话,阿里HR还真是如传闻一般\u0026hellip;\u0026hellip;后来拒了offer了。\n腾讯 流程:笔试(内推可免)+3轮电面+HR面\n过程:投的是数据挖掘岗位。比较尴尬的是,当时接到了优图Lab的电话,说他们要求实习4个月以上,问我能不能满足要求,我没经过思考就说了那肯定不行,和导师说好了3个月。然后就面试终止了。我真傻,我本来面试的目的就不是去实习啊,直接答应下来说可以4个月就好了\u0026hellip;\n微软 流程:笔试(内推可免)+3轮onsite面\n过程:找学长内推了微软苏州的SDE,与妹子一起去苏州onsite。一面问了项目和一个算法题,又问了两个设计模式的题。面试官给我的印象非常差,看不懂Range For就challenge我,没用过priority_queue也challenge我。二面的面试官比较nice,先问了项目。之后问了一道比较简单的算法题,然后是难一些follow-up,都相对轻松地解决了。最后还剩下10分钟,面试官就开始和我闲聊,问了我已经拿的offer,并问我有没有肉翻的打算,我说至少要等妹子也有肉翻能力了再一起吧,暂时不考虑。三面面试官是一个leader,先问了一道system design,并讨论了一些面向对象的设计思想,然后问了我开放性的题目,比较难。总得来说,除了一面面试官给我印象非常差外,另外两个面试官都很nice,尤其三面的面试官水平感觉也很好。\nOptiver 流程:全英文,笔试+电面+两轮onsite面\n过程:\n我投递的是C++ developer。之前提到,投递Optiver的主要原因是相信大神S学姐的眼光。在校期间听说了不少S学姐的传说,据说她读书期间写System代码就从来是bug-free的,秋招的时候腾讯问她“你开个价吧”,但照样被她拒绝。还听说她当时是拒了一家叫Jane Street的公司的offer去了Optiver。不过S学姐的那些传说我也没有向她考证过。后来我才知道S学姐是浙大第一个应届进Optiver的人,而我则是第二个。\n总之我就这样投递了。过了几天收到笔试通知,笔试题有两套,一套是在一个平台上做两道C++偏数据处理的题目。另外一套是一些数学智力题,很多题目难度非常大,做得我头晕眼花。做完之后第二天接到HR小姐姐的电话,开始了HR面。HR的口语非常好,我听上去与native speaker没有什么差别,问了许多比较有趣的问题,我也一一回答。面试完过了两小时,HR给我打电话问我愿不愿意做一下公司另一个岗位Application Engineer (AE)的笔试题。我一向是相当flexible的,就答应了下来。这个岗位的笔试题主要是一些与Linux操作相关的问题。第二天HR给我打电话,说我AE的题做的分非常高,建议我先和这个Team的人交流下,看看感不感兴趣,我反问难道我C++ Developer的分不高吗。HR说了两点。1. HR觉得我的沟通能力很不错,而AE非常需要沟通能力,她觉得AE说不定会挺适合我的。2. 我投递得比较晚,Developer他们已经有一些不错的候选人了,不一定能排得到我。HR问我为什么想做C++ Developer,我诚实地说因为周围有一些大神朋友是做System Developer的,我和他们交流觉得挺有意思的,而且我觉得System Developer的技术很硬核,具有很好的技术护城河,能够让我在多年后仍然保持很强的竞争力。HR于是建议我与两个team的人都聊聊,看看自己对哪一块更感兴趣。我接受了HR的建议,毕竟我早就决定去Google实习了:) 与越多越的人交流我越开心。\n去大摩参加onsite面试的高铁上我接到了Optiver面试电话,稍微想了一下,我决定就接受了面试,因为我其实不在意拿不拿得到offer,面试环境差一些也不要紧。于是就这样在嘈杂的高铁上开始了AE的面试(听说我开始电面之后周围的人都瞬间不说话了,感谢有爱的乘客们)。面试的内容很多,考察了数据库、操作系统、Linux常用操作、运维场景问题、计算机网络、版本管理与system design等内容。这场电面是给我印象最深刻的电面之一,内容很多,且很多问题是很有意思的一些design问题,电面的面试官甚至还有两位\u0026gt;_\u0026lt; 无奈我自己其实不太懂运维的内容,很多问题都答不上来,只能靠猜测(如前面面试心得里所述,我是先claim了自己要猜测的),在一些design方面与面试官进行了比较多的讨论。面试官的脾气也非常好,并没因高铁上时常响起的播报声而恼怒,而是一直说never mind, that\u0026rsquo;s ok,让我感到非常非常不好意思。如果早知道高铁上环境如此嘈杂,我就推迟面试时间了\u0026hellip;\u0026hellip;\n然而,这次面试让我意识到自己和公司的AE也即运维岗的技术栈很不match,发现自己对运维也不感兴趣,后来HR联系我的时候,我就请她还是继续安排我走system developer的流程,HR尊重了我的意愿。然而大约在4月22日的时候,HR打电话告诉我说公司的员工们大都去休年假了,这样可以与五一假期连一块,休一个比较长的假期。因此面试可能得安排到5月之后,我自然是欣然同意。可惜到了5月多的时候,HR联系我说他们已经有一些合适的候选人了,就不继续我的System Developer的面试了,并说如果我对AE有兴趣的话可以给我AE的offer。这一次的Optiver实习面试旅程就到此为止了。虽然没有去Optiver实习,但这次实习面试之旅为我后来秋招选择Optiver埋下了伏笔。\n百度 流程:笔试+三次技术面\n过程:过了百度笔试之后,大约在4月中旬接到百度的面试通知。三次技术面试都有考算法题、机器学习基础和项目等。百度的算法题不算难,大都是LeetCode medium难度吧。百度虽然这几年发展不好,名声口碑也一般,但是说实话面试官水平还是挺不错的,给我印象挺好。4月底的时候收到offer然后拒掉了,但是不知道为什么后面有一位百度的员工加了我微信,说我去实习的时候他负责带我Orz\nAirbnb 流程:笔试+笔试确认面+两次技术面+文化面\n过程:投递的是全栈工程师。投递的原因主要是听说Airbnb的package挺不错的,不加班,而且前景也还可以。大概是4月中旬接到笔试通知,笔试题同样是在一个平台上完成,算是一道稍微有点麻烦的模拟题吧,但也不算很难。做完笔试题的第二天有一位面试打电话来和我约笔试确认面。笔试确认面时间很短,大概是15分钟,面试官非常客气地问了我design的motivation是什么,并让我分析了一下复杂度,个人感觉只要代码是自己写的,这一面不会有任何问题。过了一两周之后安排了两次技术面试。技术面试的内容主要就是写算法题,不过Airbnb的算法题风格与其他家还不太一样,他们的题目思维难度不大,但常常较难实现,会有一些corner case什么的。一面的时候我在实验室的学生休息室面,结果附近在修路,非常吵,十分艰难地才把代码写出来,面试官不太满意。二面的时候换了个安静的地方,相对轻松地搞定了题目,面试官还比较满意。但是应该是由于我一面表现不好,Airbnb让我在备胎池里待了很久\u0026hellip;\u0026hellip;总得来说Airbnb的面试难度也挺高的,尤其是这种只做很难的算法/模拟题的风格,受运气/状态影响不小,一不小心就会挂。\nHulu 流程:笔试(内推可免)+三次技术面\n过程:投递的是软件开发工程师(SDE)。在5月的时候Hulu来浙大办了宣讲会,并于接下来几天在浙大安排了现场面试。这种送上门来的面试机会我当然不会错过。没有投递Research SDE(即算法岗)的原因似乎是Hulu不打算从浙大招算法实习生?总之是明确说了只招SDE。猜测可能是只收清北的吗hhh 总之就这样上场面了Hulu。一面的面试官看了我写满了机器学习项目的履历之后,决定问我分布式系统的问题,因为他在公司是做分布式系统的。尽管我一再强调自己完全没接触也没学过分布式系统,但还是被迫回答了两个问题。之后就开始写算法题了,第一个算法题是道LeetCode medium难度的题,大概花了5分钟秒杀。然后面试官给我出了一道hard难度的题,想了10多分钟,在面试官的提示下我终于给出了最优解,然后面试官没让我写代码,又问了我一道hard难度的题,然后又是想了10多分钟,这次终于没能给出最优解。当时我的做题能力就是medium难度基本秒杀,hard难度的要么不会,要么就得做很久才能做出来:) 总之面完之后面试官和我说了一句你辛苦了,然后就把我挂掉了,终于吃到了第一个也是唯一的一个拒信\u0026gt;_\u0026lt; 总得来说还是实力不济,Hulu的面试题大都是hard难度的,自己当时确实做不出来,而且3个月没刷题了手也生。\n至此,实习面试就全部结束了。总得来说各家公司的面试各有一定的特点,这可以通过看面经来了解。另一方面,这些面试也多多少少有一些共同点,考察的能力与一些相应的技巧我在本文前半部分也已经介绍过了,此处不再赘述。\n实习经历 Google的实习经历对我的影响、帮助都挺大,再加上Google可能是很多同学心目中的dream company,这里就简单介绍一下我在Google的实习经历,以供参考。当然,其中也夹杂了许多我的个人经历,那些绝对是个例现象,与Google无关。\n入职 Google的入职活动(onboarding day)还是挺有意思的,上午是一位技术同事志愿服务地带我们逛了北京Office的各个地方,并给了一些介绍,然后给我们分了Laptop。然后HR小姐姐Y带我们参加了一个活动,是整个大中华区当天的入职的Googler(Google员工)一起开一个会,介绍Google的文化、基本信息等等,有一位非常Senior的领导会一起聊一聊。我记得当时应该是台北那边的一位VP参加了会议。印象最深的是提问环节,我看到没有人有问题,我就问了一个问题:“你对新入职的Googler有什么建议吗?”VP回答:“Try to confident. Your products and efforts change the world.”\n之后与我的host见面聊了聊。他是一位非常nice的host,水平也很高,也很会带人,在实习期间教了我很多东西。host与我聊项目,是一个OCR的项目,我发现这个项目似乎和之前我得到的信息不太一样,就问他为什么变了。host告诉我说后来招了两个清华的本科EP实习生,打算让她们做之前安排我的项目。我还是比较flexible的,就愉快地接受了新项目。\n项目初期进展 新项目一开始做得很顺利,主要是需要我对Google一个很有影响力的开源项目(30k+ star)做一些改动,增加一些新的功能。确切地说,原始的项目的自动生成训练数据的训练脚本只支持字体文件作为输入,而我们期望它能够支持image-label这样的输入。这需要我阅读项目的代码结构(大概几十万或者几百万行代码),理解系统的设计、数据结构以及内部使用的算法,并找到自己需要改动的地方,再做修改。困难点在于这个项目并没有什么完善的文档,也没有(在我看来)非常完善的注释,需要直接阅读源代码。我大概花了一周大致看懂了实现原理(略去了一些技术细节),又花了一周左右理清思路并实现了需要的功能。但是我的噩梦才刚刚开始\u0026gt;_\u0026lt; 我开发的功能结合原始的训练代码训练出来的模型效果不合理得差。进行了一周多的debug,以及与host非常多的讨论,终于找到了bug在哪里,原来是原始的训练代码对于输入的数据是有一定的assumption的,但是在文档和注释中并没有说明。项目的训练数据均是由他们的代码自动生成的,这些数据会是符合这个assumption的,但是我新增的功能生成的数据则不符合这个assumption,这样会导致训练过程中调用的聚类算法中出现矩阵不可逆的问题,使得生成的训练模型效果很差。然而即使在修复了这个bug之后,模型的性能还是不能完全令人满意,又做了一周的实验慢慢提升性能。最终的效果虽然还不完全令人满意,但已经勉强可以使用。至此,我已在Google实习了一个月。\n这里顺带一提,在北京office的实习生们大多数都是清北的,而且很多同学都有本科甚至是初高中的竞赛背景。考虑到我的CS背景与他们的差距,这多多少少给了我一些peer pressure。又因为妹子在杭州实习,我周末就没什么安排,而我的房子租得又离公司非常近(步行5分钟),故我整个实习期间基本都是一周去7天公司,且在第一个月每天都是早上9点到晚上10点以后走的。顺带一提,Google确实相当注重work-life balance,我晚上的时候时常会闲逛一圈,极少看到有除了实习生之外的同事加班,周末则只能看到少数一些实习生。\n虽然第一个月的前两周我每周都会100个小时左右的时间在公司,但实际上我大概只有一半左右的时间花在自己的实习项目上,还有一半的时间则在如饥似渴地阅读Google内部的一些课程、资料。进Google之前我就听说公司有非常好的学习资源,而我可能在Google的时间只有这么3个月,我希望能够尽量地多学一些东西。不过遗憾的是我觉得我所看的学习资源比四大的课程基本都有明显差距,但想来也是,四大毕竟是最顶级的学校,且专门focus在教育上,要是还比不过Google的课程的话那也太没天理了。这两周我虽然学习/工作的时间很长,但项目进展顺利,也学到了不少东西,自己感觉非常得充实与满意。第一个月的后两周因为模型的效果一直很差,我给自己的压力很大,原因主要是觉得自己项目做得这么挣扎,一定是自己能力不足,要多花时间赶上,不能拖host的后腿。实际上我host没给我多少压力,对我也一直非常nice,但正因为如此,我更不想拖他的后腿(但我后来发现,项目做得挣扎是一个实习生尤其是ML实习生的常态:) )。我一直希望能够尽快地让模型work,每天都会debug到11点多才离开公司,而且晚上睡觉睡得也不好,基本上每天都会梦到自己在debug模型,而且debug不出来。这段时间的经历也让我意识到自己的ML水平其实也不怎么高,并不能以一种很systematic的方式去逐步debug模型的问题,而且也对debug的进度没有很好的把握,并不能合理地预估让模型work的工期。算法岗与开发岗不太一样,后者的工作我往往可以相对合理地预估工期。例如我前两周的工作就更偏向于开发,我每天都能有一些合理的进度,并且我能够相对清晰地预估自己需要多久阅读理解代码/实现功能/debug等等。另一方面,我做的算法岗的工作很多时候的工作内容就是调参数/调模型/调特征,会相对无聊,且我往往没有很好的insight(尤其是deep learning相关的),这让我感觉不到很好的技术沉淀与积累。总之,这段时间的经历让我又开始思考算法岗/开发岗的选择问题,并且对我最后做出选择起到了关键的作用。\n顺带一提的是关于实习生转正的事情。由于妹子表示在阿里的组非常好,师兄们带她都很尽心,人也很好,晚上下班也挺早的,故我此时的秋招打算就是去阿里做推荐。当然Google的转正还是要争取一下,可以用来compete嘛。\n进抢救室 (下面将描述完全与CS无关的事情了,完全可以跳过\u0026gt;_\u0026lt;)\n然而,更严重的问题出现了。我多年来一直肠胃不好,也去医院检查医治多次(但没做过胃肠镜),但都没什么效果。也许是因为实习的第三四周给自己的压力太大、工作时间太长,也许是因为还没习惯北京的饮食与生活,也许只是凑巧,总之我大概在第四周末尾开始出现胃溃疡引起的胃出血。但是我一个人生活,对生活也向来不太注意,竟然没留意到这个现象。大约胃出血了3、4天之后,某天晚上我上厕所的时候竟然感觉到一阵眩晕,眩晕得我无法站稳而摔了一跤。我意识到了不对,大概查询了一下,猜测自己是得了胃溃疡并且导致了胃出血。于是我决定第二天去附近的北医三院检查一下。我试图在网上挂号,但发现号子已经没了。\n但是第二天有一场会议,我不想耽误他人的进度,故第二天起来挣扎地去了公司。路上我已经察觉到不对:我甚至已经没法正常走路了,我保持站立或者走路姿势大概两分钟左右就会脑供血不足,而不得不蹲一会儿让大脑供上血再继续前行。开完会后,我和host说明了情况,host表示非常担心,让我赶紧去医院检查一下,我就打了个的独自前往医院。实际上我对当时自己的危险情况并没有一个清楚的认识,正确的做法应该是找一位朋友一起,并拨打120去医院。\n车子快要开到医院的时候开始堵了起来,原来北医三院门口的道路非常狭窄,但前来看病的病人非常多。堵了10多分钟,我开始有点焦急,出租车师傅建议我下车步行过去。思考了下,我下了车开始往医院前行。实际上这条道路只有区区几百米,但却绝对是我人生走过的最漫长的几百米。我每走大概10多米就要蹲一下,让脑子供上血,再继续前行。我运气还算不错,如果中间不幸晕了过去,各位可能就看不到这篇文章了。在路上我给妹子发了消息说了一下情况,并不敢告诉自己的家里人,怕他们担心。我终于还是这样磨到了医院,先去自助挂号机上挂号,同样显示肠胃科没号了,我想可能人工窗口有额外的号呢?于是我去人工窗口排队,排队的时候直接坐在了地上,前面排队的人还发出了轻蔑的嘲笑。终于排到我的时候,我直接说挂肠胃科,工作人员告诉我没号了。她问我现在什么情况,我解释了下自己的症状,说我觉得应该是胃溃疡导致的胃出血,现在脑子供血不足,工作人员说那要不给你挂个脑科吧:( 我苦笑了一下,问急诊科在哪里,她告诉我在地下一层,我于是继续挣扎着向急诊科磨去。\n总算磨到了急诊科,科室要先分诊,我直接上去描述了症状,分诊的医生让我先去边上测血压。我于是只好先去边上测血压,但是可能是因为出血过多血压太低,血压计一直测不出来。大概测了10来次吧,总算是拿到了一个结果,我赶紧拿着结果找分诊医生。此时我的状态已经非常非常糟糕,几乎走不了路,说话也非常费劲。医生看到我的状态说你怎么样啦,我感觉你是出血过多了,来我带你测一下血压,然后把我扶到血压计边上继续测,但怎么也测不出来。我非常虚弱地说了一句这大概是测不出来了,突然感觉想吐,就说您让开一下,然后吐了一地的血\u0026gt;_\u0026lt;,吐完说了句不好意思。医生赶紧让人去叫抢救室的人过来,随后我就躺上了抢救室的那种移动病床。躺下之后,我感觉自己的状态明显好转了,就和旁边的医生开玩笑说要不要这么夸张,这就送我进抢救室了?医生大概是怕我害怕,以一种相对轻松的态度告诉我说你刚刚吐了些血,我们要检查一下。把我送到抢救室的时候,医生问我有同伴一起来吗,我说没有。他们让我赶紧喊家人,我说自己一个人在外地实习,他们就说那你赶紧喊个朋友啊老师啊过来吧,没有一个人不行的。我于是拨打了同样在Google实习的另一个同学H,但他在睡午觉,没接到电话。然后不得已打了在北京实习另一家实习的女性好朋友L的电话。我与L关系很好,但因为怕妹子吃醋,所以万不得已不想让L过来。L接了电话之后,我简单描述了下情况,然后说你别慌我现在没啥事,很正常,你方便的话就赶紧过来吧。L二话不说直接答应,随即打车过来。\n之后医生给我做了很多检查,所幸检查结果都是正常,只有血压和血色素等指标很低。我说我现在感觉差不多好啦,一定要在抢救室待着吗,这里除了我以外的病人最年轻应该也有70岁吧。医生安慰我说应该没啥事,大概率是胃溃疡导致的出血,但是要做一下胃镜检查。我说那今天就能做吗。医生告诉我北医三院的肠胃科非常有名,预约胃镜通常都是要等一个月甚至3个月以上的,“但是我们急诊科去排应该可以快一点,今天或者明天就可以了。”我说那确认是胃溃疡的就能出院吗,医生笑了下应该很快的。这时候我给妹子打了个电话说了一下情况,她想要赶紧请假从杭州过来,我说再观望一下吧。\nL到了之后,医生让她去帮我买了很多生活用品,我意识到似乎就算是胃溃疡也会是一场相对持久的战役了。不过我自己感觉状态还不错,看她面如死灰的样子,就和她说点玩笑话缓和一下气氛。后来医生让L到急诊室外面去等。H这时候回了我电话,问我怎么了,我描述了一下情况,请他在下班之后来接替L的班,因为抢救室的病人是需要24小时有人陪护的,L一个人肯定是扛不住的。H也二话不说答应了。考虑到这样的24小时陪护不知道还要多久,我并不想太耽误这两位朋友,终于还是让妹子过来了。另一位老家在北京的浙大同学C知道了这个事情,也表示要一起过来。于是C和妹子一起买了高铁票出发过来。\n我又给host说明了一下情况,host非常担心,和Google的hr小姐姐们说了一下这个事情。hr小姐姐们也非常担心,赶紧问了一下我的情况,还有两位比较熟的小姐姐直接出发来公司看望了我,让我再次感受到了公司的温暖\u0026gt;_\u0026lt; 我和她们笑着聊了会儿天,她们发现我还挺能说的,状态也不错。我说不用担心,没啥事的,就是个小意外,等我出院吧。\n到了晚上C和妹子到了。后面的事情就省略说了。第二天做了胃镜,检查出来确实有两处严重的溃疡,高水准的医生用两个钛夹夹了一下。后来就转到肠胃科住院区去,并告诉了家里,我父亲之后来了北京。我住了一周的院,住院期间主要是妹子,我父亲和C陪护我,妹子主要负责照顾我的生活。期间还有一些朋友同学过来看我。巧合的是,我住院的主治医生是Google一位HR的闺蜜,定期向HR们汇报我的情况。经过了一周的治疗后我出院了。带妹子玩了两天之后送她回了杭州,然后休息了一天,就去公司学习去了。\n恢复实习 第一天去的晚上我host突然出现,和我说要不quit实习回家休养吧,还给我说了他Berkeley的导师给他说的一句话:“学业与事业是个橡胶球,挤一挤,变形了也总会恢复;身体与爱情是个玻璃球,挤一挤碎了就回不去了。”我解释说医生表示我现在其实状态已经相对正常了,只要不过分劳累、注意饮食、不要运动即可,是可以工作的。当时我心里有个很中二的想法,认为这一切的阻碍都是台阶,越是这样,我越是要迈过这些台阶,完成我的实习。另一个重要原因是我希望能用Google的offer来compete阿里的A+,因为我的profile直接面阿里应该是拿不到A+的。\n由于项目的算法部分已经勉强能用,后面的任务重心就转向了产品的前端与后台开发。我之前没有任何相关经验,只能从头学起。在一位朋友的指导下,我一周就连学带做搞了个简陋的雏形。后来就与host他们讨论界面的优化、功能的加强等等,就这么迭代地进行项目的改进。\n印象比较深的是我花了大量的时间在试图把我的服务部署到Google Cloud上,使得项目的用户可以接公司的WIFI即可访问到。然而Google的一些隐私相关的policy让这件看上去简单的事情变得异常麻烦,我试了很多办法都没能成功。最后按照host的建议,我向Google Cloud申请了一段时间的WiFi IP访问特权,结果帮忙查出了个Google防火墙的bug Orz 美国负责防火墙的同事表示这个bug他要上报领导解决。这使得我不得不放弃了部署到云上的打算,转而在我的台式机上部署并让手机端可以访问,但这件事情也花了很大的力气才搞定:) 这些时间花得是让我非常frustrated的,因为这些事情枯燥乏味,没有技术含量,如果不是policy的问题我只需要10分钟就可以搞定Orz\n在写前端、改进用户交互页面的时候,我意识到自己对这种工作内容是不感兴趣的;另外一方面,我的产品的impact也相对很小,潜在的用户大概是个位数的。这两者都让我对写项目的前端不是很提得起兴趣。不过我还是希望自己能把这个实习项目,还是很认真地改进项目,最后也算是做出了一个简陋的产品出来,勉强完成了项目的初期目标。在这段时间,我也有去接触一些其他在Google的同事,了解他们在做的事情,这些都引起了我对自己未来职业生涯的思考。\n后来公司的HR小姐姐问我要不要extend几周来补上住院的两周。我也直接拒绝了:我已迫不及待想回杭州了。答辩完,整理完所有项目的文档与代码,并与我的host以及两位co-host还有众多小伙伴告别后,我checkout了,并于第二天回到了杭州。Google的实习到此结束。\n总结 首先感谢我的诸位家人、朋友、同事、领导、师长等对我在这个阶段的支持与照顾,非常非常感谢。\n总得来说,由于种种原因,我的Google实习经历对自己来说不打算是特别成功的一次经历。当然,这与Google的关系不大,Google是一家非常好的公司:work-life balance,卓越的同事和leader,世界级的vision,认可度很高的履历,人性化的制度、管理与福利等等。我的同事们都很优秀又nice,给了我很多帮助;我的host和co-host们更是水平极高又认真负责,教了我很多东西。只是在Google中国工作似乎不完全是我现在所期望的生活。然而,往抢救室走了一趟之后,我又有些害怕阿里的工作时间与压力。这时候的我有了挺多迷茫的地方:似乎自己期望的工作内容与work-life balance不可兼得?我又对算法岗的工作有一些concern,有心转开发,但阿里的实习offer已经转成了秋招直通终面了,换转组或者岗在阿里又都是极其忌讳的事情。我究竟该何去何从?\n秋招 在实习部分已经总结过各家公司面试的特点了,这里就不再赘述了,只以简单的流水账形式说一下自己的秋招经历与心路历程。\n百度 我的秋招从百度的广告部门的算法岗开始,是实习过了面试之后自动给我转了秋招提前批。当时还在北京实习,被要求去公司参加onsite。总共有3轮技术面试,面试官问了一些coding、机器学习基础、项目和系统设计的问题。百度的面试官感觉实力还挺不错的。印象比较深的是百度面试官真的很喜欢考核各种设计问题,尤其是二面面试官,一定要我独立地设计一个系统,还得事无巨细地给出系统每个组成部分的算法、实现细节等等,即使我已经多次声称对那块知识不熟悉。\n腾讯WXG 第二家的面试是腾讯的WXG看一看团队的推荐算法岗,同样也是要求去公司参加onsite。可能是运气不好,这次面试给我留下了非常糟糕的印象。首先,我到了office之后,安保人员不让我进入office,需要在门口站着等面试官出来接,出示任何信息都没用。其次,面试官迟迟没有出现,而面试官联系我的电话又是总机电话Orz,我没法联系他。无奈之下,我只能按照邮件里说的拨打了腾讯深圳总部的相关电话,请他们帮忙催面试官,结果他们告诉我只能给面试官发消息,让我等面试官回复。在门口大约站了半小时后,腾讯深圳总部的校招热线告诉我说面试官回消息了,说马上就来。结果这一个马上又让我等了半个小时还不见人影。因为实习最后一周还有很多东西要整理,我没有时间继续浪费下去了,就选择离开,结果快回到Google的时候接到面试官的电话问我走了吗。Orz你们是认为我会在门口站两个小时等你们吗。面试官问我还回去参加面试吗,我说那行吧,就回去继续参加面试。总得来说面试不算很难。第三面是一位漂亮的小姐姐,面试完已经6点多了。我问还有第四面吗,小姐姐一笑,问我饿了吗。此时腾讯的员工们已经在领盒饭准备吃饭了,饭菜的香味飘来,我也确实感到了饥饿,就说是的。本以为她要拿一盒盒饭给我,没想到她再次温柔一笑,说我也饿了,我先去吃饭了,你在这里等下一位面试官吧\u0026gt;_\u0026lt;。四面面试官看上去挺年轻的,技术也很强,一直问我愿不愿意秋招去北京工作,我说我申请的是上海only啊,他说我们在上海没有组Orz 后来我强调说我只接受上海,我们只能不欢而散,他们把我放回了池子里。\n阿里 第三家的面试是阿里,同样是实习offer转秋招直通车,只需要一次面试。当时我内心的第一选择是秋招加入阿里,就很认真地准备了一下。面试官春招的时候已经面过我一次了,也没问什么特别的问题,只是特别问了我的意愿,我就照实说第一选择是阿里。面试官告诉我说等HR的面试吧。后来接了Optiver的offer之后我就拒掉了阿里了\u0026gt;_\u0026lt;\nOptiver 在即将结束实习的时候,Optiver的HR小姐姐给我打了电话问我秋招愿意考虑Optiver的机会吗,因为我有实习offer,就可以直通onsite面试了。我说当然愿意啦。HR与我聊了挺久的,问了我一些对公司的concern,并一一为我解答。最后HR说那我们约你下周travel来上海面试吧,我说不用不用,下周我就在杭州了。于是HR给我订了两张杭州去上海的商务座,约了实习结束的周一去上海onsite面试。HR告诉我说到时候会有两个技术团队的team lead一起面我,一个是公司的data team,工作内容会与machine learning相关,另一个是公司的system team,工作内容主要是system programming。我可以根据自己的喜好以及给我offer的team,选择一个加入,我欣然同意了。\n说实话,此时我还没有把Optiver放到内心的第一位置,当时的想法还是与妹子一起去阿里。不过我还是很担心自己能否承受得住阿里的工作强度,就与阿里的师兄交流了一下,他当时表示说应该还是可以的。\n实习checkout之后,我迫不及待地回到了杭州。妹子向我吐槽了很久她暑假的一些没有告诉我的遭遇,并且说了一些她家里比较棘手的事情。说完她就和我提了分手,转身回去,我只能一脸懵逼地回宿舍,收拾心情准备第二天的面试。我想那些棘手的事情可能会需要比较多的钱,而之前就听说Optiver的待遇丰厚,那么这个offer一定要拿下来。于是第二天就晕乎乎地坐上了高铁,坐上高铁之后给妹子发了个消息,说等我回来我们再好好聊聊。\n我带着少有的必胜的决心进了Optiver的上海office。面试安排在下午两点左右,我到得比较早,大约是下午一点,所以HR小姐姐先和我聊了会儿天。她先和我聊了一下自己的方向选择问题,她有些疑惑我本科毕业就大跨度地从航天转了CS,现在竟然又要从算法岗转开发岗。我大概解释了一下。我们又聊了一些公司culture什么的。HR大概告诉了我几点。其中有几点特别吸引了我的关注:\n 公司注重work-life balance。例如公司不提供晚饭,不鼓励大家晚上还继续加班。 公司的福利也是相当不错。有很多年假带薪病假等,也有一些免费的餐饮、咖啡厅、大额商业保险、健身房等等。 高频交易是一个竞争激烈的行业,公司希望大家都能够self-motivated地,独当一面地去做出有impact的工作。 公司招聘宁缺毋滥,highly selective。例如我实习面的AE岗位,最后公司也没有勉强招不合适的人。 技术面试终于开始了,两位team lead进入面试房间后先很客气地与我握手并做了自我介绍。随后他们给了我一道相当复杂的系统设计的问题。在提问以确认自己理解了题目之后,我进行了一些思考,并给出了第一个设计方案。两位面试官非常细致地问了我这个方案的各个细节之处、性能分析、trade-off等等,这些问题涉及到数据结构、算法、操作系统、体系结构与计算机网络的各种知识。好在我在说出自己的解决方案之前就已经对这些细节进行了思考,所以回答得还算流利。面试官接下来让我在白板上实现自己的代码,在这个过程中同时也考察了我的抽象能力、模块设计能力等等。写完代码并证明它是bug-free之后,面试官突然狡黠一笑,问我能不能再改进这个方案。与面试官进行了大量的讨论之后,我终于成功地给出了第二版的设计方案,当我给出来的时候一位面试官非常激动地说了一句“Exactly!\u0026ldquo;然而两位面试官并不打算就这么简单地放过我,又继续问了大量的follow-up问题,直到确认我每个细节都考虑到了之后才终于流露出了满意的笑容。随后,他们让我问了一些问题。我最好奇的一个问题是,明明有一位面试官是data组的team lead,为什么并没有问我任何机器学习相关的问题,而是问了这么一个在我看来更偏system的问题。面试官告诉我说,这个问题在他们看来是problem solving ability的问题,而Optiver认为基础扎实、沟通能力出色并且有很好的problem solving ability的人可以胜任公司的任何一个IT岗位。我还问了一个问题是,他们选择optiver的最重要的原因是什么。他们告诉我是exciting work and impact。\n终于这轮面试结束了,时间大概过了两个小时左右。我休息了几分钟去上了个卫生间。这里有个小插曲,我突然收到一条来自腾讯的短信约我15分钟后面试,问我是否能参加,我回复了否。后面在Optiver head of IT面我的时候,腾讯的面试官突然打电话过来问我什么时候有空。好在Optiver面试官没有生气,还让我接了电话商量了和腾讯的面试时间。\n回到office里的时候注意到公司在为一位同事庆生,记得是一位毕业于MIT的小哥,我也过去分了点蛋糕吃。随后开始第二轮面试,第二轮的面试是Head of IT面我,也就是Optiver IT部门的老大。面试官问了一些项目相关的问题、我对一些技术的深入理解与思考等。之后就轮到我问了面试官一些问题。大约到了5点出头,面试官看了一眼时间,我估计面试官可能在思考下班的事情了,就只再问了一个问题,结束了面试。随后HR小姐姐送我离开了公司。\n毫无疑问,Optiver的面试在我参加的所有面试中最具有特点。这并不完全是说面试的难度很高或者压力很大(当然难度也确实很高),还包括面试的形式、内容、考察的能力等等。通过面试,需要具有扎实的基础、严谨的思维、优秀的沟通能力、出色的抽象问题并解决问题的能力等等。更重要的是,在与面试官讨论设计方案时,我可以说是首次在面试中感受到了exciting的感觉。\n面试的第二天下午,我接到了HR小姐姐的电话,通知我通过了两个部门的面试,并问我要选择哪一个部门。根据我的Profile,公司似乎更希望我去做ML相关的项目,但是我坚持要了System部门的offer。HR小姐姐告诉我如果是接System的offer的话,那第二天上午还需要再接受一场电话面试,考察一些CS基础,我欣然同意。\n电面如期而至,这次是更加细致地考察了CS的基础知识。又过了一天,HR的offer call到了,薪酬比其他公司开的要高不少。我后来才知道,这是Optiver秋招唯一的一个System Developer的offer。HR给了我一些时间考虑Offer的选择,并建议我与尽量多的朋友交流。\n小小的更新:本人已经从Optiver离职了,大家不用再找我内推啦Orz,谢谢大家~~\n腾讯数据库内核 从Optiver onsite面试回来后,我发现了妹子的事情似乎比自己想象中更加复杂一些。在了解到了更多的真相之后,我的第一选择就不再是阿里了。我去喝了点酒\u0026gt;_\u0026lt; 也是过去几年内第一次喝酒,然后就引发了酒精过敏。过敏当天腾讯的电面过来了。为了避免上次被Location不合适的部门打捞的问题,这次特地找人内推了上海的数据库内核团队,并且投递的是开发岗。面试官主要问了一些操作系统与数据结构的知识,还问了一点算法题和计算机网络。由于我简历上都是机器学习的项目,面试官就没有问,面试也很快就结束了。第二天大团队在深圳的leader面我,考核范围与之前相同,但问了很多Linux系统相关的东西。面完问我愿意去深圳吗,我说我肯定不考虑上海/杭州以外的office,面试官说那行,给你上海的offer吧。10分钟后是腾讯的HR面,面完告诉我说等着接收预录取的邮件。总得来说这次面试的体验挺不错的,面试官们水平都不错,也很和气,HR也非常和气。\n过了两周左右,腾讯给我开了价格,让我稍微有些惊讶地开了个很高的价格。据我所知,国内的公司向来非常看重项目经历与岗位匹配度,因此我有点惊讶像我这样背景与岗位完全不匹配的候选人竟然能拿到这样的offer。看来腾讯的面试官们对我的潜力还挺看好的\u0026gt;_\u0026lt;不过我当时已经接了Optiver的offer了,因此也就直接拒绝了。不过让我有些没想到的是之后腾讯又联系了我好几次(4次以上?),非常有诚意,也感谢各位腾讯面试官的欣赏。其实这个offer也是一个挺不错的选择,工作内容有意思又核心,待遇也挺高,部门加班也不算多,如果没有Optiver的offer,我可能也会考虑这个offer的。\nGoogle 面完腾讯之后我又作死地去喝了一次酒\u0026gt;_\u0026lt;这次终于引起了相当严重的酒精过敏问题,让我一直发烧,连续几天都睡不了觉。喝完酒的第二天刚好是中秋节,回了趟家,并且因为不敢让父母知道自己喝酒的事情,没有去医院解决酒精过敏问题,只好终日在床上躺着。\nGoogle的转正面试在中秋节结束后的第一天。很遗憾我在去上海前并没能成功地睡着。因此大概是72小时没睡着地去了上海。在上海的时候碰到了一起来面试的NLP大佬工友F,与F一块去吃饭的时候进行了一些关于text style transfer的学术讨论,感觉挺有意思。也许是因为与人讨论学术问题带来的愉悦感,也许只是因为酒精过敏终于好转了些,当天晚上终于成功地睡着了一会儿\u0026gt;_\u0026lt;\n第二天到了Google的office进行面试。第一位面试官是毕业于Stanford的资深Googler,问了比较多的算法题。第二面是一位相对年轻一些的Googler,也考了两道算法题。虽然因为连续多天的缺乏睡眠而有些疲惫,但我还是顺利地把算法都写了出来。面完之后HR小姐姐问我想不想去国外的Office,我说我只考虑国内的Office\u0026gt;_\u0026lt;\nOffer选择 在与许多老师、朋友沟通后,我最终做出了选择Optiver上海的决定。这里引用一位浙大学长求职经历帖的话:”如果你跟我足够熟的话,私下问我我会告诉你的。或者你就当我是选择了给钱给得多的offer就好了。“\n这里简单谈谈我从算法岗转到开发岗的理由。这些理由在前文中也多多少少地提到了,此处也就不再赘述。其中最大的一个concern就是我对算法岗的工作内容有些不感兴趣。我担心自己对Optiver的data scientist岗位也不感兴趣,这才坚持选择了System Developer。不过公司在知道我的concern之后表示,我可以到公司之后看一看data scientist在做的事情,如果感兴趣的话也可以随时转岗,甚至两个岗位的项目一起做\u0026gt;_\u0026lt; 另一方面,我也觉得自己的工程能力还是太弱了一些,也想借着从事System Developer的机会把自己的工程能力培养起来。\n确认选择Optiver之后,我的秋招到此算是结束了。虽然我后面还面了几家公司,但主要也是奔着与面试官交流去的。\n一些学习资料推荐 这里简单推荐一些我看过的(有些看完了,有些看了部分)适合自学的学习资料,以供参考。因为我太懒了,所以覆盖的内容不全面,自学CS的同学也可以参考\rMIT的课表看看要学哪些内容。我个人推荐学习从一门导论课程开始,然后是6.null,然后是Berkeley的CS61系列。之后学习算法课程、操作系统课程、组成原理/体系结构课程与计算机网络课程。再之后,我相信各位已有足够的判断力选择自己感兴趣或者是需要学习的课程了。再次强调,上课不做题,等于白上课。\n数学 \rMIT 18.01,\rMIT 18.02:微积分。\n\rMIT 18.06:线性代数\n\rHarvard Stat110:概率论。印象深刻的有一句话,\u0026ldquo;Random variable is a function\u0026rdquo;。\n\rMIT 6.042J:Mathematics for Computer Science. 在我看来最有趣的数学课,如果TA能少上几节课就好了:(\nCS导论 \rMIT 6.001:Introduction to Computer Science and Programming in Python\n\rHarvard CS50: This is CS50!一门很好的导论课程,覆盖的范围非常之广,且内容与MIT的导论课程颇为互补。\nCS实用课程 \rMIT 6.null: CS实用工具集合介绍。强烈推荐早点看这门课,非常实用。\r这里有我之前写的一篇简介文章。\n数据结构与算法 \rMIT 6.006: Introduction to Algorithms,教材是CLRS。\n\rBerkeley CS61系列: 其实我没上过这门课,因为当年入门CS的时候这门课似乎还没录像?现在有公开的录像了,而且口碑也非常好。\n\rMIT 6.046: Design and Analysis of Algorithms. 进阶版,但其实前面6.006就已经内容不少了。\nStanford也有几门有点老但是也非常好的相关课程。不过我觉得上面这些课程内容更新,质量也不逊色,各位就看自己喜好来挑选吧。\n算法笔记:胡凡著。一位浙大学长写的使用c++实现基础数据结构与算法的书,写得挺清晰的,里面的代码也很实用。我现在面试之前还会翻一下这本书上一些算法的实现。\n操作系统 \rCMU 15-213: 教材是CSAPP。\n\rBerkeley CS162:youtube和B站上都有2019Spring的视频。professor上课上得很好,hw和lab也都很给力。美中不足的是hw的autograder没有开放出来,但好在lab有提供test case。\n\rMIT 6.824: 分布式系统。不久前终于感人地放出视频了。\n\rMIT 6.S081/6.828:2020也放出视频啦~\nModern Operating System\n组成原理/体系结构 \rCMU 15-213:教材是CSAPP。\n\rMIT 6.004:Computer Structure. 偏硬件,老师讲得很好。\nMHRD: From NAND to CPU. Steam上一款有趣的小游戏,从NAND开始搭建各种逻辑电路,最后制作出一款简易的CPU。\r这里有我之前写的一篇简介文章。\n\rCMU Computer Architecture: 无论是在CMU还是ETH,Onur每年都会将这门课的录像和课程资源都公开,这是怎样的一种情怀Orz 19年的录像中Slide不是很清晰,可以自己使用双屏配合一下;或者观看18年的录像。\nComputer Architecture: a Quantitative Approach\n计算机网络 \rStanford CS144: 这门课多年前有一个mooc版本,后来不知道为啥被撤了,但是授课视频还是流传了出来。我个人不是很适应这门课的授课视频,看的有点犯困,但是课程的Lab还是出得很好的。\nComputer Network: a Top Down Approach\n编程语言 \rBerkeley CS61系列: 系列的几门课使用的是不同的语言,也都有很不错的配套作业,又基本都有视频公开,因此蛮推荐使用这个系列的课程来学编程语言的。\n\rStanford CS41: Python Language Programming. 可惜没有视频,作业挺有意思的。其实我觉得学语言比较好的一种方式就是学了语法之后做一些练手的项目、作业,这样会掌握得比较快。\n\rStanford CS106L: C++ Language Programming. 前文也介绍过了,我觉得那本Full Course Reader写得真的很好,推荐一下~\n还有一些领域内很知名的书,这里就不再专门推荐啦,这些课程里也会有介绍/推荐。这里再啰嗦一句,对大多数人来说,往往只需要学会某种编程语言中20%不到的常用特性,而这20%的常用特性往往占了实际使用这门编程语言中的90%。所以我不是很建议一开始弄本厚厚大大的书看,那样又吃力又缺少反馈,而且可能会花大量精力在自己根本用不到的地方。我其他的编程语言似乎都是用官方tutorial入门的,这里也就不推荐啦。\n软件工程 \rMIT 6.031: Software Construction. 算是介绍软件工程的一些知识吧,包括如何写出更鲁棒的代码等等。有很好的在线阅读资料,但可惜没有公开的视频。\n\rMIT 6.172: Performance Engineering of Software Systems. 讲的是如何优化程序的性能,非常有趣的一门课。\n机器学习 浙大的同学来蹭蔡登老师的课\u0026gt;_\u0026lt;\n\rCoursera Andrew NG的Machine Learning:机器学习之路从这里开始。\n\rStanford CS229:Machine Learning. Youtube上有视频。\n\rCMU 15-701:Intro to Machine Learning. 就找到这么一年有视频的。\n\rCoursera PGM:知名课程。\n\rCMU 15-708:Probabilistic Graphical Model 我只看过两个Lecture。\n下面有几本书,不过还是推荐和课程一起看。\nPattern Classification (PC):比较老的书了,但是内容还是很有意义。\nElements of Statistical Learning:insight很多。\nPattern Recognition and Machine Learning (PRML)\nMachine Learning: a Probabilistic Approach (MLAPP)\nInformation Theory, Inference, and Learning:可惜David J. C. MacKay英年早逝。\n深度学习 \rStanford CS231n:Deep learning for CV. 推荐深度学习从这里开始\n\rStanford CS224n:Deep learning for NLP.\n\rBerkeley CS285:Deep RL. 我只挑着看了几个Lecture,小伙伴说好。\n\rDeep Learning Book:花书。\n尾声 本来这篇的主要目的是总结一些自己的面试心得供大家参考,后来又加入了自己自学CS历程的介绍、心得等,又介绍了自己找工作的历程和思考,反而使得本文的后半部分显得有些喧宾夺主了\u0026gt;_\u0026lt; 此时突然想到一位师兄博客里讨论的话题:“如果能回到十年前,你会对过去的自己说什么?”如果我能回到开始CS的旅程之前,我也许会对过去的自己说:“你会经历一段难以置信、跌宕起伏的旅程。你会遇到很多志同道合的好友,以及你十分尊敬的师长。虽然你也会走很多弯路,碰到很多困难与挫折,但是不要担心,你一直兢兢业业、勤勉刻苦,你的努力最终都会得到回报。”\n总之,我希望这篇文章里所写的自己的一些经历、思考、心得、总结等能对后来者起到一些帮助。如果你在阅读了这篇文章之后觉得有一些收获,那本文的目的也就达到了。\n各位同学,我们江湖上见。\n","date":1582792977,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1582792977,"objectID":"d9f150046442053290706ea01c6c4274","permalink":"https://conanhujinming.github.io/post/tips_for_interview/","publishdate":"2020-02-27T16:42:57+08:00","relpermalink":"/post/tips_for_interview/","section":"post","summary":"分享19年春/秋招拿下10来个算法/开发offer的面试经历和心得;本科航天转专业自学CS的心得;推荐自学CS的学习资料","tags":["面试","自学CS","秋招"],"title":"19CS小硕校招面试心得与自学CS经验及找工作分享","type":"post"}]