发布于 2014-10-05 09:38:53 | 77 次阅读 | 评论: 0 | 来源: 网友投递
腾讯
腾讯控股有限公司(腾迅)是一家民营IT企业,成立于1998年11月29日,总部位于中国广东深圳,是中国最大的互联网综合服务提供商之一,也是中国服务用户最多,最广的互联网企业之一。
1、下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是(B)
A、插入排序 B、堆排序 C、冒泡排序 D、快速排序
2、以下关于Cache 的叙述中,正确的是(B)
A、CPU 中的Cache容量应大于CPU 之外的Cache 容量
B、Cache的设计思想是在合理成本下提高命中率
C、Cache 的设计目标是容量尽可能与主存容量相等
D、在容量确定的情况下,替换算法的时间复杂度是影响Cache命中率的关键因素
3、数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有
10 个物理块,10 个数据记录R1------R10 存放在这个磁道上,记录的安排顺序
如下表所示:
物理块 1 2 3 4 5 6 7 8 9 10
逻辑记录 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10
假设磁盘的旋转速度为20ms/周,磁盘当前处在R1 的开头处,若系统顺序扫描
后将数据放入单缓冲区内,处理数据的时间为4ms(然后再读取下个记录),
则处理这10 个记录的最长时间为(C)
A、180ms B、200ms C、204ms D、
220ms
2+4+((2+4)+2*8)*9=204
4、随着IP 网络的发展,为了节省可分配的注册IP 地址,有一些地址被拿出来
用于私有IP 地址,以下不属于私有IP 地址范围的是(C)
A、10.6.207.84 B、172.23.30.28 C、172.32.50.80 D、
192.168.1.100
私有IP地址共有三个范围段:
A: 10.0.0.0~10.255.255.255 /8 B: 172.16.0.0~172.31.255.255 /12
C: 192.168.0.0~192.168.255.255 /16
5、下列关于一个类的静态成员的描述中,不正确的是(D)
A、该类的对象共享其静态成员变量的值 B、静态成员变量可被该类的所有方
法访问
C、该类的静态方法只能访问该类的静态成员变量 D、该类的静态数据成员变量的值
不可修改
6、已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key)
= key%7 计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测
方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(C)
A、1.5 B、1.7 C、2.0 D、2.3
依次进行取模运算求出哈希地址:
74 应该放在下标为4 的位置,由于25 已经放在这个地方,所以74往后移动,放在了下标
为5的位置上了。
由于是等概率查找,所以结果为:1/6*(1+3+1+1+2+4)= 2.0
7、表达式“X=A+B*(C--D)/E”的后缀表示形式可以为(C)
A、XAB+CDE/-*= B、XA+BC-DE/*= C、
XABCD-*E/+= D、XABCDE+*/=
8、(B)设计模式将抽象部分与它的实现部分相分离。
A、Singleton(单例) B、Bridge(桥接)
C、 Composite(组合) D、Facade(外观)
9、下面程序的输出结果为多少?
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
int main(void)
{
char str[]="Hello";
printf("%d\n",sizeof(str));
printf("%d\n",strlen(str));
char *p = str;
printf("%d\n",sizeof(p));
Func(str);
}
输出结果为:6 5 4 4
对字符串进行sizeof 操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen 操作求字符
串的长度的时候,不计算\0 的。
数组作为函数参数传递的时候,已经退化为指针了,Func 函数的参数str_arg只是表示一个指
针,那个100不起任何作用的。
10、C++将父类的析构函数定义为虚函数,下列正确的是哪个?
A、释放父类指针时能正确释放子类对象
B、释放子类指针时能正确释放父类对象
C、这样做是错误的
D、以上全错
C++的多态肯定是使用父类的指针指向子类的对象,所以肯定是释放子类的对象,如果不使用虚函数的话,
父类的指针就只能够释放父类的对象。
11、下列哪一个不属于关系数据库的特点?
A、数据冗余度小
B、数据独立性高
C、数据共享性好
D、多用户访问
12、下面程序的输出结果为多少?
void Func(char str_arg[2])
{
int m = sizeof(str_arg); //指针的大小为4
int n = strlen(str_arg); //对数组求长度,str_arg 后面的那个2没有任何意义,数组已
经退化为指针了
printf("%d\n",m);
printf("%d\n",n);
}
int main(void)
{
char str[]="Hello";
Func(str);
}
输出结果为: 4 5
strlen只是对传递给Func 函数的那个字符串求长度,跟str_arg中的那个2 是没有任何关系的,
即使把2 改为200 也是不影响输出结果的。。
13、typedef char *String_t; 和#define String_d char * 这两句在使用上有什么
区别?
答:typedef char *String_t 定义了一个新的类型别名,有类型检查。而#define String_d char * 只是做了
个简单的替换,无类型检查,前者在编译的时候处理,后者在预编译的时候处理。
同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,b; String_d c,d; a,b ,c 都是
char*类型,而d 为char 类型
由于typedef 还要做类型检查。。#define 没有。。所以typedef 比#define 安全。。
14、到商店里买200的商品返还100 优惠券(可以在本商店代替现金)。请问
实际上折扣是多少?
15、题目:已知rand7() 可以产生1~7 的7个数(均匀概率),利用rand7() 产
生rand10() 1~10(均匀概率)
记住这道题重点是:均匀概率
//rand7 产生的数概率是一样的,即1~7出现概率一样,由于我们对结果做了一定的筛选只能
通过1~5,而1~5 出现的概率也是一样的,又由于范围为1~5 所以temp1 出现1~5 的概
率为1/5 ,同理后面的出现temp2 的概率为1/2
//首先temp1出现在1~5的概率为1/5,而temp2出现1~2 的概率为1/2,也就是说5*(temp2-1)
出现5 或0 的概率为1/2,所以假如你要得到1~5 的数的话那么5*(temp2-1) 必须 0,所
以因为你要保证5*(temp2-1)=0,这个概率只有1/2,再加上你前面指定1~5 的概率为
1/5 ,所以结果为1/5*1/2=1/10
int rand10()
{
int temp1;
int temp2;
do
{
temp1 = rand7();
}while(temp1>5);
do
{
temp2 = rand7();
}while(temp2>2);
return temp1+5*(temp2-1);
}
16、给定能随机生成整数1 到5 的函数,写出能随机生成整数1 到7的函数。
17、对一个正整数作如下操作:如果是偶数则除以2,如果是奇数则加1,如此
进行直到1 时操作停止,求经过9 次操作变为1 的数有多少个?
第 9 次操作:结果1 由2产生。1个被操作数
8:结果2 只能由4 产生。1 个被操作数
7:结果4 由8、3 产生。2 个
6:结果8 由16、7 产生;结果3 由6产生。共3 个
5:结果16由32、15 产生;结果7 由14产生;结果6 由12、5 产生。共5 个…
每次操作,偶数(2除外)都由该数减1 和该数的2倍得来,奇数只由该数的2 倍得来
各次操作的操作对象个数为:1,1,2,3,5,8,13,21,34,…
本题可以通过所给的变换规律,由易到难,确定操作可变为1 的数组成斐波拉契数列,再根据
所发现的规律求出经过9 次操作变为1 的数的个数。
算法编程题:
1、给定一个字符串,求出其最长的重复子串。
思路:使用后缀数组,对一个字符串生成相应的后缀数组后,然后再排序,排完
序依次检测相邻的两个字符串的开头公共部分。
这样的时间复杂度为:
生成后缀数组O(N)
排序O(NlogN*N) 最后面的N 是因为字符串比较也是O(N)
依次检测相邻的两个字符串O(N * N)
总的时间复杂度是O(N^2*logN),