现在的位置: 首页 > 综合 > 正文

常见面试题

2014年01月26日 ⁄ 综合 ⁄ 共 1214字 ⁄ 字号 评论关闭

 本文从网上摘抄总结:

 

今天去XX公司面试,问了以下10道题:
1.volitale与register的常用用途
2.谈谈DLL
3.VC中的sendMessage与postMessage
4.堆和栈区别
5.指针与引用的区别
6.普通成员函数与虚函数的区别
7.class A{
  ~virtual A{}
  }
  class B:public A{
  ~ B{}
  }
 为什么要把A类析构函数设为虚函数
8.快排思想,其不足之处,以及改进方法
9.huffman编码需要扫描一次还是两次文件,它与LZW编码的不同在哪
10.TCP/IP协议模型

 

答案参考:

 

1.volitale与register的常用用途
volitale在非局部跳转的时候,在多线程的时候都会用到吧,防止编译器优化,数据在寄存器计算完成后立即写回内存,并且读取从内存读. register相反,它请求让该变量利用寄存器优化读取速度,但应该也只是个建议性的.
2.谈谈DLL
还木有怎么用过,DLL分为静态链接和动态链接,每个DLL都有和它一起存在的lib,静态链接用lib,动态链接用dll,编译DLL时要用extern "C"或者DEF保证函数名是神马神马的。DLL里的开辟的内存由DLL里的函数释放。
使用DLL程序更换DLL就可以完成更新。
3.VC中的sendMessage与postMessage
PostMessage是将消息放到消息队列里,不一定立即处理。(异步的)
SendMessage是消息立即被处理,处理完成后函数返回,(同步的)
4.堆和栈区别
栈向下增长,堆向上增长,栈是函数内的各种局部变量的存储区,堆是动态开辟内存的存储区。栈不大,堆还挺大的。
5.指针与引用的区别
指针可以赋值,引用只能初始化。
6.普通成员函数与虚函数的区别
普通函数就是普通函数,虚函数可以动态绑定,由对象内的虚函数指针指向的虚函数表定位,虚函数是多态的基础。
7.class A{
  ~virtual A{}
  }
  class B:public A{
  ~ B{}
  }
 为什么要把A类析构函数设为虚函数
因为这样A *p=new B(); delete p;调用的不是A的析构,而是B的析构,B的析构又会自动调用A的析构,于是完整析构了整个B对象。
8.快排思想,其不足之处,以及改进方法
快排思想就是将一个数n放到它在有序队列内应该在的位置,不足之处就是每一次partition可能都会出现1:n-1的最坏情况,导致快排效率是O(n^2)。 改进方法就是诸多算法书上的,3分取点法决定是用哪一个n(将n换到序列头部然后进行普通的partition)。也有用随机法选n的(效率也不行)。
9.huffman编码需要扫描一次还是两次文件,它与LZW编码的不同在哪。  
LZW是什么,huffman编码扫描一次统计字符频率,生成每个字符的编码,再扫描一次进行编码压缩。
10.TCP/IP协议模型
物理,链路,网络,传输,应用

 

抱歉!评论已关闭.