笔试题总结3

下列关于线程说法错误的是(B)

A.耗时的操作使用线程,提高程序响应

B.耗内存的操作使用线程,提高内存利用率

C.多CPU的系统使用线程,提高CPU利用率

D.并行操作使用线程,如c/s架构中服务端程序为每个客户端请求创建一个线程来响应

解释:多线程可以提高CPU利用率,不能提高内存利用率


个数约为 50k 的数列需要从小到大排序, 数列特征是基本逆序 (多数数字从大到小,个别乱序) ,以下哪种排序算法在事先不了解数列特征的情况下性能大概率最优(不考虑空间限制)_E__.

A.冒泡排序

B.改进冒泡排序

C.选择排序

D.快速排序

E.堆排序

F.插入排序

解释:个数约为50K,基本可以秒杀一般的冒泡改进冒泡选择插入等基本的排序。加上数列的特征是基本逆序,而快速排序的worst case就是基本逆序或者基本有序的情况。综上所述,堆排序应该是大概率最优的。


下列方法中,B__不可以用来程序调优?

A.改善数据访问方式以提升缓存命中率

B.使用多线程的方式提高 I/O 密集型操作的效率

C.利用数据库连接池替代直接的数据库访问

C.利用迭代替代递归

E.合并多个远程调用批量发送

F.共享冗余数据提高访问效率

解释:

A缓存命中率提高,减少访问存储器的开销

B多线程并不能使IO操作并行化。可以通过异步读写、合并读写、计算代替读写等方式优化。 I/O密集型问题一般是硬件层面的问题,比如硬盘,它的I/O就摆在那里,无论你在怎么多线程,瓶颈就在硬盘那,所以B的说法是不可行的。对于“I/O密集型”的应用程序可以采用I/O效率较高的SCSI硬盘,或者采用集群的方式。

C可以减少连接和断开数据库的开销

D可以减少运行时对程序栈进行操作的开销

E减少远程调用的次数


最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是(C)

A.[3,2,5,7,4,6,8]

B.[2,3,5,7,4,6,8]

C.[2,3,4,5,7,8,6]

D.[2,3,4,5,6,7,8]

解释:删除0之后,末尾8代替0的位置


在CPU内存之间进行地址转换时,(B)将地址从虚拟(逻辑)地址空间映射到物理地址空间。

A.TCB

B.MMU

C.CACHE

D.DMA

解释:MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。


#include<stdio.h>
int main()                                                                    
{
    unsigned int a = 6;
    int b = -20;
    (a + b > 6) ? printf(">6\n") : printf("<=6\n");
    printf("%d\n", (a + b));
    return 0;
} 

输出为:>6
解释:执行a+b的时候会将b转换成无符号数,所得的结果也是无符号数,将会是一个很大的正数,自然是大于6的


程序的局部变量存放在栈区,全局变量存放在全局静态区,动态申请的数据存放在堆区


用希尔(Shell)方法排序时,若关键字的初始排序杂乱无序,则排序效率就低(错)

解释:希尔排序又称“缩小增量排序”,即每趟只对相同增量距离的关键字进行比较,这与关键字序列初始有序或无序无关