笔试面试题——多线程

一.概念性问答题

第一题:线程的基本概念、线程的基本状态及状态之间的关系?

 

第二题:线程与进程的区别?

       这个题目问到的概率相当大,计算机专业考研中也常常考到。要想全部答出比较难。

 

第三题:多线程有几种实现方法,都是什么?

 

第四题:多线程同步和互斥有几种实现方法,都是什么?

       我在参加2011年迅雷校园招聘时的一面和二面都被问到这个题目,回答的好将会给面试成绩加不少分。

 

第五题:多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。

 

二.选择题

第一题(百度笔试题):

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

(1)很明显,x=1是原子操作。
因为x是int范例,32位CPU上int占32位,在X86上由硬件间接提供了原子性支撑。现实上不论有几多个线程同时执行近似x=1这样的赋值语句,x的值最后仍是被赋的值(而不会泛起例如某个线程只更新了x的低16位然后被梗阻,另外一个线程紧接着又更新了x的低24位而后又被壅塞,从而呈现x的值被破坏了的情形)。
(2)再来看x++和++x。
其实雷同x++, x+=2, ++x这样的操作在多线程情况下是需要同步的。因为X86会按三条指令的情势来处置惩罚这种语句:从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内存地址

(3)最后看看x=y。
在X86上它包括两个操作:读取y至寄存器,再把该值写入x。读y的值这个操作本身是原子的,把值写入x也是原子的,但是二者合起来是否是原子操作呢?
例若有两个线程,线程1要执行{y = 1; x = y;},线程2要执行{y = 2; y = 3;}

结果就可能出现在线程1中的x为2

第二题(阿里巴巴笔试题)

多线程中栈与堆是公有的还是私有的

A:栈公有, 堆私有

B:栈公有,堆公有

C:栈私有, 堆公有

D:栈私有,堆私有

 

三.综合题

第一题(台湾某杀毒软件公司面试题):

Windows编程中互斥量与临界区比较类似,请分析一下二者的主要区别。

 

第二题:

一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。

inttally = 0;//glable

voidThreadProc()

{

       for(inti = 1; i <= 50; i++)

              tally += 1;

}

 

第三题(某培训机构的练习题):

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

 

第四题(迅雷笔试题):

编写一个程序,开启3个线程,这3个线程的ID分别为ABC,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC.依次递推。

 

第五题(Google面试题)

有四个线程1、234。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

A1 2 3 4 1 2....

B2 3 4 1 2 3....

C3 4 1 2 3 4....

D4 1 2 3 4 1....

请设计程序。

 

下面的第六题与第七题也是在考研中或是程序员和软件设计师认证考试中的热门试题。

第六题

生产者消费者问题

这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。

 

第七题

读者写者问题

这也是一个非常经典的多线程题目,题目大意如下:有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者读时写者也不能写。

原文地址:http://blog.csdn.net/morewindows/article/details/7392749

你可能感兴趣的:(笔试和面试,多线程,多线程,面试,产品,杀毒软件,阿里巴巴,x86)