1、请选择正确的描述。( )
A. 静态变量和全局变量是在程序一开始时分配内存的,这部分内存无法回收,直至程序结束
B. 通常常来说,在堆上分配内存比在栈上分配内存效率更高
C. 当我预先知道待分配内存大小时,我就可以直接在栈上分配内存,只要不超过当前操作系统的可用内存大小,就永远会成功
D. 内存泄漏就是指当A程序申请一块内存时,有可能操作系统把B程序的一块内存先交给A程序使用,等A程序结束后再返回给B程序,在内存借用的这段时间内,B程序就产生了内存泄漏
参考答案:A
解析:
栈上分配内存效率更高;栈上申请内存并不总是成功;内存泄漏是使用完成之后未回收又无法使用的区域。
2、关于浮点数,下面的描述不正确的是( )。
A. 总能找到一个32bit整数(32 bit int),来描述一个IEEE754 32bit浮点数的整数部分
B. 总能找到一个IEEE754 64bit浮点数,来描述一个32bit整数(32 bit int)
C. 表达式(0.666f - 0.665f == 0.001f),无论在任何平台,一定返回True
D. 当两个不同的平台都使用IEEE754作为浮点数标准时,他们的浮点运算结果就会严格一致
参考答案:C
解析:
相同位时,浮点数的表示范围大于整数,但是由于精度相对于整数较低,依浮点数的尾数位数而定。
在不同平台浮点数标准不同,自然可能存在精度的不同,如果精度过低,可能不同
3、有如下一个类似跳表的额数据结构:
每层都是已经排好序的链表,
level 1层的链表有所有元素,
level N层的链表只有levelN-1的1半的元素,
level N层的结点指向levelN-1层中相同的结点。
请问查找一个元素的时间复杂度是( )。
A. O(nlog2n)
B. O(n)
C. O(log2n)
D. O(n2)
参考答案:C
解析:
二分查找时间复杂度计算:
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O()=O(logn)
4、假设QQ用户包含8种状态,QQ号码为42亿,最少用多少内存标识所有用户状态?( )
A. 约500M
B. 约1G
C. 约1.5G
D. 约2G
参考答案:C
一个内存0/1能表示两种状态
42*10^8*4=168*10^8=16.8*10^9=