PC客户端开发研究者---爱生活,爱code!

别人面试的学习路线

书籍:

算法:

算法导论+剑指offer+编程之美+算法竞赛入门指南+数据结构-严蔚敏(树形排序和外部排序)

c/c++

effective c++、inside c++object,stl源码分析、c++ preimer (这几本是c++必看书籍,而且前三本至少看三遍以上,premier的话就当成查缺补漏的)。

c++反汇编与逆向分析(函数的工作原理一章是重点)、more effective c++,exceptional c++, c专家编程,c缺陷和陷阱、c和指针等等时间充足的话最好翻个1、2边。

unix/linux

APUE ,时间充足可以完全看完,不够的话把进程、信号、线程看看就行了.17章以后基本可以无视。

linux 内核有空可以找几本书看看。

操作系统 概念。(进程调度,同步、内存管理、IO重点看,14章之后直接无视)

计算机网络

UNP卷一: Tcp连接过程,I/O复用,客户/服务器程序设计范式是重点。非阻塞IO也可以看看,其他直接忽略。

计算机网络(谢希仁),面试专用,知识点讲的非常浅,但是拿来复习应付面试刚刚好。看个2、3遍。

TCP/IP详解:有深有浅,不过个人感觉时间充足可以做做实验,研究各种报文数据,如果是应付面试的话就不用深究这些了。

数据库、正则表达式、设计模式

这些东西要是精通的话能吸引人,了解的话笔试时也可以那分还是得看的。但是我一点没复习,遇到这些东西我直接放弃(省了不少时间,当然笔试时就比较痛苦了,最基本的ACID都不懂),面试时好办,直接说不好意思,这方面没做过,面试官都很不错,表示能理解。哈哈,这偷懒方式,给自己赞一个。

其他:

程序员的自我修养、深入理解计算机系统(一般般,什么都讲,但是都讲的不清不楚)

牛人:

董的博客(线段树、区间树等等介绍不错,强项是big data) http://dongxicheng.org/

懒惰哥(zju大牛,强项machine learning) http://www.douban.com/people/45119625/

july(题目集锦比较丰富,可以扩展思路) http://blog.csdn.net/v_JULY_v

面试达人(校友,各种面试题集锦) http://blog.csdn.net/hackbuteer1

何海涛(剑指offer扩展版) http://zhedahht.blog.163.com/blog/#m=0

it面试 http://www.itmian4.com/

针对跨专业学生的几点建议:

1 实习!!!我们没有项目,如果再不找实习,会被别人认为很外行,会严重遭到鄙视的。

2 研究方向,个人建议别去搞什么machine learning,这种东西虽然很火,但是如果没项目,只是看书很难有效果。跨专业的最好还是老老实实的搞研发,就业面广,而且研发壁垒相对较小。

3 如果是研究生,论文尽量提前搞定,我论文基本上憋2~3个月就出来了。然后专心找工作(如果遇到变态导师那就没办法了。)。找实习如果能到大公司最好,否则的话建议3月份开始找,做到6、7月份就回校复习,因为小公司的实习毕竟说服力不强,回校抓基础是王道。

4 多沟通,身边没有志同道合的,就要从网上多认识点人,一个人闷头学很容易方向跑偏。

详细知识点

1排序

掌握内容:

3分钟以内手写代码

递归方法的迭代形式

算法复杂度(最优、最差、平均)

算法比较次数

各种排序算法的稳定性,及不稳定的例子

排序算法大全

冒泡、选择、插入、希尔、快排(递归+迭代)、归并(递归+迭代+原址)、堆排、计数、基数、桶排序、位图、二分查找。

竞标赛排序、外部排序(K路归并,败者树)。

其他

快排的Partition 和 归并的分而治之思想。

比较排序算法比较次数的下限.

快排复杂度的推导(树形结构)

2动态规划

经典问题:

钢条切割、矩阵链乘、最优二叉树、fibonacci数列、

字符串相关:

编辑距离、最长回文串、最长回文子序列、回文分割、最长公共子序列、最长公共子串、行编辑问题,zipper(poj 2192  )。

0、1背包问题及其拓展问题:

0、1背包、部分背包、全然背包、多重背包、硬币交互、子集和、子集分割问题。

其他:

字数组最大和、二维字数组最大和、最长递增子序列、丑数

3搜索回溯

打印字符串的排列组合(有重复、无重复字符的情况)、骑士问题、迷宫问题、N皇后、数独、子集和之差最小、质数环、电话号码组合汉密尔顿圈、m着色。

4常见库函数重写

常见函数

atoi(v_july_v博客有示例,理解后默写几遍)、strcpy、strncpy、strcmp、strcat、strreplace、memcpy、memmove、memset、inet_addr(百度就挂在它手上了)

注意事项:

atoi、strcpy、memcpy估计是出现频率最高的,至少手写5遍以上。

1 参数NULL判断

2 返回值char* void* (链式操作)

3 如果修改了dest指针,返回前一定记着保存

4 void* 一般不可直接操作,需dynamic_cast<char*>

5 指针相等性判断

6 区间重叠判断

5链表

基本性质:

节点个数、中间节点、倒数第K个节点、合并链表、单链表相交、环、翻转单链表

进阶:

单链表的 归并排序、快排排序、插入排序、拷贝复杂链表、有序链表转成AVL树。

注意事项:

链表问题要特别注意NULL的判断

技巧是二级指针(比较难理解,但是搞熟了面试时绝对加分)和dummy节点(简单好用)

6树

基础:

树的高度、深度、节点个数、叶子节点个数。前中后遍历(递归+迭代),层序遍历。中序+X序来构造二叉树。

进阶:

BST节点间的最大路径和、LCA、判断一个二叉树是否为BST、判断一个二叉树是否为完全二叉树、二叉树的最短深度、二叉树的最长深度、判断same/symmetirc二叉树、普通树转二叉树、判断一个数组是否为BST后续遍历的结果

扩展知识篇:

二叉搜索树(BST:按序输出、查找、最大最小值、前驱后继、插入删除)

AVL树(了解性质、旋转操作、插入删除)

红黑树(了解性质,和AVL树的异同、插入、删除后如何旋转)

伸展树(了解性质、应用、单旋转,一字型,之字形旋转)

trie树(了解性质、应用,需要自己实现insert,delete,search)

B树、B+树(了解应用,性质,异同。如果能掌握分裂合并那就更好)

哈弗曼树(了解构造过程,哈弗曼编码,有空可以实现)

R树(重要,笔试面试都出现了,构造、查找伪代码要掌握)

后缀树、线段树、区间数(ACMer家常便饭,但是一般面试不会有这么难)

7图论

最短路(Dijkstra+Bellman-ford+Floyd)、最小生成树(kruskal+并查集、prim)

连通性判断(无向图、有向图的强联通分量)、DFS+BFS(拓扑排序:kahn+DFS)、判断图是否有环(无向图、有向图)、欧拉回路、路径(无向图、有向图)。

其他:求割点、桥、岛等等难度很大,如果不是奔着顶级公司去的基本可以不考虑,

8hash(不是很了解):

冲突解决(开链、开放寻址)、散列函数、一致性哈希

9零碎问题:

kmp、并查集 、约瑟夫环、catalan数、牛顿法求根号等等

10计算机网络

OST七层、TCP/IP五层

IP层: 报头内容、ICMP、ARP、RAPR协议、子网划分、VPN和NAT

运输层:作用、TCP的三次握手、四次挥手的过程和原因、TCP报文首部、编号与确认、Nagle算法,滑动窗口、慢启动和拥塞控制、TCP状态机(重要)。UPD和TCP区别。

11操作系统

内存管理+文件管理+进程管理

12IPC

消息队列、FIFO、信号量、互斥锁、条件便利、内存映射的应用+原理(如何实现的)。

生产者消费者模型(有空最好自己实现)

13阻塞\非阻塞IO 同步\异步IO

select 和 epoll的区别基本上每家公司,每个面试官必问。。。select poll epoll最好自己写一些demo,因为实在是太常考了。

智力题

常见题型:看数字找规律、量桶装水、称球重、概率:等待时间问题、集合论、牛吃草问题、行程问题/相遇问题/钟表问题  、逻辑推理问题、工程问题等等。

在给几个网址吧:

http://blog.csdn.net/hackbuteer1/article/details/6726419

http://www.cnblogs.com/yutoulck/p/3635057.htmlhttp://blog.csdn.net/java2king/article/details/5906733

http://nathanyan.diandian.com/IntelligenceProblem.html

posted @ 2015-02-09 10:12  xxiaoye  阅读(1213)  评论(1编辑  收藏  举报