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

c/c++笔试题

2013年09月17日 ⁄ 综合 ⁄ 共 4019字 ⁄ 字号 评论关闭

 

 

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


1.进程和线程的差别。


线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别
:
(1)
调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

(2)
并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)
拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)
系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。


2.测试方法


人工测试:个人复查、抽查和会审
机器测试:黑盒测试和白盒测试


2
Heapstack的差别


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


3Windows下的内存是如何管理的?


4
.介绍.Net.Net的安全性。


5
.客户端如何访问.Net组件实现Web Service


6C/C++编译器中虚表是如何完成的?


7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。


8
.谈谈IA32下的分页机制


小页(4K)两级分页模式,大页(4M)一级


9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?


一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方   ??


10.在IA32中一共有多少种办法从用户态跳到内核态?


通过调用门,从ring3ring0,中断从ring3ring0,进入vm86等等


11
.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?

用内存映射或全局原子(互斥变量)、查找窗口句柄..
FindWindow
,互斥,写标志到文件或注册表,共享内存。. 


12.如何截取键盘的响应,让所有的‘a’变成‘b’


键盘钩子SetWindowsHookEx


13
ApartmentCOM中有什么用?为什么要引入?


14
.存储过程是什么?有什么用?有什么优点?

 

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序

存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快

15Template有什么特点?什么时候用?


16
.谈谈Windows DNA结构的特点和优点。


17.
网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?


1
,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2
,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

 

 

MSRA Interview Written ExamDecember 2003Time2.5 Hours


1
写出下列算法的时间复杂度。


(1)冒泡排序;
(2)
选择排序;
(3)
插入排序;
(4)
快速排序;
(5)
堆排序;
(6)
归并排序;

 

2写出下列程序在X86上的运行结果。

 

struct mybitfields
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test

void main(void) 
{
int i;
test.a=2;
test.b=3;
test.c=0;

i=*((short *)&test);
printf("%d/n",i);
}

 

3写出下列程序的运行结果。

 

unsigned int i=3;
cout<<i * -1;

 

4写出下列程序所有可能的运行结果。

int a;
int b;
int c;

void F1()
{
b=a*2;
a=b;
}

void F2()
{
c=a+1;
a=c;
}

main()
{
a=5;
//Start F1,F2 in parallel
F1(); F2();
printf("a=%d/n",a);
}

 

5考察了一个CharPrev()函数的作用。

 

6 16 Bits colors的处理,要求:


1Byte转换为RGB时,保留高56bits
2RGB转换为Byte时,第23位置零。

 

7一个链表的操作,注意代码的健壮和安全性。要求:


1)增加一个元素;
2)获得头元素;
3)弹出头元素(获得值并删除)。

 

8一个给定的数值由左边开始升位到右边第N位,如 0010<<1 == 0100 或者
0001 0011<<4 == 0011 0000
请用C或者C++或者其他X86上能运行的程序实现。

 

附加题(只有在完成以上题目后,才获准回答)


1
In C++, what does "explicit" mean? what does "protected" mean?

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。

protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问

 

1.  C++中有没有纯虚构造函数?

构造函数不能是虚的。只能有虚的析构函数

 

2.  c++的一个类中声明一个static成员变量有没有用?

C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象,static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。

static是加了访问控制的全局变量,不被继承。  


3
。在C++的一个类中声明一个静态成员函数有没有用? (同上?


4
。如何实现一个非阻塞的socket?


5
setsockopt, ioctl都可以对socket的属性进行设置,他们有什么不同? linux


6
。解释一下进程和线程的区别? (重复,参见微软亚洲技术中心笔试)
7
。解释一下多播(组播)和广播的含义?

组播:主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。

广播:主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要).

 

8。多播采用的协议是什么?


9
。在c++中纯虚析构函数的作用是什么?请举例说明。


10
。编程,请实现一个c语言中类似atoi的函数功能(输入可能包含非数字和空格)

 

百度笔试题

 

一、选择题:15 10
1.   
在排序方法中,关键码比较次数与记录地初始排列无关的是    .
A. Shell
排序      B. 归并排序       C. 直接插入排序     D. 选择排序

 

2.    以下多线程对int型变量x的操作,哪几个需要进行同步:
A. x=y;         B. x++;         C. ++x;            D. x=1;

 

3.    代码
void func() {
        static int val;
        … }
中,变量val的内存地址位于:
A.
已初始化数据段    B.未初始化数据段      C.              D.

 

4.    同一进程下的线程可以共享以下
A. stack            B. data section   C. register set        D. thread ID

 

5.    TCPIP分别对应了 OSI中的哪几层?
A.  Application layer
B.  Data link layer
C.  Presentation layer
D.  Physical layer
E.  Transport layer
F.  Session layer
G.  Network layer

 

6.    short a[100]sizeof(a)返回?
A 2     B 4       C 100       D 200        E 400

 

7.    以下哪种不是基于组件的开发技术_____
A XPCOM        B XP           C COM                D CORBA

 

8.    以下代码打印的结果是(假设运行在i386系列计算机上):
    struct st_t
    {
        int    status;
        short* pdata;
        char   errstr[32];
    };

    st_t  st[16];
    char* p = (char*)(st[2].errstr + 32);
    printf("%d", (p - (char*)(st)));

A 32          B 114       C 120         D 1112

 

9.    STL中的哪种结构是连续形式的存储
A  map      B  set         C  list      D  vector

 

10.    一个栈的入栈序列是ABCDE

抱歉!评论已关闭.