腾讯2013实习生笔试题+答案1-5aadaa 6-10adbcc 11-15 acacc16-20 bbddc

一、 单项选择题

1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项(A)

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
一开始觉得A肯定不对,因为会溢出,但不知道其实正如微机原理课上原的,溢出会有标识位,连加减的时候会考虑到这个标识位的作用,这样A就对了。

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

死代码是指永远不会执行到的代码,不是注释,比如if(0){…},大括号里的就是死代码。


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

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


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

B)4

C)5

D)6

原式=x^2 * (x^4 + 4 * x^2 + 2*x) + x + 1,x^2用一次乘法,x^4看成是(x^2)^2,这样用掉第二次乘法,外面的x^2 * () 是第三次乘法


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

B

P

A

A)492

B)494

C)496

D)498

A走到B共需要12步,其中7步必须向右,5步必须向上,只要确定向上5步在12步中的排序就可以确定唯一的走法(内部不进行排序),所以A到B有C(12,5)或者C(12,7)中走法。A到P有C(6,3)种走法,P到B有C(7,3)种走法。所以总走法有C(12,5)-C(6,3)*C(6,3)=492


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分钟

除了加密过程,其他过程都可以并发执行


8)如下关于编译链接的说法错误的是()
A)编译优化会使得编译速度变慢

B) 预编译头文件可以优化程序的性能

C) 静态链接会使得可执行文件偏大

D)动态链接库会使进程启动速度偏慢

预编译不涉及到代码本身的优化级别,更不会修改代码,所以同样的内容不可能产生程序性能的优化的


9)如下关于链接的说法错误的是()
A)一个静态库中不能包含两个同名全局函数的定义

B)一个动态库中不能包含两个同名全局函数的定义
C)如果两个静态库都包含一个同名全局函数,他们不能同时被链接

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

(解答参考网络)函数可以定义在3个地方
1. 程序自身
2. 静态库
3. 动态库
因为静态库是要链进程序的,所以函数定义在程序和静态库可以看成是一样的
同名函数出现在程序和静态库中,链接时会报重定义的错误。
同名函数出现在动态库中,编译链接都可以通过,但是调用会出问题,会出现覆盖问题。
定义在这3个地方的函数,会调用哪个函数呢?
1. 程序和静态库定义了同名函数,链接报错:重定义
2. 程序或静态库定义的同名函数,会覆盖动态库中定义的函数
3. 动态库中定义的同名函数,先链接覆盖后链接的函数


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

B)ACB 

C)CAB

D)CBA


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

B)4

C)5 

D)6

按题目的理解,A、B、C、D、E、F是进栈顺序了


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

B)120

C)180

D)360


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

B)2×N

C)2N-1 

D)2N


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

B)冒泡排序 

C)快速排序

D)归并排序


15)下列说法中错误的是:()
A)插入排序某些情况下复杂度为O(n)

B)排序二叉树元素查找的复杂度可能为O(n)
C)对于有序列表的排序最快的是快速排序

D)在有序列表中通过二分查找的复杂度一定是O(n log2n)


16)在程序设计中,要对两个16K×16K的多精度浮点数二维数组进行矩阵求和时,行优先读取和列优先读取的区别是()
A)没区别 

B)行优先快

C)列优先快

D)2种读取方式速度为随机值,无法判断

分析:若在内存中,则数据可以”随机存取”,但内存数据被读取或写入时,所需要的时间与这段信息所在的位置无关.但是在读取和写入磁盘时,其所需要的时间与位置就会有关系.因为在BASIC,PASCAL和C/C++语言中,数组的存放是按照行优先来存放的,按行号第一行第二行…以此类推.本体关键是考察内存抖动的问题,如果按列访问则需要跳过一大串内存地址,这样可能需求的内存地址不在当前页中则需要进行页置换,这样便需要硬盘IO,减低速度.


17)在下图的多边形ABCDE中从哪一点出发,可以遍历图上的每条边一次,而且仅遍历一次

A)A点

B) B点

C) C点

D)D点


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

B)1018 

C)55

D)50

所以若字符串的长度为n,则子串的个数就是[n+(n-1)+.......+1+1]个


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

分析,对于A,TCP下每条连接都有一个属性叫做maxsegment lifetime,就是说该连接关闭后,要经过2*max segment lifetime的时间,才算是真正的被关闭,才能被重新建立,以防止这条链路上还有东西在传输,停留在TIME_WAIT状态的持续时间是最长分节生命周期(MSL)的两倍,有时候称之为2MSL,但是TIME_WAIT并不是MSL.对于B,在调用closesocket之前先调用shutdown函数关闭发送数据通道,从而进入半关闭状态.对于C,在收到ack之后可以收不能发.


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


答案 二、填空题
21)除了10进制、2进制之外,16进制表达式在计算机领域中也经常使用(例如各种字符集的定义描述),下式:(2012)10+(AF1)16的结果是( 4813)(请用10进制表示)。
22)仔细阅读以下一段递归的函数定义:


    
    
  1. int ack(int m,int n)
  2. {
  3. if(m== 0)
  4. {
  5. return n+ 1;
  6. }
  7. else if(n== 0)
  8. {
  9. return ack(m -1, 1);
  10. }
  11. else
  12. {
  13. return ack(m -1,ack(m,n -1));
  14. }
  15. }
请问ack(3,3)的返回值是( 61 )。


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


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


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至少要猜( 14)次才能保证猜对?在这种策略下,B第一次猜测的数字是(14 )。


27)仔细阅读以下函数


    
    
  1. int fuc(int m,int n)
  2. {
  3. if((m%n)== 0)
  4. {
  5. return n;
  6. }
  7. else
  8. {
  9. return fuc(n,m%n);
  10. }
  11. }
请问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]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);
请用程序实现并简单描述。


    
    
  1. void makeArray(int a[],int b[],int len)
  2. {
  3. int i;
  4. b[ 0] = 1;
  5. for(i = 1 ; i < len ; ++i)
  6. {
  7. b[ 0] *= a[i -1];
  8. b[i] = b[ 0]; // b[i] = a[0]*a[1]*...*a[i-1]
  9. }
  10. b[ 0] = 1;
  11. for(i = len - 2 ; i > 0 ; --i)
  12. {
  13. b[ 0] *= a[i+ 1]; // b[0] = a[i+1]*a[i+2]...*a[len-1]
  14. b[i] *= b[ 0]; // b[i] = a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[len-1]
  15. }
  16. b[ 0] *= a[ 1];
  17. }

29)20世纪60年代,美国心理学家米尔格兰姆设计了一个连锁信件实验。米尔格兰姆把信随即发送给住在美国各城市的一部分居民,信中写有一个波士顿股票经纪人的名字,并要求每名收信人把这封信寄给自己认为是比较接近这名股票经纪人的朋友。这位朋友收到信后再把信寄给他认为更接近这名股票经纪人的朋友。最终,大部分信件都寄到了这名股票经纪人手中,每封信平均经受6.2词到达。于是,米尔格兰姆提出六度分割理论,认为世界上任意两个人之间建立联系最多只需要6个人。
假设QQ号大概有10亿个注册用户,存储在一千台机器上的关系数据库中,每台机器存储一百万个用户及其的好友信息,假设用户的平均好友个数大约为25人左右。


第一问:请你设计一个方案,尽可能快的计算存储任意两个QQ号之间是否六度(好友是1度)可达,并得出这两位用户六度可达的话,最短是几度可达。


第二问:我们希望得到平均每个用户的n度好友个数,以增加对用户更多的了解,现在如果每台机器一秒钟可以返回一千条查询结果,那么在10天的时间内,利用给出的硬件条件,可以统计出用户的最多几度好友个数?如果希望得到更高的平均n度好友个数,可以怎样改进方案?


猜你喜欢

转载自blog.csdn.net/stay_foolish12/article/details/89069689