菜鸟的通用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})

    这一类的题目在 《编程之美》 career cup》上有很多,建议深入研究并弄懂原理。

        另外,如果有兴趣,不妨在 http://oj.leetcode.com/problems/?cong=true 这里水一下很多面试题目 ^_^

 

       对于不同的公司,通过查看他们的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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.已知strcpy 函数的原型是: char *strcpy(char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数, 请编写函数 strcpy 答案: char *strcpy(char *strDest, const char *strSrc) { if ( strDest == NULL || strSrc == NULL) return NULL ; if ( strDest == strSrc) return strDest ; char *tempptr = strDest ; while( (*strDest++ = *strSrc++) != ‘\0’) ; return tempptr ; } 3.12 main 函数执行以前,还会执行什么代码? (Autodesk) 答案:全局对象的构造函数会在main 函数之前执行。 3.13 描述内存分配方式以及它们的区别。 (Autodesk , Microsoft) 答案:1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块 内存在程序的整个运行期间都存在。例如全局变量,static 变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上 创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理 器的指令集。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申 请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内 存的生存期由我们决定,使用非常灵活,但问题也最多。 3.14 什么是虚拟存储器?virtual memory 怎样映射到physical memory?页面替换 算法有哪些? (Microsoft) 见操作系统 p238 页。掌握的页面替换算法NRU,FIFO,第二次机会页面替换 算法,LRU 3.15 有四个同样的容器,里面装满了粒数相同的药丸,正常药丸的质量为m,变 质药丸的质量为m+1,现在已知这四个容器中,有一个装的全是变质药丸,用电 子秤只称一次,找出哪个容器装的是变质药丸(Microsoft) 答案:把四个容器依次编号为1、2、3、4,然后从中分别取出1、2、3、4 粒药 丸,称这10 粒药丸的质量,如果质量为10m+1,则说明第一个容器装的是变质药 丸,如果为10m+2 则说明第二个装的变质药丸,依次类推。 3.16 比较一下C++中static_cast 和 dynamic_cast 的区别。 (Autodesk) 。。。。。。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值