关于CS找实习的不完整经验

来源:互联网 发布:端口23连接失败 解决 编辑:程序博客网 时间:2024/04/30 16:03

转:http://bbs.byr.cn/#!article/GoAbroad/309095

逛飞版好久了,好像很少看到版里有说关于来美之后找实习的事情。现在大多数14fall的同学应该搞定了出国前的手续了吧,应该在享受大学时光最轻松最没烦恼的时候了。也不知道现在说这些算不算泼冷水,总之还是讲讲自己这半年来找实习的一些感想吧。 

  
lz来之前也以为这事儿好像并没那么难,动不动听到“***学长/学姐去**实习”的消息,在自己脑子里面营造了一些假相(其实也是因为自己信息比较闭塞...)。来这之后真是收了N个拒信,更多的是默拒。真的是有一段时间都麻木了,不自主地搜回国的机票搜了N次,哆哆嗦嗦地发现真是贵...在学期结束前的一天人家给了我一个去处,来自于这辈子拿到的唯一一个面试... 
  
前言:完全是给普通同学的经验,有很丰富的项目经验或者很强算法能力的筒子们可以忽略大部分内容,并且欢迎且希望诸位能给大家一些工程能力/算法能力上提高的建议 :) 
  
  
1.怎么准备? 
简单来说,《cracking the coding interview》这书最好能够比较熟,上面的题目算是比较基础的。但是真有公司喜欢出原题(比如说lz拿到的唯一一个面试电面+onsite四道题里面三题来自于ctci这本书)。至于重点章节,结合了一些学长的经验,感觉上:有关树的算法/递归(DP)/字符串操作/moderate,hard的题目。lz是直接看的一个博客,自己想想先然后看看博主的解法。注意:博主的解法并不一定是最优的。附下博客的地址:http://hawstein.com/posts/ctci-solutions-contents.html 
  
对ctci这书比较熟之后(什么叫熟?至少听到原题脑子里比较快有反应吧我觉得),同学们就可以投入leetcode的海洋了。leetcode让我印象最深的就是培养一种对于corner case的敏感度,记得我第一次上手的时候提交了50次都没一个ac。。。据说FB全职的面试是需要上来就撸出一记bug-free code的,反正我估计我这辈子都做不到了。。。有些同学可能会问,leetcode上面题目不会怎么办?其实直接Google题目的名字就好了。 
还有一个算法面试的网站也挺好的,不知道国内能不能上:http://www.geeksforgeeks.org/ 
  
据说全职面试可能涉及一些design pattern问题?是一个在美帝intel干了20年的叔叔和我说的,真实性不考。推荐下《Headfirst design pattern》这本书。讲的不深,但是的确让lz对于OOP的理解上升了一个档次。重点的模式:工厂模式,单件模式。其他的希望有有经验的学长学姐能够补充补充。 
  
还有就是系统设计的题目。网上看有一些文章说会问,那天问一个去Google的学长说他全职面的时候就没问?目测是可能跟面的方向有关。这里有一篇设计题的总结(反正我没细细看过嘿嘿...):http://blog.csdn.net/sigh1988/article/details/9790337 
  
对于刷题,个人感触最深的是:面试官要的不仅仅是一个解法或者答案,刷题的时候问问自己,是不是有更优的解法和最优的解法?空间和时间复杂度最好自己心里比较有数,比如说BFS和DFS的,可能有些同学一下子脑子里面就没有印象。还有就是一定要注意一些比较普遍的corner case,这个你leetcode做多了自然就会熟悉不少。 
  
个人对于算法还算比较感兴趣,所以刷题目的时候不是很累(其实也没刷多少lzsb呵呵呵呵)。“刷题”这个词还是太过功利性了,把它当成基本功的一部分比较好。 
  
  
2.什么时候开始投简历比较好? 
当初lz也天真地以为,我第一个学期先好好准备吧然后第二个学期好好找。这里lz犯了两个错误:1.凭什么以为自己第一个学期能好好刷题?2.凭什么以为自己第二个学期能够好好找? 
  
但是从地里看来的信息似乎表明了就是四个字:越早越好。其实想想也是有道理的:1.早了坑多;2.早了题目简单些。据说3月份的时候Amazon/Google/facebook之类的公司基本上都没坑了。所以综合来说,第一个学期的10月-12月份就开始投简历吧。刷题什么的早做准备,不要把大部分时间都花在迷茫上面。 
  
  
3.什么是“好好找”? 
第一就是个人精神上的积极乐观。。。积极乐观能带来的东西太多了:1.能够平淡看待拒信,这个其实真的再正常不过了;2.能将找实习和自己的学习分开,毕竟学业也是自己来美重要的一部分,不要让找实习影响到你的学习。更何况大多数情况下的“影响”结果会是你实习没找好,学业也没学好。 
  
第二就是怎么投?最好能够找内推,内推无论在什么时候都挺有用的(Amazon分分钟出来打我脸),例如微软这样的据说你不内推就没人鸟你。Amazon这个公司非常奇葩,不表。有同学会问,我不认识什么学长学姐怎么办?其实地里还有mitbbs里面都有不少人内推。 
至于求人内推,同学们真的要注意注意再注意不要出去丢人,毕竟要是真的推你成功了我觉得真的算是帮了一个大忙,特别是那些愿意提供帮助的陌生人(虽说推荐成功了是有一些bonus的)。这里附一个地里的帖子吧:http://www.1point3acres.com/bbs/thread-83651-1-1.html 
还有就是如果真的想去追求一个实习机会,就多搜寻信息多投一些简历。事实上,你的简历/面试比能够达到10:1我觉得就已经很不错了。 
  
第三就是怎么去克服自己?或者说怎么去克服中国人天性上的弱点(其实某种程度上来说也称不上弱点)?在这里我觉得中国人有时候就是太内敛了太循规蹈矩了,其实有些你觉得没必要的或者不体面的事情你积极地去做在美国是受欢迎的。比如说,积极主动地在LinkedIn上面去联系HR,积极主动地去寻求内推,积极主动地向同行人分享交流信息,积极主动地向前辈学长学姐请教经验。不要觉得什么都无所谓,不要觉得机会什么的是理所当然。 
对于主动去搜寻信息这点真是深有体会,来之前以为美帝的能去的公司其实没多少家。那些在一般中国学生脑子里面的所谓big name,其实只占了一小部分。还有一些你都不相信可以投的公司,实在是太多太多太多了。美帝各方面NB的公司也实在是太多太多太多了,只是很多中国的同学没去主动了解罢了。怎么去了解?LinkedIn里面提供的职位,地里,问学长学姐们吧。 
还有就是不要把眼光就放在那些big name里面。可以关注一下那些你甚至不知道名字的小公司做的事情,如果感兴趣就勇敢去投简历,个人觉得其实获得的提高也很大,毕竟产品级应用的开发对于一般的同学能够接触到的还是很少的。更何况那些“小公司”其实可能并不小,一不小心上市了。。。呃。。。 
  
  
4.GPA对于找实习找工作重不重要? 
a.重要:银行,Oracle 
b.不重要:除Oracle以外的技术公司 
  
以上略有戏言的意味,但是总而言之对于大部分人来说就是---不重要。尤其对于技术公司来说。 
但是怎么说成绩要对得起自己对得起父母跨洋打来的美元吧。。。做到这两点lz可以肯定地说:绝对够了。 
  
  
5.如果没找到实习怎么办? 
这个问题困扰了lz很久。其实也是一个很有意义的问题。 
这里讲讲几种选择: 
(a)刷题。花一个暑假好好刷题是一种方案,毕竟能够帮你搞定面试里大部分的技术问题。当然在刷题之余做一些自己感兴趣的项目,我觉得也很有意思。 
  
(b)去实验室。去实验室虽然很有可能是unpaid,但是其实获得的收益你也许会意想不到。比如说,lz了解到13spring的两个学长就是暑假在实验室工作然后被导师推去了facebook实习,还有在系统组打工的某学长被推去了vmware。不得不提lzNB的户主,暑假没找到实习在实验室搞NLP最后去了Google的NLP组,还有lz一门课的印度助教和我讲经验的时候也是说他在实验室"do some useful research"然后被导师推去了微软。 
所以说lz觉得有时候你在实验室里学到的可能比在公司里实习获得的更多。 
  
(c)回国实习。还是积极地去尝试,毕竟国内现在的互联网企业NB的也很多。你肯定能在实习过程中获得收益。 
  
不得不提的是实习的坑是比全职工作的坑要少的(甚至少的多),所以在美帝找CS的实习其实是挺有难度的一件事情。 
所以就算没找到实习也不要觉得绝望,抓紧时间去提高自己,实力才是王道。 
  
  
6.工程or理论? 
这也是lz一直很困扰的问题。 
  
许多人喜欢去追一些热门的东西,比如说machine learning,deep learning,data mining等等。现在许多学校又有了一个新项目data science,看上去很诱人的样子。但是实际上从lz个人的了解来看要真正想去将学到的知识能够做到理论上的创新和工程上的转化,你所要做的要比网上公开课里面要求的要多不少。就拿data science来说,lz感觉的就是一般CS科班出来的学生在数学上的造诣远远达不到要求,而在做data science的一些人往往都是cs或者统计phd出身在搞。lz身边有同学选了Machine Learning和Deep Learning的理论课,其结果就是在陪phd读书。 
就拿大数据来说,数据处理/分布式框架/数据库/云计算什么的每一个基本上都够人喝一壶了。要学的东西实在太多太多,要啃任何一个都要花巨大的时间。 
所以在这些方面有想法的同学可能需要做的就是多补补一些数学上的知识,学习一些dm/ml/nlp的工具包,做到工程上的转化还是挺重要的。 
这点对于一些诸如Node.js/django/agularJS等等技术上的热门同样适用。找一个自己感兴趣的着力点,做一些时间允许范围内的小工程,我觉得就挺不错的了。 
还有想说的就是美帝的phd能力之强实在让人叹为观止,理论工程俱佳。 
  
还有就是一些编程语言上的细节问题。lz问了一个学长,学长说到时候公司会有具体要求的,现在对于语言的要求没那么高。目测意思就是目前就不用太过考虑精通语言的问题,而是打好基本功多去了解编程思想上的一些东西,做到能够快速学习一门新的语言我觉得就很好了。 
  
当然从找工作的角度来说,面试的过程上有个人的兴趣和强项这一点还是挺重要的。它一部分上决定了你在全职工作时候的分组,还有就是让你在学习的过程中不至于无的放矢。 
  
这个问题我的感想可能并不是很正确,还是希望有经验的前辈能出来说说。 
  
  
7.一些其他 
想说说关于面试。就像之前说的,面试的过程中其实面试官关注的可能不是要你一个答案,甚至如果你见过这道面试题他会要求你告诉他。面试官注重的是你的想法,你对于细节和效率的关注。比如说,lz面试中的一道问题就是“你的项目中有没有什么你尝试去提高效率的经历”。 
如果遇到困难或者想法上有错误,其实这个在有些时候并没什么大不了的,要勇敢地去与面试官交流(不得不说lz遇到的面试官实在是太nice了),体现你对于这个问题的思考过程。注意,你的面试官很有可能在以后会是的你的同事/上司,你和他的面试过程的结果其实也基于他有没有意愿在今后与你一起工作。 
  
然后据说美帝技术公司也是有性别歧视的,不过歧视的是男性。。。lz来这遇到的一个每天关注北美省钱快报6小时所有项目都是bf做的学姐最后去了Amazonemb9,其他例子就不细说了。。。 
  
  
  
结尾: 
文章可能略长也必有疏漏。只是想说一些自己的感想和经验。也希望能够抛砖引玉,毕竟能从大牛身上学到的实在太多太多。实在想吐槽的同学还望客气点,毕竟lz写这文章目的完全不在于和人争什么高下。 
lz来美帝合租的是北邮人,上课几个助教是北邮人,面试问面经是北邮人。所以还是希望大家发扬分享精神,学会抱团,所得也必然不薄。这里先一并谢过了。 
特别是在此过程中无私给予我指导和经验的几个北邮学长(不要问我为什么没有学姐...),万分感激。祝你们工作顺利! 
0 0