腾讯 2012 实习生笔试题

一、单项选择题 
1)  给定 3 个 int 类型的正整数 x,y,z,对如下 4 组表达式判断正确的选项() 
Int a1=x+y-z; int b1=x*y/z; 
Int a2=x-z+y; int b2=x/z*y; 
Int c1=x<<y>>z; int d1=x&y|z; 
Int c2=x>>z<<y; int d2=x|z&y; 
A、a1 一定等于 a2 
B、b1 一定定于 b2 
C、c1 一定等于 c2 

D、d1 一定等于 d2 

解析:B:当x为一个极小整数,而y、z是极大整数时,x/z=0,此时b1不等于0,而b2则先发生隐式转换使得x/z等于0从而b2结果为0。

    C:同B一样,当c2>>z时可能导致此时为0,从而C2在<<y时结果仍然为0,而C1则可能不为0.

    D:反例:x=1,y=2,z=4.则d1=4,d2=0;

    A:相加会产生溢出吗?

所以答案为A。

2)  程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的
说法中不正确的是() 
A)死代码删除指的是编译过程直接抛弃掉被注释的代码; 
B)  函数内联可以避免函数调用中压栈和退栈的开销 
For 循环的循环控制变量通常很适合调度到寄存器访问 
D)强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令 

解析:

A: 死代码的英文是dead code。是指在程序操作过程中永远不可能被执行到的代码,所以不是注释的代码。例如if(0){…},大括号里的就是死代码。

D:所谓强度削弱,就是用一种(或一串)执行时间较短的操作去等价地代替一个操作。例如,乘以2的n次方运算可以用左移来替换(例如,X*8可替换为X<<3),因为在多数机器上,左移运算的速度比乘法运算的速度快。

答案为:A

3)  如下关于进程的面熟不正确的是() 
A)进程在退出时会自动关闭自己打开的所有文件 
B)  进程在退出时会自动关闭自己打开的网络链接 
C)  进程在退出时会自动销毁自己创建的所有线程 
D)进程在退出时会自动销毁自己打开的共享内存 

解析:

D:共享内存销毁了,会对其他正在使用这段内存的进程造成破坏。

答案为:D

4)  计算表达式 x6+4x4+2x3+x+1最少需要做()次乘法 
A)3 
B)4 
C)5 
D)6 

解析:第一次乘法:x^2,第二次乘法:x^4=x^2 * x^2,第三次乘法:原式=x^2 * (x^4+4x^2+2x)+x+1,每一项的系数可以使用加法来实现。

答案为:A

5)、在如下8*6的矩阵中,请计算从A移动到B一共有多少种走法?要求每次只能向上挥着向右移动一格,并且不能经过P;

A、492

B、494

C、496

D、498

 解析:从A到B向上需要走5步,向右需要走7步,则总共走的步数是12步,先计算从A到B的总步数:从12步中选择向上的5步中的位置,则总共需要C(12,5)=792,剩余的7步的位置则是向右走。不能经过P,则同理,经过P的总步数是C(6,3)*C(6,2)=300。则最终的步数为:792-300=492.

答案为:A,

6)、SQL语言中删除一个表的指令是()

A、DROP TABLE

B、DELETE TABLE

C、DESTROY TABLE

D、REMOVE TABLE

7、某产品团队由美术组、产品组、client程序组和server程序组4个小组构成,每次构建一套完整的版本时,需要各个组发布如下资源。美术组想客户端提供图像资源(需要10分钟),产品组向client组合server提供文字内容资源(同时进行,10分钟),server和client源代码放置在不同工作站上,其完整编译时间均为10分钟切编译过程不依赖于任何资源,client程序(不包含任何资源)在编译完毕后还需要完成对程序的统一加密过程(10分钟)。可以请问,从要完成一次版本构建(client与server的版本代码与资源齐备),至少需要多少时间()

A、60分钟

B、40分钟

C、30分钟

D、20分钟

解析:

D。除了加密以外,剩下的事情在第一个10分钟内可以并发完成。

8)如下关于编译链接的说法错误的是() 
A)编译优化会使得编译速度变慢 
B)预编译头文件可以优化程序的性能 
C)静态链接会使得可执行文件偏大 
D)动态链接库会使进程启动速度偏慢 

答案为:B

9、如下关于链接的说法错误的是()

A、一个静态库中不能包含两个同名全局函数的定义

B、一个动态库中不能包含两个同名全局函数的定义

C、如果两个静态库都包含一个同名全局函数,他们不能同时被链接

D、如果两个动态库都包含一个同名全局函数,他们不能同时被链接

答案为:C
10)某火车站要通过一条栈道(先进后出)来调换进入车站的列车顺序,若进站的列车顺序
为 A、B、C,则下列哪个出站顺序不可能?() 
A)ABC 

B)ACB 

C)CAB 

D)CBA 

答案为:C

11)栈是一种智能在某一端插入和删除的特殊线性表,它按照后进先出的原则存储数据,先
进入的数据被压入栈底,最后的数据在栈顶,若 6 元素为 A、B、C、D、E、F 出栈顺序为
B、D、C、F、E、A,则 S 栈的最小容量为() 
A)3 
B)4 
C)5 
D)6 

答案为:A

12)找工作的季节马上就到了,很多同学去图书馆借阅《面试宝典》这本书,现在图书馆外
有 6 名同学排队,其中 3 名同学要将手中的《面试宝典》还至图书馆,有 3 名同学希望从图
书馆中可以借到《面试宝典》,若当前图书馆内已无库存《面试宝典》,要保证借书的 3 名同
学可以借到书,请问这 6 位同学有多少种排队方式() 
A)60 
B)120 
C)180 
D)360 

解析:卡特兰数?

答案为:C

13)若完全二叉树的节点个数为 2N-1,则叶节点个数为() 
A)N-1 
B)2×N 
C)2N-1 
D)2N 

解析:n-1=n1+2*n2.;n=n0+n1+n2;n2=n0-1;所以n=2n0+n1-1;得到2N=2n0+n1;由于是完全二叉树,所以n1为0或者1.此处肯定为0;即 n0=N.??

14)排序算法的稳定是指,关键码相同的记录排序前后相对位置不发生改变,下面哪种排序
算法是不稳定的() 
A)插入排序 
B)冒泡排序 
C)快速排序 
D)归并排序 

答案为:C

15)下列说法中错误的是:() 
A)插入排序某些情况下复杂度为 O(n) 
B)排序二叉树元素查找的复杂度可能为 O(n) 
C)对于有序列表的排序最快的是快速排序 
D)在有序列表中通过二分查找的复杂度一定是 O(n log2n) 

解析:A当数据完全有序时就是O(n),B当数退化成线性表时(只有一叉时)出现,C快排只对无序、随机序列有优势。D是对的

答案为:C

16)在程序设计中,要对两个 16K×16K 的多精度浮点数二维数组进行矩阵求和时,行优先
读取和列优先读取的区别是() 
A)没区别 
B)行优先快 
C)列优先快 
D)2 种读取方式速度为随机值,无法判断

解析:对行进行读取相对于列来说会减少查找内存快的时间。 

答案为:B

18)字符串 www.qq.com 所有非空子串(两个子串如果内容相同则只算一个)个数是() 
A)1024 
B)1018 
C)55 
D)50 

解析:子串:1个字符时:6,2个字符时:ww w. .q qq q. .c co om 8个以此类推

答案为:D

19)TCP 的关闭过程,说法正确的是() 
A)TIME_WAIT 状态称为 MSL(Maximum Segment Lifetime)等待状态 
B)对一个 established 状态的 TCP 连接,在调用 shutdown 函数之前调用 close 接口,可以让
主动调用的一方进入半关闭状态 
C)主动发送 FIN 消息的连接端,收到对方回应 ack 之前不能发只能收,在收到对方回复 ack
之后不能发也不能收,进入 CLOSING 状态 
D)在已经成功建立连接的 TCP 连接上,如果一端收到 RST 消息可以让 TCP 的连洁端绕过
半关闭状态并允许丢失数据。 

答案为:D

20)操作系统的一些特别端口要为特定的服务做预留,必须要 root  权限才能打开的端口描
述正确的是() 
A)端口号在 64512-65535 之间的端口 
B)所有小于 1024 的每个端口 
C)RFC 标准文档中已经声明特定服务的相关端口,例如 http 服务的 80 端口,8080 端口等 
D)所有端口都可以不受权限限制打开 

答案为:C

二、填空题 
21)除了 10 进制、2 进制之外,16 进制表达式在计算机领域中也经常使用(例如各种字符
集的定义描述),下式:(2012)10+(AF1)16 的结果是(  )(请用 10 进制表示)。 

答案为:2012+2801=4813;将16进制先转换成2进制在转换成10进制。

22)仔细阅读以下一段递归的函数定义: 

int ack(int m,int n) 
{ 
	if(m==0) 
	{ 
		return n+1; 
	} 
	else if(n==0) 
	{ 
	return ack(m-1,1); 
	} 
	else 
	{ 
	retrun ack(m-1,ack(m,n-1)); 
	} 
} 

请问 ack(3,3)的返回值是(  )。 

答案:61。这个有规律的,只要耐心一点就行了,ack(1,x)=2+x,ack(2,x)=3+x*2,ack(3,0)=5,ack(3,1)=ack(3,0)*2+3=13,ack(3,2)=ack(3,1)*2+3=29,ack(3,3)=ack(3,2)*3+2=61。

23)某互联网产品(例如,一款网络游戏)同时在线曲线(Average Concurrency Users,ACU)24 小时数据如下图所示。现已知全天平均在线人数为 5000 人,玩家每次登陆后平均在线时长为 2 小时。请你估计一下,平均下来每分钟约有(  )个玩家登录。


24、如下SQL语句是需要列出一个论坛版面第一页(每页显示20个)的帖子(post)标题(title),并按照发布(create_time)降序排列:

SELECT title FROM post( )create_time DESC( )0,20

答案为: ORDER BY; LIMIT

25、为了某项目需要,我们准备构造了一种面向对象的脚本语言,例如,对所有的整数,我
们都通过 Integer 类型的对象来描述。在计算“1+2”时,这里的“1”,“2”和结果“3”分
别为一个 Integer 对象。为了降低设计复杂度,我们决定让 Integer 对象都是只读对象,也即
在计算 a=a+b 后,对象 a 引用的是一个新的对象,而非改 a 所指对象的值。考虑到性能问题,
我们又引入两种优化方案:(1)对于数值相等的 Integer 对象,我们不会重复创建。例如,
计算“1+1”,这里两个“1”的引用的是同一个对象——这种设计模式叫做(  );(2)脚本
语言解析器启动时,默认创建数值范围[1,32]的 32 个 Integer 对象。现在,假设我们要计算
表达式“1+2+3+…+40”,在计算过程需要创建的 Integer 对象个数是(  )。

答案:享元模式,40。1到7以及他们的和是不用创建的,从8开始,28(是1到7的和)+8=36,36需要创建,36+9=45,45需要创建…依次类推,在加数是32之前(含32)需要创建的对象是32-8+1=25,某数+32=某数之后33至40所表示的加数也要创建,这样有8个加数 + 8个和,共有16个数需要创建,注意,加数中包含36,这个我们已经创建了,所以有25+8+8-1=40个数的对象需要创建。

26)A、B 两人玩猜字游戏,游戏规则如下: 
A 选定一个  [1,100]之间的数字背对 B 写在纸上,然后让 B 开始猜; 
如果 B 猜的偏小,A 会提示 B 这次猜的偏小; 
一旦 B 某次猜的偏大,A 就不再提示,此次之后 B 猜的偏小 A 也不会再提示,只回答猜对
与否。 
请问:B 至少要猜(  )次才能保证猜对?在这种策略下,B 第一次猜测的数字是(  )。

答案:14次,第一次猜测数字为14。思想是:每次猜大后,尝试猜测的总次数是相等的。第一次猜测时,在1到100之间选择某个数N1后,有三种情况,一是直接选中了,这个概率比较小,对研究没有意义,二是选择偏大了,这时不再提示了,只能在1至N1-1之间一个一个地选了,三是选择偏小了,这时还有提示,可以继续在[N1+1,100]中选择另外的数N2。可以知道,若第一次就猜错了,那么尝试总次数是N1-1+1=N1次(因为是在[1,N1-1]之间逐一取值,且N1本身用掉一次),若第一次猜得偏小,但第二次猜大了,尝试总次数是[N1+1,N2-1]的元素个数加2(加2是N2和N1本身猜用掉一次),即为N2-N1+1次,根据思想“每次猜错后,尝试猜测的总次数相等”,有N1=N2-N1+1,可知N2=2N1-1,增量为N1-1。类似地,前两次猜得偏小,但第三次猜大,尝试总次数为[N2+1,N3-1]的元素个数加3,即N3-N2+2,那么有N3-N2+2=N1,N3=N2+N1-2,增量为N1-2……依此类推,增量是随着猜测次数的增加而逐1地减少。设最后一次猜测为k,则Nk=N1+(N1-1)+(N1-2)+…1,Nk是等于或大于100的第一个数,根据等差数列求和公式可以算出N1=14,N2=27,N3=39…(14,27,39,50,60,69,77,84,90,95,99)。

7、仔细阅读以下函数

Int fuc(int m,int n)

{

if(m%n)==0

{

return n;

}

else

{

       return fuc(n,m%n)

}

}

请问func(2012,2102)的结果是(              )。、

答案为:2

28)给定一数组 a[N],我们希望构造数组 b [N],其中 b[j]=a[0]*a[1]…a[N-1] / a[j],在
构造过程中,不允许使用除法: 
要求 O(1)空间复杂度和 O(n)的时间复杂度; 
除遍历计数器与 a[N]  b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变
量等); 程序(主流编程语言任选)实现并简单描述。

29)20 世纪 60 年代,美国心理学家米尔格兰姆设计了一个连锁信件实验。米尔格兰姆把信
随即发送给住在美国各城市的一部分居民,信中写有一个波士顿股票经纪人的名字,并要求
每名收信人把这封信寄给自己认为是比较接近这名股票经纪人的朋友。这位朋友收到信后再
把信寄给他认为更接近这名股票经纪人的朋友。最终,大部分信件都寄到了这名股票经纪人
手中,每封信平均经受 6.2 词到达。于是,米尔格兰姆提出六度分割理论,认为世界上任意
两个人之间建立联系最多只需要 6 个人。 
假设 QQ 号大概有 10 亿个注册用户,存储在一千台机器上的关系数据库中,每台机器存储
一百万个用户及其的好友信息,假设用户的平均好友个数大约为 25 人左右。 
第一问:请你设计一个方案,尽可能快的计算存储任意两个 QQ 号之间是否六度(好友是 1
度)可达,并得出这两位用户六度可达的话,最短是几度可达。 
第二问:我们希望得到平均每个用户的 n 度好友个数,以增加对用户更多的了解,现在如果
每台机器一秒钟可以返回一千条查询结果,那么在 10 天的时间内,利用给出的硬件条件,
可以统计出用户的最多几度好友个数?如果希望得到更高的平均 n 度好友个数,可以怎样改
进方案? 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值