2012.9.15 搜狐笔试
来源:http://blog.csdn.net/mishifangxiangdefeng/article/details/7982883
一、不定项选择题
1.C/C++语言:以下打印结果为()。
- #include <iostream>
- using namespace std;
- void swap_int(int a, int b)
- {
- int temp = a;
- a = b;
- b = temp;
- }
- void swap_str(char *a, char *b)
- {
- char *temp = a;
- a = b;
- b = temp;
- }
- int main()
- {
- int a = 10;
- int b = 5;
- char *str_a = "hello world";
- char *str_b = "world hello";
- swap_int(a, b);
- swap_str(str_a, str_b);
- printf("%d, %d, %s, %s", a, b, str_a, str_b);
- return 0;
- }
A. 10, 5, hello world, world hello
B. 10, 5, world hello, hello world
C. 5, 10, hello world, world hello
D. 5, 10, world hello, hello world
答:A。都是按值传递,不改变原值
2. C/C++语言:请问打印的两个字符分别是()。
- #include <iostream>
- using namespace std;
- typedef struct object object;
- struct object
- {
- char data[3];
- };
- object obj_array[3] = {{'a', 'b', 'c'},
- {'d', 'e', 'f'},
- {'g', 'h', 'i'},
- };
- int main()
- {
- object *cur = obj_array;
- printf("%c, %c", *(char*)((char*)(cur)+2), *(char*)(cur+2));
- return 0;
- }
A.c, g
B. b, d
C. g, g
D. g, c
答:A
cur中存储的是'a‘的地址,当cur是object指针时,cur+1后cur存储是数组下一个元素的首地址,即'd'的地址。当cur是char指针时,cur+1是'a'的下一个字符的地址,即'b'的地址
3. C/C++语言:请问在64位平台机器下,以下程序的输出结果()
- char *string_a = (char*)malloc(100*sizeof(char));
- char string_b[100];
- printf("%d, %d",sizeof(string_a), sizeof(string_b));
A. 8, 100
B. 100, 8
C. 100, 100
D. 8, 8
答:A
string_a是一个指针,不管它指向的空间有多大,它本身的空间 是固定的。在64位平台机器下,一个指针的大小是8。
答:B
要是得到的序列为递增,应先访问左子树,再访问根结点,最后访问右子树,根据定义知为中序遍历
5. 往一个栈顺序push下列元素:ABCDE,其pop可能的顺序,下列不正确的是()
A. BACDE
B. ACDBE
C. AEBCD
D. AEDCB
答:C。
6. 1100|1010, 1001^1001, 1001&1100分别为()
A. 1110, 0000, 1000
B. 1000, 1001, 1000
C. 1110, 1001, 0101
D. 1000, 1001, 1000
答:A
1 | 1 = 1, 1 | 0 = 1, 0 | 0 = 0
1 ^ 1 = 0, 1 ^ 0 = 1, 0 ^ 0 = 0
1 & 1 = 1, 1 & 0 = 0, 0 & 0 = 0
7.二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是()
A. 红黑树
B. B树
C. AVL树
D. B+树
答:AC
8.int A[2][3] = {1, 2, 3, 4, 5, 6}, A[1][0]和*(*(A+1)+1)的值分别是()。
A. 4, 5
B. 4, 3
C.3, 5
D.3, 4
答:A
数组是A[2][3] = {{1, 2, 3}, {4, 5, 6}},数组下标从0开始计数。前者是第1行第0列,后者是第1行第1列
9.序列16, 14, 10, 8, 7, 9, 3, 2, 4, 1的说法下面哪一个正确()
A. 是大顶堆
B. 是小顶堆
C. 不是堆
D. 是二叉排序树
答:A
10. 输入若已经是排好序的,下列排序算法最快的是()
A. 插入排序
B. Shell排序
C. 合并排序
D. 快速排序
答:A
插入排序一遍扫描即可
Shell排序虽不需要交换数据,但也要进行几次插入排序
合并排序虽不需要交换数据,但也要进行lgn次合并
快速排序在数列有序的情况下效率是最低的
11.一种既有利于短作业又兼顾长期作业的调度方法是()。
A. 先来先服务
B. 均衡调度
C. 最短作业优先
D. 最高响应比优先
答:B
12.同一进程下的线程可以共享()
A. stack
B. data section
C. register set
D. thread ID
答:B
A是栈区。同一个进程的线程共享堆区,但是各自维护自己的栈区
B是数据区。
C是寄存器
D线程ID。同一进程的线程共享一进程ID,各自拥有自己的线程ID
参考http://blog.csdn.net/yang201240/article/details/7243991
13.系统中的“颠簸”是由()引起的。
A. 内存容量不足
B. 缺页率高
C.交换信息量大
D. 缺页率反馈模型不正确
答:D
“颠簸”是《计算机操作系统》中的“抖动”,A和B会造成抖动,但不是主要原因。主要原因是由于每个进程的页面数没有很好地计算,导致某些页面反复地进出。
14.8瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得到,而你只有8小时的时间,最少需要()人测试
A. 2
B. 3
D. 4
D. 6
答:B。类似不带差错控制的海明码。淘宝出过这种题。
答:ABD
TCP的关闭连接是四次握手
UDP提供的是面向无连接的不可靠服务
C参考http://blog.csdn.net/zhangjay/article/details/6403076
客户端不可以调用bind()
16. 进程间的通讯有哪几种形式()
A. Socket
B. Pipe
C. Shared memory
D. Signal
答:ABCD
参考4-16笔试
答:AC
答:ABCDE
19.10个不同的球,放入3个不同的桶内,共有()种方法
A. 1000
B. 720
C. 59049
D. 360
答:C
3^10
20.87的100次幂除以7的余数是多少()
A. 1
B. 2
C. 3
D. 4
答:D
由公式(a*b)%c == (a%c)*(b%c)可知(87^100)%7=(87%7)^100=(3^100)%7
对于任意n(n>=0),(3^n)%7只能6种可能,依次为1,3,2,6,4,5……
二、简答题
- typedef struct node LinkNode;
- struct node
- {
- int data;
- LinkNode *Next;
- };
- //@ret 返回新链表头节点
- LinkNode *reverse_link(LinkNode *head);
- LinkNode *reverse_link_recursive(LinkNode *head);
答:
- #include <iostream>
- using namespace std;
- typedef struct node LinkNode;
- struct node
- {
- int data;
- LinkNode *Next;
- };
- //@ret 返回新链表头节点
- LinkNode *reverse_link(LinkNode *head);
- LinkNode *reverse_link_recursive(LinkNode *head);
- //非递归方法
- LinkNode *reverse_link(LinkNode *head)
- {
- LinkNode *p = head;
- while(p->Next != NULL)
- p = p->Next;
- LinkNode *ret = p;
- LinkNode *q = head;
- while(1)
- {
- while(q->Next != p)
- q = q->Next;
- p->Next = q;
- p = q;
- if(q == head)
- {
- q->Next = NULL;
- break;
- }
- q = head;
- }
- return ret;
- }
- //递归方法
- LinkNode *reverse_link_recursive(LinkNode *head)
- {
- if(head->Next == NULL)
- return head;
- LinkNode *ret = reverse_link_recursive(head->Next);
- head->Next->Next = head;
- head->Next = NULL;
- return ret;
- }
- //输出结果,用于测试
- void Print(LinkNode *head)
- {
- LinkNode *p = head;
- while(p)
- {
- cout<<p->data<<' ';
- p = p->Next;
- }
- cout<<endl;
- }
- //不是题目要求,用于测试
- int main()
- {
- int i;
- LinkNode *p = NULL;
- for(i = 0; i < 10; i++)
- {
- LinkNode *q = new LinkNode;
- q->data = i;
- q->Next = p;
- p = q;
- }
- Print(p);
- p = reverse_link(p);
- Print(p);
- p = reverse_link_recursive(p);
- Print(p);
- return 0;
- }
答:最大和子序列,HDOJ1003
http://acm.hdu.edu.cn/showproblem.php?pid=1003
- #include <iostream>
- using namespace std;
- int main()
- {
- int n,m,i,j,num,start,end,start1;
- long max,temp;
- while(cin>>n)
- {
- for(j=1;j<=n;j++)
- {
- cin>>m;
- cin>>num;
- max=temp=num;
- start=start1=end=1;
- for(i=2;i<=m;i++)
- {
- cin>>num;
- if(temp>=0) {temp=num+temp;}
- else
- {
- temp=num;
- start1=i;
- }
- if(temp>max)
- {
- max=temp;
- start=start1;
- end=i;
- }
- }
- cout<<"Case "<<j<<':'<<endl;
- cout<<max<<' '<<start<<' '<<end<<endl;
- if(j!=n) cout<<endl;
- }
- }
- return 0;
- }
三、设计题
微信公众号:
猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。