菜鸟的通用IT笔试面试总结

   很久前就筹划记录一下这几个月来的笔试和面试经历,终于没有后续的面试了,趁11月还没有结束,自己总结总结。

        严格地讲,我的笔试面试经历应该是从今年上半年开始的:暑期实习有面过MSDP公司;等10月正式找工作的时候,依次面过B L C I O等公司,笔试更是不计其数,中间积累了不少的经验教训,记录下来,希望可以对其他人有帮助。

 

Part 1: 笔试经历

 

        关于笔试,各家公司有各家公司的招数。但总体来说,无非是对基础知识的考察。我先列举几个公司的笔试情况:

       A:该公司的笔试题比较奇葩,不知道为什么整体感觉像是在做数学卷子,满试卷的概率统计题目+几道C++语法的题目,做下来甚是郁闷。

       B: 该公司笔试的时候人挨着人坐,本来以为会导致抄袭严重,结果全是简答题和程序题,完全没办法抄袭。

       C1: 该公司的笔试题是分组的:C/C++,Java, 数据结构,数据库,网络等,然后题目会分别计分,分别评估(其实这一类的试卷不能叫测试,而应该叫评估)。

       C2:该公司的笔试题为基础知识和智力题,考试结束后只剩下了一道智力题没有想出解决方法,面试的时候与面试官交流,面试官说:我也不会。囧~

       D: 该公司的笔试题为网络笔试,除了一些智力测试,最后剩下了两道简单的算法题目,要求写出思路和代码(我觉得D公司的笔试很有水平,也比较有区分度,如果你对编码熟悉,肯定可以在规定的时间内完成思路和代码。个人计算下来,应该在10分钟内形成思路,并在20分钟内完成代码,当然代码不会超过100行,并且要保证代码里面不出现较多的错误)。

        E: 很遗憾只做了E公司技术支持类的题目,题目里面各种考概念,并要求英文作答。

        F: F公司的题目比较简单,对CC++的基础知识做了些考察。

        GG公司沿袭 Google Code Jam 的传统,通过两轮在线测试完成笔试,笔试者可以任选一场作答,中间考察的也是些基础的题目,比如简单的模拟、递归等。

        I: I公司是以在线测评的方式进行笔试的,具体的题目有点记不清楚了

        JJ行的考试颇有公务员考试的味道。170个题目,两个半小时完成,涵盖句子排序、数字推理等一系列和技术不搭边的题目。

        LL公司的笔试分为三部分:基础知识测试、C++部分,Java/Android部分。我毫不客气地把三部分都做了。笔试结束后没有阅卷该公司就直接开始群面+一对一面,整体感觉现场有些混乱。

        M1M1公司会注重基础知识以及思考能力的考察,比如1000瓶药水只有一瓶有毒,至少需要多少只小白鼠才能找出有毒的那瓶 这一类的问题。

        M2: M2公司不愧是专做BI的公司,给出了10道有趣智力题作为笔试题,由于智商有限,最终只做了5个题目。

        OO公司通过在线测试的方式对候选人进行评估,和C1公司差不多,题目涉及CC++JavaDBOracle、通用英语等一系列内容,做下来差不多用了三个小时,累死人了。

        TT公司也是对基础知识进行考察,题目整体难度不大。

        1 1公司笔试题为纯粹的Java基础知识、SQL基础知识考察,难度不大。

        2 2公司笔试题涵盖了一些C++的基本概念,以及很多有趣智力题。不可思议的是,他们的有趣智力题我全部正确完成了!

 

        另外,很多公司的笔试题上会注明:不答不得分,答错扣分。作答前一定要看说明(作为一个程序猿,看manual 真的非常重要!!)。

 

Part2 笔试总结

         很多公司都以CC++为基础语言对笔试者进行考察,除了对很多基本的概念进行考察外,一般考察点会比较多地集中在如下方面(不全面,等有新想法再补充):

  1. 运算符优先级问题
  2. a++++a的区别
  3. Volatile 关键字
  4. 数组与指针的转化,以及指针取值问题:

比如 int a[10][10]; int *pa = &a; *(*(pa+3)+2)这种表示方式是否合法,如果合法会输出什么结果

  1. 数组作为参数传值的问题:

比如:数组传值后会退化成指针,所以 Void foo(char []src) { cout <<sizeof(src) << endl; }   结果为4;

二维数组如何作为参数传入函数中等。

  1. 各种指针、指针与引用的区别:

比如:数组指针、指针数组、指向函数的指针、指向函数的指针数组等的声明方式;

const与指针的结合:const int *a;  int const *a; int *consta; 等的区别

  1. New delete  malloc free的区别
  2. 定义子类时,构造函数的执行顺序
  3. 类中的 const static 函数能否调用普通变量、普通方法等

比如:为什么static方法内无法调用普通函数?因为普通函数中隐性地传入了对象本身的引用等。

  1. const的用法,比如:解释 const int foo(const int a) const; 中各个const的意义
  2. virtual关键字(重中之重!这是C++实现多态的核心)

比如:virtual的继承性、virtual的虚函数表及其结构

  1. overloadoverride的区别
  2. Public private protected各个关键字的用法。分为两点说明:作为修饰符的作用;作为继承方式的作用

……

       

        对于C/C++的复习,个人强烈建议精读 C++ Primer 第五版,不要读 C++ Primer Plus。我在面试前拜读过该书的第一部分(基础知识)和第三部分(面向对象),受益匪浅。该书非常值得精读!

 

        Java的笔试题,我做的不多,不做过多说明。印象里面,Java对执行顺序的考察比C++还要变态,会在有继承、有static方法的前提下,要求写出各种执行结果;Java会比较它特有的几个关键字的考察,比如final finally等。

 

        数据结构和算法,也是公司考察的重点内容:数据结构的考察会集中在链表、串和树部分,很少有公司会对图的算法、图的结构进行考察。另外,几乎在每家的笔试、面试中,我都会遇到递归的问题。递归确实是考察一个程序猿基本水平的指标(递归无非就是找到递归关系式和递归出口)。

 

        有些公司会考察计算机网络,强烈推荐谢希仁教授的《计算机网络》第四版,一定要第四版;对于数据库的考察,大多停留在SQL语句阶段,弄明白SELECT,UPDATE, JOIN, WHERE, GROUP BY, ORDER BY, LIMIT, HAVING的用法,以及各种范式分别代表什么意义,基本足够了。

 

 

Part3:面试经历

       IT面试真的都是些比较模式化的东西,见得多了,自然就明白了。以下只列举几个面试题目:

  1. 如何判断一个单向链表中是否存在环? 如果存在环,如何找到环的入口、求环的长度? (快慢指针)
  2. 如何判断两个单向链表Y字型相交?
  3. 如何在一个矩阵中查找到某一个字串?
  4. 在一个有序的数组中,打印出所有两个元素和为N的组合。
  5. n的阶乘的尾数有多少个0
  6. 前、中、后、层序遍历二叉树。
  7. 求出树的高度与宽度
  8. 给出一组数的所有子集, 如A(1,2,3)的所有子集是({1},{2},{3},{1,2},{1,3},{2,3},{1,2,3})




对于不同的公司,通过查看他们的Job Description,就能基本猜出他们会面些什么问题,然后早作准备:如BaiduGoogle这类从搜索起家的公司,对搜索效率的要求肯定非常高,所以,面试的时候像Hash表、B树等这一类的问题肯定要准备;像Cisco这样的公司,如果你能想到路由表,自然能猜出他们会问及诸如Dijkstra等这一类的图的最小生成树的经典路由算法;对于很多互联网公司,我们至少要知道Http请求的流程、Http头的结构、GetPost的区别等,否则何谈负载均衡、数据安全;对于做管理软件起家的公司,数据库的查询总得弄的非常明白;对于做桌面软件的职位,如果不知道GDIGDI+,可能比较难通关……

        举个例子,C公司的JD是:Strong C,Fluent English, Embedded, Networking, Hands-on Linux。自然就知道要准备什么了:C语言的基础知识、嵌入式和linux的知识(既然是嵌入式,GPIOEEPROMIIC这些东西总得知道吧^_^)、网络技术(像OSI各层作用及设备、TCP/IP总得了解下吧)。分析过后再准备面试,就有方向了。

 

        面试过程中,也经历过几轮非技术的面试,甚至群P。个人感觉在群P的过程中还是要观点制胜,不要被其他人引导到一个点上,然后深究,却得不到结果;站在不同角度上考虑问题,是个不错的主意。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值