随笔-80  评论-24  文章-0  trackbacks-0
明年就靠它了~
找了一个多月的工作,面了不少的公司。
写了个总结,主要是个人的一些想法和观点,希望能给要找工作学弟学妹一点帮助。
有不对的、遗漏的,楼下大家多多指正多多补充。

IT公司的职位一般包括:
(1)研发
(2)测试
(3)产品设计
面试前一定要找准自己的定位,只投这一个职位,千万不要挨个换着试。
因为面试也是个积累和学习的过程,而换职位意味着从零开始积累,一下就比竞争者落下一截。
我面试时投的都是研发类的职位,总结的东西也都是研发类容易被问到的。
测试职位问到的东西与研发类有很大交集,也可以参考。
产品类我就不熟悉了。


工作找的好不好,没有牛人与非牛人的区别,只有准备的充分不充分的区别。
对面试前比较迷茫的同学,我来说说面试前该准备东西。
(郑重声明:仅为应对面试的准备方向,要提升个人能力,还得踏踏实实看书编程学习)

一、初级
这一部分的问题都是被问烂了的问题,尤其在笔试和一面中。
顺利答出来,或者瞬间写出代码,面试官会很开心。否则极有可能被刷。
1、字符串处理函数的实现。
    strcmp(),strcpy(), strncpy(), strlen()等等。
    这些函数,无论是笔试还是面试,都极容易会被考到。
    干什么用的,怎么用,让你自己实现一下。不用犹豫,拿来源码当课文背下来绝对没错。
    附件里给了几个函数的实现,我是照着这个背的。仅供参考。
2、排序函数的实现。
    重点掌握快速排序,归并排序,堆排序。
    排序复杂度、实现原理、写代码实现。注意注意,尤其是写代码实现,面试官特别喜欢问。
    找来源码,打印下来,面试前默写2-3遍,好处大大滴。
    附件里给了一些排序函数的实现,给大家参考一下。
3、C/C++常见问题,若面试C语言方向,或者不分语言的话,以下问题极易被问到。
    (1)static的各种用法
    (2)什么是虚函数?多态?动态绑定?
    (3)等等等等,这块太多太杂,不好总结,多看看课本,肯定没坏处。
4、链表相关问题。
    啥是链表?跟数组有啥区别?
    链表相关的插入删除处理也有些基本的题目。
    附件里有个总结,供大家参考。
二、提高
1、操作系统常见问题。
    (1)进程和线程的区别?
    (2)进程间通信的4类方法。(管道,信号,消息队列,共享内存。咱的教材好像没有)
    (3)生产者消费者问题(读者写者问题)。(这个我只被问过一次)
    (4)socket编程。(我没被问到过,同学被问过不只一次,还是看看吧)
2、数据库常见问题。
    (1)事务的四个特点。(ACID)
    (2)B+树是啥?与B-树区别?
    (3)HASH索引与B+树索引的优缺点。
3、网络
    (1)TCP/IP五层模型(有时是四层)与OSI七层模型的对应关系。
    (2)TCP与UDP的区别?
    (3)HTTP协议的格式。(这个同学有被问到过,主要掌握请求行和相应状态码)
    (4)什么是DNS协议?IP协议?ARP协议?ICMP协议?
    (5)交换机和路由器的区别?
4、C语言深入
    (1)程序占用内存分几部分?(堆区、栈区、代码区、全局区或静态区、常量区)
    (2)虚函数和虚表的实现
    (3)malloc实现原理
    (4)等等
5、Linux相关
    这块我完全不了解,问是被问到时都是回答不会Linux。
    不过据说会问些内核的东西。
6、设计模式。
    这个我也完全不了解。
    据说最喜欢问单例模式,没准还让你写个单例模式。
三、中级
1、海量数据处理相关问题及处理方法。
   一般要用到的有hash、bitmap、trie树(字典树)、外排序、分布式
2、搜索引擎基本原理。
   爬行和抓取、索引、搜索词处理、排序四个步骤。再多了我也不会了。
3、程序员面试题精选100题。
   我从北邮人论坛下了一个,在附件里。也许不全,大家再自己找找。
4、较高级的数据结构。
   如平衡二叉树,huffman树,trie树,红黑树。
5、脑筋急转弯类题目。
  (1)1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
  (2)你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?
  (3)对一批编号为1~100,全部开关朝上(开)的灯进行以下操作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……问:最后为关熄状态的灯的编号。
  (4)等等等等,自己多上网查查吧,外企很爱问这些。
四、深入
    基本问题都看完,如果你还有时间,建议好好看看这几本书:
    (1)程序员面试宝典。
    (2)编程之美
    (3)面试C语言方向的,可以看看《C++ Primer》和《Effective C++》
    (4)教材。C/C++,数据结构,算法,操作系统,数据库,网络,编译。
         别说学习没用课本没用,大公司面试官就喜欢问基础的问题。
 
再说说面试中要注意的情况
1、心态上:积极主动乐观,不是随便说说的。
   主动去关注面试的信息很重要。
推荐关注北邮人论坛的“毕业生找工作”和“招聘信息专版”两个版面。
各公司的信息很多,而且在校招开始前会有一些内部推荐的帖子,多联系一下,多一次面试机会。
   面试官一天从早面到晚半死不活,你再半死不活的回答,肯定不招人待见。
   再有,什么时候都别给自己心理暗示说不行。
淘宝的三面就是玩一个手机游戏Unblock。
有人玩了5分钟搞不定就放弃了,有人坚持20分钟搞出来了。最后月薪可能就会差2000块。
2、交流上:清晰准确多沟通。
    回答问题前理清一下思路,别给人留下逻辑混乱的印象。
    当思考了一阵还没有结果时尽量不要冷场,可以先说出你的部分思路以及你现在卡在哪里。
如果思路正确一般面试官会有反应或者给你提示。也可以跟面试官询问一下提示。
3、最大程度的展示自己的强项。
    WTommy师兄曾经说过:面试是要考察你强项有多强,而不是看你弱项有多弱。
    一般来说面试官会有一个表格,列出语言、数据结构算法、操作系统、数据库、网络,等等。
有的面试官会逐项问你这个熟不熟,这个时候别逞强,对完全不懂得千万别装懂。否则会死很惨。
懂一点的话也别说一点也不懂,比如被我说了N遍的“Linux我不太懂,只会最基本的操作”。
面试官提出来的问题,最忌讳想5秒钟,直接回复个“不会”。
起码给出你对题目的了解,你认为这是哪个领域的问题,你觉得应该用什么方法来解,你对该方法的熟悉程度或者不熟悉程度。
4、临时抱佛脚很重要。
    对你要面试的公司,一定要了解其背景,有方向性的准备。
    比如百度和淘宝就喜欢问海量数据处理的问题。比如华为中兴,就会偏重更底层一些的系统、调度等问题。
    上网搜搜要面试的公司的面试题,肯定会有指导作用。面试官的创造力是有限的,所以,你懂得。。。

面试的常见流程
1、首先是根据简历介绍你的项目。所以你必须对简历上的项目十分熟悉。
   本科生没做过项目的可以写你的课程设计。其实跟公司里的东西比起来,咱们的东西都是小儿科。
有些面试官喜欢深入的了解你的项目的实现细节,所以一定要把每个细节的设计都想清楚。
为什么这么设计,如何实现?有什么好处?能否继续改进?
2、问一些基本题目,如上文总结。
3、问一些开放性的设计类的题目。
    这个没有标准答案,全在个人发挥了。
   
   
目前想到的就这些,大家可以一起补充。
感谢Gobbin同学的总结资料。
祝大家都拿到称心如意的offer~~

[附件在文件里]
posted on 2011-10-27 22:26 myjfm 阅读(655) 评论(0)  编辑 收藏 引用 所属分类: 笔试+面试总结