人太懒,一转眼距离上一篇写完过去两周了,还是趁着现在有点热情把后续的东西写下来 ,再拖一个月估计我就全忘了 书接上回。 看下面的文字之前,建议大家先看看两篇相关的文字(对应着看): 1. 刘未鹏大牛的《怎么样花两年的时间去面试一个人》 http://mindhacks.cn/2011/11 /04/how-to-interview-a-person-for-two-years/ 2. 原载自北邮人论坛 的《怎样花两月时间去应聘互联网公司》 http://www.cnblogs .com/wangjianzhou/archive/2011/11/24/2261506.html 虽然说it领域找工作这个过程很多东西不可控,但是扎实的基础知识、专业领域的深度以 及相关必要的练习能解决掉80%的事情。 在我看来,所谓的找工作之前的准备,其实就像考试一样,有人喜欢从学期一开始就好好 学习,每节课听讲,课后复习;也有人考前突击,临阵磨枪,不快也光。 所谓一分耕耘 一分收获,这两种态度带来的结果显然是前者成功的概率更高;但是不可否认后者有时候 如果没有突击到话会很惨,但是性价比也很高。 在讨论该如何做准备之前,我觉得先要弄明白的事情是,你自己的兴趣点是什么? 以后 希望从事什么工作? 随着国内互联网公司的逐渐成熟,稍微有点规模的公司里,工作职 责都进行了细分, 前端(美工,设计,css&js), 后端(只关注业务后台, 存储、中 间件、大规模数据处理等基础架构), 算法策略, 运维,PM等都是专人专责, 不同方 向对人的技能要求差别较大,不可能你什么都能hold住。 在确定自己职业方向之后,可以针对特定岗位有的放矢。比如后台SDE的话,需要对Linu x编程,网络编程之类的而熟悉; 算法工程师对数据挖掘和机器学习的经典算法要有个大 概了解吧, 前端工程师要对css和js了然于胸。 互联网技术工作的知识准备,我觉得应该分为 基础知识+专业知识两部分来看, 前者是 获取offer的必要条件,后者是获取special offer的钥匙。由于后者每个人方向不同,所 以只介绍该如何准备前者。 cs的基础知识,主要是本科四大基础课程(数据结构与算法,OS, 网络,体系结构)所 包含的,下面就分别列举: ① 数据结构与算法部分: 每个数据结构都应该知道:为什么要有这个数据结构,能做什么不能做什么,空间复杂度 和每种操作的时间复杂度。简单的数据结构要很熟练的写出代码或伪代码。 重点户考察得有: 链表(单向,双向,环形),考得非常多,指针操作不能错 二叉树 会考各种题,包括用 递归和非递归实现 二分搜索(一定要会!别小看了,代码不是很好写,各种变种情况的边界条件控制) 各种排序:冒泡,插入,选择,快排,希尔,归并,堆排 的时空复杂度,都要了熟于心 ,并且能够证明出来。堆排序还涉及到堆得数据结构,要能独立手写堆(虽然stl有) 哈希表 拉链法与二次探测的实现 一些小扩展(事实证明现在的互联网公司出题,已经或多或少涉及到下面一些): Bloom Filter(经常被人忽略的一个重要的东西) 并查集 (Union Find Set) 字典树(Trie/Prefix Tree) AVL Tree Red Black Tree(了解概念,知道和AVL Tree的区别就好) B-Tree B+-Tree (最好知道两者的区别,知道为什么B-Tree会比AVL/RBTree快, 估计没 有哪家公司会要求手写吧) Skip List (单链表加速利器,leveldb里有用到) 算法部分: 经典的分治/递归,以及经典问题 搜索(深度优先,广度优先。要求熟练,代表就是八皇后问题) 动态规划的经典题型,比如最长上升子序列,最长公共子序列,数组的最长字段和(拓展 到二维情况), edit diastance等 Dijkstra/Floyd/Bellman-Ford最短路径算法, Prim算法好像考察的不多 ② OS部分: 这个一把会以小题的形式出现,比如在笔试题的选择题中,或者面试时面试官会问你。 对于像 进程与线程的区别, 经典的线程同步方法, 信号量操作等,要烂熟于心。 此 外,很有可能和Linux系统结合,问你xxx在linux中如何实现之类。 要知道什么是时间片,什么叫分时调度。几种常见的调度。 要了解文件系统如何实现( FAT, ext2/3/4. zfs, NTFS) 、OS内存管理的常见方法 OS是一个大宝库,汇集了computer system领域几十年积累下来的精华,很多东西可以借 用Linux中的实现,比如面试中让你设计一个cache之类的题目。 ③ 网络部分: 也多是以小题的形式来考,OSI的七层结构,主要是应用层考的比较多。 需要了解HTTP。现知道什么是GET/POST,知道有session, cookie这个东西。(不管是不是 前端都需要了解) 写过网络程序……知道什么bind()/listen()/accept()/connect(),这些要会用。 知道常见的协议及端口,比如dns, ftp, ssh ,dns, smtp, pop3等, 知道TCP和UDP的区别 简单知道TCP的怎么保证数据完整性的。知道TCP怎么握手的(SYN/SYN_ACK/ACK),知道怎 么断开的(FIN/FIN_ACK),知道主动断开会出现TCP_TIME_WAIT这个状态。(TCP的状态机 图) 知道TCP的几种拥塞控制 ④ 体系结构: 不太好单独考,所以一般借助于c/c++语言,通过编译出来的对象在内存的布局,来考你 对体系结构的认识,比如如何判断大端/小端机器,栈往哪个方向增长这种题目 当然你需要了解 比如CPU是多周期的,流水线作业的。 知道现代CPU的 instruction cache和data cache, L1/L2/L3 cache的访问速度的数量级 知道CPU有寄存器 知道有特殊寄存器和通用寄存器 知道CPU有 RISC / CISC之分 volatile的语义。可变的,所以每次读写都会直接写入内存(或者cache),编译器不允 许做任何优化到寄存器的优化。 知道乱序执行,知道CPU有多线程技术来回切换/多套原件。知道CPU有多核,知道SIMD是 什么概念。 知道CPU里面内存访问是有Cache的,这也是为什么BTree会比rbtree/avltree快!同理, 很多数据结构都要尽量”成块”,这样减少了CPU的cache miss。 知道有branch prediction就行。 ⑤ 编程语言: 编程语言就像武士手里的武器。 尽管各大公司宣称对编程语言无要求,但是在笔试面试 过程中,主流的还是 c/c++, java。 有人问过, c++对什么领域来说不可或缺;答案是出面试题。。。。 对于c语言来说,语法结构较简单,一本 K&R 半天就能看完,但是c的难点在于各种编码 trick 你至少要知道: #ifndef #define #endif 作用 static语义。 内存:stack和heap。mallc / free extern语义:C的symbol table不会做像C++一样做Name Mangling 。可以直接根据函数名 称来用里面的函数(dlopen/LoadLibaray) C++的一些知识: c++太庞杂:procedure-oriented, object-based, object-oriented, generic type. 四 种子类型目前估计咱们能懂的也就前三种 千万别告诉面试官你精通C++, 否则必挂。 知道啥是virtual function,知道有virtual table的存在。以及在内存里的布局 + 函数 执行过程是的调用顺序 Constructor的时候不要virtual function(要知道为什么) Destructor的时候不要throw(见 Effective C++) Destructor要virtual,如果你打算别人继承你的话。 New/free就是malloc加constructor和destructor public继承,还有private继承。virtual继承,为了解决多继承对象冗余的。太恶心,一 般人不会用。 实现Singleton模式(还有各种升级版,比如多线程, lazy initialization) -------------------------------------------------------------------------- 上面这些知识,我个人建议在研二的那个暑假里都搞定,否则拖到九月份你会很被动。 九月份你需要干的活,是搜集往年各个公司的面试笔试题,来实战模拟。 我建议的各个领域看的书: 数据结构与算法: 推荐我老板张铭老师的教材 + 讲义 + 书后习题, 网上的精品课网站 ,资料很全 OS: Andrew S. Tanenbaum 的现代操作系统一本足以 网络: Tanenbaum的网络书远远不如他的OS书写得好,所以网络部分我推荐 谢希仁 写的 《计算机网络(第五版)》, 写的条理很清晰 体系:算了,别看书了,不适合抱佛脚 c: 圣经 K&R + c指针 + c陷阱与缺陷 千万别看谭浩强的书 C++: 语法方面,我觉得 《Thinking in c++(第一卷)》 比 CPP Primer要好懂得多! 加一本Effective C++可以搞定大部分问题,如果真想钻研的话,去看看 Lippman的 In side C++ Object Model, 以及 侯捷的 STL源码剖析(很好读的一本书,配合sgi的stl 源码) 算法: 有时间的话,算法导论的相应章节以及对应习题都看一看, 否则就把屈婉玲老师 的课件以及作业都温习一遍吧,很有用 临阵磨枪: xx之美, 剑指offer都是应急的书,当然编程珠玑也不错。
cs找工作准备篇
最新推荐文章于 2024-05-04 18:28:36 发布