career复习

复习计划:
    算法值得单独拿出来说一说,这倒也不是说在工作中能有多大的作用,只是很多公司都拿这个来作为区分标准。毕竟其他可能大家都学过,可能区分度并不大。经常听说某人成绩一般,实验室项目一般,实习一般,但是看了半年算法就去了牛公司的故事。而且做算法题也有能锻炼一些编程技巧,这种一百行以内的代码正是笔试面试喜欢问的。可以将算法题做一个简单分类:adHoc类,也就是没有太难的算法,主要考察分析、抽象问题的能力,需要把一些稀奇古怪的场景用计算机语言描述出来并解决题目要求的问题。数据结构类,需要用一些数据结构课程上学的东西,本质也是对问题的建模,用到的结构常见的也就是线性结构和树形结构,一些高级的数据结构也偶尔出现。动态规划类,在笔试题里算比较难的了,面试时候倒是时常会遇到。主要还是要培养思维方法,掌握一些书上的经典题目是必须的。贪心和回溯在算法题里很多,但是找工作的时候几乎没遇到过,也不知道是为什么。如果有比较多的时间《算法导论》(CLRS)是必看的,就算不为找工作,仔细研读一遍也绝对对得起你花的时间,它的课后题几乎都是经典问题,能熟练做出它的课后题的话,水平就很不错了。还有一些面试题总结类的,比如《编程之美》,列出的一些题也算常见问题,看上两遍做到心里有数。此外还有经验总结型的如《编程珠玑》、《代码之美》都是一些有经验的大师写得,看一下也会很有收获。如果水平再高,可以看刘汝佳写的《算法艺术与信息学竞赛》,反正我到现在也没怎么看懂。看了这么多书,还得花时间做点题,北大的POJ就是很好的地方,题库很大,而且有以前很多牛人总结的分类。个人认为adHoc类、数据结构类能做中等偏难的题,动态规划类能做中等的题就不错了,悟性好的当然挑战难题更好。也看到有的牛人推荐NOI集训队的论文集,只是我没找到。从数量上看,如果决定做题,一个月刷100题应该是可以达到的。当然数量也不是绝对,找一些水题练手,然后每类做10到20题是必要的。如果时间实在不多30到50题应该也能有作用。就我而言,我从06年的暑假就开始做题,当时也没什么目的性,专找简单题做,研究生期间也做了一些,到找工作前这几个月又找针对性的题做了一些,虽然最后数目不小,但其实水题为主。
    写了这么长主要因为这个是准备的重点,首先是这些都需要个积累的过程,除非悟性很高的,不然做题的感觉很难速成。其次,如果读书期间课都上的很认真,那么其他课程都是一个复习重点的过程,每门课有2天到3天时间也就差多了。做题完全可以提早很长时间就开始准备,而且做题的过程充满乐趣又很能感受到自己的提高,说不定你会欲罢不能呢。
    就课程来说,除了上面的算法外,重点要复习的自然是操作系统和网络。这两门都可以从理论知识和实际应用角度来准备。理论知识自然就是经典教材上写的那些,以操作系统来说,进程管理(进程、线程、进程间通讯、同步与死锁)、存储管理(内存、外存、分段分页、缓存的置换)、IO系统自然都是要复习到的。总得来说找来本科教材,本科课件看几遍应该就够了,网络也是类似。除了理论还要有实际应用,对于操作系统,要熟悉起码一种主流操作系统的操作,以及一些系统编程。比如面试常被问进程间通信,如果能熟练的答出windows和linux进程间通信的方法,应该就是很好的表现了。对于网络,除了理论还能熟悉TCP/IP协议的细节当然好,但不是谁都有心思去看《TCP/IP详解》的,顺便说一句,stevens先生的几本著作能啃下来都是不错的。
    除了课程需要复习之外,还要考虑编程语言。一般笔试面试都会C++、Java二选一。对于我来说,两个都会点,又都不算精通。算法题都是用C++写的,学校的项目、实习的项目都是Java的。所以很难说我擅长哪个,这其实挺郁闷,一般越到后面面试自然越难,也就会问更多的细节。毕竟写Java多得多,所以通常我都会选择答Java的问题。另外由于有些申请的职位要求必须考C++的,所以也要准备。除了基本语法之外,还有一些细节、性能、编码规法之类的问题,主要就是通过effective java, effective c++之类的书来看,再加上自己的一点实践经验。
    设计模式也是一个常见的话题。称它是话题,主要是说这类问题通常要结合理论和具体场景描述一个完整的故事,要熟记几个经典的模式和应用场景。head first design patterns是本好书,虽然有点贵,但是图文并茂,很精彩。看完一遍用不了多久,看上2遍再记住几个模式,应该也够了。
关于知识点,我自己总结过一个,放在https://sites.google.com/site/zldiablo/ ,其实这东西还是自己总结比较好,看别人的没太深印象。

你可能感兴趣的:(java,数据结构,编程,工作,算法,面试)