MS 面试题

 微软亚洲技术中心的面试题

1.进程和线程的差别。
2.Heap与stack的差别。
3.Windows下的内存是如何管理的?
4.介绍.Net和.Net的安全性。
5.客户端如何访问.Net组件实现Web Service?
6.C/C++编译器中虚表是如何完成的?
7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。
8.谈谈IA32下的分页机制
9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?
10.在IA32中一共有多少种办法从用户态跳到内核态?
11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?
12.如何截取键盘的响应,让所有的‘a’变成‘b’?
13.Apartment在COM中有什么用?为什么要引入?
14.存储过程是什么?有什么用?有什么优点?
15.Template有什么特点?什么时候用?
16.谈谈Windows DNA结构的特点和优点。

Answer:
1.进程和线程的差别。
  线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.

2.Heap与stack的差别。
  Heap是堆,stack是栈。
  Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
  Stack空间有限,Heap是很大的自由存储区
  C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
  程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行。
  ......

9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?
  一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方。

11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?
  用内存映射或全局原子(互斥变量)、查找窗口句柄...  
 
12.如何截取键盘的响应,让所有的‘a’变成‘b’?
  键盘钩子

14.存储过程是什么?有什么用?有什么优点?
  我的理解就是一堆sql的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比单独执行SQL快很多...

posted on 2005-12-25 14:25  Welfare  阅读(3020)  评论(10编辑  收藏  举报

导航