我自己也有过一些面试经历,面试官非常不喜欢候选人在写代码的时候与他交流,甚至会在你写代码的时候自己去做别的事情 :( 这时候你最好就乖乖闭嘴,把代码写出来即可:) 因此,也希望各位因时制宜,因地制宜,结合实际情况来进行面试。最后祝大家都能有满意的offer~
番外篇:找工作的流水账与心路历程
本文的这一部分将以流水账的形式简单讲讲学CS这几年来的一些经历,以及找工作的流水账与心路历程。
背景介绍与CS学习历程
我总结的学习方式
在学习CS初期我走了很多弯路,相信了一些不合理(或至少是不适合我)的所谓“编程入门指南”。之后经过自己的摸索,到现在总结出了一套适合自己的学习方案。这里首先给出我的学习方案以供参考。使用这个学习方案还需要不错的英语水平,以后我有时间的话也许也会写一下自己学习英语的经验与心得。
一个CS领域的学习过程大致可以分为以下三个阶段。当然,有的时候不同阶段是可以迭代地进行,例如开始科研之后发现自己还缺少了某些基础知识,那可以再进行基础知识的学习。同时,在学习中,很重要的一个指导思想是要获得监督信息与正反馈。三个阶段如下:
如果想学某门课程知识,那就找国外名校(主要是MIT/Stanford/CMU/Berkeley)有课程录像的对应课程,假装自己真的在上课一般地按照课程安排上课、看阅读材料并完成作业。完成作业是极其重要的,因为在这个过程中你会获得大量的监督信息,来指导你发现自己哪些地方学得不扎实;而如果仅仅看视频与阅读材料的话,常常会产生自己已经学懂了的错觉。另一方面,许多编程的作业完成之后也可以带来成就感与正反馈,支持着自己的学习动力。
之后,找自己感兴趣的领域。根据是做开发还是做算法,做研究还是做工程,第二阶段可以分成两种不同的方式。
a) 做工程:找一些适合练手的项目,自己实现与重构,并对照他人的实现方案。实际上如果第一阶段认真完成了好课程的作业的话,那么已经算是完成了很多练手的项目了。
b) 做科研:了解这个领域的经典方法与最新方法,并复现这些方法,做实验比较结果,同时以论文的要求写报告分析结果,这个其实基本上就是国外很多课的project。复现好的论文是极其重要的,因为复现可以获得监督信息。