腾讯面试题整理一

腾讯2011.10.15校园招聘会笔试题

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

4、随着IP网络的发展,为了节省可分配的注册IP地址,有一些地址被拿出来用于私有IP地址,以下不属于私有IP地址范围的是(C)(私网IP地址:10.0.0.0- 10.255.255.255 ;172.16.0.0 -   172.31.255.255;192.168.0.0-192.168.255.255。故选C)

    A、10.6.207.84                              B、172.23.30.28                     C、172.32.50.80               D、192.168.1.100

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

依次进行取模运算求出哈希地址:

A

0

1

2

3

4

5

6

记录

63

48

38

25

74

52

查找次数

1

3

1

1

2

4

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、下面程序的输出结果为多少?

view plain
  1. void Func(char str_arg[2]) 
  2.     int m = sizeof(str_arg);     //指针的大小为4 
  3.     int n = strlen(str_arg);     //对数组求长度,str_arg后面的那个2没有任何意义,数组已经退化为指针了 
  4.     printf("%d\n",m); 
  5.     printf("%d\n",n); 
  6. int main(void
  7.     char str[]="Hello"
  8.     Func(str); 

输出结果为:      4         5

strlen只是对传递给Func函数的那个字符串求长度,跟str_arg中的那个2是没有任何关系的,即使把2改为200也是不影响输出结果的。。

10、到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?

    典型错误回答 200/300 = 67%.

    简要分析:(假设商家和你都不笨,每人求最大利益,商家想卖多商品,买主想少花钱,而你不可能买到刚好,故只能出现以下情况)用枚举清晰:设花销为x元,折扣为r。

    当x<200时,无折扣,r=0;

    当400>x>=200时,分两种情况,

        1)当300>x>=200时,折扣r为200/x

        2)当400>x>=300时,折扣r为(x-100)/x

    当600>x>=400时,

        1)当500>x>=400时,折扣为400/x

        2)当600>x>=500时,(x-200)/x

...................................

所以,设m=x/200(求商),n=x%200(求余数)

当n<100时,折扣r为200m/x

当200>n>=100时,折扣r为(x-m*100)/

算法编程题

1、给定一个字符串,求出其最长的重复子串。

    用动态规划的方法求解,代码如下:

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#include "iostream.h"

//其中i表示每次循环设定的字符串比较间隔(1,2,3...,strlen(str)-1),j表示遍历字符串数组。
void LongChar(char* str)
{
	if(str==NULL)
		return;
	int max=0;    //重复字符串最大长度
	int first=0;  //重复字符串起始位置

	for(int i=1;i<strlen(str);i++)
	{
		for(int k=0,j=0;j<strlen(str)-i;j++)
		{
			if(str[j]==str[j+i])
				k++;
			else
				k=0;
			if(k>max)
			{
				max=k;
				first=j-k+1;
			}			
		}
	}
	//输出最长字串
	if(max>0)
	{
		cout<<"long:"<<max<<endl;
		for(int count=0;count<max;count++)
			cout<<str[first+count];
		cout<<endl;
	}
}

int main()
{
	char* str="abcdeeeeeeabcdeabcdeee";
	LongChar(str);
	return 0;
}

 

你可能感兴趣的:(设计模式,算法,cache,面试,腾讯,磁盘)