说说找工作这些事儿(未完)

      本来想工作的事情落定之后,趁着切身体验写一些心得体会,给师弟师妹做一个参考,毕竟一些经验教训还是具有指导性意义的,结果一拖再拖拖到现在。现在孙总也要开始准备找工作了,说让我写个roadMap。既然面试题已经忘得七七八八,那就写点面试准备工作和面试时的事情吧。

无聊并且枯燥的准备工作

      如果你像我一样,是一个缺乏任何ACM和编程大赛经验,无任何实习经验和大型项目经验,也没有NB论文和开源项目经验的——三无人员(It’s a sad story,我也不想的是不是。。。),那么恭喜你,本文非常适合你,你将有a lot of 事情要做。作为学渣,和ACM大牛是完全不能比的,大牛靠以前的积累面试时就跟砍瓜切菜似的,但对于常人来说,两三个月左右的突击则是非常非常非常必要的 。

      由于本科和研究生阶段都缺乏工程经验,所以基本上我投的所有工作岗位全是机器学习算法岗(求别黑,都是泪…T_T)。岗位的不同准备工作没有太大的不同,只不过在专业领域上会有些不同。复习内容主要包含四块:基础算法、基础知识、专业领域和科研工程项目。本文专业领域tips适用于想投身于机器学习方向但又缺乏项目经验的同学,以下针对不同的部分详述。

基础算法

      主要书籍:

      剑指Offer(即何海涛100题):最简单最基础的面试题,涵盖了许多国内互联网公司喜欢出的题。

      编程之美:倾向于技巧性算法题,可学习拓宽解题思路。

      Coding Interview(即CareerCup Top 150Questions):针对国外公司面试,一部分是基础知识,一部分是算法题。

      编程珠玑:一些算法设计和调优的tips,短小精悍的东西,曾被问到过随机算法的设计,上面看到过。

      做题网站:

      Leetcode:上面有150道题,部分题和前面的书籍里的算法题有重复,基本以该网站练习写算法为主。

--------------------

      以上是我看过和做过的,反正不停做,做到每一题都会基本就差不多了。由于本人记性不太好,做了后面的忘了前面的,复习前面的忘了后面的。。。所以最后剑指offer做了两遍,leetcode刷了1.5遍,并对每一道题做好笔记,有空就拉出来复习复习……据说去谷歌的一姐leetcode刷了两三遍,去美帝MS的大神leetcode刷了五遍。你我皆凡人,题海战术妥妥的。。。

      如果你还有多余的时间,那就看看剩下这些

      Codility: 一般每月一题,比较有难度

      Wikioi:天梯难度。。

      Mitbbs面试题 和July整理的面试题

--------------------

      算法题都有一定的类型,主要分字符串链表栈/队列数组(二分查找以及各种变种、排序、查找等)、递树相关、图相关(dfs,bfs)、贪心、动态规划、排序等。(红色是相对而言更常见更基础的算法)

      此外还有一种海量数据题,看看July的海量数据题就行了,无非hash+分治,多机器归并解决,再还有bloom filter之类的。

基础知识

      基础知识包含了语言和考研四门大课。由于本人研究生阶段做的全是图像处理方向,语言用的是C++和Matlab,完了也有理由拒绝除数据结构之外的任何有关操作系统、计算机网络和硬件方面的知识点考察。所以,基本上对于操作系统、网络和硬件本人都没复习,事实上投算法岗之后确实也极少有面试官问我这方面的知识点。(操作系统方面最好还是做一些常识性复习,cache分配,内存调度之类的)。其他人应当根据自己的情况相应做调整。非做C/C++方向的可以跳过这块。(BTW楼主对于数据库神马的完全放弃了)

      主要书籍:

      C++ Primer:做C++都这么多年了,不看看说不过去是不。

      C陷阱与缺陷:补充性质的,很快读完。

      深度探索C++对象模型:看名字就知道了,读了对对象模型的了解更加深入,但是我就看了前四章都不到,后面读得云里雾里。

      C和指针:对指针的了解更加深入,推荐。

      STL源码剖析:不了解STL是说不过去的,没时间的话不用全读抓重点忽略些细节即可(我就看了前面四五章)。

      Effective C++:性能的调优和算法设计的经验之谈,对面试题的帮助不是很直接,但是读一读应该也挺有收获的。

      Python基础教程:不用这个的就不用看了。。

--------------------

      以上是我看过所有关于编程语言的书籍 ,如果还有时间可以看看《Thinking in C++》。

--------------------

      关于数据结构,我只是拿本科时候的一些复习资料看了看,回忆起来还比较快。

      《算法导论》:忒厚,我就看了一两章。有时间以及有毅力的同学可以慢慢啃,吃透了受益无穷。

机器学习算法

      机器学习大神可自动跳过以下这段或者来补充补充,我也可以学习观摩。。。

      由于自己基本不懂NLP和数据挖掘,然后…实验室里做的全是图像处理方面的项目,so这方面非常被动…最后只能把所有接触过的模型全部仔细地梳理了一遍。以下:

      SVMEM/GMM,PCAK-means,层次聚类,Adaboost,决策树,分类回归树,线性回归,逻辑回归,KNN,KD-Tree,朴素贝叶斯,LDA(两个LDA你看你自己需要看哪个吧)以及一些最优化方法(优化方法倒是没人问起过)。(红色为重点),另外由于自己兴趣方面,自己学习了一些推荐算法,这里按下不表了。

      如果之前做得全是机器学习相关的项目,那么在这方面竞争就很有优势,只需要准备一些基础的模型以及详细地准备一下自己所有项目中用到的主要算法模型就ok了(避免被面试官给问死了,你要说你只会使用但不太懂原理,那就太减分了)。基本上在面试过程中对面试官有意识地做一下引导,一般面试官都会乐意谈谈你的项目中所使用的模型算法的。

      主要书籍&视频:

      斯坦福Andrew NG的公开课:不好意思我是看这个入门的,通俗易懂啊。。。

      《统计学习方法》:李航博士的,前因后果清晰,公式详尽,值得推荐。(里面的CRF和HMM看不下去了。。。)

      《Machine Learning in Action》:所有代码都抄了跑了一遍,增加对一些基础算法的细节了解。

      《数学之美》:涨了很多姿势,包括曾被问到的拼音输入法的设计,在里面见过类似的。

--------------------

      还有几本比较好的《Pattern Recognition and Machine Learning》蛮不错的,嫌英文看的慢就看《模式分类》吧,反正最后我都没来得及看。。。

      PS:仔细地梳理指的是,模型的公式推导、适用范围、缺陷和优点都要弄清楚。另外现在Deep Learning这么火,有空研究一下忽悠一下总是好的,面试的时候适可而止就好了,别吹破了。

科研工程项目

      计算机专业学生面试的硬通货,这玩意儿越牛逼越好。如果像我一样确实,大多做得都是Demo性质的东西(缺乏工程性……都是泪T_T),至少要包装出几个别人听起来觉得好像的确是要花不少心思去做的项目。不一定要非常困难或者非常牛逼,但是至少从你嘴里说出来让人觉得做起来不容易,中间存在很多困难但都被你一一克服的感觉。


      再说一说准备时间,校招一般最早八月初开始,所以你往前推三四个月开始循序渐进地进入复习状态就差不多了,中间没有其他事情打扰是为最理想的。我比较悲剧,课题从12年做到13年,次年3、4月份写paper,5月份论文投完马上做新项目调研,6月份没调研完项目就夭折了,马不停蹄开始做新项目的Demo,做到7月底才搞完,所以我基本上都是从12年国庆之后开始边干活边复习,虽然战线长,但是实际时间不多以及效率也不高,很多东西没来得及看。如果你的未来状态不排除存在像我这种情况的,那还是提早准备为好。另外,每年四五月份是实习生招聘期,有的公司可能会有绿色通道(即去年阿里可以凭实习生offer直接参加正式校招终面),攒攒面试经验也是极好的。

--------------------

更加枯燥无聊的面试

说面试枯燥无聊是没错的,但是中间去东京面试的项目还蛮有意思的。有空更新再写一下,可供后来者参考。



      最后的最后,预祝每一届师弟师妹找工作顺利。大家要坚信,总会有一家公司瞎了眼收了自己的!


你可能感兴趣的:(面试算法)