下列关于线程说法错误的是(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)方法排序时,若关键字的初始排序杂乱无序,则排序效率就低(错)
解释:希尔排序又称“缩小增量排序”,即每趟只对相同增量距离的关键字进行比较,这与关键字序列初始有序或无序无关