1、32 位机上根据下面的代码,问哪些说法是正确的?
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
解析:A错,B错,C对,D错
扩展的原则是:
1. 有符号的数据类型,在向高精度扩展时,总是带符号扩展
2. 无符号的数据类型,在向高精度扩展时,总是无符号扩展
1. 有符号的数据类型,在向高精度扩展时,总是带符号扩展
2. 无符号的数据类型,在向高精度扩展时,总是无符号扩展
A是错的,因为a是负数,c是正数,即使跟0比较要转换为int,也是一正一负;
B是错的,a和c 的二进制表示是一样的,都是0xe0。但是比较的时候,都转化为int,所以,a还是作为一个负数存在,c(224)作为一个正数存在,于是就不相等了;
C是正确的,看上面的扩展原则,a作为有符号数,向高精度扩展时,总是带符号扩展;
《整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0, 导致扩宽后两个整形的二进制不再相等,》
2、下面哪些选项能编译通过?
int i;
char a[10;
string f();
string g(string &str);
A. if(!!i){f();} B. g(f()); C. a=a+1; D. g("abc");
解析:A正确,B(待定),C错误,D错误
A正确 B不确定
C错误,是因为a是一个地址常量,不能被赋值;
D错误,是因为”abc”的类型为const char *呢,是常量指针
3、int a[10]; 问下面哪些不可以表示 a[1] 的地址?
A. a+sizeof(int) B. &a[0]+1 C. (int*)&a+1 D. (int*)((char*)&a+sizeof(int))
解析:A错误
a+1就是a[1]的地址,a就是int *,指针+1表示偏移一个元素。
a+1就是a[1]的地址,a就是int *,指针+1表示偏移一个元素。
4、问下面的数据都存放在哪些存储区?
int main()
{
char *p = "hello,world";
return 0;
}
A. ... B. ... C. 栈和常量区 D. 栈和堆
解析:C
因为*p分配在栈区,”hello, world”是常量,常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量。不允许修改。
因为*p分配在栈区,”hello, world”是常量,常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量。不允许修改。
补充:
字符串常量, 按保存区域的不同分为以下几种:
一种是保存在栈区 , char name5[20] = "fengkewei"; 或 char name1[] = "fengkewei";
一种保存在文字常量区, 即 char *name = "fengkewei";
一种保存在全局区(静态区)
最后一种保存在堆区,即用malloc, alloc, realloc 分配内存分配的区域,可有程序员自身分配和释放。
5、假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
解析:
6、下面哪些函数调用必须进入内核才能完成?
A. fopen B. exit C. memcpy D. Strlen
解析:A(不确定) B正确
7、内存管理中的 LRU 方法是用来管理神马的?
A. 虚拟内存的分配 B. 虚拟内存的释放 C. 物理内存的分配 D. 物理内存的释放
解析:A
内存管理的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。
8、关于DMA 的说法,哪些是错误的?
A. DMA,Direct Memory Acess 直接存储器访问,使得不同的速度的硬件设备可以直接通信,不通过 CPU 干预;
B. DMA 访问的时候需要从 CPU 那里夺得总线控制权,然后...
C. DMA 速度快;
D. DMA 不需要中断控制,CPU 管理不要它;
解析:D
9、死锁发生的必要条件?
A. 互斥条件 B. 请求和保持 C. 不可剥夺 D. 循环等待
解析:ABCD
所谓死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用这些进程都将永远不可能向前推进。
死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。
10、有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?
A. 1 B. 2 C. 3 D. 4
解析:BCD
D 顺序执行以下,就可以。B 的话,让后面一个执行到+2,但不要写结果,然后前一个执行完,然后写结果,为 2。C 3 的话,也好分析。A 不可能!肿么可能呢?肿么可能结果只为 1 呢?两个线程都会 +2,+1 何从谈起?先 +1,然后让后面的加法错了,然后结果写进去?前一个 ++n 都没执行的话,后一个又肿么会执行呢?总之不可能是 1 !
11、下面哪些说法正确?
A. 数组和链表都可以随机访问
B. 数组的插入和删除可以 O(1)
C. 哈希表么法范围检查
D. ...
解析:C
12、基于比较的排序的时间复杂度下限是多少?
A. O(n) B. O(n^2) C. O(nlogn) D. ...
解析:C
13、下面图的拓扑排序可能是?
解析:看下拓扑排序
14、求 n 个数中的最大值和最小值,最少的比较次数是?
A. 4n/3 B. 2n-2 C. n-1 D. 3n/2
解析:D 这个学过
15、一棵二叉树的先序遍历是 f b a c d e g h,中序遍历是 a b d c e f g h,问后序遍历是神马?
16、网卡、交换机、路由器和 UDP 分别工作网络的哪些层?
解析:
网卡——物理层? 集线器——物理层
网卡——物理层? 集线器——物理层
中继器——物理层 交换机——链路层
路由器——网络层 UDP——传输层
路由器——网络层 UDP——传输层
网桥——链路层
17、子网掩码 255..255.255.224 可以将网络 x.x.x.x 分成多少个子网?
解析:
18、TCP协议栈的定时器有哪些?
解析:
在内核中tcp协议栈有6种类型的定时器:
在内核中tcp协议栈有6种类型的定时器:
1 重传定时器。 2 delayed ack定时器 3 零窗口探测定时器
上面三种定时器都是作为tcp状态机的一部分来实现的。
4 keep-alive 定时器——主要是管理established状态的连接。
5 time_wait定时器——主要是用来客户端关闭时的time_wait状态用到。
6 syn-ack定时器(主要是用在listening socket) ——管理新的连接请求时所用到。
19、高内聚和低耦合,下面哪个耦合度最高?
A. 通过函数参数传递...
B. 一个函数修改另外一个函数中的数据;
C. 通过全局变量...
D. 通过指示器...
解析:
内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。
所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)
对于低耦合,粗浅的理解是:
一个完整的系统,模块与模块之间,尽可能的使其独立存在。
也就是说,让每个模块,尽可能的独立完成某个特定的子功能。
模块与模块之间的接口,尽量的少而简单。
如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。
20、关于访问,下面哪些是后台绝对不会执行的?
A. 本地查查 DNS,是否有 sinaapp.com 的 ip;
B. 通过 cn. 查找 ip;
C. 通过 com. 查找 ip;
D. 浏览器发送 http get 请求;
D. 服务器回送 xxx.jpg;
解析:
这个题目不知道问的什么意思。
这个题目不知道问的什么意思。
22、在32位大端模式处理器上变量b= ?
unsigned int a= 0x1234;
unsigned char b=*(unsigned char *)&a;
解析:
23、一个有 800 个结点的完全二叉树,问有多少个叶子结点?
解析:
解析:
23、一个有 800 个结点的完全二叉树,问有多少个叶子结点?
解析:
一个有 800 个结点的完全二叉树,问有多少个叶子结点?
解析:假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n= n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2。
24、下面 get 是求一个二维数组元素的函数,请补全。( 1 个空)
- #include <stdio.h>
- #include <stdlib.h>
- #define M 3
- #define N 4
- int get(int *a, int i, int j)
- {
- int v;
- if(a == NULL || i<0 || i>=M || j<0 || j>=N) exit(1); //
- v = *(a+i*N+j); // 杩欓噷鏈変竴涓?┖
- return v;
- }
- int main()
- {
- int a[M[N = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- int v;
- v = get(a, 2, 1);
- printf("a[2][1] == %d ", v );
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
- int insert_sort(int *p, int count)
- {
- int i, j, tmp;
- if(p == NULL || count < 0) return 0; //
- for(i=1; i<count; i++){
- tmp = p[i;
- j = i-1;
- while(j>=0 && p[j>tmp){ // 此处判断条件一个空
- p[j+1 = p[j;
- --j;
- }
- p[j+1 = tmp; // 此处一个空
- }
- return 1;
- }
- int main()
- {
- int i, a[10 = {3, 2, 1, 7, 8, 10, 4, 5, 6, 9};
- insert_sort(a, 10);
- for(i=0; i<10; i++)
- printf("%d ", a[i);
- printf(" ");
- return 0;
- }
26、使用 FIFO 管理页面请求,如果分配的物理块 M = 3 或是 4,请求顺序如下:4 3 2 4 4 3 5 4 5 3 1 5 1 5 1 5 4,问两种情况下页面失效的次数各是多少?( 2 个空)
解析:
27、一个网络图,问 Q 路由器到某个网络要进行跳转的下一个 ip 是多少?(有 1 个空)
28、软件可靠性评估的两个指标:可靠性和安全性?