2015 校招研发在线笔试题

1)不算main这个进程自身,到底创建了多少个进程啊?int main(int argc, char* argv[]){ fork(); fork() && fork() || fork(); fork();}【解析】只看这句, fork() && fork() || fork(); 结果有5个进程。第一句 ,fork 后进程加倍,所以执行 fork() && fork() || fork() 后有10个进程。最后一句进程加倍,就是20个 减去主进程,结果共有 19个。3)下面的函数哪个是系统调用而不是库函数()?printfscanffgetcreadprint_sscan_s【解析】read()不是库函数,,是系统调用,作用是读文件(Linux中的一切设备都看做文件)函数原型:Ssize_t read(int filedes, void *buf, size_t nbytes); Returns:number of bytes read, 0 if end of file, -1 on error如果read系统调用成功,则将返回读取到的字节数;如果遇到了文件尾EOF,则返回0。正确答案: D5)某二维平面上有12个位置不同的点,通过连接其中任意两点,可以画出59条不同的直线。那么,在59条直线中,经过3个或3个以上的点的直线有()条。【解析】】12个点,任意三个点或是以上不在同一条直线上,可以组成的直线为12*11/2=66先在只有59条直线,说明7条直线重复而三个点在一条线上,减少2条线的组合四个点在一条线上,减少5条线的组合五个点在一条线上,减少9条线的组合所以可能的情况 2+5=7即 三个点在一条线上,4个点在一条线上,其余的点均不在一条线上1—-1—–1 1—–1—–1—–1所以经过三个或四个点的线有2条7)下列不属于hash碰撞解决方法的是()。线性探测单旋转法二次探测拉链法双重散列多重散列【解析】旋转法是将数据的键值中进行旋转。如5062101旋转之后得到1506210,这是产生随机散列值(hash)的一种方法,不是解决hash碰撞的方法。正确答案: B8)针对外部存储器(如磁盘)上存放的程序和数据,说法正确的是()。可由CPU直接进行读取写入操作须在CPU访问之前移入内存必须由文件系统管理的必须由进程调度程序管理程序和数据必须为只读程序和数据只能被一个进程独占【解析】文件系统的数据都是需要被加载到内存中,才可以被CPU直接访问的。CPU的寻址空间指的是内存的寻址空间,外层由文件系统管理,CPU无法直接访问,外存(如磁盘)上存放的程序和数据必须在CPU访问之前移入内存B、C存在争议,访问的时候如果没在内存,可以触发缺页中断,调入内存,虚拟内存机制。正确答案: B10)村长带着4对父子参加爸爸去哪儿第三季第二站某村庄的拍摄。村里为了保护小孩不被拐走有个前年的规矩,那就是吃饭时候小孩左右只能是其他小孩或自己的父母,那么4对父子在圆桌上共有多少种坐法。(旋转一下,每个人面对方向变更后算是一种新的坐法)【解析】(1)根据小孩左右只能是其他小孩或自己的父母进行划分,对小孩划分不太容易,对父母划分,集合是1 – 4个连续。(最多几个连续)(2)当3个连续时,出现最后一个父母两边是孩子,会偷走一个。当父母都是间隔的,同样不成立。(3)当4个相邻,两个孩子固定,还有两个位置,孩子随意 A(4,4) * A(2,2),该旋转有8种情况,没有重复,当2个相邻时,只有A(4,4),父母的摆放,当旋转以后,会有一半是对称的,一半重复,除以2。正确答案: A(4,4)* A(2,2) * 8 + A(4,4) * 8 / 2 = 48012)并发进程执行的相对速度是()。由进程的程序结构决定由进程本身来控制进程被创建时决定与进程度策略有关与进程销毁时间有关由内存分配策略决定【解析】一个进程被中断后, 哪个进程可以运行、被中断的进程什么时候能再去占用 处理器,这是与进程调度策略有关的. 所以,进程执行的相对速度不能由进程自己来控制, 还与进程调度 策咯有关。正确答案: D13)有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?C=(int32)(A+B),D=(int32)(A-B)C=(int32)(A+B),D=(int32)((A-B)>>1)C=(int32)(A+B),D=BC=(int32)(A+B),D=(int32)(A+2*B)C=(int32)(A*B),D=(int32)(A/B)都不可以,可能溢出【解析】第一项:A=(C+D)/2,B=C-A第二项:D右移一位,不知道移出的是1还是0,不能恢复第三项:A=C-D,B=D第四项:B=D-C,A=C-B第五项:虽然可以C*D再开方,但是不能确定A和B的正负但是对于无符号数,A不行,这里简单起见,以3bit数为例。例如A=111,B=110。C=A+B=001(溢出),D=A-B=001,所以A不能正确恢复了。C仍然可以,A=C-D=001-110=111。D答案,同样因为溢出不能恢复。正确答案: C16)下列关于线程调度的叙述中,错误的是()。调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会调用线程的yeild()方法,只会使与当前线程相同优先级的线程获得运行机会当有比当前线程的优先级高的线程出现时,高优先级线程将抢占CPU并运行一个线程由于某些原因进入阻塞状态,会放弃CPU具有相同优先级的多个线程的调度一定是分时的分时调度模型是让所有线程轮流获得CPU使用权【解析】

yield()暂时交出 cpu 控制权,从 running 状态转为 runnalbe 状态,但是仍有 可能被调度,sleep()线程指定休眠一段时间,wait()在其他线程调用此对 象的 notify()或 notifyAll()方法时才能继续执行。

线程中 sleep()方法和 yeild()方法的主要区别:

1.sleep()方法会给其他线程运行的机会,而不管其他线程的优先级,因此会给较 低优先级的线程运行的机会;yeild()方法只会给优先 级相同的或者比自己高的线程运行的机会.2.sleep()方法声明抛出 InterruptionException 异常,而 yeild()方法没有声明 抛出任何异常.3.sleep()方法比 yeild()方法具有更高的可移植性.4.sleep()方法使线程进入阻塞状态,而 yeild()方法使线程进入就绪状态. 当前运行的线程可以调用另一个线程的 join()方法,当前运行的线程将转到阻 塞状态,直到另一个线程运行结束,它才会恢复运行. join()有两种形式:public void join()和 public void join(long timeout)可 以设置阻塞的时间。可是却依旧为对方擦去嘴角的油渍。

2015 校招研发在线笔试题

相关文章:

你感兴趣的文章:

标签云: