微软亚洲技术中心面试题
1.进程和线程的差别。
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤
消线程时的开销。
2.测试方法
人工测试:个人复查、抽查和会审
机器测试:黑盒测试和白盒测试
2.Heap 与 stack 的差别。
Heap 是堆,stack 是栈。
Stack 的空间由操作系统自动分配/释放,Heap 上的空间手动分配/释放。
Stack 空间有限,Heap 是很大的自由存储区
C 中的 malloc 函数分配的内存空间即在堆上,C++中对应的是 new 操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行。
3.Windows 下的内存是如何管理的?
4.介绍.Net 和.Net 的安全性。
5.客户端如何访问.Net 组件实现 Web Service?
6.C/C++编译器中虚表是如何完成的?
7.谈谈 COM 的线程模型。然后讨论进程内/外组件的差别。
8.谈谈 IA32 下的分页机制
小页(4K)两级分页模式,大页(4M)一级
9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?
一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方
10.在 IA32 中一共有多少种办法从用户态跳到内核态?
通过调用门,从 ring3 到 ring0,中断从 ring3 到 ring0,进入 vm86 等等
11.如果只想让程序有一个实例运行,不能运行两个。像 winamp 一样,只能开一个窗口,怎样实现?