别人面试的学习路线
书籍:
算法:
算法导论+剑指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
针对跨专业学生的几点建议:
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