有趣的面试题
之前在知乎上看到了一个关于30道Google面试题的帖子,感觉很有意思,在这里比题和答案找出来,进行记录也方便又兴趣的朋友一起讨论。题目转自知乎,
作者:路人甲 https://zhuanlan.zhihu.com/p/24756529
第一题
为什么井盖是圆的?
这个问题算是一个发散性思维的问题,没有具体的答案,而且很多都在说井盖并不一定都是圆的,以下链接有着很多人充分讨论,感觉是理查德·范曼在微软面试时回答这个问题的情况那个答案挺有意思的。
https://www.zhihu.com/question/19678960
第二题
互斥体和信号量之间有什么区别? 你将使用哪一个来保护对增量操作的访问?
1. 互斥量用于线程的互斥,信号量用于线程的同步。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
2. 互斥量值只能为0/1,信号量值可以为非负整数。
3. 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。
信号量举例:
信号量:
儿子: 是否有苹果,s1 = 0
女儿: 是否有桔子,s2 = 0
爸妈: 是否可以放水果,s3 = 3
爸: 妈: 儿子: 女儿:
makeit() makeit() P(s1) P(s2)
P(s3) P(s3) getit() getit()
putit() putit() V(s3) V(s3)
V(s1) V(s2) eatit() eatit()
第三题
一个人把他的车推到了酒店里面,然后他失去了财富,发生了什么?