2009笔试+面试总结(一)

  十月份到现在参加了4个公司的笔试和面试,后天打算把三方协议签了,找工作就暂时尘埃落定了。开始专心复习之前,把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想,非原题目。
  我面试的这4家IT公司,对于三点都非常重视。一个是基础知识,一个是运用知识,思考的能力,一个组织表达能力。按这三种分类记录下笔试和面试题目。

[基础知识]
  考察基础知识,在笔试题目最常见,占比例也最大。

  1. 有n个节点的二叉树,其中有m个节点有两个孩子,问这棵树有多少颗叶子节点。

    这题目其实是数据结构上的原题,不要被n迷惑了。

  2. 问这段代码输出什么?考察C++基础。

    class A{ 
    public: 
    int x(){return 2;} 
    }; 
    class B : public A{ 
    public: 
    int x(){return 3;} 
    }; 
     
    int main(){ 
    A *a = new A(); 
    A *b = new B(); 
    cout << a->x() << b->x() <<endl; 
    return 0; 
    }

      

    类A中的函数x并非虚函数,所以不会发生动态绑定。

  3.   下列哪个表达式是错误的?
      int a = 10;
      1. (a++) += a;
      2. (++a) += (a++);
      
    a++其实是分三个步骤的:{tmp=a;++a;return tmp;}所以a++不能作为左值。

  4.   问下面的程序需要几次才能跳出循环?

      unsigned int a =5;
      int b = 2;
      while ( a+b >= 0){
          b--;
      }

      

    C++中有符号和无符号类型之间的转换,要遵循一个原则:所定义的转换规则需要保护操作数的精度。比如long和unsigned int类型,只要机器上的long型足够表示unsigned int型的所有值,就将unsigned int转换为long型,否则,将两个操作数都转换为unsigned long。而对于包含signed 和 unsigned int型的表达式,其转换则是将signed型数值转换为unsigned型。如果此时将int转换为unsigned int,而int型数值恰好为负数,那这带来了副作用。此题就是一个例子。

  5.   union{
      int i;
      char x[2];
      }a;

      a.x[0] = 8;
      a.x[1] = 1;
      问 a.i为多少?
      

    首先要了解的是,数据在内存中的存储方式。比如一个int型数,4个字节,表示为ABCD,在内存其实是DCBA保存的。那么看这题,内存中保存的是:00001000 00000001 00000000 00000000.根据上面的规则,那么用int来读取这段数据,即为00000000 00000000 00000001 00001000,即264.

  6.   map,set,hashmap和multimap,有个与其他三个数据结构不同的是哪一个?
      
    hashmap,采用和其他三种都不同的方式。

  7.   如果一个数列中的元素距离他们各自最终的位置都很近,那么哪一种算法最省时间?(直接插入,堆排序,快速排序,选择排序)
      
    我感觉是直接插入排序,当然还需要测试。

  8.   const char *和char * const 的区别。
       
    const char *p;结合的方式是自右向左。所以p首先是个指针,然后个char型指针,然后他指向的是个const,此时,p本身的值可以改变的,但是不能通过p来修改p所指向区域A的值,但A可以通过其他指针修改。同理,char * const p,p首先是个const对象,之后才是指向char型的指针,此时p本身是不能修改的。

  9.   问下面的结果?
      char a = 50;
      int i = sizeof( a = (a+205));
      问 i 和 a各为多少?
      
    i为1大家都可以看出来,但a为多少相信就不是那么容易答对了。答-1的算好的,说255的就可以回去看计组了。sizeof(A)是个大难点,尤其是A如果是struct类型的时候。此题中,sizeof(A)的值其实是在编译阶段就已经确定了,所以根本没有运行a = a+205 这一步。在编译完成后,这句就相当于int i = 1;

  10.   计算机网络单播,组播,广播的区别。路由器和交换机的作用和原理。ARP协议的内容,以及其他相关的PPPOE协议的知识。
  11.   修改错误的代码:快排和堆排序。这完全的基本功了,为了面试,多练习在纸上写程序吧。

  类似的题目还有很多。这些题目如果不能拿分的话,给面试官的印象会很不好。这几次面试的时候,面试官手里一般都是我的笔试试卷 + 面试评分单。面试官都会拿我的基础题目说,为什么这道题目都不会?所以把握基础题目至关重要的。

  计算机本身是门实践性更强的学科,所以如果平时不怎么编程,是很难发现自己的问题和未知的领域的。tencent的笔试题目考得很细很深,平时不上机code的同学可能很难会想到所考的知识点; 而遇到问题时不刨根问底或者得过且过,则会造成更大的遗憾。const char *和char * const的区别,内存的分配方式和管理方式,内存泄漏等等,平时感觉到有一丁点疑惑时,问题的背后一般藏有更多你不了解的;还有一点也很重要,像PPPOE并不是在书上,但是大家听说的就比较多了。应该及时的去了解这些前沿领域(虽然PPPOE不算前沿),保持对本专业发展方向的敏感,扩大自己的视野。

4 Comments are ready?

  1. ivan said on: 2009年11月5日 12:09

    PPPoE是PPP over Ethernet吗?

    [回复]

    boluor 回复  于   

    是的呀。
    一些智力题目还在写 ^/^

    [回复]

  2. ivan said on: 2009年11月5日 12:21

    就没有一些有意思一点到智力题目?

    [回复]

  3. 叶雁秋 said on: 2010年01月28日 14:55

    我靠,看了这面试题我郁闷啊,我平时考试就怕那种考细节的题,尤其是像第3-5那种题目。郁闷了,以后好好学基础。
    很喜欢看看你的blog,写的很实用~~~

    [回复]

    boluor 回复  于   

    趁着寒假,多看看书,多写点程序吧。离你们找暑期实习也就3个月了。

    [回复]

    叶雁秋 回复  于   

    恩,我现在还没回家,还在学校呆着在,在看驱动开发的书,看的是一头雾水啊,你有什么好的建议没,我由于初学,实在不知道看什么书好,现在在看一本叫”寒江独钓“的书,但是感觉不够基础,看看你知道什么比较基础的书没有,或者你帮我请教下你周围的强人也好啊~~谢谢了·~

    [回复]

    boluor 回复  于   

    你想找什么样的工作?哪个领域?先确定了这些再去看书。

    需求决定动力和效率。

    [回复]

    叶雁秋 回复  于   

    我现在申请了一个科研立项,需要做的是驱动级的加密文件系统,所以需要学驱动知识,其实我现在是希望多涉猎点儿东西,毕竟我不像你们,有那么多基础,我现在还停留在广泛涉猎的基础上。不过你说的问题我也是得考虑了,我会好好想想的,想好了再请教你哈~~~~~~~~~

    [回复]

  4. 张宇博 said on: 2010年03月6日 01:12

    学习了,收获不少,自己的基础还很差。。

    [回复]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*

*

click to changeSecurity Code