几个进程间的通信方式
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
udp,tcp,ftp,http
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
黑帽子,白帽子问题
一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
解:三个人
1. 若是两个人,设A、B是黑帽子,第二次关灯就会有人打耳光。原因是A看到B第一次没打耳光,就知道B也一定看到了有带黑帽子的人,可A除了知道B带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人!同理B也是这么想的,这样第二次熄灯会有两个耳光的声音。
2. 如果是三个人,A,B,C. A第一次没打耳光,因为他看到B,C都是带黑帽子的;而且假设自己带的是白帽子,这样只有BC戴的是黑帽子;按照只有两个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有。。。于是他知道B和C一定看到了除BC之外的其他人带了黑帽子,于是他知道BC看到的那个人一定是他,所以第三次有三个人打了自己一个耳光
猜牌问题
S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?于是,S先生听到如下的对话:P先生:我不知道这张牌。Q先生:我知道你不知道这张牌。P先生:现在我知道这张牌了。Q先生:我也知道了。听罢以上的对话,S先生想了一想之后,就正确地推出这张牌是什么牌。请问:这张牌是什么牌?
解:方块 5
P知道点数却不知道是哪张牌,那么就去掉点数不重复的 J、8、2、7、3、K、6.剩下:
红桃 A、Q、4
黑桃 4
草花 Q、5、4、
方块 A、5
然后,Q知道花色,并且知道P不知道是哪张牌,那么就排除含有只出现一次数的花色:黑桃、草花.剩下:
红桃 A、Q、4
方块 A、5
然后,P知道点数的,听Q说“我知道你不知道这张牌.”就知道了是哪张牌,所以绝不可能是点数重复的A.于是剩下:
红桃:Q、4
方块:5
最后,Q听P这么说(P知道点数,而Q又可以确定花色),那么只能是方块5
猜数问题
一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的)教授问第一个学生:你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我猜出来了,是144!教授很满意的笑了。请问您能猜出另外两个人的数吗?
解:经过第一轮,说明任何两个数都是不同的。第二轮,前两个人没有猜出,说明任何一个数都不是其它数的两倍。现在有了以下几个条件:1.每个数大于02.两两不等3.任意一个数不是其他数的两倍。每个数字可能是另两个之和或之差,第三个人能猜出144,必然根据前面三个条件排除了其中的一种可能。假设:是两个数之差,即x-y=144。这时1(x,y>0)和2(x!=y)都满足,所以要否定x+y必然要使3不满足,即x+y=2y,解得x=y,不成立(不然第一轮就可猜出),所以不是两数之差。因此是两数之和,即x+y=144。同理,这时1,2都满足,必然要使3不满足,即x-y=2y,两方程联立,可得x=108,y=36。
这两轮猜的顺序其实分别为这样:第一轮(一号,二号),第二轮(三号,一号,二号)。这样分大家在每轮结束时获得的信息是相同的(即前面的三个条件)。
那么就假设我们是C,来看看C是怎么做出来的:C看到的是A的36和B的108,因为条件,两个数的和是第三个,那么自己要么是72要么是144(猜到这个是因为72的话,108就是36和72的和,144的话就是108和36的和。这样子这句话看不懂的举手):
假设自己(C)是72的话,那么B在第二回合的时候就可以看出来,下面是如果C是72,B的思路:这种情况下,B看到的就是A的36和C的72,那么他就可以猜自己,是36或者是108(猜到这个是因为36的话,36加36等于72,108的话就是36和108的和):
如果假设自己(B)头上是36,那么,C在第一回合的时候就可以看出来,下面是如果B是36,C的思路:这种情况下,C看到的就是A的36和B的36,那么他就可以猜自己,是72或者是0(这个不再解释了):
如果假设自己(C)头上是0,那么,A在第一回合的时候就可以看出来,下面是如果C是0,A的思路:这种情况下,A看到的就是B的36和C的0,那么他就可以猜自己,是36或者是36(这个不再解释了),那他可以一口报出自己头上的36。(然后是逆推逆推逆推),现在A在第一回合没报出自己的36,C(在B的想象中)就可以知道自己头上不是0,如果其他和B的想法一样(指B头上是36),那么C在第一回合就可以报出自己的72。现在C在第一回合没报出自己的36,B(在C的想象中)就可以知道自己头上不是36,如果其他和C的想法一样(指C头上是72),那么B在第二回合就可以报出自己的108。现在B在第二回合没报出自己的108,C就可以知道自己头上不是72,那么C头上的唯一可能就是144了。
五个房子,五个人问题
前提:
1 有五栋五种颜色的房子
2 每一位房子的主人国籍都不同
3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物
4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料
提示:1 英国人住在红房子里
2 瑞典人养了一条狗
3 丹麦人喝茶
4 绿房子在白房子左边
5 绿房子主人喝咖啡
6 抽PALL MALL烟的人养了一只鸟
7 黄房子主人抽DUNHILL烟
8 住在中间那间房子的人喝牛奶
9 挪威人住第一间房子
10 抽混合烟的人住在养猫人的旁边
11 养马人住在抽DUNHILL烟的人旁边
12 抽BLUE MASTER烟的人喝啤酒
13 德国人抽PRINCE烟
14 挪威人住在蓝房子旁边
15 抽混合烟的人的邻居喝矿泉水
问题是:谁养鱼???
第一间是黄房子,挪威人住,喝矿泉水,抽DUNHILL香烟,养猫;
第二间是蓝房子,丹麦人住,喝茶,抽混合烟,养马;
第三间是红房子,英国人住,喝牛奶,抽PALL MALL烟,养鸟;
第四间是绿房子,德国人住,喝咖啡,抽PRINCE烟,养猫、马、鸟、狗以外的宠物;
第五间是白房子,瑞典人住,喝啤酒,抽BLUE MASTER烟,养狗。
(二)
5个人来自不同地方,住不同房子,养不同动物,吸不同牌子香烟,喝不同饮料,喜欢不同食物。根据以下线索确定谁是养猫的人。
1. 红房子在蓝房子的右边,白房子的左边(不一定紧邻)
2. 黄房子的主人来自香港,而且他的房子不在最左边。
3. 爱吃比萨的人住在爱喝矿泉水的人的隔壁。
4. 来自北京的人爱喝茅台,住在来自上海的人的隔壁。
5. 吸希尔顿香烟的人住在养马人的右边隔壁。
6. 爱喝啤酒的人也爱吃鸡。
7. 绿房子的人养狗。
8. 爱吃面条的人住在养蛇人的隔壁。
9. 来自天津的人的邻居(紧邻)一个爱吃牛肉,另一个来自成都。
10.养鱼的人住在最右边的房子里。
11.吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间(紧邻)
12.红房子的人爱喝茶。
13.爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。
14.吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。
15.来自上海的人住在左数第二间房子里。
16.爱喝矿泉水的人住在最中间的房子里。
17.爱吃面条的人也爱喝葡萄酒。
18.吸“555”香烟的人比吸希尔顿香烟的人住的靠右
答案:
第一间是兰房子,住北京人,养马,抽健牌香烟,喝茅台,吃豆腐;
第二间是绿房子,住上海人,养狗,抽希尔顿,喝葡萄酒,吃面条;
第三间是黄房子,住香港人,养蛇,抽万宝路,喝矿泉水,吃牛肉;
第四间是红房子,住天津人,抽555,喝茶,吃比萨;
第五间是白房子,住成都人,养鱼,抽红塔山,喝啤酒,吃鸡。
五个囚犯问题
有5个囚犯(A、B、C、D、E),在装有100颗绿豆的麻袋里抓绿豆,规定每人至少抓一颗,而抓的最多和最少的人将被处死,而且、他们之间不能交流,但在抓的时候,可以摸出剩下的豆子数.问他们中谁的存活几率最大?
提示:1、他们都是很聪明的人
2、他们的原则是先求保命,再去多杀人
3、100颗不必都分完
4、若有重复的情况,则也算最大或最小,一并处死.
每个人拿的个数必须大于等于2,否则就是死
所以,1号最多敢拿50-2*4=42颗,但这也是死,因为2号就拿41颗,剩下17颗,1号也是死.
所以1号必须让拿了N颗后,再让2号拿后,还剩很多.那么我们把100颗分为5份.
如果1号拿21颗,2号就拿20颗,剩下59颗,肯定有一个人拿的少于20颗,所以1号拿21颗死定.
再看1号拿20颗,2号拿21颗的话,剩下也是59颗,可以是20+20+19,2号死定.
那么,看2号拿20颗,剩下60颗,3号如果拿21颗,剩下39颗,可以是20+19,3号死定.
所以,接着看3号拿20颗,剩下40颗,那么,4号怎么拿也是死!而且和5号一起死!要不就全部一起死(都拿20颗)
3号当然怕同归于尽啊,因为4号5号心想怎么也是个死,不如弄死全部.
所以看3号拿19颗,剩下41颗,可以是20+20,20+19.20+21,不管怎么,3号都死定了.
所以,3号只敢拿20颗.因为可以活不成也弄个全体一起死.
那么,4号也同样怕全部20颗的情况,所以,而21颗不能拿,所以,他拿19颗.
剩下61颗,可以是20+20+19,20+20+20,20+20+21,他怎么也是个死!
所以,4号没得选择,只能拿20颗.至少可以弄得个全部拿20颗一起同归于尽.
同理!5号也只能拿20颗!
这样下去,1-5号都拿20颗,同归于尽!
因为:任何一个人,拿21个以上或者19个以下(包括)就是单独死或者只死几个.
所以.答案是:“同归于尽”