1.数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有10个物理块,10个数据记录R1------R10存放在这个磁道上,记录的安排顺序如下表所示:
物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
逻辑记录 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
假设磁盘的旋转速度为20ms/周,磁盘当前处在R1的开头处,若系统顺序扫描后将数据放入单缓冲区内,处理数据的时间为4ms(然后再读取下个记录),则处理这10个记录的最长时间为(C)
A、180ms B、200msC、204ms D、220ms
解:是这样的原理,磁盘会一直朝某个方向旋转,不会因为处理数据而停止。本题要求顺序处理R1到R10,起始位置在R1,一周是20ms,共10个记录,所以每个记录的读取时间为2ms。首先读R1并处理R1,读R1花2ms,读好后磁盘处于R1的末尾或R2的开头,此时处理R1,需要4ms,因为磁盘一直旋转,所以R1处理好了后磁盘已经转到R4的开始了,这时花的时间为2+4=6ms。这时候要处理R2,需要等待磁盘从R5一直转到R2的开始才行,磁盘转动不可反向,所以要经过8*2ms才能转到R1的末尾,读取R2需要2ms,再处理R2需要4ms,处理结束后磁盘已经转到R5的开头了,这时花的时间为2*8+2+4=22ms。等待磁盘再转到R3又要8*2ms,加上R3自身2ms的读取时间和4ms的处理时间,花的时间也为22ms,此时磁盘已经转到R6的开头了,写到这里,大家已经可以看到规律了,读取并处理后序记录都为22ms,所以总时间为6+22*9=204ms。
2.Linux下,非超级用户要运行某个目录下的可执行脚本,对该文件夹至少要拥有()权限,如果要用ls命令查看该文件夹下有哪些文件,对该文件夹至少要拥有(A)权限。
A.前者是执行权限,后者执行和读取权限 B.前者是执行和读取权限,后者是执行和读取权限
C.前者是执行权限,后者是读取权限 D.前者是执行和读取权限,后者是读取权限
解:进入目录都要x权限(执行权限),查看目录下的文件需要r权限(读权限)和x权限,因为相当于进入了目录。执行目录下某个可执行文件,需要进入目录的x权限,以及对该执行文件的x权限。
3.随着IP网络的发展,有一些地址被拿来用于私有IP地址,不属于私有IP地址的范围是(C)
A.10.6.207.84 B.172.23.30.28 C.172.32.50.80 D.192.168.1.100
解:三个私有IP地址范围:10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,和192.168.0.0-192.168.255.255。末尾全0的表示一个网段,不用于单独的主机IP使用,x.x.0.1一般是路由器的IP地址(大多路由器产品IP地址为192.168.0.1或192.168.1.1)。末尾全1的(255)是广播地址,也不用于单独主机IP。
4.页式存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如下所示。假定页面大小为8K,图中所示的十进制逻辑地址9612经过地址变换后,形成的物理地址a应为十进制(B)
A.42380 B.25996 C.9612 D.8192
解:做法是:1)首先用逻辑地址9612除以页面大小得到页号 = 9612/(8*1024) = 1,物理地址(即实际存储地址)=基址+偏移。逻辑地址=偏移,3*8*1024+9612%8192 = 25996
5.程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的说法中不正确的是(A)
A、死代码删除指的是编译过程直接抛弃掉被注释的代码;
B、函数内联可以避免函数调用中压栈和退栈的开销
C、For循环的循环控制变量通常很适合调度到寄存器访问
D、强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令
解:死代码是指永远不会执行到的代码,不是注释,比如if(0){…},大括号里的就是死代码。
6. 如下关于编译链接的说法错误的是(???)
A、编译优化会使得编译速度变慢
B、预编译头文件可以优化程序的性能
C、静态链接会使得可执行文件偏大
D、动态链接库会使进程启动速度偏慢
7.TCP的关闭过程,说法正确的是(D)
A、TIME_WAIT状态称为MSL(Maximum Segment Lifetime)等待状态
B、对一个established状态的TCP连接,在调用shutdown函数之前调用close接口,可以让主动调用的一方进入半关闭状态
C、主动发送FIN消息的连接端,收到对方回应ack之前不能发只能收,在收到对方回复ack之后不能发也不能收,进入CLOSING状态
D、在已经成功建立连接的TCP连接上,如果一端收到RST消息可以让TCP的连洁端绕过半关闭状态并允许丢失数据。
解:对于A,TIME_WAIT 是TCP链接断开时必定出现的状态,TCP下每条连接都有一个属性叫做max segment lifetime,就是说该连接关闭后,要经过2*max segment lifetime的时间,才算是真正的被关闭,才能被重新建立,以防止这条链路上还有东西在传输,停留在TIME_WAIT状态的持续时间是最长分节生命周期(MSL)的两倍,有时候称之为2MSL;对于B, 对于sockfd , close会引起4次握手断开连接过程。 shutdown之前调用close,只有当一个sockfd引用了此tcp连接,会出现四次握手。若多个进程或者fd引用了tcp连接,则close一个,只是减少一次引用。 半关闭状态只能由shutdown引起吧。。 四次握手的中间暂存的状态不算,也就是半关闭不是由close引起的,而只能由shutdown引起。即使是暂态,close也不一定会引起。C.此时应该还没有关闭写通道吧。D. TCP 连接在 ESTABLISHED 状态时收到 RST 包后,直接清理队列并删除 TCB,连接进入 CLOSED 状态。
详见 http://blog.youkuaiyun.com/zephyr_be_brave/article/details/8907750
8. 找工作的季节马上就到了,很多同学去图书馆借阅《面试宝典》这本书,现在图书馆外有6名同学排队,其中3名同学要将手中的《面试宝典》还至图书馆,有3名同学希望从图书馆中可以借到《面试宝典》,若当前图书馆内已无库存《面试宝典》,要保证借书的3名同学可以借到书,请问这6位同学有多少种排队方式(C)
A)60
B)120
C)180
D)360
解:n个数进栈,出栈方式有C(2n,n)/(n+1)种 (C(2n,n)表示2n里取n),并且有个名字叫Catalan数。得到C
9、如下关于链接的说法错误的是(C)
A、一个静态库中不能包含两个同名全局函数的定义 //编译器保证没有同名函数,都为静态链接库,有同名函数参与情况下,链接会出现符号多次定义的错误!
B、一个动态库中不能包含两个同名全局函数的定义 //单个动态库可以有两个同名函数,但是不能同时被链接,不然会出错,。
C、如果两个静态库都包含一个同名全局函数,他们不能同时被链接 //编译完成后,会在不同类库,同名函数上加上一些参数或者其他特定信息,从而在调用时区别
D、如果两个动态库都包含一个同名全局函数,他们不能同时被链接 //不同动态库可以有同名函数,运行时加载不会有问题,编译时会有想不到的运行结果,会出现覆盖的情况
10.甲、乙两个人在玩猜数字游戏,甲随机写了一个数字,在[1,100]区间之内,将这个数字写在了一张纸上,然后乙来猜。
如果乙猜的数字偏小的话,甲会提示:“数字偏小”
一旦乙猜的数字偏大的话,甲以后就再也不会提示了,只会回答“猜对 或 猜错”
问: 乙至少猜 多少次 猜可以准确猜出这个数字,在这种策略下, 乙猜的第一个数字是 。
反过来想,最多测试 k 次,能测出来的最多楼层数,显然这个楼层数肯定有上界的,假设为 N(k),那么求出最小的 k 使得 N(k) >= 100 即可
现在有两个玻璃棋子,N(k) 不太好求,可以从最简单的一颗玻璃球的情况开始计算
显然 N(1, k) = k;
再来考虑两个棋子的情况,如果第一次测试就碎掉一颗棋子,就只能用一颗棋子在以下的楼层中找出临界点,问题转化为 N(1, k-1), 第一次测试最高只能在 N(1, k-1)+1 = k 层
如果第一次测试没有碎,第二次测试碎一颗,问题转化为 N(1, k-2), 第一次测试最高只能比第一次测试所在楼层高 N(1, k-2)+1 = k-1 层
以此类推 N(2, k) = k + (k-1) + ... + 1 = k(k+1)/2
要使 N(2, k) >= 100,则k >= 14
所以第一次测试影子 14 层, 如第一次没碎则第二次测试在 14+13 = 27 层,以此类推
更一般地 N(s, k) = N(s-1, k-1)+1 + N(s-1, k-2)+1 + ... + N(s-1, 0)+1
三颗棋子的问题也解决了
f(n, 1) = n
f(1, k) = 1
f(n, k) = f(n - 1, k - 1) + 1 + f(n - 1, k)
11. 20世纪60年代,美国心理学家米尔格兰姆设计了一个连锁信件实验。米尔格兰姆把信随即发送给住在美国各城市的一部分居民,信中写有一个波士顿股票经纪人的名字,并要求每名收信人把这封信寄给自己认为是比较接近这名股票经纪人的朋友。这位朋友收到信后再把信寄给他认为更接近这名股票经纪人的朋友。最终,大部分信件都寄到了这名股票经纪人手中,每封信平均经受6.2词到达。于是,米尔格兰姆提出六度分割理论,认为世界上任意两个人之间建立联系最多只需要6个人。
假设QQ号大概有10亿个注册用户,存储在一千台机器上的关系数据库中,每台机器存储一百万个用户及其的好友信息,假设用户的平均好友个数大约为25人左右。
第一问:请你设计一个方案,尽可能快的计算存储任意两个QQ号之间是否六度(好友是1度)可达,并得出这两位用户六度可达的话,最短是几度可达。
第二问:我们希望得到平均每个用户的n度好友个数,以增加对用户更多的了解,现在如果每台机器一秒钟可以返回一千条查询结果,那么在10天的时间内,利用给出的硬件条件,可以统计出用户的最多几度好友个数?如果希望得到更高的平均n度好友个数,可以怎样改进方案?
可以转换成最短路问题???
11. 段页式虚拟存储管理方案的特点。
(1) 它提供了大量的虚拟存储空间。
(2) 能有效地利用主存,为组织多道程序运行提供了方便。