一、单选题
1、在常用的网络协议中,___是面向连接的、有重传功能的协议。
A、IP B、TCP C、UDP D、DXP
2、500张多米诺骨牌整齐地排成一列,依顺序编号为1、2、3……499、500。第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走所有奇数位置上的骨牌,依此类推。请问最后剩下的一张骨牌的编号是多少?
A、128 B、250 C、256 D、500
3、两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的?
void foo(){ ++a; printf("%d ",a); }
A、3 2 B、2 3 C、3 3 D、2 2
4、某系统采用36进制数表示一字符串,36个字符0-9 a-z分别由数字0~35表示,则10进制数字872581表示字符串____?
A、imac B、ipad C、iphone D、ipod
5、以下代码输出的是__?
int foo(int x,int y) { if(x<=0||y<=0) return 1; return 3*foo(x-1,y/2); } cout<<foo(3,5)<<endl;
A、81 B、27 C、9 D、3
6、以下数据结构说法,错误的是___?
A、红黑树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
B、B+树插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(logn)
C、Hash表插入操作的平均时间复杂度为O(logn),最坏时间复杂度为O(n)
D、排序链表插入操作的平均时间复杂度为O(n),最坏时间复杂度为O(n)
7、哈弗曼编码是一种无损二进制熵编码算法,其加权路径长度最小,字符串“alibaba”的二进制哈弗曼编码有___位(bit)
A、11 B、12 C、13 D、14
8、节点按中序遍历为xyz的二叉树可能有几种?
A、2 B、3 C、4 D、5
9、在4个元素的集合上可定义的互不相同的划分有___个。
A、14 B、15 C、16 D、17
10、下列关于C语言中指针的说法错误的是:___
A、指针的值是一个地址
B、非法指针是指该指针的值不是一个已经分配的内存地址
C、两个指向同类型地址的指针之间做减法是没有意义的
D、指针的指针占用的内存空间和其他指针占用的内存空间相同
二、不定项选择
11、设A、B、C为任意集合,下面的命题为真的是____
A、如果A-B=∅,则A=B
B、如果A-C=B-C,则A∩^C=B∩^C
C、如果A∪B=A∪C,则B=C
D、如果A∩B=A∩C,则B=C
E、∅是∅的子集
12、一个栈的入栈序列为ABCDE,则不可能的出战序列为___
A、ECDBA B、DCEAB C、DECBA D、ABCDE E、EDCBA
13、以下关于内存泄漏说法正确的是____(注:此题不太确定,欢迎补充)
A、内存泄漏是操作系统内存管理出错导致的问题
B、单线程程序不可能内存泄漏
C、如果一个进程在运行过程中占用的内存无限制上升,那么该进程有内存泄漏
D、只要进程在退出之前释放了所有分配的内存,那么就不会内存泄漏
E、内存泄漏是仅仅出现在C/C++程序的问题,Java程序不会内存泄漏
14、关于进程和线程,下列说法正确的是___
A、线程是资源分配和拥有的单位
B、线程和进程都可并发执行
C、在linux系统中,线程是处理器调度的基本单位
D、线程的粒度小于进程,通常多线程比多进程并发性更高
E、不同的线程共享相同的栈空间
第三项目组 填空与题目
15、某递归算法的算法复杂度满足如下关系:T(n)=0,(n<=1);T(n )=1+T(n/2)+n2,(n>=2),那么该算法复杂度表示为大0为:
16、某种物理机一年的无故障概率为p,每台物理机经由过程虚拟技巧可以虚拟出v台虚拟机,假定在物理机没呈现故障的景象下虚拟机不会呈现故障,那么每台虚拟机一年无故障的概率为___p___。若是有m台如许的物理机,虚拟出mv台虚拟机,经由过程某种分布式容错技巧,可以使基于这些虚拟机搭建的办事只要有一台虚拟机无故障,这个办事便可以无故障。那么这个办事一年的无故障概率为__1-(1-p)m_。若是想经由过程同样数量的虚拟机实现更高的无故障概率,但不限制物理机的数量,可以采取的办法是:通过增加物理机,然后降低每台物理机虚拟出虚拟机的数量
17、宿舍内5个同学一起玩对战游戏,每场比赛有一些人作为红方,另一些人作为蓝方,请问至少需要多少场比赛,才能使任意两个人之间有一场红方对蓝方和一场蓝方对红方的比赛?请写出思路及成果。
18、读取并处理一个文件中的记录,每条记录处理会产生一个对应的结果,不同记录之间的处理过程之间互不依赖,结果输出到另一个文件中,某程序猿实现了该处理程序的单线程版本,运行时发现CPU应用率达到80%。
(1)为何CPU应用率不是100%?
(2)假定程序运行的机器的核数在4到16不等,如何设计程序,使该处理程序运行的最快?
(3)在一个n核机器上,速度最快是原来程序的多少倍?
19、请实现一个程序,能对点分字符串按段翻转。如"www.taobao.com”翻转为“com.taobao.www”,”sports.sina.com.cn”翻转为”cn.com.sina.sports”。请求时间复杂度为O(n),空间复杂度为O(1),结果保存在参数指针所指的空间中。
解答:
#include <iostream> #include <cstring> void ReverseString(char *str, int len) { if(str == NULL || len <= 0) return ; char *p = str + len - 1; while(str < p) { char t = *str; *str = *p; *p = t; str++; p--; } } void ReverseWord(char *str) { if(str == NULL) return ; int len = strlen(str); ReverseString(str, len); char *p = str; while(*str != '\0') { while(*str >= 'a' && *str <='z' && *str != '\0') str++; ReverseString(p, str - p); p = ++str; } } int main(void) { char str[] = "www.taobao.com"; ReverseWord(str); std::cout<<str<<std::endl; return 0; }
第四项目组 综合题
某B2C网站有1亿用户和200万商品,每一个用户都有自己喜爱若干件商品,若是两个用户都喜好同一件商品,我们定义中两个用户有一个“同好商品”,“同好度”为两个用户的同好商品数和这两个用户中至少有一人喜好的商品数的比值。同好度衡量了两个用户之间的商品喜好的接近程度,这在商品推荐,SNS等领域有着重要用途。
请设计一个算法,计算每一个用户的同好用户集合及同好度。
输入数据:多个文件,每个文件的数据有多行,每一行的数据格式如下:用户ID喜好的商品ID1 喜好的商品ID2 .......喜好的商品n,此顶用户ID和商品ID均为32位整数,中心以空格分隔。
如:
16 1001 1002 3003
输出数据:一个或多个文件,每一行的数据格局如下:
用户ID 同好用户ID1:同好度 同好用户ID2:同好度......同好用户IDn:同好度
中心以空格隔开。算法可以描述为伪代码。