【错题集】腾讯2016校园招聘 研发工程师笔试题(一)
以下代码输出什么____.
main() {
int a[5]={1,2,3,4,5};
int *p=(int *)(&a+1);
printf("%d",*(p-1));
}
【解析】&a是int[5]*而不是int*,p是int*,指向(5*int+1*int)个位置 p-1回到了a[4],因此输出5。
==============================================================================
【题目】ip地址10.1.8.0/24和10.1.9.0/24,下列哪个是正确的汇总网段:
【答案】
【解析】不会做查了下。原理:
在子网划分以后,如果需要网络通信需要配置路由,如果每个子网都配置一条路由是十分繁琐并容易出错的,所以可以将连续的子网合成一个网段这就是地址汇总。
(1)写成二进制:00001010 . 00000001 . 00001000 . 00000000(32位)
00001010 . 00000001 . 00001001 . 00000000(32位)
(2)找到最高的不同位: 00001010 . 00000001 . 0000100 (23位)
(3)剩下位置变0: 0.00000000
(4)汇总网段写回10进制:00001010 . 00000001 . 00001000.00000000 → 10.1.8.0/23
==============================================================================
【题目】在序列(22,34,55,77,89,93,99,102,120,140)中,采用二分查找,分别查找77,34,99,所需的查找次数分别为( )
【答案】
【解析】还是要严格按照算法流程来,边界不对会被缩小,89>77会high缩小到3号而不是停在4号
数字 | 22 | 34 | 55 | 77 | 89 | 93 | 99 | 102 | 120 | 140 |
编号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
低low=0,高high=9
第一次:(0+9)/2=4,89>77,high=3
第二次:(0+3)/2=1,34<77,low=2
第三次:(2+3)/2=2,55<77,low=3
第四次:(3+3)/2=3,77退出
======================================================
【题目】下面关于HTTP协议的说法正确的是:
【答案】
【解析】AC都是对的,B:HTTP是文本协议不是二进制,D:HTTP1.1才有cache-control
======================================================
【题目】在C++面向对象编程语言中,以下阐述不正确的是:
【答案】
【解析】接口中用的是抽象方法不是虚方法
======================================================
【题目】设k1,k2是矩阵A的两个不同的特征值,a与b是A的分别属于k1,k2的特征向量,则由a与b是
【答案】
【解析】数学题,特征值不同,如果特征向量线性相关(一个可以用另一个表示),则反推特征值相同,矛盾。线性无关。
======================================================
【题目】以下代码是否完全正确,执行可能得到的结果是____
class A{
int i;
};
class B{
A *p;
public:
B(){p=new A;}
~B(){delete p;}
};
void sayHello(B b){
}
int main(){
B b;
sayHello(b);
}
【答案】
【解析】形参传递析构指针两次
https://www.nowcoder.com/questionTerminal/94cc380a927d440c882b21fa6359ee4d MSean
以下三种情况需要用到拷贝函数:
a)一个对象以值传递的方式传入函数体;
b)一个对象以值传递的方式从函数返回;
c)一个对象需要通过另外一个对象进行初始化。
本例中,在调用sayHello(b)时符合上面a)的情况,因此会调用拷贝构造函数。由于类中未显式声明一个拷贝构造函数,编译器将会自动生成一个默认的拷贝构造函数,来完成对象间的位拷贝(或称浅拷贝),也就是把对象里的值完全复制给另一个对象,如ClassX = ClassY。这时,如果ClassY中有一个成员变量指针已经申请了内存,那ClassX中的那个成员变量也指向同一块内存。这就出现了问题:当ClassY把内存释放了(如:析构),这时ClassX内的指针就是野指针了,出现运行错误。(本例中的情况,前面几位同学解释地已经很到位,即sayHello()函数体结束析构了一次,main()函数结束又一次析构,而这时p已经是野指针了,因而出错。)
==============================================================================
【题目】哪些设计模式是降低资源使用率:
【答案】
【解析】 设计模式:http://blog.csdn.net/xsl1990/article/details/16359289
首先单例模式肯定降低了资源使用率,保证该类的实例永远只有一个!
原型模式适用于在初始化信息不发生变换的情况,克隆的方法比较适合,主要的目的是避免重新初始化对象,如果后面需要对新对象进行,还需要区分深拷贝和浅拷贝。无论是深拷贝还是浅拷贝只是复制了资源,并没有降低资源使用率。
享元模式(Flyweight): 基于共享技术用于把一些共同的信息(或模块)抽象出来,避免了大量相似类的开销,也降低了资源的使用率。
==============================================================================
【题目】爸爸去哪儿中的3对父子站成一排,各自父子之间不能相邻,比如石头不能和郭涛挨着,以此类推,共有几种站法?
【答案】
【解析】不相邻问题,容斥原理:全排 - 一对父子 + 2对父子 - 3对父子
A(6,6)-C(3,1)*A(2,2)*A(5,5) + C(3,2)*A(4,4)*A(2,2)*A(2,2) - A(3,3)*A(2,2)*A(2,2)*A(2,2) = 240