腾讯实习 转载

今天上午10:30在西交大参加了腾讯2012实习生笔试,感觉此次考试更侧重于考智力,而且组合数学的知识考的比较多。
    题目类型:1.选择题(20*3’) 2.填空题(10*4’)3.附加题(2道,分值忘了)。
    选择题题目类型:
    有1题是考查改变C++运算符的顺序,输出结果是否一致。例:int a1= b * c / d; int a2 = b / d * c; int b1 = x << y >> z; int b2 = x >> y << z; int c1 = a + b -c; int c2 = a - c + b; a1与a2结果是否一致(若b<d,不一定)。b1与b2结果是否一致(idk)。c1与c2结果是否一致(考虑溢出不一定)。
    有1题是考查进程的,主要是考查进程关闭后,A.文件是否自动关闭 B.网络连接是否自动关闭。
    有2题是考栈的,类似考研题,很easy,只要知道栈是FILO的性质就OK。
    有3题是考组合数学的,比较麻烦。(1)有6*8的表格,求从A->B且不经过C的路径数:(IDK)
   
   
   
   
   
   
   
   
    
    
    
    
             

 B

               
               
     

 C

       
               

 A

             
(2)有3个人到图书馆还书,还有3个人到图书馆借书,若他们要还和借的书是同一种书且图书馆内现在没有此书,求他们要怎么排队才能保证每个人都能借到书。方案数(IDK)。
(3)“www.qq.com”中子串的数目,字母相同为同一串。(IDK)
    有1个考完全二叉树的,给出完全叉树的结点数,求叶子结点数。(记住公式即可)
    有2个考排序的,(1)各排序算法的时间复杂度;(2)各排序算法是否是稳定的排序。
    有1个考图论的,问从哪个点可以将图一笔画出。(easy)
    有1个考数据库操作的,问删除表的SQL语句。(DROP tablename)
    有2个考网络的,(1)问TCP连接断开后的操作,比较麻烦,需要搞懂RST,Finished等的含义及操作。(2)计算机中哪些端口是不能被占用的。(应该是0~1024端口,为专有端口)
    有3个考编译的,(1)问程序预编译、编译、链接、生成过程相关的问题。(idk)(2)关于编译优化的说法是否正确。(IDK)(2)关于动态链接和静态链接的说法(动态链接或静态链接是否导致可执行文件变大;动态链接或静态链接哪个速度更快)(IDK)
    填空题目类型:
    第1题是考二进制、十进制和十六进制的运算,会各种进制之间的转换即可。
    第2题递归很麻烦,原题如下:

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

计算ack(3,3)的结果。
分析可以参考:http://zh.wikipedia.org/zh/%E9%98%BF%E5%85%8B%E6%9B%BC%E5%87%BD%E6%95%B8
    第3题:有一款网游24小时平均在线人数是5000,平均每人在线2个小时,求平均每分钟有多少人上线。(IDK)
    第4题:数据库操作,从论坛帖子列表中查出前20个帖子的标题,按照时间排序。(SELECT titles FROM posts ORDER BY create_time DESC LIMIT 0, 20)
    第5题考查设计模式,是享元模式
    第6题很麻烦,涉及到搜索和概率的知识。(IDK)
    下1个题是读程序,写出运算结果(easy)。如下 :

int fun(int m, int n)

{

if(m%n == 0)

return n;

else

return fun(n, m%n);

}

求fun(2012, 2102)的值。(fun是求m、n的最大公约数的算法,因此结果为2)
    附加题的类型:
    1.已知数组a[n],求数组b[n].要求:b[i]=a[0]*a[1]*……*a[n-1]/a[i],不能用除法。
 a.时间复杂度O(n),空间复杂度O(1)。 b.除了迭代器i,不允许使用任何其它变量(包括栈临时变量等)。
    分析:思路是前累加,后累加,然后相乘。即:令a[i] = a[0]*a[1]*……a[i],b[i] = b[i+1]*b[i+2]*……b[n-1],则b[i] = a[i-1]*b[i]。关键伪代码如下:

int f()

{

b[n-1] = 1;

for(i = n-2; i >= 0; i--) // n >= 2

b[i] = a[i+1]*b[i+1];

for(i = 1; i < n; i++)

a[i] = a[i]*a[i-1];

for(i = 1; i < n; i++)

b[i] = b[i] * a[i-1];

}

注意:经过以上过程,数组a遭到了破坏。
    2.有一个xx定理,说平均每一个QQ用户可以通过6个其它QQ用户与任一QQ用户发生关系。现有10亿QQ用户的数据,分布在1000台服务器上,好像让你设计一个算法,来查找A用户与B用户是否可以通过6个其它QQ用户发生关系,若是,则通过的最少QQ用户数目是多少。(IDK)参考:http://blog.csdn.net/v_july_v/article/details/7382693

你可能感兴趣的:(腾讯实习 转载)